You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 12:23:46