verilog HDLBits刷题“Always if”--始终 if---if语句

发布时间:2026/7/17 16:25:15
verilog HDLBits刷题“Always if”--始终 if---if语句 一、题目if 语句通常会创建一个 2 选 1 多路复用器如果条件为 true则选择一个 input如果条件为 false则选择另一个 input。always (*) begin if (condition) begin out x; end else begin out y; end end这等效于使用带有条件运算符的连续赋值assign out (condition) ? x : y;但是过程 if 语句提供了一种出错的新方法。仅当 out 始终分配一个值时电路才是 combination 的。一点练习构建一个在 a 和 b 之间选择的 2 对 1 多路复用器。如果 sel_b1 和 sel_b2均为true请选择 b。否则请选择 a。执行相同的作两次一次使用 assign 语句一次使用过程 if 语句。sel_b1sel_b2out_assignout_always00a01a10a11b模块声明// 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 );二、分析条件运算符的连续赋值assign out (condition) ? x : y;2选1多路复用器always (*) begin if (condition) begin out x; end else begin out y; end endsel_b1和sel_b2均为true即两者相与为1输出b为0则输出a。三、代码实现// 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 ); assign out_assign(sel_b1sel_b2)?b:a; always(*)begin if(sel_b1sel_b2)begin out_alwaysb; end else begin out_alwaysa; end end endmodule 或者 // 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 ); assign out_assign(sel_b1sel_b2)?b:a; always (*)begin if({sel_b1,sel_b2}2b11)begin out_alwaysb; end else begin out_alwaysa; end end endmodule四、时序