我是System Verilog和UVM的新手,我已经看过这个帖子了:
我找不到任何适当的示例,我应该使用什么样的语法来强制设计中的多条线路,使用正则表达式/通配符。
例如:
假设我有一个名为my_fifo的模块,它在设计中多次实例化:
top.dut.my_fifo_in
top.dut.master.my_fifo_a
top.dut.slave.axi.my_fifo_out
块my_fifo包含一条名为:
的电线wire force_me_to_1 = 1'b0;
我想在以“my_fifo”开头的所有实例中强制连接。 有点像(请原谅我的语法,只是为了澄清我的意图):
force "*my_fifo*.force_me_to_1" = 1'b1;
并且它会在以上所有情况下将该线连接到1。
答案 0 :(得分:3)
有两种方法可以实现您想要做的事情:使用VPI或使用工具的命令行界面。
这两种方法都涉及编写一种算法,该算法迭代整个设计中的所有实例,并选择与正则表达式匹配的名称。获得选定实例后,可以使用C中的VPI调用或工具命令(通常为Tcl)应用单独的force命令。解释如何做到这一点在本论坛中涵盖的主题过于宽泛。
这两种方法都要求您转动某些工具优化,以保留您要强制使用的信号名称。这可能是严重的性能损失。因此,您应该研究您的方法的替代方案。
答案 1 :(得分:1)
没有直接的方法来做你想做的事情,但是你可以在你的案例中探索一些技巧。
据说在顶级实例中的某个位置定义了一个标志,例如 force_me
module tb_top;
bit force_me = 0;
...
endmodule
在您的模块中,您可以编写类似于流动的内容:
module my_fifo;
logic force_me_to_1;
always @(tb_top.force_me) begin
if (tb_top.force_me)
force force_me_to_1 = 1;
else
release force_me_to_1;
end
..
endmodule
现在在您的测试平台中,您应该可以说
tb_top.force_me = 1;
...
tb_top.force_me = 0;
这应该强制模块的所有实例中的信号' my_fifo' (来自模块内部: - ))