在SV / UVM中强制设计多条线

时间:2017-10-04 09:38:18

标签: verilog system-verilog verification uvm system-verilog-dpi

我是System Verilog和UVM的新手,我已经看过这个帖子了:

Regex in SV or 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。

2 个答案:

答案 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' (来自模块内部: - ))