logo

Vyhlásenie k prípadu Verilog

Príkaz case kontroluje, či sa daný výraz zhoduje s ostatnými výrazmi v zozname a vetvách. Zvyčajne sa zvykne implementovať zariadenie.

Konštrukcia if-else nemusí byť použiteľná, ak existuje na jednotku merania veľa podmienok, ktoré je potrebné skontrolovať a ktorá by sa syntetizovala do prioritného kódovača namiesto zariadenia.

In Verilog , príkaz case obsahuje celý kód medzi kľúčovými slovami Verilog, case ('casez', 'casex') a endcase. Príkaz case môže byť konštrukt select-one-z-many, ktorý je zhruba ako Associate v ošetrovateľskom príkaze if-else-if.

Syntax

Príkaz Verilog case začína kľúčovým slovom case a končí kľúčovým slovom endcase.

Plošná jednotka výrazu v zátvorkách, ktorá má byť vyhodnotená špecificky raz, sa porovnáva so zoznamom alternatív v poradí, v akom sú zapísané.

A tvrdenia, že výber zodpovedá danej výrazovej jednotke merania mŕtvy. Blok viacerých príkazov by mal byť zoradený a mal by byť v rámci začiatku a konca.

 case () case_item1 : case_item2, case_item3 : case_item4 : begin end default: endcase 

Ak sa žiadna z vecí nezhoduje s daným výrazom, príkazy v rámci predvolenej mernej jednotky sú mŕtve. Predvolený príkaz nie je povinný a v rámci príkazu case existuje iba jeden predvolený príkaz. Prípadové vyhlásenia sú vnorené.

755 chmod

Vykonaním sa ukončí blok veľkých písmen, pričom sa nevykoná jedna vec, ak žiadna z položiek nezodpovedá výrazu a nie je zadaný predvolený príkaz.

Príklad

Nasledujúci modul Vogue obsahuje 2-bitový signál pre smerovanie jedného z troch rôznych 3-bitových vstupov do znamienka uvedeného ako out.

Príkaz case sa používa na priradenie správneho vstupu k výstupu s podporou hodnoty sel. Keďže sel môže byť 2-bitový signál, bude mať dvadsať2 komb, nula až 3. Predvolený príkaz pomáha zoradiť výstup na nulu, ak je sel 3.

previesť reťazec na enum
 module my_mux (input [2:0] a, b, c, // three 3-bit inputs [1:0]sel, // 2-bit opt for signal to choose on from a, b, c output reg [2:0] out); // Output 3-bit signal // invariably block is dead whenever a, b, c or sel changes in value invariably @ (a, b, c, sel) begin case(sel) 2'b00 : out = a; // If sel=0, output can be a 2'b01 : out = b; // If sel=1, output is b 2'b10 : out = c; // If sel=2, output is c default : out = 0; // If sel is something, out is commonly zero endcase end endmodule 

Hlavička výpisu z prípadu

Hlavička príkazu case pozostáva z kľúčového slova case ('casez', 'casex'), za ktorým nasleduje výraz case, zvyčajne všetko na jednom riadku kódu.

Pri pridávaní direktív full_case alebo parallel_case do príkazu case sa merná jednotka direktívy pridá ako komentár v reálnom čase za výraz case na konci hlavičky príkazu case a pred akékoľvek veci typu case na nasledujúcich riadkoch kódu.

Položka prípadu

Ide o to, že bitový, vektorový alebo zvyknutý výraz Verilog sa porovnáva s výrazom prípadu.

Na rozdiel od rôznych programovacích jazykov na vysokej úrovni, ako je ' C ', príkaz Verilog case obsahuje implicitné príkazy prerušenia.

Prvá položka prípadu, ktorá sa zhoduje s týmto výrazom typu prípad, spôsobí, že príslušný výkaz položky prípadu je mŕtvy, takže všetky ostatné merné jednotky prípadu, ktoré sa pre tento prípad vynechali, podliehajú výrazu prípadu.

Výpis položky prípadu

Výpis položky prípadu je jedným alebo viacerými nefunkčnými príkazmi Verilog, ak sa položka prípadu zhoduje s týmto výrazom prípadu. Nie ako VHDL, veci v prípade Verilog môžu byť samy osebe výrazmi.

Ak chcete zmeniť analýzu dokumentu s kódom Verilog, medzi kľúčové slová by sa mali vložiť vyhlásenia o položke prípadu Verilog 'začať' a 'koniec' ak má byť viac ako jeden výrok mŕtvy pre konkrétnu položku prípadu.

Casez

Vo Verilog existuje príkaz casez, variácia príkazu case, ktorý umožňuje 'z' a '?' hodnoty, ktoré sa majú v rámci porovnávania prípadov považovať za hodnoty „nezáleží na tom“.

'Z' a '?' merná jednotka považovaná za „nezáleží na tom, či sú vo výraze veľkých písmen alebo či sú v položke veľkosti písmen.

Pri tajnom písaní vyhlásenia o prípade s výrazom „to je mi to jedno“ použite vyhlásenie casez a použite „?“ znaky namiesto 'z' znakov vnútri prípadu veci na účel 'nezáleží' bitov.

prepínač c#

Casex

Vo Verilog existuje príkaz casex, variácia príkazu case, ktorý umožňuje, aby sa hodnoty „z“, „?“ a „x“ považovali počas porovnávania za hodnoty „nezáleží na tom“.

'x', 'z' a '?' merná jednotka považovaná za „nezáleží na tom, či sú vo výraze veľkých písmen alebo či sú v položke veľkosti písmen.

Vyhlásenie o celej veci

Úplné vyhlásenie o veľkosti písmen môže byť vyhlásenie o prípade, v ktorom sú všetky dostupné binárne vzory výrazu malých a veľkých písmen priradené k položke prípadu alebo predvolenému prípadu.

Ak príkaz case nezahŕňa predvolené malé a veľké písmená a je možné vyhľadať binárny výraz prípadu, ktorý sa nezhoduje so žiadnou z vytlačených vecí, výkaz prípadu nie je úplný.

Úplný prípad môže byť výrazom prípadu vo vnútri, že každý dostupný binárny, nebinárny a zmes binárnych a nebinárnych vzorov je v rámčeku ako položka prípadu vo vnútri príkazu case.

Verilog si neželá, aby boli prípady syntézy alebo simulácie lipoproteínov s vysokou hustotou úplné, ale vyhlásenia Verilog sa vyplnia pridaním predvoleného prípadu. VHDL si želá, aby boli vyjadrenia prípadu plné simulácie lipoproteínov s vysokou hustotou, čo si zvyčajne vyžaduje klauzulu „iných“ spolupracovníka v ošetrovateľstve.

Vyhlásenie o súbežnom prípade

Paralelným prípadom môže byť vyhlásenie prípadu vo vnútri, že je možné priradiť výraz prípadu iba k jednej položke prípadu.

Ak je možné vyhľadať výraz prípadu, ktorý sa môže zhodovať s jednou položkou prípadu, merná jednotka zhodných prípadových vecí je uvedená ako prekrývajúce sa prípady, takže výraz prípadu nie je paralelný.

Hardvérová schéma

RTL kód je vypracovaný tak, aby získal hardvérovú schému, ktorá predstavuje 4:1 multiplexer.

Vyhlásenie k prípadu Verilog

Po vykonaní vyššie uvedeného návrhu je výstup nulový, keď sel je 3 a zodpovedá priradeným vstupom pre iné hodnoty.

Herečka Rubina Dilaik
 ncsim> run [0] a=0x4 b=0x1 c=0x1 sel=0b11 out=0x0 [10] a=0x5 b=0x5 c=0x5 sel=0b10 out=0x5 [20] a=0x1 b=0x5 c=0x6 sel=0b01 out=0x5 [30] a=0x5 b=0x4 c=0x1 sel=0b10 out=0x1 [40] a=0x5 b=0x2 c=0x5 sel=0b11 out=0x0 ncsim: *W,RNQUIE: Simulation is complete. 

V prípade príkazu je porovnanie úspešné iba vtedy, keď sa každý bit výrazu zhoduje s jednou z alternatív vrátane 0, 1, x a z. Ak je vo vyššie uvedenom príklade ktorýkoľvek z bitov v sel buď x alebo z, je predvolená príkaz sa vykoná, pretože sa nezhoduje žiadna z ostatných alternatív. V takom prípade budú na výstupe samé nuly.

 ncsim> run [0] a=0x4 b=0x1 c=0x1 sel=0bxx out=0x0 [10] a=0x3 b=0x5 c=0x5 sel=0bzx out=0x0 [20] a=0x5 b=0x2 c=0x1 sel=0bxx out=0x0 [30] a=0x5 b=0x6 c=0x5 sel=0bzx out=0x0 [40] a=0x5 b=0x4 c=0x1 sel=0bxz out=0x0 [50] a=0x6 b=0x5 c=0x2 sel=0bxz out=0x0 [60] a=0x5 b=0x7 c=0x2 sel=0bzx out=0x0 [70] a=0x7 b=0x2 c=0x6 sel=0bzz out=0x0 [80] a=0x0 b=0x5 c=0x4 sel=0bxx out=0x0 [90] a=0x5 b=0x5 c=0x5 sel=0bxz out=0x0 ncsim: *W,RNQUIE: Simulation is complete. 

Ak má výrok prípadu v dizajne x a z v alternatívach položky prípadu, výsledky sa budú líšiť.

 module mux (input [2:0] a, b, c, output reg [2:0] out); // Case items have x and z, and sel has to match the exact value for // output to be assigned with the corresponding input always @ (a, b, c, sel) begin case(sel) 2'bxz: out = a; 2'bzx: out = b; 2'bxx: out = c; default: out = 0; endcase end endmodule 

Rozlíšenie medzi prípadom a prípadom ak je iné

Príkaz prípadu sa líši od if-else-if dvoma spôsobmi, ako napríklad:

  • Výrazy uvedené v an ak-inak block sú všeobecnejšie, zatiaľ čo v bloku case sa jeden výraz spája s viacerými položkami.
  • Púzdro poskytne definitívny výsledok, ak sú vo výraze hodnoty X a Z.