2017-07-19 11 views
0

次のコードを検討してください。ワンド付きのインアウトを使用する

module TriState 
    (
    // Outputs 
    O, 
    // Inouts 
    IO, 
    // Inputs 
    OE, I 
    ); 

    parameter   width = 1; 


    input    OE; 

    input [width-1:0] I; 
    output [width-1:0] O; 

    inout [width-1:0] IO; 

    assign    IO = (OE) ? I : { width { 1'b1 } }; 
    assign    O = IO; 

endmodule // TriState 

module m1(.a(inout line_P1$IO)); 
reg val_P1 ; 
wire line_P1$IO,line_P1$O; 
TriState #(.width(32'd1)) line_SCL(.I(val_P1), 
       .OE(1), 
       .O(line_P1$O), 
       .IO(line_P1$IO)); 
always @(*) begin 
val_P1 <= 1; 
end 
endmodule //m1 

module m2(.a(inout line_P1$IO)); 
reg val_P1 ; 
wire line_P1$IO,line_P1$O; 
TriState #(.width(32'd1)) line_SCL(.I(val_P1), 
       .OE(1), 
       .O(line_P1$O), 
       .IO(line_P1$IO)); 
always @(*) begin 
val_P1 <= 0; 
end 
endmodule //m2 

module top(); 

wand P1; 
assign P1 = 1; 

m1 ins1(.a(P1)); 
m2 ins2(.a(P1)); 
endmodule //top 

申し訳ありませんが、私はこれが多くのコードである知っているが、私はこれよりも小さいと考えることができなかったテストシナリオを構築します。上記のコードがシミュレートされたとき 今問題は、

変数の値は、予想されるように、次のM1において 、

トライステート、I = 1です。

。 、IO = 0、IO = I?

。 、O = 0; // = IOは期待どおりに

です。 、OE = 1 //明らか

平方メートルで

トライステート、I = 0、予想通り。

。 、IO = 0、IO = I

として期待される。 、O = 0; // = IOは期待どおりに

です。 、OE = 1 //明らかに

m1のIOの値が0であることは理解できません。 そこに私はINOUT引数として杖を渡していますので、それは、次の質問をし、頼むのでそれは

A link to my another question on stackoverflowが、私は(リンクで質問を)依頼された場合、それは杖型のinoutの作るん、最初にそれをされているが、追加が必要な明確化がいくつかあったので、新しい質問の点で明確化部分を追加しました。 基本的には、inoutが杖のように振舞っていることを知りたいのですが、そうであれば、インスタンス化するために別のトップモジュールを使わずに、杖のように振る舞いをどうやって作るのでしょうか。

+0

切り取りと貼り付けのエラー?このコードはコンパイルされず(m1が定義されている行を参照)、何もワンドとして宣言されません。 –

答えて

0

この構文が正しくありません:

module m1(.a(inout line_P1$IO)); 

私が 'VCS' でANSIバージョンを試してみましたが、でしたが、あなたがANSI標準で

module m1(.a(line_P1$IO)); 
    inout line_P1$IO; 

を行う必要があり、それは

module m1(inout .a(line_P1$IO)); 

する必要がありますそこに実装されていません。非ANSI作業。

関連する問題