Considérons le code ci-dessous.Utilisation d'inouts avec baguette
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
Je suis désolé, je sais que cela est beaucoup de code, mais de construire un scénario de test, je ne pouvais pas penser à plus petit que cela. Maintenant, le problème est lorsque le code ci-dessus est simulé,
La valeur des variables sont les qui suit dans m1,
tristate, I = 1, comme prévu.
. , IO = 0, inattendu comme IO = I?
. , O = 0; // = IO comme attendu
. , OE = 1 // évidemment
m2,
tristate, I = 0, comme prévu.
. , IO = 0, attendu comme IO = I
. , O = 0; // = IO comme attendu
. , OE = 1 // évidemment
Maintenant, je ne comprends pas comment la valeur de IO dans m1 est 0? Est-ce parce que je suis baguette repassais comme argument INOUT, cela fait inout un type de baguette, si cela il pose la question suivante,
A link to my another question on stackoverflow
Je demande à la (question lien) d'abord, mais il Il y avait quelques éclaircissements à ajouter, alors j'ai ajouté la partie clarification à une nouvelle question. Fondamentalement, je veux savoir comment inout se comporte comme baguette, et si oui, comment je fais comme inout se comporter comme baguette sans utiliser un autre module supérieur à instancier.
Erreur de copier-coller? Ce code ne compile pas (voir la ligne autour de laquelle m1 est défini) et rien n'est déclaré comme une baguette magique. –