HDLBits (33) — 多路分支語句
本題鏈接:
https://hdlbits.01xz.net/wiki/Always_case
Verilog中的case語句幾乎等同于多個if-elseif-else,它將一個表達(dá)式與其他表達(dá)式的列表進(jìn)行比較。它的語法和功能于C中的switch語句不同。
case語句以case開頭,每個“case項”以冒號結(jié)尾而不是“switch”。
每個case項只能執(zhí)行一條語句,這使得C中使用的“break”變得不必要。但這意味著,如果在一個case項中執(zhí)行多個語句,則必須使用begin ... end
允許重復(fù)(部分重疊)case項,此時使用第一個匹配的。然而C不允許重復(fù)的case項。

題目
如果有大量的cases,case語句比if語句更方便。在本練習(xí)中你需要創(chuàng)建一個當(dāng)sel在0和5之間時選擇相應(yīng)的數(shù)據(jù)輸入的6:1多路復(fù)用器。如果sel不在0和5之間則輸出0。數(shù)據(jù)輸入和輸出均為4位寬。注意可能會導(dǎo)致的鎖存(請參閱always_if2)

答案

輸出波形


case 語句是一種多路條件分支的形式,可以解決 if 語句中有多個條件選項時使用不方便的問題。
case 語句格式如下:
case 語句執(zhí)行時,如果 condition1 為真,則執(zhí)行 true_statement1 ; 如果 condition1 為假,condition2 為真,則執(zhí)行 true_statement2;依次類推。如果各個 condition 都不為真,則執(zhí)行 default_statement 語句。
default 語句是可選的,且在一個 case 語句中不能有多個 default 語句。
條件選項可以有多個,不僅限于 condition1、condition2 等,而且這些條件選項不要求互斥。雖然這些條件選項是并發(fā)比較的,但執(zhí)行效果是誰在前且條件為真誰被執(zhí)行。
ture_statement1 等執(zhí)行語句可以是一條語句,也可以是多條。如果是多條執(zhí)行語句,則需要用 begin 與 end 關(guān)鍵字進(jìn)行說明。case 語句支持嵌套使用。
參考資料:
4.6?Verilog 條件語句 | 菜鳥教程:
https://www.runoob.com/w3cnote/verilog-case.html