Інструкція case перевіряє, чи заданий вираз відповідає одному з інших виразів у списку та гілках. Це типово звичний пристрій.
Конструкція if-else може бути незастосовною, якщо в одиницях вимірювання багато умов, які потрібно перевірити, і вони синтезуються в кодувальник пріоритетів замість пристрою.
в Verilog , оператор case включає весь код між ключовими словами Verilog, case ('casez', 'casex') і endcase. Інструкція case може бути конструкцією select-one-of-many, яка приблизно схожа на оператор Associate у догляді if-else-if.
успадкування в java
Синтаксис
Інструкція Verilog case починається ключовим словом case і закінчується ключовим словом endcase.
Вираз у дужках одиниці вимірювання площі, призначений для одноразового оцінювання та порівняння зі списком альтернатив у порядку їх написання.
І твердження про те, що вибір відповідає заданій одиниці вимірювання виразу, мертві. Блок із кількома операторами має бути відсортований і знаходитися в межах початку та кінця.
case () case_item1 : case_item2, case_item3 : case_item4 : begin end default: endcase
Якщо жоден із регістрів не відповідає заданому виразу, оператори в межах одиниці вимірювання елемента за замовчуванням не працюють. Інструкція за замовчуванням не є обов’язковою, і існує лише одна інструкція за замовчуванням у операторі case. Інструкції Case є вкладеними.
аля манаса
Виконання вийде з блоку case, тоді як нічого не буде виконано, якщо жоден із елементів не відповідає виразу, і оператор за замовчуванням не задано.
приклад
Наступний модуль Vogue включає 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 у наступних рядках коду.
Предмет футляра
Елемент регістра полягає в тому, що біт, вектор або вираз Verilog порівнюються з регістром.
як прибрати перший символ в excel
На відміну від різних мов програмування високого рівня, таких як ' C ', оператор case Verilog включає неявні оператори break.
Перший елемент case, який збігається з цим виразом case, призводить до того, що відповідний оператор case item стає мертвим, тому всі решта одиниць вимірювання case-речей, пропущених для цього, піддаються оператору case.
Виписка пункту справи
Інструкція case item — це один або кілька операторів Verilog, які не працюють, якщо елемент case відповідає цьому виразу case. На відміну від VHDL, у випадку Verilog речі самі по собі можуть бути виразами.
Щоб змінити синтаксичний аналіз документа коду Verilog, між ключовими словами потрібно вставити оператори Verilog case item 'почати' і 'кінець' якщо більше одного оператора має бути мертвим для конкретного елемента випадку.
Casez
У Verilog є оператор casez, варіант оператора case, який вмикає «z» і «?» значення, які слід розглядати під час порівняння випадків як значення «байдуже».
'Z' і '?' одиниця вимірювання розглядається як байдуже, чи знаходяться вони всередині виразу регістра чи всередині елемента регістру.
Під час секретного написання оператора case з «не хвилює», використовуйте оператор casez і використовуйте «?» символи замість символів 'z' всередині регістру речі для призначення бітів 'не хвилює'.
Casex
У Verilog є оператор casex, варіант оператора case, який дозволяє розглядати значення «z», «?» і «x» під час порівняння як значення «не важливо».
конвертувати з рядка в ціле число java
'x', 'z' і '?' одиниця вимірювання розглядається як байдуже, чи знаходяться вони всередині виразу регістра чи всередині елемента регістру.
Повний опис справи
Повний оператор case може бути внутрішнім оператором case, у якому всі доступні двійкові шаблони регістру-виразу зіставляються з елементом case або регістром за замовчуванням.
Якщо оператор case не охоплює регістр за замовчуванням, і можна отримати двійковий вираз case, який не відповідає жодному з надрукованих елементів case, оператор case не є повним.
Повний оператор case може бути оператором case, у якому кожен доступний двійковий, небінарний і суміш двійкових і небінарних шаблонів поміщений у рамку як елемент case в операторі case.
Verilog не бажає, щоб інструкції case були повними або синтезом, або симуляцією ліпопротеїнів високої щільності, але інструкції Verilog роблять повними, додаючи регістр за замовчуванням. VHDL бажає, щоб описи випадків були повними моделюванням ліпопротеїдів високої щільності, що зазвичай вимагає пункту «інші» для медсестер.
Parallel Case Statement
Паралельний оператор case може бути внутрішнім оператором case, який можна отримати лише для відповідності виразу case лише одному елементу case.
Якщо можна шукати вираз регістра, який може збігатися з одним елементом регістру, відповідна одиниця вимірювання регістру вказується як регістр, що перекривається, і тому оператор регістру не є паралельним.
Схема апаратного забезпечення
Код RTL розроблено для отримання апаратної схеми, яка представляє мультиплексор 4 до 1.
Після виконання вищезазначеного плану вихід дорівнює нулю, коли sel дорівнює 3, і відповідає призначеним входам для інших значень.
перезапустіть mysql ubuntu
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 двома способами, наприклад:
- Вирази, подані в ан якщо-інакше блок є більш загальним, тоді як у блоці case один вираз зіставляється з кількома елементами.