考慮下面的代碼。使用魔杖插入
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 //明顯
現在我不明白IO中m1的值是如何爲0? 是不是因爲我傳遞棒作爲參數傳遞給INOUT,也使INOUT一棒型,如果因此它迴避以下問題,
A link to my another question on stackoverflow
我問(鏈路問題)第一,但有是需要補充的一些澄清,所以我根據一個新問題添加了澄清部分。 基本上我想知道inout的行爲如何像魔杖一樣,如果是這樣的話,我怎樣才能使inout的行爲像魔杖一樣,不需要使用不同的頂層模塊來實例化。
剪切和粘貼錯誤?此代碼不會編譯(請參閱m1定義的行),並且沒有任何內容被聲明爲棒。 –