Interface 为包含接口的系统Verilog DUT创建Verilog包装器

Interface 为包含接口的系统Verilog DUT创建Verilog包装器,interface,verilog,wrapper,system-verilog,Interface,Verilog,Wrapper,System Verilog,基本上,我有一个系统verilog设计,我需要将它集成到verilog中的模拟框架中。所以我需要创建一个包装器以便与DUT接口,但在尝试这样做时遇到了问题 DUT的接口具有接口块以及其他输入和输出。DUT的接口如下图所示 interface ifc(input clk, input rst); logic [`DATA_WIDTH-1:0] data; logic valid; modport in( input dat

基本上,我有一个系统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”对象不一致。在我所看到的所有示例中,他们使用了一个用于Verilog DUT的SystemVerilog包装器,但我没有看到任何其他方法。甚至有可能用另一种方式来做吗?我将如何使用Verilog包装器中的接口实例化systemverilog模块


谢谢你的帮助

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

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

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

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

错误消息是否指向特定行?在修复了所有输入错误(缺失、、和)后,您的代码对我来说编译得很好。也许您在转录代码时遗漏了一些重要的内容。它编译得很好,但当我开始模拟时,它会给我那个错误消息。当我实例化DUT时,它指向.in0(if0.in)行,而不是为我这样做。请将您的示例编辑为独立的,并使用给定代码运行,
in0
out0
共享同一界面instacne。两个modport访问相同的变量,因此在
if0.data
上有多个驱动程序(来自modeport
out0
和assign语句),因此我又创建了两个接口,并将其分离到输入和输出接口,并对其进行了适当的分配。我仍然收到相同的错误,即“if0.in”的此用法或其他用法与'modport'对象不一致”。错误消息是否指向特定行?在修复了所有输入错误(缺失、、和)后,您的代码对我来说编译得很好。也许您在转录代码时遗漏了一些重要的内容。它编译得很好,但当我开始模拟时,它会给我那个错误消息。当我实例化DUT时,它指向.in0(if0.in)行,而不是为我这样做。请将您的示例编辑为独立的,并使用给定代码运行,
in0
out0
共享同一界面instacne。两个modport访问相同的变量,因此在
if0.data
上有多个驱动程序(来自modeport
out0
和assign语句),因此我又创建了两个接口,并将其分离到输入和输出接口,并对其进行了适当的分配。我仍然收到相同的错误,即“if0.in”的这个或另一个用法与'modport'对象不一致”。