【发布时间】:2017-02-24 10:45:52
【问题描述】:
我编写了一个包含 3 个代理的 UVM 测试平台,现在正在编写记分板/检查器。我需要为我的 SystemVerilog 断言提供一个检查器模块,但是这个检查器模块需要知道从测试中完成的寄存器配置(并且可以是随机的,在测试的 run_phase 期间决定)。
我无法弄清楚这将如何工作?如果我要为我的断言创建一个检查器模块,并将其在顶层 (tb_top) 绑定到 dut,那么这个检查器模块如何知道我的寄存器配置?
在阅读了一些论文之后,我想我可以将我的 checker 模块编写为一个接口,将它设置在 tb_top 中。但这将允许访问我的 UVC 接口中的变量。接口如何访问 UVC 中的变量?
感谢任何帮助。我觉得我在这里遗漏了一些关键的东西,因为这可能已经做过很多次了。
编辑:请不要告诉我我必须实现某种 API 来设置我的 UVC 中的每个单独的寄存器设置?我只想获取我的 reg_block(或代理中的任何其他配置变量)的句柄
【问题讨论】:
-
即使你有
reg_block的句柄,你仍然不能在断言中使用它(很可能),因为你不允许在断言中使用类对象. -
@TudorTimi 是的,问题就在于此,我能想出的唯一解决方案是在我的断言接口(模块)中添加单独的位,然后将其作为虚拟接口传递到我的 UVC 中。然后每次我做一个 write_reg (例如),我也会去设置位 - > vif.my_reg_bit = value。对于大量寄存器,这可能会很快变得乏味。还有其他方法吗?很难相信我是唯一面临这个问题的人。
-
没错,你的断言不能使用类数据。您可以做的一件事是,您可以根据您的读/写总线事务编写寄存器断言(您将执行一些红/写总线级别事务以更新寄存器内容,并且您可以编写与前面的条件相同的条件你的断言)。
-
@KaranShah 好的,所以你的意思是在我的断言模块中为我的寄存器读/写协议实现一个解码器。知道了!但我想我会从我的 tb_top 写一点
-
您可能不需要实现解码器,我相信,您可以编写适当的先行序列,具体取决于您的总线事务
标签: system-verilog uvm