Vhdl 带inout端口的systemverilog接口周围的verilog包装器

Vhdl 带inout端口的systemverilog接口周围的verilog包装器,vhdl,verilog,Vhdl,Verilog,我刚从micron下载了一个DDR4接口的行为模型。令我惊讶的是,他们将端口完全转换为系统接口,这在将此模型与Verilog或VHDL的混合语言模拟接口时产生了问题 我的问题是。如何围绕包含inout端口的DDR4 SystemVerilog接口创建verilog或VHDL包装器?下面是我尝试做的一个例子: //SystemVerilog Interface interface micron_ddr4_if(); wire [7:0] DQ; wire DQS_t;

我刚从micron下载了一个DDR4接口的行为模型。令我惊讶的是,他们将端口完全转换为系统接口,这在将此模型与Verilog或VHDL的混合语言模拟接口时产生了问题

我的问题是。如何围绕包含inout端口的DDR4 SystemVerilog接口创建verilog或VHDL包装器?下面是我尝试做的一个例子:

//SystemVerilog Interface
interface micron_ddr4_if();
   wire [7:0]  DQ;
   wire        DQS_t;
   wire        DQS_c;

   modport  system (inout DQ, DQS_t, DQS_c);

endinterface

// System Verilog Module
module micron_ddr4_model(
    micron_ddr4_if  ddr4_if
);
    // ...
endmodule

// Convert SystemVerilog Interface into Verilog Interface
module my_verilog2001_wrapper(
   inout wire [7:0]  DQ,
   inout wire        DQS_t,
   inout wire        DQS_c
);
   micron_ddr4_if     ddr4_if();

   micron_ddr4_model  ddr4_model(ddr4);

   // How to connect this part?
   //
   //   DQ      <=> ddr4_if.DQ;
   //   DQS_t   <=> ddr4_if.DQS_t;
   //   DQS_c   <=> ddr4_if.DQS_c;
   //
endmodule
//SystemVerilog接口
接口micron_ddr4_if();
导线[7:0]DQ;
电线DQS_t;
电线DQS_c;
modport系统(输入DQ、输出DQS_t、输出DQS_c);
端接口
//系统Verilog模块
模块micron\u ddr4\u型号(
微米ddr4如果ddr4如果
);
// ...
端模
//将SystemVerilog接口转换为Verilog接口
模块my_verilog2001_包装器(
输入输出导线[7:0]DQ,
输入输出导线DQS\U t,
inout导线DQS\U c
);
微米ddr4如果ddr4如果();
微米ddr4型ddr4型(ddr4);
//如何连接此部件?
//
//DQ ddr4_if.DQ;
//DQS_t ddr4_if.DQS_t;
//DQS_c ddr4_if.DQS_c;
//
端模

您可以使用端口表达式。人们在模块实例上看到了这种语法,但没有意识到他们也可以在端口声明中使用它

module my_verilog2001_wrapper(
   inout .DQ(ddr4_if.DQ),
   inout .DQS_t(ddr4_if.DQS_t),
   inout .DQS_c(ddr4_if.DQS)
);
   micron_ddr4_if     ddr4_if();

   micron_ddr4_model  ddr4_model(ddr4_if);

endmodule

您显示的接口代码不应该工作。不能使用变量对双向输入输出端口建模。它们必须是电线。酷,那是SystemVerilog功能,还是Verilog-95功能?那是Verilog-1986功能。
module my_verilog2001_wrapper(
   inout .DQ(ddr4_if.DQ),
   inout .DQS_t(ddr4_if.DQS_t),
   inout .DQS_c(ddr4_if.DQS)
);
   micron_ddr4_if     ddr4_if();

   micron_ddr4_model  ddr4_model(ddr4_if);

endmodule