- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的 Testbench 中,我有一个需要驱动的接口(interface)。该接口(interface)可以在 2 种不同的模式下驱动,每种模式都有自己的驱动程序协议(protocol)和事务类型。
到目前为止,我已经分别设计了两个 uvm_agents。现在,我需要一种方法来交换一个或另一个,这取决于我正在运行的测试用例。我也想以最符合 UVM 哲学的方式来做这件事。
我能想出的最好方法是:在我的 uvm_env 中,从测试中获取一个 uvm_db_config 参数,该参数表示“ModeA”或“ModeB”,并基于此将代理的 is_active 设置为“UVM_ACTIVE”和适当的“UVM_PASSIVE”。
我想对这种方法发表意见。
向我建议的一种方法是保留一个通用的 uvm_agent,并根据配置实例化 uvm_driver/uvm_sequencer。不太确定这种方法,因为它看起来很乱。
最佳答案
我还建议像 Tudor 一样,只使用一种代理。但随后我会使用继承,声明一个 base_driver 和一个 base_sequencer(它们可能具有来自 ModeA 或 ModeB 驱动程序和/或定序器的共同功能),而 ModeA 和 ModeB 单元将扩展这些基本单元。然后,在代理中,并在每个测试中使用 uvm_config_db 中的标志集,您可以在实例化一个或另一个之间进行选择:
基本驱动程序:
class my_proj_base_driver extends uvm_driver#(my_proj_tr);
[...]
A 模式驱动程序:
class my_proj_ModeA_driver extends my_proj_base_driver;
[...]
ModB 驱动程序:
class my_proj_ModeB_driver extends my_proj_base_driver;
[...]
在代理中:
[...]
my_proj_base_driver driver;
bit modeAorB // 0 for A, 1 for B
[...]
if (!uvm_config_db#(bit)::get(this,"","modeAorB", modeAorB))
`uvm_fatal("NOMODE","No mode set for this agent")
if(!modeAorB)
driver = my_proj_ModeA_driver::type_id::create(.name("driver"), .parent(this));
else
driver = my_proj_ModeB_driver::type_id::create(.name("driver"), .parent(this));
对于音序器也是如此。
关于system-verilog - UVM testbench - 将两个不同的驱动程序连接到同一接口(interface)的 "UVM"方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23898090/
在我的 Testbench 中,我有一个需要驱动的接口(interface)。该接口(interface)可以在 2 种不同的模式下驱动,每种模式都有自己的驱动程序协议(protocol)和事务类型。
您能否帮助理解以下功能和之间的明显区别: uvm_analysis_export uvm_analysis_port uvm_analysis_imp 我在网上查了一下,有一些解释,比如: https
我对UVM有疑问。假设我有一个带有两个接口(interface)的 DUT,每个接口(interface)都有它的代理,用相同的时钟生成事务。这些事务由记分板上的分析导入(和写入函数)处理。我的问题是
我的芯片中有一个小块的 UVM 测试台。其中有一个带有驱动程序的代理,该驱动程序在虚拟接口(interface)上驱动数据,如下所示: interface my_if (input bit clk);
我对 SystemVerilog 中的竞争条件有疑问,尤其是在 UVM 中。在标准情况下,我们拥有多个驱动程序,它们在时钟的同一前端驱动我们的任务,在记分板中生成一些函数调用。这些调用是同时发生的,它
我有以下代码块,其中触发了语法错误: virtual task body(); forever begin my_transaction m_req; // Blockin
是否有一种简单的方法可以在不操作 UVM 库的情况下将自定义函数搭载到 UVM_ERROR 宏中?(即,每当在环境中的任何位置调用 UVM 错误时,我希望我的函数一起被调用与它。) 最佳答案 我自己还
我在 uvm_agent 中实现了一个从模型。 “奴隶”是指它不能自己发起交易。事务始终由另一方(主 DUT)发起。所以它是一种被动代理(尽管它仍然能够传输回复数据包)。 当从设备检测到来自 DUT
对于使用 `uvm_field_queue_int 实用程序宏的 UVM 对象,调用 my_object.print() 时,UVM 不会打印出整个队列 # ---------------------
对于使用 `uvm_field_queue_int 实用程序宏的 UVM 对象,调用 my_object.print() 时,UVM 不会打印出整个队列 # ---------------------
我在 uvm-systemc-1.0-alpha1 库的 objdir 中的 make check 中遇到以下错误。 ../configure make make install 命令工作正常。另外,
我需要调用哪些函数才能在 Systemverilog/UVM 中使用正则表达式? 注意:我不是问如何使用正则表达式,只是问方法名。 最佳答案 首先,如果您想使用正则表达式,您需要确保您使用的是与其 D
我正在阅读以下指南: https://colorlesscube.com/uvm-guide-for-beginners/chapter-3-top-block/ 代码 3.2 第 24 行- run
我正在阅读以下指南: https://colorlesscube.com/uvm-guide-for-beginners/chapter-3-top-block/ 代码 3.2 第 24 行- run
我有一个用 RAL 建模的大寄存器映射,我想随机化一些寄存器。如果我想单独限制寄存器,那么这很简单: reg_model.register_a.randomize() with {value > 5;
我对 UVM 中的虚拟音序器有疑问。假设我有 N 个由 N 个相等的驱动程序驱动的接口(interface),每个接口(interface)都连接到自己的音序器。我想要做的是进行如下交易: c
我在 DUT 中有 5 个 SRAM 实例(== 5 个不同的二维数组)(全部在 verilog 中)。我想从 UVM 测试平台对这些阵列进行后门加载。 SRAM 阵列上有多个驱动程序,来自 DUT
我正在为 e 使用 vr_ad 包。我在 vr_ad_reg_file my_reg_file 中定义了一个寄存器 my_reg: reg_def MY_REG MY_REG_FILE 20'h000
我正在寻找方法来禁用 side uvm 组件中的断言以进行某些测试。下面的简单代码代表我的环境,并附有要求注释。我以为我可以使用 $assertoff。如果需要额外的仪器来实现这一点,我可以修改 uv
我从 Intel 下载了 Modelsim,免费版(Modelsim-Intel FPGA 版)。免费版本是 Ubuntu 64 位 LTS 上的 32 位 Modelsim 版本。我通过安装 apt
我是一名优秀的程序员,十分优秀!