verilog \$test\$plusargs的使用
1. 作用
$test$plusargs
是verilog在仿真运行时调用的系统函数, 可以根据仿真选项不同, 创建不同的运行分支.
2. 举例
module tb;
logic clk;
initial begin
#0 clk = 0;
forever begin
#5 clk = ~clk;
end
end
initial begin
#500 $finish;
end
reg a0, a1;
reg b0, b1;
always@(posedge clk)begin
if(! $test$plusargs("DEL_A"))begin
a0 = 1'b0;
a1 = 1'b1;
end
if(! $test$plusargs("DEL_B"))begin
b0 = 1'b0;
b1 = 1'b1;
end
end
endmodule
编译后, 根据选项不同, 进行不同的仿真:
simv # 没有设置DEL_A和DEL_B, 会把a0/a1/b0/b1都初始化;
simv +DEL_A # 设置了DEL_A, a0/a1不初始化(都是x), b0/b1初始化.
simv +DEL_A +DEL_B # 设置了DEL_A和DEL_B, a0/a1/b0/b1都不初始化(都是x);
3. 与宏定义的区别
使用宏定义也可以达到上述目的.
但使用宏定义的缺点是: 修改DEL_A和DEL_B的设置时, 需要重新编译, 直接修改simv参数无效.
module tb;
logic clk;
initial begin
#0 clk = 0;
forever begin
#5 clk = ~clk;
end
end
initial begin
#500 $finish;
end
reg a0, a1;
reg b0, b1;
always@(posedge clk)begin
`ifndef DEL_A
a0 = 1'b0;
a1 = 1'b1;
`endif
`ifndef DEL_B
b0 = 1'b0;
b1 = 1'b1;
`endif
end
endmodule