问题标签 [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 - UVM 阻塞分配竞争条件
我对 SystemVerilog 中的竞争条件有疑问,尤其是在 UVM 中。在标准情况下,我们有多个驱动程序在同一时钟前驱动我们的任务,在记分牌中生成一些函数调用。这些调用是同时进行的,它们检查/修改黄金参考模型中的一些共享变量是现实的。如果这些操作使用非阻塞赋值完成,则不会有问题,但使用阻塞赋值可能会出现竞争条件。克服这个问题的最佳方法是什么?实现不在一个类中的黄金参考模型?提前致谢
记分板的伪代码示例可能是:
当然结果取决于这两个函数的执行顺序,这是未知的。可以使用一些同步机制来解决,但是使用许多编写并行函数会变得更加困难。使用非阻塞赋值将使情况更加清晰和简单......也许解决方案是将 GRF 的所有成员都设为静态?
system-verilog - 在 UVM_Sequencer 运行阶段中获取事务
我想在我的 uvm_sequencer 的 run_phase 中获取事务以检查事务是否跨越 4KB 边界。如果他们跨越 4KB 边界,我想将该事务拆分为多个事务,然后将其发送给驱动程序。当收到来自驱动程序的响应时,所有拆分事务响应应合并回原始事务并返回到生成原始事务的序列。有没有办法做到这一点?uvm_sequencer 是否适合做这项工作?任何帮助将不胜感激。
编辑:
Tudor 的解决方案确实有效。我对他的代码(translation_sequence)添加了一些编辑,如下所示:
uvm - get_and_drive 来自哪里?
我发现几乎每个扩展的驱动程序uvm_driver
都有如下任务get_and_drive
。我检查了 uvm 源代码和 uvm_cookbook,但没有找到get_and_drive
. 看来这不是 uvm 规则;它更有可能是一个约定。谁首先使用了任务命名get_and_drive()
,为什么几乎所有人都get_and_drive
在他们的驱动程序中使用这个名称?
verilog - 在类中使用 Systemverilog 静态变量
我遇到了一个问题,希望有任何意见/建议:
我的测试台有一个代理,它具有以下组件: 基类 A- 它定义了两个静态变量- X 和 Y 两个新类 B 和 C,都从 A 扩展。它们都使用在基类中声明的静态变量. 另一个使用 B 和 C 做某事的 D 类。
假设 D 类是我的顶级代理,我称之为 bfm_agent。这个 bfm_agent 可以在我的测试台中多次实例化。现在的问题是,X 和 Y 将共享给所有 bfm_agent。我不想要那个。我只希望 X 和 Y 是静态的,以便每个 bfm_agent 中的类 B 和 C 可以使用这两个变量来做一些工作。
我怎样才能做到这一点?我只希望这两个静态变量的范围仅在 bfm_agent 的每个实例中有效。
vhdl - connecting VHDL port to system verilog interface definition in UVM
I am having this issues in the Cadence tool chain simulation when I try to connect the multidimensional user defined type in VHDL to SystemVerilog in a UVM environment. This is the VHDL output type definition:
One of the VHDL output ports in my DUT is of type loop_array_ty
;
I am trying to define the SystemVerilog equivalent as:
When I use irun
, I get the error:
VHDL port type is not compatible with Verilog.
Please suggest the possible work around solution.
oop - 类-endclass 定义中的类对象的含义是什么?
以下代码(第 2 行)在类 uvm_resource_pool 定义中创建实例(对象)rp 的含义是什么?
verilog - 工厂是如何在 UVM 内部实现的?
在UVM,工厂是最重要的。那么它是如何在里面实现的。意味着它如何存储各种对象并创建一个通用数据库。
我知道它有一些关联数组,一个以键作为对象名称,另一个以键作为对象类型。但是我不知道这2个数组如何构建数据库?即使我不知道我的信息是否正确。
还请列出一些工厂实现和修改的相关类。(就像 umv_resource 可能就是其中之一。)
system-verilog - 如何从另一个序列访问随机序列项?
我有一个测试台,其中有两个序列:sequenceA 和 sequenceB 及其对应的序列项(sqitemA 和 sqitemB)。sequenceA 被输入到我的 DUT 并随机生成 sqitemA 的值。
现在,我需要在 sqItemA 中访问其中一些生成的随机字段,以便为我的 sequenceB 创建相关的 sqItemB。
UVM 是否提供了一种机制来做到这一点?
例如:
关于最好的方法的任何线索?
verilog - 如何使用 UVM 工厂的 set_inst_override_by_name 覆盖序列项
我有两个序列项类a_packet
及其扩展类,称为bad_packet
. 默认情况下,a_packet
使用类型。试图用 覆盖a_packet
实例bad_packet
,我可以通过在我的 uvm 测试中使用 set_inst_override_by_name 成功地做到这一点,
现在我的问题是:如果我不想使用“*”怎么办,如何知道序列项实例的完整层次路径?
在驱动程序接收到它之后,我试图从序列项内部使用 get_full_name() 来了解确切的分层路径。它显示:
但是当我*
用上面的路径替换时,覆盖并没有发生。
我做错什么了吗?
system-verilog - 如何在复位时初始化时钟块信号
我一直在阅读UVM:驱动程序和程序分配警告的非法组合以及附在答案中的纸张。(请考虑提到的问题中链接的论文)
然而,驱动程序被实现来驱动接口信号而不是时钟块信号上的复位值,不能保证时钟在复位时运行。
那么,如果接口信号被声明为线,我该如何处理这种情况。
例如,考虑链接问题中的代码。一般情况是
即使在接口中将操作码声明为 net 也是正确的,因为时钟块将负责正确的分配。然而我不能说
因为我不能保证时钟复位。为了适应这一点,我将不得不改变时钟生成策略。
我也不能说
导致其非法使用带有网络类型信号的程序分配
另一种方法是门控信号声明为 net with reset 但我认为我必须在接口中声明临时信号。谁能详细说明如何在重置时实现驱动网?