我们可以将一个 uvm_reg_map 连接到多个音序器吗

Can we have one uvm_reg_map connected to multiple sequencers

我遇到的情况是 uvm_reg_block 中有大约 100000 个寄存器。我有三个驱动程序可以将事务驱动到这些寄存器。根据标准 UVM RAL 方法,我知道我们需要三个独立的 uvm_reg_maps 连接到三个定序器和驱动器。问题是复制所有三个 uvm_reg_maps 中的寄存器,这占用 CPU 时间到 运行。甚至进入数据阶段也需要一个小时。你能帮我解决这个问题吗?有没有办法将所有三个音序器连接到一个 uvm_reg_map 并根据参数以某种方式决定它应该选择哪个物理音序器?

提前致谢

据我所知,你不能。如果一个reg map可以连接多个sequencer,那以后怎么选择连接哪个sequencer运行?此外,对于每个添加的 reg 映射,其句柄将通过 map.add_reg() 存储在 uvm_reg 的 m_maps 数组中。并不是每个地图都会创建自己的寄存器,所以寄存器不会重复。

一个uvm_reg_map只能与一个音序器一起工作。

您提到创建多个 reg 映射太慢,因为 add_reg(...)。可以将寄存器映射规范方面(寄存器在什么地址)与定序器方面分开。为此,您需要一个 uvm_reg_map 实例来执行 add_reg(...) 调用。我们称其为 规范图 。对于每个你想要驱动寄存器访问的音序器,你需要另一个 uvm_reg_map (sub-class) 以某种方式指向 规范映射 。我们称这些驾驶地图

目前我没有关于如何执行此操作的任何代码。人们需要查看其他代码如何调用 uvm_reg_map 并覆盖这些函数。他们不会调用 uvm_reg_map 中的实现来处理自己的寄存器存储,而是指向 规范映射 并使用 get_reg(...) 等询问它。如果未在 uvm_reg_map 中声明函数 virtual,这可能不起作用。 UVM 倾向于使扩展变得不可能,因为代码依赖于实现而不是抽象。

另一种方法是创建一个使用所有这 3 个 sequencer/agent 的驱动程序。(我们称之为 reg_driver) reg_driver 将有一个获得通用 reg 的音序器。交易。 从给定的 运行 时间开关,select 接口的 reg 序列驱动内部特定事务 reg_driver。