【发布时间】:2016-06-03 22:20:08
【问题描述】:
基本上,我有一个系统 verilog 设计,我需要将它集成到 verilog 中的仿真框架中。因此,我需要创建一个包装器以便与 DUT 交互,但尝试这样做时遇到了问题。
DUT 的接口有一个接口模块以及其他输入和输出。 DUT 的接口如下所示
interface ifc(input clk, input rst);
logic [`DATA_WIDTH-1:0] data;
logic valid;
modport in(
input data,
input valid
)
modport out(
output data,
output valid
)
endinterface
DUT 使用这样的接口
module DUT(
ifc.in in0,
ifc.in in1,
ifc.out out0,
ifc.out out1,
output error);
....
endmodule
我创建了一个接口块的实例,并将相应的信号分配给接口,并将接口传递给 DUT。
module sim(input clk, input rst,
input in0, input in1,
input ivalid0, input ivalid1,
output out0, output out1
output ovalid0, output ovalid1 );
ifc if0(.clk(clk), .rst(rst));
ifc if1(.clk(clk), .rst(rst));
assign if0.data = in0;
assign if1.data = in1;
assign if0.valid = ivalid0;
assign if1.valid = ivalid1;
assign out0 = if0.data;
assign out1 = if1.data;
assign ovalid0 = if0.valid ;
assign ovalid1 = if1.valid ;
DUT dut(
.in0(if0.in),
.in1(if1.in),
.out0(if0.out),
.out1(if1.out)
);
endmodule
当我尝试在 Modelsim 中进行模拟时,我收到一个错误,即“if0.in”的此或其他用法与“modport”对象不一致。在我看到的所有示例中,他们使用 SystemVerilog 包装器来包装 Verilog DUT,但我没有看到任何其他方式。甚至可以反过来做吗?我将如何使用 Verilog 包装器中的接口实例化 systemverilog 模块。
感谢您的帮助。
【问题讨论】:
-
错误信息是否指向特定行?在修复所有拼写错误(缺少 ,'s 和 ;'s)后,你的代码对我来说编译得很好。也许您在转录代码时遗漏了一些重要的内容。
-
它编译得很好,但是当我开始模拟时,它给了我那个错误信息。当我实例化 DUT 时,它指向 .in0(if0.in) 行。
-
不适合我。请编辑您的示例,使其独立且可运行
-
使用给定的代码,
in0和out0共享相同的接口 instacne。两个 modport 访问相同的变量,因此if0.data上有多个驱动程序(来自 modeportout0和 assign 语句) -
于是我又创建了两个接口,分别为输入和输出接口,并进行了适当的分配。我仍然收到同样的错误,说“'if0.in' 的这种或其他用法与 'modport' 对象不一致”。
标签: interface verilog wrapper system-verilog