一、测试代码
设置两组输入输出,对比使用assign赋值语句与always if语句。
- if_assign_test.v
`timescale 1ns / 1ps // // Engineer: wkk // Module Name: if_assign_test // module if_assign_test( input if_a_in, input if_b_in, input if_c_in, input if_d_in, input assign_a_in, input assign_b_in, input assign_c_in, input assign_d_in, output reg if_a_out, output reg if_b_out, output reg if_c_out, output reg if_d_out, output assign_a_out, output assign_b_out, output assign_c_out, output assign_d_out ); assign assign_a_out = assign_a_in ? 1'b1:1'b0; assign assign_b_out = assign_b_in ? 1'b1:1'b0; assign assign_c_out = assign_c_in ? 1'b1:1'b0; assign assign_d_out = assign_d_in ? 1'b1:1'b0; always @( * ) begin if( if_a_in ) begin if_a_out = 1'b1; end else begin if_a_out = 1'b0; end end always @( * ) begin if( if_b_in ) begin if_b_out = 1'b1; end else begin if_b_out = 1'b0; end end always @( * ) begin if( if_c_in ) begin if_c_out = 1'b1; end else begin if_c_out = 1'b0; end end always @( * ) begin if( if_d_in ) begin if_d_out = 1'b1; end else begin if_d_out = 1'b0; end end endmodule
- tb_if_assign_test.v
`timescale 1ns / 1ps // // Engineer: wkk // Create Date: 2023/12/05 20:37:07 // Module Name: tb_if_assign_test // module tb_if_assign_test(); reg if_a_in; reg if_b_in; reg if_c_in; reg if_d_in; reg assign_a_in; reg assign_b_in; reg assign_c_in; reg assign_d_in; wire if_a_out; wire if_b_out; wire if_c_out; wire if_d_out; wire assign_a_out; wire assign_b_out; wire assign_c_out; wire assign_d_out; if_assign_test if_assign_test_inst ( .if_a_in (if_a_in), .if_b_in (if_b_in), .if_c_in (if_c_in), .if_d_in (if_d_in), .assign_a_in(assign_a_in), .assign_b_in(assign_b_in), .assign_c_in(assign_c_in), .assign_d_in(assign_d_in), .if_a_out (if_a_out), .if_b_out (if_b_out), .if_c_out (if_c_out), .if_d_out (if_d_out), .assign_a_out(assign_a_out), .assign_b_out(assign_b_out), .assign_c_out(assign_c_out), .assign_d_out(assign_d_out) ); initial begin if_a_in = 1'b1; if_b_in = 1'b0; if_c_in = 1'bz; if_d_in = 1'bx; assign_a_in = 1'b1; assign_b_in = 1'b0; assign_c_in = 1'bz; assign_d_in = 1'bx; # 100; $finish; end endmodule
二、仿真结果
通过if ( 条件 )
的方式,z
态被阻断了。