logo

Verilog lietas paziņojums

Gadījuma paziņojums pārbauda, ​​vai dotā izteiksme atbilst vienai no citām izteiksmēm sarakstā un atzarojumos. Tas parasti ir pieradis ieviest ierīci.

Konstrukcija if-else var nebūt piemērojama, ja mērvienībā ir daudz pārbaudāmo apstākļu, un tā tiktu sintezēta prioritārā kodētājā, nevis ierīcē.

In Verilog , gadījuma priekšraksts ietver visu kodu starp Verilog atslēgvārdiem, case ('casez', 'casex') un endcase. Gadījuma pārskats var būt konstruktīvs variants “viens no daudziem”, kas ir aptuveni tāds pats kā “Associate in Nursing if-else-if” paziņojumā.

java masīvs

Sintakse

Verilog gadījuma priekšraksts sākas ar case atslēgvārdu un beidzas ar beigu gadījuma atslēgvārdu.

Izteiksme iekavās esošā apgabala vienība, kuras mērķis ir īpaši vienreiz novērtēt, un tiek salīdzināta ar alternatīvu sarakstu to rakstīšanas secībā.

Un apgalvojumi, ka atlase atbilst dotajai izteiksmes mērvienībai, ir miruši. Vairāku paziņojumu blokam ir jābūt sakārtotam un jāatrodas sākuma un beigu robežās.

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

Ja neviena no lietas lietām neatbilst dotajai izteiksmei, paziņojumi noklusējuma vienības mērvienībā ir miruši. Noklusējuma paziņojums nav obligāts, un visā gadījuma paziņojumā ir tikai viens noklusējuma paziņojums. Gadījuma paziņojumi ir ligzdoti.

Izpilde iziet no reģistra bloka, savukārt viena darbība netiek veikta, ja neviens no vienumiem neatbilst izteiksmei, un noklusējuma priekšraksts netiks sniegts.

Piemērs

Nākamais modīgais modulis ietver 2 bitu izvēles signālu, lai vienu no trim dažādām 3 bitu ieejām novirzītu uz zīmi, kas norādīta kā out.

Gadījuma paziņojums tiek izmantots, lai piešķirtu pareizo ievadi izvadei, ko atbalsta sel vērtība. Tā kā sel var būt 2 bitu signāls, tam būs divdesmit 2 kombinācijas — no nulles līdz 3. Noklusējuma paziņojums palīdz iestatīt izvadi uz nulli, ja sel ir 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 

Lietas paziņojuma galvene

Gadījuma paziņojuma galvene sastāv no gadījuma (“casez”, “casex”) atslēgvārda, kam seko gadījuma izteiksme, parasti tas viss atrodas vienā koda rindā.

direktorijā Linux komandās

Pievienojot gadījuma priekšrakstam direktīvas full_case vai parallel_case, direktīvu mērvienība tiek pievienota kā komentārs reāllaikā pēc gadījuma izteiksmes gadījuma paziņojuma galvenes galā un pirms jebkuras gadījuma lietas sekojošajās koda rindās.

Lietas vienums

Lietas vienums ir tāds, ka pieradinātā bita, vektora vai Verilog izteiksme tiek salīdzināta ar reģistra izteiksmi.

Atšķirībā no dažādām augsta līmeņa programmēšanas valodām, piemēram, C Verilog gadījuma paziņojums ietver netiešus pārtraukuma paziņojumus.

Pirmais gadījuma vienums, kas atbilst šai gadījuma izteiksmei, izraisa to, ka atbilstošā gadījuma vienības priekšraksts ir miris, tādējādi visas pārējās lietas mērvienības, kas šim izlaistas, tiek pakļautas gadījuma priekšrakstam.

Lietas vienības paziņojums

Gadījuma vienuma priekšraksts ir viens vai daudzi Verilog priekšraksti ir miruši, ja lietas vienums atbilst šai gadījuma izteiksmei. Atšķirībā no VHDL, Verilog lietas lietas pašas var būt izteiksmes.

Lai mainītu Verilog koda dokumenta parsēšanu, starp atslēgvārdiem ir jāiekļauj Verilog gadījuma vienumu paziņojumi 'sākt' un 'beigas' ja vairāk nekā viens paziņojums ir miris par konkrētu lietu.

Caseza

Programmā Verilog ir priekšraksts casez — gadījuma paziņojuma variants, kas iespējo “z” un “?” vērtības, kas visā gadījuma salīdzināšanā jāuzskata par vērtībām, kurām nav vienalga.

'Z' un '?' mērvienība tiek uzskatīta par vienalga, vai tās atrodas reģistra izteiksmē vai gadījuma vienībā.

Ja slepeni rakstāt gadījuma paziņojumu ar 'nav vienalga', izmantojiet reģistra paziņojumu un izmantojiet '?' rakstzīmes, nevis 'z' rakstzīmes lietas iekšienē, lai 'nav vienalga' bitiem.

Casex

Pakalpojumā Verilog ir gadījuma priekšraksts — gadījuma paziņojuma variants, kas ļauj 'z', '?' un 'x' vērtības visā salīdzināšanas laikā uzskatīt par vērtībām 'nav vienalga'.

'x', 'z' un '?' mērvienība tiek uzskatīta par vienalga, vai tās atrodas reģistra izteiksmē vai gadījuma vienībā.

Pilns lietas paziņojums

Pilns gadījuma paziņojums var būt gadījuma paziņojums, kurā visi iegūstamie reģistra izteiksmes binārie modeļi tiek saskaņoti ar gadījuma vienumu vai gadījuma noklusējuma iestatījumu.

Ja gadījuma paziņojums neaptver gadījuma noklusējuma iestatījumu un ir iespējams meklēt bināro gadījuma izteiksmi, kas neatbilst nevienai no drukātajām lietām, gadījuma paziņojums nav pilns.

Pilns gadījuma paziņojums var būt gadījuma paziņojums, kurā katrs iegūstams binārs, nebinārs un bināro un nebināro paraugu sajaukums ir iesaiņots kā gadījuma vienums gadījuma paziņojumā.

Verilog nevēlas, lai gadījuma paziņojumi būtu vai nu sintēzes, vai augsta blīvuma lipoproteīnu simulācijas pilni, taču Verilog gadījuma paziņojumi tiek padarīti pilnībā, pievienojot gadījuma noklusējuma iestatījumu. VHDL vēlas, lai gadījumu paziņojumi būtu pilni ar augsta blīvuma lipoproteīnu simulāciju, kas parasti vēlas Associate in Nursing klauzulu “citi”.

salīdziniet java virknes

Paralēlās lietas izklāsts

Paralēlais gadījuma paziņojums var būt gadījuma paziņojums, kurā var iegūt tikai gadījuma izteiksmes atbilstību tikai vienam gadījuma vienumam.

Ja ir iespējams meklēt gadījuma izteiksmi, kas var atbilst vienam gadījuma vienumam, atbilstošā gadījuma lietu mērvienība tiek norādīta kā lietas, kas pārklājas, un tāpēc gadījuma paziņojums nav paralēls.

Aparatūras shēma

RTL kods ir izstrādāts, lai iegūtu aparatūras shēmu, kas attēlo multipleksoru 4 līdz 1.

Verilog lietas paziņojums

Pēc iepriekš minētā dizaina izpildes izvade ir nulle, ja sel ir 3, un atbilst piešķirtajām ieejām citām vērtībām.

 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. 

Gadījuma paziņojumā salīdzināšana ir veiksmīga tikai tad, ja katrs izteiksmes bits atbilst vienai no alternatīvām, tostarp 0, 1, x un z. Iepriekš minētajā piemērā, ja kāds no selā esošajiem bitiem ir x vai z, noklusējuma paziņojums tiks izpildīts, jo neviena no citām alternatīvām neatbilst. Šādā gadījumā izvade būs nulles.

 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. 

Ja gadījuma paziņojumam dizainā ir x un z gadījuma vienumu alternatīvās, rezultāti atšķirsies.

 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 

Atšķirība starp lietu un if-else

Gadījuma izklāsts no if-else-if atšķiras divos veidos, piemēram:

  • Izteiksmes, kas dotas an ja-citādi bloks ir vispārīgāki, savukārt gadījuma blokā viena izteiksme tiek saskaņota ar vairākiem vienumiem.
  • Lieta sniegs galīgu rezultātu, ja izteiksmē ir X un Z vērtības.