Использование входов с палочкой
Рассмотрим приведенный ниже код.
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
Извините, я знаю, что это много кода, но для создания тестового сценария я не смог придумать меньшее, чем это. Теперь проблема в том, когда приведенный выше код моделируется,
Значения переменных следующие В м1,
tristate, I = 1, как и ожидалось.
,, IO = 0, неожиданно, как IO = I?
,, O = 0;//= IO, как и ожидалось
,, OE = 1 // очевидно
В м2,
tristate, I = 0, как и ожидалось.
,, IO = 0, ожидается как IO = I
,, O = 0;//= IO, как и ожидалось
,, OE = 1 // очевидно
Теперь я не понимаю, как значение IO в m1 равно 0? Это потому, что я передаю палочку в качестве аргумента для inout, делает ли это inout типом палочки, если это так, то напрашивается следующий вопрос:
Ссылка на мой другой вопрос по stackru
Сначала я задал (вопрос по ссылке), но были некоторые пояснения, которые нужно было добавить, поэтому я добавил поясняющую часть в терминах нового вопроса. По сути, я хочу знать, как получается, что inout ведет себя как wand, и если да, то как мне заставить inout вести себя как wand без использования другого верхнего модуля для создания экземпляров.
1 ответ
Этот синтаксис неверен:
module m1(.a(inout line_P1$IO));
ты должен сделать
module m1(.a(line_P1$IO));
inout line_P1$IO;
в стандарте ANSI это должно быть
module m1(inout .a(line_P1$IO));
хотя я попробовал версию ANSI в "VCS" и не был реализован там. Не Анси работал.