logo

Verilog esetnyilatkozat

A case utasítás ellenőrzi, hogy az adott kifejezés egyezik-e a listán és az ágakon belüli többi kifejezés között. Ez általában egy eszköz megszokása.

Előfordulhat, hogy az if-else konstrukció nem alkalmazható, ha sok mértékegységet kell ellenőrizni, és az eszköz helyett prioritási kódolóba szintetizálódna.

Ban ben Verilog , a case utasítás tartalmazza az összes kódot a Verilog kulcsszavak, case ('casez', 'casex') és endcase között. Az esetleírás lehet egy a sok közül egyet kijelölő konstrukció, amely nagyjából olyan, mint az Associate az ápolási if-else-if utasításban.

Szintaxis

A Verilog case utasítás a case kulcsszóval kezdődik és az endcase kulcsszóval végződik.

A zárójelben lévő területegység kifejezés, amely konkrétan egyszeri kiértékelésre irányul, és összehasonlításra kerül a beírásuk sorrendjében található alternatívák listájával.

Azok az állítások pedig, hogy a kijelölés egyezik az adott kifejezés mértékegységével, halottak. Egy több utasításból álló blokkot rendezni kell, és az elején és végén belül kell lennie.

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

Ha egyik eset sem egyezik az adott kifejezéssel, akkor az alapértelmezett tétel mértékegységén belüli utasítások halottak. Az alapértelmezett utasítás nem kötelező, és csak egy alapértelmezett utasítás található az esetleírásban. Az esetleírások egymásba vannak ágyazva.

A végrehajtás kilép az esetblokkból, miközben nem tesz semmit, ha egyik elem sem egyezik a kifejezéssel, és nincs megadva alapértelmezett utasítás.

Példa

A következő divatos modul egy 2 bites opt jelet tartalmaz, amely a három különböző 3 bites bemenet közül az egyiket a kijelzett előjelhez irányítja.

Egy eset utasítást használnak a megfelelő bemenet hozzárendeléséhez a Sel értékét támogató kimenethez. Mivel a sel lehet 2 bites jel, huszonkét kombója lesz, nullától 3-ig. Az alapértelmezett utasítás segít nullára sorakoztatni, ha sel értéke 3.

 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 

Esetnyilatkozat fejléce

A case utasítás fejléce a case ('casez', 'casex') kulcsszóból, majd a case kifejezésből áll, általában egy kódsorban.

Ha full_case vagy parallel_case direktívákat ad hozzá egy esetutasításhoz, az irányelvek mértékegysége megjegyzésként adható hozzá valós időben az esetkifejezés után az esetutasítás fejlécének végén, és az ezt követő kódsorokon az esetek előtt.

Tok elem

Az esetelem az, hogy a megszokott bit-, vektor- vagy Verilog-kifejezés összehasonlítható a kis- és nagybetű-kifejezéssel.

Ellentétben a különböző magas szintű programozási nyelvekkel, mint pl. C ', a Verilog esetutasítás implicit break utasításokat tartalmaz.

Az első esetelem, amely megfelel ennek az esetkifejezésnek, a megfelelő esetelem utasítást halottá teszi, így az ehhez kihagyott esetek összes többi mértékegysége átesik az eset utasításon.

Ügytételi nyilatkozat

Az esetelem utasítás egy vagy több Verilog utasítás halott, ha az esetelem megegyezik ezzel az esetkifejezéssel. Nem úgy, mint a VHDL, a Verilog esetek maguk is kifejezések lehetnek.

A Verilog kóddokumentum elemzésének megváltoztatásához a Verilog esetelem utasításokat a kulcsszavak közé kell zárni 'kezdődik' és 'vége' ha több mint egy utasítás halottnak kell lennie egy adott esetelemhez.

Casez

A Verilogban van egy casez utasítás, a casez utasítás egy olyan változata, amely engedélyezi a 'z' és a '?' az eset-összehasonlítás során „nem érdekel” értékekként kezelendő értékek.

'Z' és '?' nem törődik, hogy az eset kifejezésben vagy az esetelemen belül vannak-e.

str.substring java-ban

Amikor titkosan ír egy esetleírást a „nem érdekel”, használjon esetleírást, és használja a „?” karakterek a „z” karakterek helyett a kis- és nagybetűkben a „nem érdekel” bitek célja.

Casex

A Verilogban van egy casex utasítás, az eset utasítás egy olyan változata, amely lehetővé teszi, hogy a „z”, „?” és „x” értékeket az összehasonlítás során „nem érdekel” értékként kezeljük.

'x', 'z' és '?' nem törődik, hogy az eset kifejezésben vagy az esetelemen belül vannak-e.

Teljes ügynyilatkozat

A teljes eset-utasítás lehet egy eset-utasítás, amelyen belül minden beszerezhető eset-kifejezési bináris minta egy esetelemhez vagy egy eset-alapértelmezéshez illeszkedik.

Ha egy esetutasítás nem ölel fel alapértelmezett esetet, és meg lehet nézni egy olyan bináris esetkifejezést, amely nem egyezik a nyomtatott esetek egyikével sem, akkor az esetutasítás nem teljes.

A teljes eset-utasítás lehet egy eset-utasítás, amelyben minden megszerezhető bináris, nem bináris, valamint bináris és nem bináris minták keveréke esetelemként van bekeretezve az eset-utasításon belül.

A Verilog nem szeretné, ha az eset-utasítások sem szintézissel, sem nagy sűrűségű lipoprotein-szimulációval teljesek lennének, de a Verilog eset-utasításai teljessé válnak egy alapértelmezett eset hozzáadásával. A VHDL azt kívánja, hogy az esetleírások nagy sűrűségű lipoprotein szimulációval teljesek legyenek, ami általában az Associate in Nursing „egyéb” záradékot kívánja.

Párhuzamos esetnyilatkozat

A párhuzamos esetutasítás lehet egy esetutasítás, amelyen belül csak egy esetkifejezést lehet csak egy esetelemhez illeszteni.

Ha meg lehet nézni egy olyan esetkifejezést, amely egy esetelemen belül egyezhet, akkor a megfelelő eset dolgok mértékegysége átfedő esetként jelenik meg, így az esetkifejezés nem párhuzamos.

Hardver séma

Az RTL kódot úgy dolgozták ki, hogy egy 4:1 multiplexert ábrázoló hardvervázlatot kapjon.

Verilog esetnyilatkozat

A fenti terv végrehajtása után a kimenet nulla, ha sel értéke 3, és megfelel a többi értékhez hozzárendelt bemeneteknek.

 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. 

Egy esetleírásban az összehasonlítás csak akkor sikerül, ha a kifejezés minden bitje megegyezik a 0, 1, x és z alternatívákkal. A fenti példában, ha a sel bármely bitje x vagy z, akkor a alapértelmezett utasítás végrehajtásra kerül, mert a többi alternatíva egyike sem egyezik. Ebben az esetben a kimenet csupa nulla lesz.

 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. 

Ha a tervezési esetmeghatározásnak az esetelem alternatíváiban x és z van, az eredmények eltérnek.

 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 

Az eset és az if-else közötti különbségtétel

Az esetleírás két szempontból különbözik az if-else-if-től, például:

  • Az an-ban megadott kifejezések ha más blokk általánosabb, míg egy esetblokkban egyetlen kifejezés több elemmel párosul.
  • Az ügy végleges eredményt ad, ha egy kifejezésben X és Z értékek vannak.