logo

Oświadczenie o sprawie Verilog

Instrukcja case sprawdza, czy dane wyrażenie pasuje do jednego z pozostałych wyrażeń na liście i w gałęziach. Zwykle jest to przyzwyczajone do wdrażania urządzenia.

Konstrukcja if-else może nie mieć zastosowania, jeśli istnieje wiele warunków do sprawdzenia w jednostce miary i mogłaby zostać zsyntetyzowana w koder priorytetowy zamiast w urządzenie.

W Verilog , instrukcja case zawiera cały kod pomiędzy słowami kluczowymi Verilog, case („casez”, „casex”) i endcase. Stwierdzenie przypadku może być konstruktem typu „wybierz jeden z wielu”, który jest mniej więcej taki sam jak stwierdzenie „stowarzyszony” w pielęgniarstwie, stwierdzenie „jeśli jeszcze-jeśli”.

Składnia

Instrukcja case Verilog zaczyna się od słowa kluczowego case i kończy słowem kluczowym endcase.

Wyrażenie w jednostce obszaru nawiasu ma być ocenione tylko raz i jest porównywane z listą alternatyw w kolejności, w jakiej są zapisane.

A stwierdzenia, że ​​wybór odpowiada podanej jednostce miary, są martwe. Blok wielu instrukcji powinien być posortowany i znajdować się na początku i na końcu.

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

Jeśli żadna z rzeczy nie pasuje do podanego wyrażenia, stwierdzenia w ramach domyślnej jednostki miary są martwe. Instrukcja domyślna nie jest obowiązkowa i w całej instrukcji case występuje tylko jedna instrukcja domyślna. Instrukcje case są zagnieżdżone.

np. średnia

Wykonanie zakończy blok case, nie wykonując jednej czynności, jeśli żaden z elementów nie pasuje do wyrażenia i nie zostanie podana instrukcja domyślna.

Przykład

Poniższy moduł modowy zawiera 2-bitową opcję wyboru sygnału, która kieruje jedno z trzech różnych 3-bitowych wejść do znaku oznaczonego jako out.

Instrukcja case służy do przypisania prawidłowego wejścia do wyjścia obsługiwanego przez wartość sel. Ponieważ sel może być sygnałem 2-bitowym, będzie miał dwadzieścia 2 kombinacji, od zera do 3. Domyślna instrukcja pomaga wyprowadzić wyjście na zero, jeśli sel wynosi 3.

przykład Java Hello World
 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 

Nagłówek opisu sprawy

Nagłówek instrukcji case składa się ze słowa kluczowego case („casez”, „casex”), po którym następuje wyrażenie case, zwykle wszystko w jednym wierszu kodu.

Podczas dodawania dyrektyw full_case lub Parale_case do instrukcji case jednostka miary dyrektyw jest dodawana jako komentarz w czasie rzeczywistym po wyrażeniu case na końcu nagłówka instrukcji case i przed dowolnym elementem case w kolejnych wierszach kodu.

Przedmiot sprawy

Sprawa polega na tym, że zwykłe wyrażenie bitowe, wektorowe lub Verilog porównuje z wyrażeniem przypadku.

W przeciwieństwie do różnych języków programowania wysokiego poziomu, takich jak „ C ', instrukcja case Verilog zawiera ukryte instrukcje break.

Pierwszy element przypadku, który pasuje do tego wyrażenia przypadku, powoduje, że odpowiednia instrukcja elementu przypadku jest martwa, dlatego cała reszta jednostek miary przypadku, pominięta w tym przypadku, podlega instrukcji case.

Oświadczenie dotyczące przedmiotu sprawy

Instrukcja elementu sprawy to jedna lub wiele instrukcji Verilog martwych, jeśli element sprawy pasuje do tego wyrażenia sprawy. W przeciwieństwie do VHDL, sprawy Verilog same w sobie mogą być wyrażeniami.

Aby zmienić parsowanie dokumentu kodu Verilog, instrukcje dotyczące pozycji Verilog powinny być ujęte pomiędzy słowami kluczowymi 'zaczynać' I 'koniec' jeśli więcej niż jedna instrukcja ma być martwa dla konkretnego elementu sprawy.

Casez

W Verilog istnieje instrukcja casez, odmiana instrukcji case, która umożliwia użycie znaków „z” i „?” wartości, które należy traktować podczas porównywania przypadków jako wartości „nieważne”.

„Z” i „?” jednostka miary traktowana jako nie ma znaczenia, czy znajdują się one wewnątrz wyrażenia przypadku, czy też znajdują się wewnątrz elementu przypadku.

Kiedy w tajemnicy piszesz oświadczenie case z „nie obchodzi mnie to”, użyj instrukcji casez i użyj „?” znaków zamiast znaków „z” wewnątrz wielkości liter, aby mieć na celu bity „nie obchodzi mnie to”.

jak usunąć pierwszy znak w programie Excel

Casex

W Verilog istnieje instrukcja casex, odmiana instrukcji case, która umożliwia traktowanie wartości „z”, „?” i „x” podczas porównywania jako wartości „nie obchodzi mnie to”.

„x”, „z” i „?” jednostka miary traktowana jako nie ma znaczenia, czy znajdują się one wewnątrz wyrażenia przypadku, czy też znajdują się wewnątrz elementu przypadku.

Pełny opis sprawy

Pełna instrukcja case może być instrukcją case wewnątrz, w której wszystkie możliwe do uzyskania wzorce binarne wyrażeń wielkości liter są dopasowane do elementu case lub wartości domyślnej case.

Jeśli instrukcja case nie obejmuje domyślnej wartości case i można wyszukać binarne wyrażenie case, które nie pasuje do żadnego z wydrukowanych elementów case, instrukcja case nie jest pełna.

Pełna instrukcja case może być instrukcją case wewnątrz instrukcji case, w której wszystkie możliwe do uzyskania wzorce binarne, niebinarne oraz mieszaniny wzorców binarnych i niebinarnych są opakowane jako element case wewnątrz instrukcji case.

Verilog nie chce, aby instrukcje przypadków były albo syntezą, albo pełną symulacją lipoprotein o dużej gęstości, ale instrukcje przypadków Verilog stają się pełne poprzez dodanie domyślnej wielkości liter. VHDL pragnie, aby opisy przypadków zawierały pełną symulację lipoprotein o dużej gęstości, co zwykle wymaga klauzuli Associate in Nursing „inni”.

Równoległe oświadczenie w sprawie

Równoległa instrukcja case może być instrukcją case wewnątrz, w której można dopasować wyrażenie case tylko do jednego elementu case.

Jeśli możliwe jest sprawdzenie wyrażenia przypadku, które może pasować do jednego elementu przypadku, jednostka miary pasujących przypadków jest określana jako nakładające się elementy przypadku, więc instrukcja przypadku nie jest równoległa.

Schemat sprzętu

Kod RTL został opracowany w celu uzyskania schematu sprzętowego reprezentującego multiplekser 4 do 1.

Oświadczenie o sprawie Verilog

Po wykonaniu powyższego projektu, wyjście wynosi zero, gdy sel wynosi 3 i odpowiada przypisanym wejściom dla innych wartości.

jak duży jest mój monitor
 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. 

W instrukcji case porównanie powiedzie się tylko wtedy, gdy każdy bit wyrażenia pasuje do jednej z alternatyw, w tym 0, 1, x i z. W powyższym przykładzie, jeśli którykolwiek z bitów w sel ma wartość x lub z, to domyślny instrukcja zostanie wykonana, ponieważ żadna z pozostałych alternatyw nie została dopasowana. W takim przypadku na wyjściu będą same zera.

 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. 

Jeśli instrukcja przypadku w projekcie zawiera x i z w alternatywnych elementach sprawy, wyniki będą się różnić.

 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 

Rozróżnienie pomiędzy przypadkiem a if-else

Instrukcja case różni się od instrukcji if-else-if pod dwoma względami, takimi jak:

  • Wyrażenia podane w Jeśli inaczej block są bardziej ogólne, podczas gdy w bloku case pojedyncze wyrażenie jest dopasowywane do wielu elementów.
  • Walizka zapewni ostateczny wynik, jeśli w wyrażeniu znajdują się wartości X i Z.