【问题标题】:UVM TB and DUT parameter controlUVM TB 和 DUT 参数控制
【发布时间】:2016-11-29 14:46:44
【问题描述】:

请帮助解决我在规划结核病时遇到的一个问题。 假设我的 DUT 有一些作为参数的输入端口,例如:

module Multiplier #(parameter WIDTH = 8) (
    input [WIDTH-1:0] addr,

现在我想让我的测试控制这个 WIDTH 参数。 我希望测试随机化 WIDTH 参数,然后将该参数应用于 DUT。并且基于该参数值,我的整个测试平台将更改事务信号、驱动程序、监视器等。 实施此参数测试的最佳方法是什么?

我想在测试类中有 WIDTH 参数,并在那里随机化它。然后在实例化期间将其分配给 DUT。对于 TB,将随机化值放入 config_db 并在 agent 中获取它并将其分配给 config 类适当的参数。

谢谢 哈克

【问题讨论】:

  • 我怀疑这是可能的。您的uvm_test 仅在详细说明后开始,此时所有模块都已实例化。您需要在此之前设置参数。我建议在编译期间使用$urandom 之类的东西
  • 感谢您的回答。你的意思是在顶部模块调用中使用 $urandom?
  • 我相信$urandom只能在运行时调用。
  • 我也同意这可能是不可能的。因为在运行时会有一个固定的值WIDTH,根据这个值会创建所有的模块端口。
  • 我猜如果我调用 urandom,generate 语句可能会有所帮助,而不是使用 generate 语句实例化 DUT

标签: uvm


【解决方案1】:

我会在我的 Makefile(或您使用的任何构建/编译系统)中生成一个随机变量。然后根据您的模拟器,从模拟运行命令中设置参数。

模型模拟: 参数值可以通过 ModelSim 模拟器中的“vsim”命令传递。假设我们要为所有模块全局提供一个参数值:

-gWIDTH=<random_value>

VCS

-pvalue+hierarchical_name_of_parameter=<random_value>

所有模拟器都有对应的。

【讨论】:

  • 谢谢!但我想使用模拟器命令,因为它会使我的 TB 依赖于模拟器类型((我也不确定我的客户将使用什么模拟器
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 2020-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多