logo

Verilog-tapauslausunto

Case-lause tarkistaa, vastaako annettu lauseke toista listan ja haarojen sisällä olevien lausekkeiden joukossa. Se on yleensä tottunut toteuttamaan laitetta.

10 ml oz

Jos-else-rakennetta ei ehkä voida soveltaa, jos mittayksikköä on useita tarkistettavia ehtoja, ja se syntetisoituisi prioriteettikooderiksi laitteen sijaan.

Sisään Verilog , case-lause sisältää kaiken koodin Verilog-avainsanojen, case ('casez', 'casex') ja endcase välillä. Tapauslausunto voi olla yksi monista -konstrukti, joka on suunnilleen samanlainen kuin Associate hoitotyössä jos-else-if -lauseessa.

Syntaksi

Verilog-tapauslause alkaa avainsanalla case ja päättyy avainsanaan endcase.

Suluissa oleva lauseke alueyksikkö, jonka tavoitteena on arvioida nimenomaan kerran, ja sitä verrataan vaihtoehtoluetteloon niiden kirjoitusjärjestyksessä.

Ja väitteet, että valinta vastaa annettua lausekkeen mittayksikköä, ovat kuolleet. Useita lauseita sisältävä lohko tulee lajitella ja olla alussa ja lopussa.

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

Jos mikään tapausasioista ei vastaa annettua lauseketta, oletusyksikön mittayksikön lauseet ovat kuolleet. Oletuskäsky ei ole pakollinen, ja tapauslausekkeessa on vain yksi oletuslauseke. Tapauslausekkeet ovat sisäkkäisiä.

Suoritus lopettaa tapauslohkon, kun taas yhden asian tekemättä jättäminen, jos mikään kohteista ei vastaa lauseketta, ja oletuskäskyä ei anneta.

Esimerkki

Seuraava vogue-moduuli sisältää 2-bittisen opt-signaalin, joka reitittää yhden kolmen eri 3-bittisen tulon joukosta out-merkkiin.

Tapauslauseketta käytetään määrittämään oikea tulo tulostukseen, joka tukee sel:n arvoa. Koska sel voi olla 2-bittinen signaali, siinä on 22 yhdistelmää, nollasta 3:een. Oletuskäsky auttaa rivin ulostulon nollaan, jos sel on 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 

Tapauslausunnon otsikko

Case-lauseen otsikko koostuu case-avainsanasta ('casez', 'casex'), jota seuraa tapauslauseke, yleensä kaikki yhdellä koodirivillä.

Kun tapauslauseeseen lisätään komentoja full_case tai parallel_case, direktiivien mittayksikkö lisätään kommentiksi reaaliajassa tapauslausekkeen jälkeen tapauslausekkeen otsikon kärjessä ja ennen mitä tahansa tapausta seuraavilla koodiriveillä.

Tapauksen kohde

Tapauskohde on, että bitti-, vektori- tai Verilog-lauseke tottunut vertaamaan tapauslauseketta.

Toisin kuin erilaiset korkean tason ohjelmointikielet, kuten ' C Verilogin tapauslause sisältää implisiittiset break-lauseet.

Ensimmäinen tapausyksikkö, joka vastaa tätä tapauslauseketta, saa vastaavan tapausalkion käskyn olemaan kuollut, joten kaikki muut tämän osalta ohitetut tapausasiat käyvät läpi tapauslausekkeen.

Tapauskohdeilmoitus

Tapauskohdelauseke on yksi tai useampi Verilog-lauseke kuollut, jos tapausalkio vastaa tätä tapauslauseketta. Ei kuten VHDL, Verilog tapauksessa asiat voivat itse olla ilmaisuja.

Jos haluat muuttaa Verilog-koodiasiakirjan jäsentämistä, Verilogin tapauskohtaiset lausekkeet tulee sisällyttää avainsanojen väliin 'alkaa' ja 'loppu' jos yli yksi lausunto on kuollut tietylle tapauskohdalle.

Casez

Verilogissa on casez-käsky, tapauskäskyn muunnelma, joka mahdollistaa 'z' ja '?' arvoja, joita on käsiteltävä tapausvertailussa 'ei välitä' -arvoina.

'Z' ja '?' mittayksikköä pidetään väliä välitä, ovatko ne tapauslausekkeen sisällä vai ovatko ne tapauskohteen sisällä.

Kun kirjoitat salassa tapauslauseketta 'ei välitä', käytä casez-lausetta ja käytä '?' merkkejä 'z'-merkkien sijasta tapauksen sisällä 'ei välitä'-bittejä varten.

iphone emojit Androidissa

Casex

Verilogissa on casex-käsky, tapauskäskyn muunnelma, jonka avulla z-, ?- ja x-arvoja voidaan käsitellä vertailun aikana 'ei välitä'-arvoina.

'x', 'z' ja '?' mittayksikköä pidetään väliä välitä, ovatko ne tapauslausekkeen sisällä vai ovatko ne tapauskohteen sisällä.

Täydellinen tapausselostus

Täydellinen tapauslausunto voi olla tapauslauseke, jonka sisällä kaikki hankittavissa olevat tapauslausekkeen binaarimallit on sovitettu tapauskohteeseen tai tapauksen oletusarvoon.

Jos tapauslause ei sisällä tapausoletusarvoa ja on mahdollista etsiä binääritapauslauseketta, joka ei vastaa mitään tulostettuja tapausasioita, tapauslause ei ole täynnä.

merkkijonoarvo

Täysi tapauslauseke voi olla tapauslauseke, jonka sisällä jokainen hankittavissa oleva binäärinen, ei-binäärinen ja binääri- ja ei-binäärimallien sekoitus on laatikoitu tapauskohteena case-lauseen sisällä.

Verilog ei halua tapauslausekkeiden olevan joko synteesi- tai korkeatiheyksisten lipoproteiinien simulaatio täynnä, mutta Verilogin tapauslausekkeet täytetään lisäämällä tapausoletusarvo. VHDL haluaa tapauslausekkeiden olevan korkeatiheyksisiä lipoproteiinisimulaatioita täynnä, mikä yleensä haluaa Associate in Nursing 'muut' -lausekkeen.

Rinnakkaistapausselostus

Rinnakkainen tapauslause voi olla tapauslauseke, jonka sisällä tapauslauseke voidaan sovittaa vain yhteen tapauskohtaan.

Jos on mahdollista etsiä tapauslauseke, joka saattaa sopia yhteen tapauskohtaan, vastaavan tapauksen mittayksikkö ilmoitetaan päällekkäisiksi tapauksiksi, joten tapauslause ei ole rinnakkainen.

Laitteistokaavio

RTL-koodi on kehitetty laitteistokaavion saamiseksi, joka edustaa 4-1-multiplekseria.

Verilog-tapauslausunto

Yllä olevan mallin suorittamisen jälkeen lähtö on nolla, kun sel on 3, ja se vastaa muille arvoille määritettyjä tuloja.

 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. 

Tapauslausekkeessa vertailu onnistuu vain, kun lausekkeen jokainen bitti vastaa yhtä vaihtoehdoista, mukaan lukien 0, 1, x ja z. Yllä olevassa esimerkissä, jos jokin sel:n biteistä on joko x tai z, oletuksena lauseke suoritetaan, koska mikään muu vaihtoehto ei täsmää. Tässä tapauksessa ulostulo on nollia.

 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. 

Jos suunnittelussa olevalla tapauslausekkeella on x ja z tapauskohtavaihtoehdoissa, tulokset eroavat.

 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 

Tapauksen ja jos-else ero

Tapauslauseke eroaa if-else-if:stä kahdella tavalla, kuten:

  • Ilmaisuja, jotka on annettu an tai muuten lohko ovat yleisempiä, kun taas tapauslohkossa yksi lauseke yhdistetään useiden kohteiden kanssa.
  • Tapaus antaa lopullisen tuloksen, kun lausekkeessa on X- ja Z-arvot.