gpt4 book ai didi

system-verilog - UVM 虚拟音序器 : choose the right child sequencer

转载 作者:行者123 更新时间:2023-12-04 06:44:01 34 4
gpt4 key购买 nike

我对 UVM 中的虚拟音序器有疑问。假设我有 N 个由 N 个相等的驱动程序驱动的接口(interface),每个接口(interface)都连接到自己的音序器。我想要做的是进行如下交易:

    class my_transaction extends uvm_sequence_item;
logic data;
int num_if;
endclass

当用 `uvm_do() 执行时被发送到驱动程序编号 num_if。我的想法是,对于这种工作,我需要一个虚拟排序器,将事务“转发”到正确的排序器(编号 num_if)。这是正确的吗?如果是,那该怎么做?谢谢。

最佳答案

虽然 Tudor 的答案在技术上可行,但从概念上讲,决定在哪个接口(interface)上运行 (num_if) 的值不应属于事务,而应属于调用它的序列(当然也应该是随机的).交易应该只包含从 A 到 B 的值(value)的表示以及它为该协议(protocol)传播的方式。 A 和 B 的规范通常不在交易的责任范围内。

在这种情况下,您的交易和 Tudor 序列的变体如下所示:

class my_transaction extends uvm_sequence_item;
rand logic data;
endclass

..和..

class some_virtual_sequence extends uvm_sequence;
`uvm_declare_p_sequencer(virtual_seqr)
rand int num_if; constraint.....
task body();
my_transaction trans = my_transaction::type_id::create("my_transaction");
start_item(trans, , p_sequencer.seqrs[num_if]);
trans.randomize(); // randomization should be done after start_item()
finish_item(trans);
endtask
endclass

..像 Tudor 所说的那样在虚拟音序器上运行:

class virtual_seqr extends uvm_sequencer;
my_sequencer seqrs[10];
endclass

上述方法还让随机化发生在正确的位置:在 start_item() 返回之后和调用完成序列项的 finish_item() 之前。

关于system-verilog - UVM 虚拟音序器 : choose the right child sequencer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26893797/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com