除了参数/ defparam和“定义方法”之外,是否有办法在Verilog中为变量赋予实例特定的值?

时间:2018-11-29 08:24:56

标签: verilog system-verilog

module top;
    m m1();
    m m2();
endmodule

module m;
    reg r;
    initial begin
        $display("%b", r);
    end
endmodule

我想要top.m1.rtop.m2.r的不同值。我们可以通过使用一个参数,然后在其上添加defparams来实现。但是还有其他方法吗?

2 个答案:

答案 0 :(得分:1)

您不能使用`define来执行此操作,因此不建议使用defparam。你可以做

module top;
    m #(0) m1();
    m #(1) m2();
endmodule

module m #(bit P);
    reg r = P;
    initial begin
        $display("%b", r);
    end
endmodule

答案 1 :(得分:0)

我认为使用描述为@ dave_59的参数是首选方法。但是,也可以在运行时使用带有分层引用的赋值语句:

module top;
    m m1();
    m m2();

    initial
      begin
        m1.r = 0;
        m2.r = 1;
      end
endmodule

module m;
    reg r;
    initial begin
        #0;
        $display("%b", r);
    end
endmodule

存在争用条件,因为由于initial语句,初始化和打印语句都在时间0发生。这就是为什么我不得不在打印之前先行#0延迟。