|
比如ADI代码中,inout使用如下:
module Myiobuf #(parameter DATA_WIDTH = 1)(
input [(DATA_WIDTH-1):0] dio_t,
input [(DATA_WIDTH-1):0] dio_i,
output [(DATA_WIDTH-1):0] dio_o,
inout [(DATA_WIDTH-1):0] dio_p
);
genvar i;
generate
for (i = 0; i < DATA_WIDTH; i = i +1) begin:g_iobuf
assign dio_o = dio_p;
assign dio_p = (dio_t == 1'b1) ? 1'bz : dio_i;
end
endgenerate
endmodule
作为一种经验,inout最好不要在内部模块中使用,如果确实需要,那么用两个port实现,到顶层的时候再用三态实现。理由是:在非顶层模块用双向口的话,该双向口必然有它的上层跟它相连。既然是双向口,则上层至少有一个输入口和一个输出口联到该双向口上,则发生两个内部输出单元连接到一起的情况出现,这样在综合时往往会出错。
|
|