System verilog SystemVerilog接口多路复用器

System verilog SystemVerilog接口多路复用器,system-verilog,System Verilog,我是systemverilog的新手,正在尝试构建systemverilog测试台。 我有一个DUT,应该通过多路复用器连接到两个外部模块之一。我想在模拟过程中切换连接,我想使用systemverilog接口连接DUT和多路复用器,以及多路复用器和两个外部模块之间的连接。接口中的信号是双向的 我在写多路复用器时遇到了麻烦。对于当前的实现,我得到一个错误,表达式的LHS不能是导线。如果我将接口中的类型更改为logic,我会得到一个错误,即双向信号不可能实现这一点。 我试着用谷歌搜索,但没有找到任何

我是systemverilog的新手,正在尝试构建systemverilog测试台。 我有一个DUT,应该通过多路复用器连接到两个外部模块之一。我想在模拟过程中切换连接,我想使用systemverilog接口连接DUT和多路复用器,以及多路复用器和两个外部模块之间的连接。接口中的信号是双向的

我在写多路复用器时遇到了麻烦。对于当前的实现,我得到一个错误,表达式的LHS不能是导线。如果我将接口中的类型更改为logic,我会得到一个错误,即双向信号不可能实现这一点。 我试着用谷歌搜索,但没有找到任何关于连接界面的教程。这不可能吗?还是有更好的方法来做我想做的事情

到目前为止,我有以下几点:

interface flash_connect_interface;
  wire interface_f_cle;
  wire interface_f_ale;
endinterface: flash_connect_interface


module flash_connect_testbench_top;     
[...]  
  // Interfaces
  flash_connect_interface flash_connect_interface_i0();
  flash_connect_interface flash_connect_interface_i1();
  flash_connect_interface flash_connect_interface_i2();

  // Connecting DUT to interface
  flash_connect flash_connect_i0(  
  .flash_connect_interface_i(flash_connect_interface_i0),
  );

  // Multiplexer  
  flash_connect_mux mux1(
  .flash_connect_interface_i_0(flash_connect_interface_i0),
  .flash_connect_interface_i_1(flash_connect_interface_i1),
  .flash_connect_interface_i_2(flash_connect_interface_i2),   
  .select(sel) 
  );

  nand_model nand_model0 (
        .Cle      (flash_connect_interface_i1.interface_f_cle),
        .Ale      (flash_connect_interface_i1.interface_f_ale),
        );

  nand_model nand_model1 (
        .Cle      (flash_connect_interface_i2.interface_f_cle),
        .Ale      (flash_connect_interface_i2.interface_f_ale),
        );  
[...]   
endmodule // end testbench_top



module flash_connect_mux(
  flash_connect_interface flash_connect_interface_i_0,
  flash_connect_interface flash_connect_interface_i_1,
  flash_connect_interface flash_connect_interface_i_2,
  input select 
  );

  always_comb begin
    // *** Here is the problem ***  
    if (select == 1'b0) flash_connect_interface_i_1 = flash_connect_interface_i_0;    
    else flash_connect_interface_i_2 = flash_connect_interface_i_0;   
  end

endmodule

本例中的接口只是一捆电线。你的代码似乎没有什么明显的错误。但是,如果您试图根据select信号将接口直接分配给彼此,它将不起作用。您需要根据选择信号分别指定所有导线。mux接口没有什么特殊之处

下面的代码执行muxing

interface flash_connect_interface;
  wire interface_f_cle;
  wire interface_f_ale;
endinterface: flash_connect_interface

module nand_model ( inout Cle , inout Ale ) ; // Sample nand model 

reg r = 1;
assign Cle = r?1:1'bz;
assign Ale = r?1:1'bz;

endmodule

module   flash_connect_mux  ( flash_connect_interface  flash_connect_interface_i_0 , flash_connect_interface flash_connect_interface_i_1 , flash_connect_interface 

flash_connect_interface_i_2 ,input [3:0] select ) ;
  // Interconnect interface assignment 
     assign flash_connect_interface_i_0.interface_f_cle = (select== 0)  ? flash_connect_interface_i_1.interface_f_cle : flash_connect_interface_i_2.interface_f_cle;
     assign flash_connect_interface_i_0.interface_f_ale =  (select== 0) ? flash_connect_interface_i_1.interface_f_ale : flash_connect_interface_i_2.interface_f_ale;
endmodule

  module flash_connect ( flash_connect_interface flash_connect_interface_i )  ;

        //check  flash_connect_interface_i.interface_f_cle ;
        //check  flash_connect_interface_i.interface_f_ale ;
  endmodule

module flash_connect_testbench_top;

reg [3:0] select ;
  // Interfaces
  flash_connect_interface flash_connect_interface_i0();
  flash_connect_interface flash_connect_interface_i1();
  flash_connect_interface flash_connect_interface_i2();

  // Connecting DUT to interface
  flash_connect flash_connect_i0(
  .flash_connect_interface_i(flash_connect_interface_i0)
  );

  // Multiplexer
  flash_connect_mux mux1(
  .flash_connect_interface_i_0(flash_connect_interface_i0),
  .flash_connect_interface_i_1(flash_connect_interface_i1),
  .flash_connect_interface_i_2(flash_connect_interface_i2),
  .select(select)
  );

  nand_model nand_model0 (
        .Cle      (flash_connect_interface_i1.interface_f_cle),
        .Ale      (flash_connect_interface_i1.interface_f_ale)
        );

  nand_model nand_model1 (
        .Cle      (flash_connect_interface_i2.interface_f_cle),
        .Ale      (flash_connect_interface_i2.interface_f_ale)
        );

endmodule // end testbench_top
链接到界面教程-

感谢您的评论,但不幸的是,代码并没有完全满足我的要求:所有信号都是双向的。在我的模拟中,我可以看到以下内容:对于select=0,flash\u connect\u interface\u I\u 1.interface\u cle上的所有更改都会传递给flash\u connect\u interface\u I\u 0.interface\u cle。但不是相反,使连接不再是双向的。在双向信号的情况下,通常有限定信号,用于触发总线方向的变化。我们也可以在模型中使用它来做类似的事情。你的意思是将此功能添加到多路复用器中吗?类似于:if(dir=0)assign interface_i_1.interface_f_cle=interface_i_0.interface_f_cle else assign interface_i_0.interface_f_cle=interface_i_1.interface_f_cle是这样的