Изявлението case проверява дали дадения израз съвпада с един от другите изрази в списъка и разклоненията. Това е обикновено свикнало изпълнение на устройство.
Конструкцията if-else може да не е приложима, ако има мерна единица много условия, които трябва да бъдат проверени и би се синтезирало в приоритетен енкодер вместо в устройство.
в Verilog , операторът case включва целия код между ключовите думи на Verilog, case ('casez', 'casex') и endcase. Инструкцията за случай може да бъде конструкция за избор на едно от много, която е приблизително като командата Associate in nursing if-else-if.
Синтаксис
Инструкцията за случай на Verilog започва с ключовата дума case и завършва с ключовата дума endcase.
Изразът в единицата за площ в скоби има за цел да бъде оценен конкретно веднъж и се сравнява със списъка с алтернативи в реда, в който са написани.
xd значение
И твърденията, че изборът съответства на дадената изразна единица за измерване, са мъртви. Блок от множество изрази трябва да бъде сортиран и да бъде в рамките на начало и край.
case () case_item1 : case_item2, case_item3 : case_item4 : begin end default: endcase
Ако нито едно от нещата в регистъра не съвпада с дадения израз, изразите в рамките на единицата за измерване на елемента по подразбиране са мъртви. Операторът по подразбиране не е задължителен и има само един оператор по подразбиране в оператора за случай. Казусите са вложени.
Изпълнението ще излезе от блока case, като няма да направи едно нещо, ако нито един от елементите не съответства на израза и не е дадено изявление по подразбиране.
Пример
Следният моден модул включва 2-битова опция за сигнал за маршрутизиране на един от трите различни 3-битови входа към знака, посочен като изходящ.
как да деактивирате режима за програмисти
Изявление case се използва за присвояване на правилния вход към изхода, поддържащ стойността на sel. Тъй като sel може да бъде 2-битов сигнал, той ще има двадесет 2 комбинации, от нула до 3. Инструкцията по подразбиране помага да се нулира изходната линия, ако sel е 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
Заглавка на извлечението на случая
Заглавката на оператора case се състои от ключовата дума case ('casez', 'casex'), последвана от израза case, обикновено всичко на един ред код.
Когато добавяте директиви full_case или parallel_case към оператор case, мерната единица на директивите се добавя като коментар в реално време след израза case в горната част на заглавката на оператора case и преди всяко от нещата case в следващите кодови редове.
Калъф арт
Елементът case е, че използваният бит, вектор или израз на Verilog се сравнява с израза case.
За разлика от различни езици за програмиране на високо ниво като ' ° С ', операторът за случай на Verilog включва имплицитни оператори за прекъсване.
Първият case елемент, който съвпада с този case израз, кара съответния оператор case item да бъде мъртъв, като по този начин всички останали единици за измерване на case вещи, пропуснати за това, преминават през case оператора.
Декларация за т. на случай
Изявление за елемент на случай е един или много оператори на Verilog мъртви, ако елементът на случай съответства на този израз на случай. Не като VHDL, нещата в случай на Verilog могат сами по себе си да бъдат изрази.
json от java обект
За да се промени синтактичният анализ на кодовия документ на Verilog, операторите на Verilog case item трябва да бъдат затворени между ключовите думи 'започвам' и 'край' ако повече от един израз трябва да бъде мъртъв за конкретен случай.
Касез
Във Verilog има оператор casez, вариант на оператора case, който позволява 'z' и '?' стойности, които трябва да се третират по време на сравнението на случаите като стойности на „без значение“.
'Z' и '?' мерна единица, третирана като не се интересува дали са вътре в израза за регистър или дали са вътре в елемента за регистър.
Когато тайно пишете оператор на казус с 'не ме интересува', използвайте оператор casez и използвайте '?' знаци вместо знаци 'z' вътре в регистъра неща за цел 'не ме интересува' битове.
Casex
Във Verilog има оператор casex, вариант на оператора case, който позволява стойностите на 'z', '?' и 'x' да бъдат третирани по време на сравнение като стойности на 'не ме интересува'.
'x', 'z' и '?' мерна единица, третирана като не се интересува дали са вътре в израза за регистър или дали са вътре в елемента за регистър.
Пълен казус
Пълният оператор на case може да бъде оператор на case вътре, че всички двоични шаблони на case-изрази, които могат да се получат, са съпоставени с case елемент или case по подразбиране.
Ако case операторът не включва case по подразбиране и може да се търси двоичен case израз, който не съответства на нито едно от отпечатаните case case, операторът case не е пълен.
обхождане на предварителна поръчка
Пълният case statement може да бъде case statement вътре в който всеки двоичен, недвоичен и смесен от двоични и недвоични шаблони, който може да се получи, е поставен в кутия като case елемент в case оператора.
Verilog не иска изявленията за казуси да бъдат пълни или със синтез, или с симулация на липопротеини с висока плътност, но изявленията за казуси на Verilog се правят пълни чрез добавяне на случай по подразбиране. VHDL желае изявленията за казуси да бъдат пълни със симулация на липопротеини с висока плътност, което обикновено изисква клауза „други“ за сътрудник в медицинските сестри.
Изявление за паралелен случай
Паралелният case оператор може да бъде case оператор вътре, който може да се получи само за съпоставяне на case израз само с един case елемент.
Ако е възможно да се търси израз за случай, който може да съвпада над един елемент за случай, съвпадащата мерна единица за неща за случай се посочва като припокриващи се неща, и така операторът за случай не е паралелен.
Хардуерна схема
RTL кодът е разработен, за да се получи хардуерна схема, която представлява мултиплексор 4 към 1.
След изпълнение на горния дизайн, изходът е нула, когато sel е 3 и съответства на присвоените входове за други стойности.
пълна форма
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.
В оператор case сравнението е успешно само когато всеки бит от израза съвпада с една от алтернативите, включително 0, 1, x и z. В горния пример, ако някой от битовете в sel е x или z, по подразбиране операторът ще бъде изпълнен, защото нито една от другите алтернативи не съвпада. В такъв случай изходът ще бъде само нули.
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.
Ако операторът case в дизайна има x и z в алтернативите на елемент case, резултатите ще се различават.
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
Разграничение между case и if-else
Изявлението case е различно от if-else-if по два начина, като например:
- Изрази, дадени в an ако-иначе block са по-общи, докато в case block един израз се съпоставя с множество елементи.