HDLBits (31) — 条件判断语句
本题链接:
https://hdlbits.01xz.net/wiki/Always_if
一个条件判断语句通常会创建一个2对1的多路复用器,如果条件为真,则选择一个输入;如果条件为假,则选择另一个输入。

这相当于使用带条件运算符的连续赋值:
assign out = (condition) ? x : y;
然而,过程性 if 语句会导致一种犯错误的新方法。只有当out始终被赋值时,电路才是组合的。

题目
构建一个2比1的多路复用器,在 a 和 b 之间进行选择。如果 sel _ b1和 sel _ b2都为真,则选择 b。否则,选择 a。执行两次相同的操作,一次使用 assign 语句,一次使用过程性 if 语句。


答案

输出波形


条件(if)语句用于控制执行语句要根据条件判断来确定是否执行。
条件语句用关键字 if 和 else 来声明,条件表达式必须在圆括号中。
条件语句使用结构说明如下:
if 语句执行时,如果 condition1 为真,则执行 true_statement1 ;如果 condition1 为假,condition2 为真,则执行 true_statement2;依次类推。
else if 与 else 结构可以省略,即可以只有一个 if 条件判断和一组执行语句 ture_statement1 就可以构成一个执行过程。
else if 可以叠加多个,不仅限于 1 或 2 个。
ture_statement1 等执行语句可以是一条语句,也可以是多条。如果是多条执行语句,则需要用 begin 与 end 关键字进行说明。
如果是 if-if-else 的形式,即便执行语句只有一条,不使用 begin 与 end 关键字也会引起歧义。
当然,编译器一般按照就近原则,使 else 与最近的一个 if(例子中第二个 if)相对应。
但显然这样的写法是不规范且不安全的。
所以条件语句中加入 begin 与 and 关键字就是一个很好的习惯。
参考资料:
4.5 Verilog 条件语句 | 菜鸟教程:
https://www.runoob.com/w3cnote/verilog-condition-statement.html