【问题标题】:How do I access an internal reg inside a module?如何访问模块内的内部 reg?
【发布时间】:2013-08-27 19:20:07
【问题描述】:

我在 Verilog 中有这个架构/拓扑:

如何在 SystemVerilog 中访问不是 IntModule 中的输入/输出的内部 reg IntReg

always @(posedge clk) begin
    $display ("[Time %0t ps] IntReg value = %x", $time, DUT.IntModule.IntReg);
end

我可以使用绑定吗?怎么样?

【问题讨论】:

    标签: verilog system-verilog


    【解决方案1】:

    你不需要使用bind:

    module DUT;
    bit clk;
    initial begin
        repeat (5) begin
            #5 clk = 0; 
            #5 clk = 1;
        end
    end
    
    always @(posedge clk) begin
        $display ("[Time %0t ps] IntReg value = %x", $time, DUT.IntModule.IntReg);
    end
    
    IntModule IntModule ();
    endmodule
    
    module IntModule;
        reg IntReg = 1;
    endmodule
    

    输出:

    [Time 10 ps] IntReg value = 1
    [Time 20 ps] IntReg value = 1
    [Time 30 ps] IntReg value = 1
    [Time 40 ps] IntReg value = 1
    [Time 50 ps] IntReg value = 1
    

    【讨论】:

      【解决方案2】:

      是的,您可以将interfacebind 一起使用:

      // Interface
      interface my_if(
        input IntReg
      );
      endinterface: my_if
      
      // Interface bind
      bind intModule my_if my_if0(
        .IntReg(IntReg)
      );
      

      然后像这样访问寄存器:

      virtual my_if _if = top.DUT.IntModule.my_if0;
      $display ("[Time %0t ps] IntReg value = %x",
        $time, _if.IntReg);
      

      EDA Playground 上带有 sim 结果的完整示例:http://www.edaplayground.com/s/4/115

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-01
        • 2018-05-20
        • 2015-03-26
        • 1970-01-01
        • 2017-03-18
        相关资源
        最近更新 更多