【问题标题】:Initialization priority in verilogverilog中的初始化优先级
【发布时间】:2015-11-03 07:56:04
【问题描述】:

verilog 专家您好,

在下面的verilog代码中,我可以100%相信top.test.p会被系统初始化为200吗?

或者我会在变量初始化和初始语句之间进行竞争吗?也就是说,有的模拟器会给我top.test.p == 100,有的给我top.test.p == 200

谢谢

    module test;
       parameter real P = 1e3;
       real P=p;
    endmodule    

    module top;
      test #(100) test();
      initial
       begin
       // override the variable initialization (race condition????)
       test.p = 200;
      end
    endmodule

【问题讨论】:

  • 你的意思是parameter real P = 1e3参数吗?我猜它必须是p 而不是P(可能是拼写错误),而且它必须是变量,而不是参数。参数不能在程序块中更改,它们只能在实例化时或被defparam覆盖。

标签: verilog system-verilog


【解决方案1】:

兼容 SystemVerilog 的模拟器必须在任何初始或始终过程开始之前执行变量声明初始化。所以 top.test.p 应该是 200

第 6.8 节说

将静态变量的初始值设置为变量的一部分 声明(包括静态类成员)应在任何 initial 或 always 程序启动(另见 6.21 和 10.5 具有静态和自动生命周期的变量初始化)。

Verilog 中未定义此顺序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-23
    • 2016-03-02
    • 2022-12-16
    相关资源
    最近更新 更多