问题标签 [uvm]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1351 浏览

system-verilog - Illegal assignment to class mtiUvm.uvm_pkg::uvm_component

I get this error when trying to access the uvm_config_db to access a variable. I googled it and found the following answer on the accellera forums:

http://forums.accellera.org/topic/406-compilation-error-regarding-illegal-class-assignment/

You cannot use this as a context inside a sequence; you must rely on the full sequence name.

Can anyone explain why this is so? Thanks

0 投票
1 回答
1760 浏览

verilog - SVA:是否可以从后续方面禁用 SV 属性检查?

我有一个 SV 属性如下:

我有如下断言:

在上述属性中,我有信号s_of在整个检查过程中不应断言该信号。但这里的情况是,这个信号s_of在蕴含运算符的结果过程中被断言。因此,我的要求是禁用检查,即使在后续语句中断言了信号s_of也是如此。有没有办法做到这一点?

谢谢。

0 投票
2 回答
1137 浏览

ruby - Ruby 和 SystemVerilog DPI

System Verilog 中的 DPI 功能总是提到您可以将其与任何语言交互,最常见的是 C/C++。我想将我的系统 Verilog 代码与 Ruby 接口。是否有任何文档或支持此功能?任何已知的方法来做到这一点?

我应该补充一点,我的主要目标是从我的系统 Verilog uvm 测试中调用一个 ruby​​ 脚本。

谢谢

0 投票
1 回答
965 浏览

arrays - UVM:如何在虚拟接口中连接多维数组?

我在 DUT 中有 5 个 SRAM 实例(== 5 个不同的二维阵列)(全部在 verilog 中)。我想从 UVM 测试台对这些阵列进行后门加载。SRAM 阵列上有多个驱动程序,来自 DUT 本身或来自测试平台(来自测试平台主要是使用 $readmemh 进行后门访问)。现在,我想要将这些数组处理到 UVM 测试台中。因此,我创建了一个具有本地内存阵列的虚拟接口并实例化了 5 次接口。问题是,如何将 DUT SRAM 阵列与虚拟接口中的阵列连接起来?我需要建立一个弱连接,以便在 DUT 驱动阵列时不会发生争用。

谁能建议如何在 UVM 测试台中连接多维数组并且没有强大的驱动程序?

0 投票
2 回答
5316 浏览

verilog - 如何在测试序列中使用 uvm_test_done 反对?

我正在我的 UVM 测试平台中进行以下操作以创建 seq 并开始测试。

  1. 我有一些序列。我正在从以下序列之一复制代码片段。

内部主体():

2.在我的测试中,我正在执行以下操作来开始一个序列:

现在,如果我这样做,测试将在零时间开始和结束。我的意思是,DUT 不是由我的序列驱动的。如果我进行以下更改,那么它似乎工作正常:

选项1:在测试中更改run_phase-

如果我这样做,则测试开始,我可以看到 DUT 正在被驱动,并且一切都按预期工作。然而,测试总是在时间 1000000 结束——即使序列尚未完成,将所有事务发送到 DUT。这不好,因为我不知道我的 DUT 需要多长时间才能完成测试。所以,我宁愿尝试这样的事情:

选项 2:在测试中保留默认代码(不在 run_phase 中添加延迟)。在 my_seq 的主体内进行以下更改:

内部主体():

如果我这样做,那么它工作正常。这是处理异议的正确方法吗?回到我原来的实现,我假设我的序列是阻塞的。因此,每当我使用 start(...) 在 test 的 run_phase 中启动一个序列时,它将被视为阻塞,并将在该行等待,直到序列完成发送所有事务。所以,我没有在我的原始代码中添加任何延迟。

我想我在这里遗漏了一些东西。任何帮助将不胜感激。

0 投票
1 回答
2152 浏览

system-verilog - 在 UVM RAL 中,一个 reg 定义为无复位值,但在其上设置/更新“0”数据不会触发总线事务

ral文件中,我有类似的东西:

您可以发现R2Y设置为has_reset = 0,在实际 RTL 中,它是'X'默认值,但如果我使用设置/更新机制来编写此 reg,如果write data is 0等于 R2Y 中的重置值(偶数has_reset = 0),似乎 RAL 会处理m_mirror == m_desired所以赢了'不是此 reg 访问的总线事务。

那有意义吗?我认为无论我为这些 regs 设置哪个值,都应该总是发生总线事务。

PS:mirrored和desired values都是2-state向量,即使reg字段设置为'no reset'值,reg字段的m_mirrored初始值仍然为0。如果RTL复位值为“x”,例如,有设计了10个寄存器,我想随机选取其中任意个写成随机值(当然,0也是合法值),看来我会错过这种情况下的那些'0'值寄存器设置。我现在正在使用一种解决方法,使用“写入”ral 方法将所有 regs 刷新为 0 值,它可以满足我的期望,并在总线上有一些额外的开销

0 投票
1 回答
2750 浏览

system-verilog - 你如何初始化uvm_mem?

someinputdata.txt假设我有一个要加载到基于 uvm 的内存中uvm_reg_block的输入文件(

我不确定是否有内置函数可以将输入文件加载到uvm_mem.

你如何有效地加载someinputdata.txt到这个内存?

0 投票
2 回答
956 浏览

verification - 使用时钟模块时的输出偏差

我在接口中使用时钟块进行信号混叠。我想将一些位连接在一起形成一个总线,然后从我的驱动程序驱动这个总线。因此,例如:

现在的问题是,在我的一个断言中,我需要阅读bus_intf.driver_bus.x_bus。如 SV 手册中所述,测试平台不应读取时钟块的输出变量,如果是,则模拟器会吐出错误(或在我的情况下发出警告)。

于是我修改了界面:

现在的问题是,在我的波形中,我看到创建了两个信号 - x_busx_bus__o。我理解 Questasim 这样做的原因——它是为了将inout声明分开,以便我可以查看两个版本。然而,现在的问题是我所有的时钟驱动都延迟了一个时钟周期!因此连接到 DUT 的x_bus__ox_bus晚一个时钟周期。尽管我明确指出输出偏斜为#0,但还是如此。

知道为什么会这样吗?我做错了什么还是我误解了?

0 投票
2 回答
445 浏览

specman - Specman UVM:当值被写入另一个寄存器时,如何更新寄存器的值?

(在我的验证环境中,我们使用vr_ad包。)。我尝试实现下一个:当数据写入其中一个寄存器 ( timer_load) 时,另一个寄存器 ( timer_bgload) 应该使用相同的数据进行更新。

在 UVM 用户指南中找到了下一个示例

我的寄存器:

timer_bgload在数据写入后更新寄存器的代码tiemr_load

我得到一个编译错误

我真的很感激任何帮助。

0 投票
2 回答
499 浏览

specman - Specman e:有没有办法扩展多种结构?

在我的验证环境中,我们使用vr_ad UVM包,其中有一个寄存器的通用结构,该结构vr_ad_reg已为环境中的每个寄存器扩展了不同的类型,等等:

具有预定义的vr_ad_reg功能post_access(),我想为每个以单词' TIMER'开头的寄存器类型扩展它。有没有办法做到这一点?例如:

谢谢您的帮助