1.4.3 if语句
if语句通常会创建一个2选1的多路复用器,如果条件为真,则选择一个输入;如果条件为假,则选择另一个输入。
always @(*) begin
if (condition) begin
out = x;
end
else begin
out = y;
end
end
这等同于使用带条件运算符的连续赋值语句:
assign out = (condition) ? x : y;
然而,过程性if语句引入了一种犯错的新方式。只有当out总是被赋予一个值时,这个电路才是组合逻辑电路。
实践练习:
构建一个2选1的多路复用器,在a和b之间进行选择。如果sel_b1和sel_b2都 为真,则选择b。否则,选择a。分别使用assign语句和过程性if语句做两次。
sel_b1 | sel_b2 | out_assign out_always |
---|---|---|
0 | 0 | a |
0 | 1 | a |
1 | 0 | a |
1 | 1 | b |
模块声明
// synthesis verilog_input_version verilog_2001
module top_module(
input a,
input b,
input sel_b1,
input sel_b2,
output wire out_assign,
output reg out_always );