问题标签 [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.
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
verilog - SVA:是否可以从后续方面禁用 SV 属性检查?
我有一个 SV 属性如下:
我有如下断言:
在上述属性中,我有信号s_of在整个检查过程中不应断言该信号。但这里的情况是,这个信号s_of在蕴含运算符的结果过程中被断言。因此,我的要求是禁用检查,即使在后续语句中断言了信号s_of也是如此。有没有办法做到这一点?
谢谢。
ruby - Ruby 和 SystemVerilog DPI
System Verilog 中的 DPI 功能总是提到您可以将其与任何语言交互,最常见的是 C/C++。我想将我的系统 Verilog 代码与 Ruby 接口。是否有任何文档或支持此功能?任何已知的方法来做到这一点?
我应该补充一点,我的主要目标是从我的系统 Verilog uvm 测试中调用一个 ruby 脚本。
谢谢
arrays - UVM:如何在虚拟接口中连接多维数组?
我在 DUT 中有 5 个 SRAM 实例(== 5 个不同的二维阵列)(全部在 verilog 中)。我想从 UVM 测试台对这些阵列进行后门加载。SRAM 阵列上有多个驱动程序,来自 DUT 本身或来自测试平台(来自测试平台主要是使用 $readmemh 进行后门访问)。现在,我想要将这些数组处理到 UVM 测试台中。因此,我创建了一个具有本地内存阵列的虚拟接口并实例化了 5 次接口。问题是,如何将 DUT SRAM 阵列与虚拟接口中的阵列连接起来?我需要建立一个弱连接,以便在 DUT 驱动阵列时不会发生争用。
谁能建议如何在 UVM 测试台中连接多维数组并且没有强大的驱动程序?
verilog - 如何在测试序列中使用 uvm_test_done 反对?
我正在我的 UVM 测试平台中进行以下操作以创建 seq 并开始测试。
- 我有一些序列。我正在从以下序列之一复制代码片段。
内部主体():
2.在我的测试中,我正在执行以下操作来开始一个序列:
现在,如果我这样做,测试将在零时间开始和结束。我的意思是,DUT 不是由我的序列驱动的。如果我进行以下更改,那么它似乎工作正常:
选项1:在测试中更改run_phase-
如果我这样做,则测试开始,我可以看到 DUT 正在被驱动,并且一切都按预期工作。然而,测试总是在时间 1000000 结束——即使序列尚未完成,将所有事务发送到 DUT。这不好,因为我不知道我的 DUT 需要多长时间才能完成测试。所以,我宁愿尝试这样的事情:
选项 2:在测试中保留默认代码(不在 run_phase 中添加延迟)。在 my_seq 的主体内进行以下更改:
内部主体():
如果我这样做,那么它工作正常。这是处理异议的正确方法吗?回到我原来的实现,我假设我的序列是阻塞的。因此,每当我使用 start(...) 在 test 的 run_phase 中启动一个序列时,它将被视为阻塞,并将在该行等待,直到序列完成发送所有事务。所以,我没有在我的原始代码中添加任何延迟。
我想我在这里遗漏了一些东西。任何帮助将不胜感激。
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 值,它可以满足我的期望,并在总线上有一些额外的开销
system-verilog - 你如何初始化uvm_mem?
someinputdata.txt
假设我有一个要加载到基于 uvm 的内存中uvm_reg_block
的输入文件(
我不确定是否有内置函数可以将输入文件加载到uvm_mem
.
你如何有效地加载someinputdata.txt
到这个内存?
verification - 使用时钟模块时的输出偏差
我在接口中使用时钟块进行信号混叠。我想将一些位连接在一起形成一个总线,然后从我的驱动程序驱动这个总线。因此,例如:
现在的问题是,在我的一个断言中,我需要阅读bus_intf.driver_bus.x_bus。如 SV 手册中所述,测试平台不应读取时钟块的输出变量,如果是,则模拟器会吐出错误(或在我的情况下发出警告)。
于是我修改了界面:
现在的问题是,在我的波形中,我看到创建了两个信号 - x_bus和x_bus__o。我理解 Questasim 这样做的原因——它是为了将inout声明分开,以便我可以查看两个版本。然而,现在的问题是我所有的时钟驱动都延迟了一个时钟周期!因此连接到 DUT 的x_bus__o比x_bus晚一个时钟周期。尽管我明确指出输出偏斜为#0,但还是如此。
知道为什么会这样吗?我做错了什么还是我误解了?
specman - Specman UVM:当值被写入另一个寄存器时,如何更新寄存器的值?
(在我的验证环境中,我们使用vr_ad
包。)。我尝试实现下一个:当数据写入其中一个寄存器 ( timer_load
) 时,另一个寄存器 ( timer_bgload
) 应该使用相同的数据进行更新。
我在 UVM 用户指南中找到了下一个示例:
我的寄存器:
我timer_bgload
在数据写入后更新寄存器的代码tiemr_load
:
我得到一个编译错误:
我真的很感激任何帮助。
specman - Specman e:有没有办法扩展多种结构?
在我的验证环境中,我们使用vr_ad
UVM
包,其中有一个寄存器的通用结构,该结构vr_ad_reg
已为环境中的每个寄存器扩展了不同的类型,等等:
具有预定义的vr_ad_reg
功能post_access()
,我想为每个以单词' TIMER
'开头的寄存器类型扩展它。有没有办法做到这一点?例如:
谢谢您的帮助