【问题标题】: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】:
是的,您可以将interface 与bind 一起使用:
// 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