次のコードを検討してください。ワンド付きのインアウトを使用する
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が杖のように振舞っていることを知りたいのですが、そうであれば、インスタンス化するために別のトップモジュールを使わずに、杖のように振る舞いをどうやって作るのでしょうか。
切り取りと貼り付けのエラー?このコードはコンパイルされず(m1が定義されている行を参照)、何もワンドとして宣言されません。 –