HDLBits (31) — 條件判斷語句
本題鏈接:
https://hdlbits.01xz.net/wiki/Always_if
一個(gè)條件判斷語句通常會(huì)創(chuàng)建一個(gè)2對(duì)1的多路復(fù)用器,如果條件為真,則選擇一個(gè)輸入;如果條件為假,則選擇另一個(gè)輸入。

這相當(dāng)于使用帶條件運(yùn)算符的連續(xù)賦值:
assign out = (condition)?? x?: y;
然而,過程性?if 語句會(huì)導(dǎo)致一種犯錯(cuò)誤的新方法。只有當(dāng)out始終被賦值時(shí),電路才是組合的。

題目
構(gòu)建一個(gè)2比1的多路復(fù)用器,在 a 和 b 之間進(jìn)行選擇。如果 sel _ b1和 sel _ b2都為真,則選擇 b。否則,選擇 a。執(zhí)行兩次相同的操作,一次使用 assign 語句,一次使用過程性 if 語句。


答案

輸出波形


條件(if)語句用于控制執(zhí)行語句要根據(jù)條件判斷來確定是否執(zhí)行。
條件語句用關(guān)鍵字 if 和 else 來聲明,條件表達(dá)式必須在圓括號(hào)中。
條件語句使用結(jié)構(gòu)說明如下:
if 語句執(zhí)行時(shí),如果 condition1 為真,則執(zhí)行 true_statement1 ;如果 condition1 為假,condition2 為真,則執(zhí)行 true_statement2;依次類推。
else if 與 else 結(jié)構(gòu)可以省略,即可以只有一個(gè) if 條件判斷和一組執(zhí)行語句 ture_statement1 就可以構(gòu)成一個(gè)執(zhí)行過程。
else if 可以疊加多個(gè),不僅限于 1 或 2 個(gè)。
ture_statement1 等執(zhí)行語句可以是一條語句,也可以是多條。如果是多條執(zhí)行語句,則需要用 begin 與 end 關(guān)鍵字進(jìn)行說明。
如果是 if-if-else 的形式,即便執(zhí)行語句只有一條,不使用 begin 與 end 關(guān)鍵字也會(huì)引起歧義。
當(dāng)然,編譯器一般按照就近原則,使 else 與最近的一個(gè) if(例子中第二個(gè) if)相對(duì)應(yīng)。
但顯然這樣的寫法是不規(guī)范且不安全的。
所以條件語句中加入 begin 與 and 關(guān)鍵字就是一個(gè)很好的習(xí)慣。
參考資料:
4.5 Verilog 條件語句 | 菜鳥教程:
https://www.runoob.com/w3cnote/verilog-condition-statement.html