【问题标题】:Accessing Verilog genvar generated instances in simulation code在仿真代码中访问 Verilog genvar 生成的实例
【发布时间】:2011-11-12 11:20:57
【问题描述】:

这是一个与 Verilog 相关的问题。我正在使用 XILINX ISE 作为开发环境。

我正在尝试访问使用 genvar 自动生成的仿真变量,但我收到以下错误 -> HDLCompiler:71

问题示例:

genvar i;

generate

for(i=0; i < N; i=i+1)

begin:Sys_Modules

  TypeXModule #(.width(10)) xmod(.dataY(dataY)));

end

endgenerate 

当我运行综合或仿真时,我可以看到 Sys_Modules[0..N-1].xmod 实例已创建。

当我尝试在访问 Sys_Modules 数组的模拟中添加一行时:

Sys_Modules[i].xmod.dataY

我收到以下错误:

HDLCompiler:71 dataY 未在前缀 xmod 下声明

有没有办法在模拟中访问自动生成的值?

谢谢!

【问题讨论】:

    标签: simulation verilog hdl synthesis


    【解决方案1】:

    我找到并使用了另一种解决方案,将其发布在这里以防有人发现它有用。在 Vivado 2020 中为我工作。

    步骤:

    1. 在 tb 中:声明您需要打印的所有数据(声明电线)

      例如:对于 Sys_Modules[0..N-1],需要 Sys_Modules[i].xmod.dataY =>

      tb: 线 [0:N-1][`DATA_SIZE-1:0] tb_Sys_Modules_dataY;

    2. 使用生成块生成所有连接

      例如:(N 应该是定义/参数)

      for(i = 0 ; i

    3. $display wire from tb:

      例如:

      $display("%d",tb_Sys_Modules_dataY[i]);

    【讨论】:

      【解决方案2】:

      您不能在合成的 Verilog 中使用跨实例分层引用。

      【讨论】:

      • 谢谢。为什么是交叉引用?在带有 genvar 的模块内部使用时也会出现同样的问题。
      • 引用xmod.dataY从父模块访问TypeXModule实例内部的信号dataY。
      【解决方案3】:

      为生成的实例编写分层引用是合法的。该功能在 IEEE Verilog 标准的第 2.7.2 和 12.1.3 节中进行了描述。但是,实例下标必须是常量,这样才能在编译时解析。

      【讨论】:

      • 感谢您的回答。我设法使用常量编译了一个版本。不幸的是,我有一个使用 genvar 和参数动态生成的模块。 for 循环从 I 到 N,N 被定义为参数(参数=N)。使用一种常量会破坏使用 genvar for 循环的目的。编译器可以很容易地从参数中确定常量值。如果这是真的,那似乎是 Verilog 语言设计的疏忽。
      【解决方案4】:

      我认为你运气不好。正如您所发现的那样,模拟器似乎不喜欢指向生成的块的模块外引用 (OOMR)。

      我最近在制作可参数化的测试台监视器时遇到了类似的问题。我会根据parameter 实例化可变数量的子块。在此范围内,我需要有一个顶级 .start() 任务,该任务在每个实例化模块中调用 .start() 任务。由于这个 OOMR 问题,我无法使用 for 循环来执行此操作。

      所以我最终不得不:

      • 定义顶级.start() 任务切换的reg
      • 写一个always @ 块在此reg 上触发
      • 在这个 always 块中写 另一个 generate 部分以在每个子模块上调用 .start()。

      如果您真的需要查看您的 generated 模块,也许您可​​以尝试像上面这样的解决方法?例如,在顶层有一条总线,并使用generate 语句来查看您原来的generated 实例,以将有趣的信号复制/分配到该顶层总线上。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-22
        相关资源
        最近更新 更多