【问题标题】:Creating a Verilog wrapper for System Verilog DUT that contains an interface为包含接口的系统 Verilog DUT 创建 Verilog 包装器
【发布时间】: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) 行。
  • 不适合我。请编辑您的示例,使其独立且可运行
  • 使用给定的代码,in0out0 共享相同的接口 instacne。两个 modport 访问相同的变量,因此 if0.data 上有多个驱动程序(来自 modeport out0 和 assign 语句)
  • 于是我又创建了两个接口,分别为输入和输出接口,并进行了适当的分配。我仍然收到同样的错误,说“'if0.in' 的这种或其他用法与 'modport' 对象不一致”。

标签: interface verilog wrapper system-verilog


【解决方案1】:

您的 DUT 实例化语法不正确。当你用接口实例化一个模块时,你只需连接接口。您不包括 modport。试试这个:

DUT dut(
    .in0(if0),
    .in1(if1),
    .out0(if0),
    .out1(if1)
);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多