- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的芯片中有一个小块的 UVM 测试台。其中有一个带有驱动程序的代理,该驱动程序在虚拟接口(interface)上驱动数据,如下所示:
interface my_if (input bit clk);
logic [3:0] opcode;
// Clocking block for the driver
clocking drvClk @(posedge clk);
output opcode;
endclocking
// Clocking block for the monitor
clocking monClk @(posedge clk);
input opcode;
endclocking
endinterface
我在我的驱动程序中这样使用这个接口(interface):
class my_driver extends uvm_driver #(my_tr);
my_if vif;
...
virtual task run_phase(uvm_phase phase);
super.run_phase(phase);
forever begin
seq_item_port.get_next_item(req);
// Drive the transaction onto the interface
// and wait for next clock
vif.opcode <= req.opcode;
@(vif.drvClk);
seq_item_port.item_done();
end
endtask
endclass
据我所知,这是推荐的做事方式,而且效果很好。当我将此代理集成到更高级别的测试平台时,就会出现问题。在这种情况下,代理现在是被动的,并且驱动程序未构建。我将操作码值分配给接口(interface),以便监视器可以观察它。这是我的顶级线束的片段:
module my_top();
bit clk = 0;
always #5 clk = !clk;
// instantiate the interface
my_if my_if_inst(.clk(clk));
// instantiate my dut
my_dut dut(...);
// pull out the internal opcode signal and assign it
// to the interface
assign my_if_inst.opcode = dut.submodule.opcode;
// Set the virtual interface inside the agent
initial begin
uvm_config_db#(virtual my_if)::set(uvm_root::get(),"uvm_test_top.tb.env.my_agent", "vif", my_if_inst);
end
endmodule
当我在 NC 中运行它时,我收到一条警告:
ncelab: *W,ICPAVW: Illegal combination of driver and procedural assignment to variable opcode detected (output clockvar found in clocking block)
这是有道理的,因为接口(interface)将此信号定义为 drvClk block 的输出,而我正在顶层进行分配。我可以忽略这个警告(代码工作得很好),但我宁愿以它运行干净的方式对其进行编码。推荐的方法是什么?我摆脱了驱动程序的时钟模块,这很有效,但我认为如果我这样做,我会为比赛条件做好准备。
最佳答案
简单;在您的界面中使操作码成为 wire
。
像对待双向信号一样对待操作码。见我的DVCon paper关于这个问题。
关于system-verilog - UVM:驱动程序和程序分配的非法组合警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19249860/
在我的 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
我是一名优秀的程序员,十分优秀!