Verilog 如何访问模块内的内部注册表?

Verilog 如何访问模块内的内部注册表?,verilog,system-verilog,Verilog,System Verilog,我在Verilog中有这样的架构/拓扑: 如何在SystemVerilog中访问内部regIntReg,它不是IntModule中的输入/输出 always @(posedge clk) begin $display ("[Time %0t ps] IntReg value = %x", $time, DUT.IntModule.IntReg); end 我能用bind吗?如何使用?是的,您可以将界面与绑定一起使用: // Interface interface my_if( i

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

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

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

我能用bind吗?如何使用?

是的,您可以将
界面
绑定
一起使用:

// Interface
interface my_if(
  input IntReg
);
endinterface: my_if

// Interface bind
bind intModule my_if my_if0(
  .IntReg(IntReg)
);
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
然后按如下方式访问寄存器:

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

在EDA游乐场上使用sim结果完成示例:

您不需要使用
bind

// Interface
interface my_if(
  input IntReg
);
endinterface: my_if

// Interface bind
bind intModule my_if my_if0(
  .IntReg(IntReg)
);
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