访问内部模块(tb.dut.a.b)顶级tb级别的apb接口
Accessing internal modules(tb.dut.a.b) apb interface at top tb level
有什么方法可以将 apb master vip 连接到 dut 内部的内部模块,其中有 apb 信号。我想在这个深入的 dut 模块中编写一些寄存器。
我尝试连接一个接口并将其绑定到模块的深处,有点工作,但我必须将接口处的所有信号声明为 I/O,而我的模拟器不喜欢它,抛出很多关于多人驾驶的警告。
有没有其他干净的访问方式?
如果你要绑定的内部模块名称是固定的,你不需要绑定模块中的端口来通信。相反,您可以使用向上名称引用内部模块中的信号(请参阅 LRM 中的第 23.8 节)。
例如假设内部模块名称是im
,你要绑定的接口是bi
.
module im(whatever port list);
// internal signals
logic [15:0] data;
wire [15:0] add;
logic [15:0] memory[16];
...
endmodule
interface bi();//no ports needed
function void reset_memory;
foreach (im.memory[e]) im.memory[e] = 0;
endfunction
endinterface
有什么方法可以将 apb master vip 连接到 dut 内部的内部模块,其中有 apb 信号。我想在这个深入的 dut 模块中编写一些寄存器。
我尝试连接一个接口并将其绑定到模块的深处,有点工作,但我必须将接口处的所有信号声明为 I/O,而我的模拟器不喜欢它,抛出很多关于多人驾驶的警告。
有没有其他干净的访问方式?
如果你要绑定的内部模块名称是固定的,你不需要绑定模块中的端口来通信。相反,您可以使用向上名称引用内部模块中的信号(请参阅 LRM 中的第 23.8 节)。
例如假设内部模块名称是im
,你要绑定的接口是bi
.
module im(whatever port list);
// internal signals
logic [15:0] data;
wire [15:0] add;
logic [15:0] memory[16];
...
endmodule
interface bi();//no ports needed
function void reset_memory;
foreach (im.memory[e]) im.memory[e] = 0;
endfunction
endinterface