logo

Verilog bylos pareiškimas

Atvejo sakinys patikrina, ar pateikta išraiška atitinka vieną iš kitų išraiškų sąraše ir šakose. Paprastai tai yra įprastas įrenginio įgyvendinimas.

Jei-else konstrukcija gali būti netaikoma, jei matavimo vienetas turi būti patikrintas daugybe sąlygų ir būtų susintetintas į prioritetinį koduotuvą, o ne įrenginį.

Į Verilog , atvejo sakinys apima visą kodą tarp „Verilog“ raktinių žodžių, „casez“, „casex“ ir „endcase“. Atvejo teiginys gali būti pasirinktas vienas iš daugelio konstruktas, kuris yra maždaug panašus į Associate slaugos jei-kita-jei teiginį.

Sintaksė

„Verilog“ atvejo teiginys prasideda raktiniu žodžiu „case“ ir baigiasi raktiniu žodžiu endcase.

Išraiška skliausteliuose ploto vienetas, skirtas konkrečiai įvertinti vieną kartą ir yra lyginamas su alternatyvų sąrašu jų parašymo tvarka.

java eilutė su formatu

Ir teiginiai, kad pasirinkimas atitinka nurodytą išraiškos matavimo vienetą, mirę. Kelių teiginių blokas turi būti surūšiuotas ir turi būti pradžioje ir pabaigoje.

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

Jei nė vienas atvejis neatitinka pateiktos išraiškos, teiginiai, esantys numatytojo elemento matavimo vienetuose, neveikia. Numatytasis sakinys yra neprivalomas, o atvejo ataskaitoje yra tik vienas numatytasis sakinys. Atvejo pareiškimai įterpti.

Vykdymas išeis iš atvejo bloko, o neatliks vieno dalyko, jei nė vienas elementas neatitinka išraiškos, o numatytasis sakinys nepateikiamas.

Pavyzdys

Toliau pateiktame madingame modulyje yra 2 bitų pasirinkimo signalas, skirtas nukreipti vieną iš trijų skirtingų 3 bitų įėjimų į ženklą, kuris nurodytas kaip išjungtas.

Atvejo pareiškimas naudojamas norint priskirti teisingą įvestį išvesties palaikomai sel vertei. Kadangi sel gali būti 2 bitų signalas, jame bus dvidešimt 2 deriniai, nuo nulio iki 3. Numatytasis sakinys padeda nustatyti išvestį į nulį, jei sel yra 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 

Bylos pareiškimo antraštė

Atvejo pareiškimo antraštę sudaro raktinis žodis „casez“, „casex“, po kurio eina raidė, paprastai vienoje kodo eilutėje.

Pridedant direktyvas full_case arba parallel_case prie atvejo teiginio, direktyvų matavimo vienetas pridedamas kaip komentaras realiuoju laiku po didžiojo atvejo išraiškos atvejo teiginio antraštės gale ir prieš bet kurį atvejį tolesnėse kodo eilutėse.

Bylos elementas

Atvejo elementas yra tas, kad bitas, vektorius arba „Verilog“ išraiška yra lyginama su didžiosios raidės išraiška.

Skirtingai nuo skirtingų aukšto lygio programavimo kalbų, pvz. C “, „Verilog“ atvejo teiginys apima numanomus pertraukos teiginius.

Pirmojo atvejo elementas, atitinkantis šią atvejo išraišką, lemia, kad atitinkamas atvejo elemento sakinys yra negyvas, todėl visi kiti atvejo daiktų matavimo vienetai, praleisti šiam atvejui, patenka į atvejo sakinį.

Bylos elemento pareiškimas

Atvejo elemento sakinys yra vienas arba daug „Verilog“ teiginių, kurie neveikia, jei atvejo elementas atitinka šią atvejo išraišką. Ne kaip VHDL, Verilog atveju dalykai patys gali būti išraiškos.

Norint pakeisti „Verilog“ kodo dokumento analizę, tarp raktinių žodžių turi būti pateikiami „Verilog“ atvejo elemento teiginiai 'pradėti' ir 'galas' jei daugiau nei vienas pareiškimas turi būti miręs dėl konkretaus atvejo elemento.

Casezas

„Verilog“ yra sakinys „casez“ – didžiosios raidės sakinio variantas, įgalinantis „z“ ir „?“ vertybes, kurios per visą atvejo palyginimą traktuojamos kaip „nerūpi“ vertybės.

'Z' ir '?' matavimo vienetas traktuojamas kaip nerūpi, ar jie yra didžiosios ir mažosios raidės išraiškos viduje, ar jos elemento viduje.

Kai slaptai rašote atvejo pareiškimą su „nerūpi“, naudokite didžiosios raidės teiginį ir naudokite „? simboliai, o ne 'z' simboliai didžiosios ir mažosios raidės viduje, siekiant tikslo 'nerūpi'.

Casex

„Verilog“ yra „casex“ sakinys – atvejo teiginio variantas, leidžiantis „z“, „?“ ir „x“ reikšmes palyginant traktuoti kaip „nerūpi“ reikšmes.

„x“, „z“ ir „?“ matavimo vienetas traktuojamas kaip nerūpi, ar jie yra didžiosios ir mažosios raidės išraiškos viduje, ar jos elemento viduje.

Visas bylos pareiškimas

Išsamus atvejo pareiškimas gali būti atvejo teiginys, kuriame visi gaunami didžiųjų ir mažųjų raidžių raiškos dvejetainiai modeliai yra suderinti su atvejo elementu arba numatytuoju atveju.

Jei atvejo pareiškimas neapima numatytosios didžiosios ir mažosios raidės ir galima ieškoti dvejetainės raidės išraiškos, kuri neatitinka spausdintų raidžių dalykų, atvejo pareiškimas nėra pilnas.

Išsamus atvejo teiginys gali būti didžiojo atvejo teiginys, kuriame kiekvienas gaunamas dvejetainis, ne dvejetainis ir dvejetainių bei nedvejetainių šablonų mišinys yra įdėtas į didžiosios ir mažosios raidės elementą.

„Verilog“ nenorėtų, kad atvejo teiginiai būtų arba sintezės, arba didelio tankio lipoproteinų modeliavimo pilni, tačiau „Verilog“ atvejo teiginiai užpildomi pridedant numatytąjį atvejį. VHDL nori, kad atvejo teiginiai būtų pilni didelio tankio lipoproteinų modeliavimo modeliai, o tai paprastai pageidauja Associate in Nursing „kiti“ sąlygos.

Lygiagretus atvejo pareiškimas

Lygiagretusis atvejo teiginys gali būti atvejo teiginys, kuriame galima tik pritaikyti didžiojo atvejo išraišką tik vienam atvejo elementui.

Jei įmanoma ieškoti didžiosios ir mažosios raidės išraiškos, kuri gali sutapti su vienu atvejo elementu, atitinkamo atvejo dalykų matavimo vienetas nurodomas kaip sutampantis atvejis, todėl atvejo sakinys nėra lygiagretus.

Techninės įrangos schema

RTL kodas yra sukurtas siekiant gauti aparatinės įrangos schemą, vaizduojančią multiplekserį nuo 4 iki 1.

Verilog bylos pareiškimas

Įvykdžius aukščiau pateiktą dizainą, išvestis yra lygi nuliui, kai sel yra 3, ir atitinka priskirtas kitų verčių įvestis.

 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. 

Atvejo teiginyje palyginimas pavyksta tik tada, kai kiekvienas išraiškos bitas atitinka vieną iš alternatyvų, įskaitant 0, 1, x ir z. Aukščiau pateiktame pavyzdyje, jei kuris nors iš sel bitų yra x arba z, numatytas pareiškimas bus įvykdytas, nes neatitiko nė viena iš kitų alternatyvų. Tokiu atveju išvestis bus lygi nuliui.

alya manasa
 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. 

Jei dizaino atvejo teiginys turi x ir z atvejo elemento alternatyvose, rezultatai skirsis.

 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 

Atvejo ir if-else atskyrimas

Atvejo pareiškimas nuo if-else-if skiriasi dviem būdais, pavyzdžiui:

  • Išraiškos pateiktos an jei-kitaip blokas yra bendresni, o atvejo bloke viena išraiška atitinka kelis elementus.
  • Byla pateiks galutinį rezultatą, kai išraiškoje yra X ir Z reikšmės.