如何让Aldec Riviera Pro仿真工具检测Verilog变量非法赋值错误?
仿真工具未检测出Verilog非法赋值问题的解决疑问
我了解到,任何Verilog变量(包括wire和net)都不允许存在多个赋值:wire变量仅允许1个连续赋值,reg变量在一个块中仅允许1个过程赋值。但我在EDA Playground使用Aldec Riviera Pro 2022.04仿真以下代码时,发现了不符合预期的情况:
1. wire多赋值未触发报错
测试代码:
//1st testbench code module test; wire a; assign a = 0; assign a = 1; endmodule
我认为这段代码会触发multidrive-ERROR(变量a被两个连续赋值驱动),但仿真无错误完成,输出如下:
KERNEL: Simulation has finished. There are no more test vectors to simulate.
VSIM: Simulation has finished.
2. 波形验证多赋值异常
我修改测试代码添加了波形dump和仿真结束控制:
//2nd testbench code module test_2; wire a; assign a = 0; assign a = 1; initial begin #10 $finish; end initial begin $dumpfiles("wave.vcd"); $dumpvars(0, test_2); end endmodule
查看生成的wave.vcd波形,变量a全程为'x',这验证了我的判断——这不是连续赋值的正常有效结果。
3. reg变量被连续赋值也未报错
此外,以下本应非法的代码(reg变量不能被连续赋值)也能正常仿真:
// 本应报错的代码(reg不能被连续赋值),但仿真正常运行 module test_2; reg a; assign a = 0; endmodule
请问,如何让Aldec Riviera Pro仿真工具直接指出这类非法赋值错误,而非默默处理错误的赋值过程?
内容的提问来源于stack exchange,提问作者gubang
相关产品推荐
相关产品推荐

