2016-08-19 10 views
1

私はsystemverilogが初めてで、システムのテストベンチを構築しようとしています。 私はマルチプレクサを介して2つの外部モジュールのうちの1つに接続されるべきDUTを持っています。私はシミュレーション中に接続を切替えたいと思っています。私は、DUTとマルチプレクサ間の接続と、マルチプレクサと2つの外部モジュール間の接続のためにsystemverilogインターフェイスを使いたいと思います。インタフェースの信号は双方向です。SystemVerilogインターフェースマルチプレクサ

マルチプレクサの書き込みに問題があります。現在の実装では、式のLHSが線になれないというエラーが発生しています。インターフェイスのタイプをロジックに変更すると、双方向信号では不可能であるというエラーが表示されます。 私はGoogleにしようとしましたが、インターフェースに接続するためのチュートリアルは見つかりませんでした。これは不可能ですか?それとも、私がやろうとしていることをするための良い方法がありますか?この場合

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 

答えて

1

インタフェースはちょうど電線の束されています

は、これまでのところ、私は次のよう持っています。明らかにあなたのコードに間違いはないようです。しかし、セレクト信号に基づいてお互いにインターフェイスを直接割り当てようとしている場合、動作しません。選択信号に基づいてすべてのワイヤを個別に割り当てる必要があります。マルチプレクサインタフェースには特別なものはありません。

次のコードは、多重化を行います。

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 

リンクチュートリアルをインタフェースする - https://www.doulos.com/knowhow/sysverilog/tutorial/interfaces/

+0

コメントありがとうございました、しかしunforunatelyコードが完全にdoesn't私がやりたい:すべての信号がbidicrectionalです。私のシミュレーションでは、次のことが分かります:select = 0の場合、flash_connect_interface_i_1.interface_f_cleのすべての変更はflash_connect_interface_i_0.interface_f_cleに渡されます。しかし、それ以外の方法では、接続はもう双方向ではありません。 – Antonio

+0

双方向信号の場合、バス方向の変更をトリガするために一般に適格な信号があります。モデルでも同様のことをするために使うことができます。 –

+0

この機能をマルチプレクサに追加することを意味しますか?ような何か: 場合(DIR = 0) アサインinterface_i_1.interface_f_cle =他interface_i_0.interface_f_cle アサインinterface_i_0.interface_f_cle = interface_i_1.interface_f_cle – Antonio

関連する問題