logo

Declarație de caz Verilog

Declarația case verifică dacă expresia dată se potrivește cu una dintre celelalte expresii din listă și ramuri. De obicei, este obișnuit să implementeze un dispozitiv.

xd sens

Construcția if-else poate să nu fie aplicabilă dacă există unități de măsură multe condiții care trebuie verificate și s-ar sintetiza într-un codificator prioritar în loc de un dispozitiv.

În Verilog , o declarație case include tot codul dintre cuvintele cheie Verilog, case („casez”, „casex”) și endcase. O declarație de caz poate fi o construcție select-unu-din-mulți care este aproximativ ca și declarația Asociat în nursing dacă-altfel-if.

Sintaxă

O instrucțiune Verilog case începe cu cuvântul cheie case și se termină cu cuvântul cheie endcase.

Expresia din paranteze are unitatea care urmărește să fie evaluată în mod specific o dată și este comparată cu lista de alternative în ordinea în care sunt scrise.

Și afirmațiile că selecția se potrivește cu expresia dată unitatea de măsură moartă. Un bloc de mai multe instrucțiuni ar trebui să fie sortat și să fie între început și sfârșit.

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

Dacă niciunul dintre lucrurile din caz nu se potrivește cu expresia dată, declarațiile din unitatea de măsură implicită ale articolului sunt moarte. Declarația implicită nu este obligatorie și există o singură instrucțiune implicită în cadrul unei instrucțiuni case. Declarațiile de caz sunt imbricate.

Execuția va ieși din blocul case, în timp ce nu se face un lucru dacă niciunul dintre elemente nu se potrivește cu expresia și nu este dată o instrucțiune implicită.

Exemplu

Următorul modul vogue include o opțiune de 2 biți pentru semnal pentru a direcționa una dintre cele trei intrări diferite de 3 biți către semnul menționat ca afară.

O declarație case este utilizată pentru a atribui intrarea corectă la ieșire suportată valoarea sel. Deoarece sel poate fi un semnal de 2 biți, va avea douăzeci și 2 de combo, de la zero la 3. Declarația implicită ajută la ieșirea la zero dacă sel este 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 

Antet declarație de caz

Un antet de declarație case constă din cuvântul cheie case ('casez', 'casex') urmat de expresia case, de obicei toate pe o singură linie de cod.

caracteristicile java

Când se adaugă directive full_case sau parallel_case la o instrucțiune case, unitatea de măsură a directivelor a fost adăugată ca un comentariu în timp real, după expresia case din vârful antetului declarației case și înaintea oricărui lucru de pe rândurile de cod care urmează.

Element de caz

Elementul caz este că expresia biți, vector sau Verilog obișnuită se compară cu expresia caz.

Spre deosebire de diferite limbaje de programare de nivel înalt precum „ C ', instrucțiunea Verilog case include instrucțiuni implicite break.

Primul element de caz care se potrivește cu această expresie de caz face ca instrucțiunea de element de caz corespunzătoare să fie moartă, astfel încât toate celelalte unități de măsură caz ​​sărite pentru aceasta sunt supuse declarației de caz.

Declarația articolului de caz

O instrucțiune case item este una sau multe instrucțiuni Verilog moarte dacă elementul case se potrivește cu această expresie case. Nu ca VHDL, lucrurile de caz Verilog pot fi ele însele expresii.

Pentru a modifica analiza documentului de cod Verilog, instrucțiunile despre elementul de caz Verilog ar trebui să fie incluse între cuvintele cheie 'ÎNCEPE' și 'Sfârşit' dacă peste o declarație urmează să fie moartă pentru un anumit articol de caz.

Casez

În Verilog, există o instrucțiune casez, o variație a instrucțiunii case care activează „z” și „?” valorile care trebuie tratate pe parcursul comparației de caz ca valori „nu-mi pasă”.

„Z” și „?” unitate de măsură tratată ca o indiferent dacă se află în expresia caz sau dacă se află în elementul caz.

Când scrieți în mod secret o declarație de caz cu „nu-mi pasă”, utilizați o declarație casez și folosiți „?” caractere în loc de caractere „z” în interiorul carcasei lucruri în scopul „nu-mi pasă” biți.

Casex

În Verilog, există o declarație casex, o variație a instrucțiunii case care permite valorilor „z”, „?” și „x” să fie tratate pe parcursul comparației ca valori „nu-mi pasă”.

json din obiectul java

„x”, „z” și „?” unitate de măsură tratată ca o indiferent dacă se află în expresia caz sau dacă se află în elementul caz.

Declarația completă a cazului

O declarație de caz completă poate fi o declarație de caz în care toate modelele binare de expresii de caz care pot fi obținute sunt potrivite cu un element de caz sau cu un caz implicit.

pd merge

Dacă o declarație case nu înglobează un case implicit și poate fi căutată o expresie case binară care nu se potrivește cu niciunul dintre lucrurile tipărite case, instrucțiunea case nu este plină.

O declarație case completă poate fi o declarație case în interiorul căreia fiecare binar obținut, non-binar și amestec de modele binare și non-binare este încadrat ca element case în interiorul instrucțiunii case.

Verilog nu dorește ca declarațiile de caz să fie complete de sinteză sau de simulare de lipoproteine ​​de înaltă densitate, dar declarațiile de caz Verilog sunt completate prin adăugarea unui caz implicit. VHDL dorește ca declarațiile de caz să fie simulate de lipoproteine ​​de înaltă densitate, care, de obicei, dorește clauza „alții” asociat în Nursing.

Declarație de caz paralel

O declarație case paralelă poate fi o declarație case în interiorul căreia se poate potrivi doar o expresie case cu un singur element case.

Dacă este posibil să căutați o expresie de caz care se poate potrivi cu un element de caz, unitatea de măsură a lucrurilor de caz care se potrivește este declarată ca lucruri de caz suprapuse și, prin urmare, declarația de caz nu este paralelă.

Schema hardware

Codul RTL este elaborat pentru a obține o schemă hardware care reprezintă un multiplexor 4 la 1.

Declarație de caz Verilog

După executarea proiectului de mai sus, ieșirea este zero când sel este 3 și corespunde intrărilor alocate pentru alte valori.

 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. 

Într-o declarație case, comparația are succes numai atunci când fiecare bit al expresiei se potrivește cu una dintre alternative, inclusiv 0, 1, x și z. În exemplul de mai sus, dacă oricare dintre biții din sel este fie x, fie z, atunci Mod implicit instrucțiunea va fi executată deoarece niciuna dintre celelalte alternative nu s-a potrivit. Într-un astfel de caz, ieșirea vor fi toate zerouri.

 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. 

Dacă declarația de caz în proiectare are x și z în alternativele articolului de caz, rezultatele vor diferi.

 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 

Diferențierea dintre caz și dacă-altfel

Declarația case este diferită de if-else-if în două moduri, cum ar fi:

  • Expresii date în an dacă-altfel bloc sunt mai generale, în timp ce într-un bloc de caz, o singură expresie este asociată cu mai multe elemente.
  • Cazul va oferi un rezultat definitiv atunci când există valori X și Z într-o expresie.