Verilog 中三态双向驱动器设计
我在参考Verilog数字系统设计第四版(夏宇闻)中例13.10(Page:186),他给出的参考设计为
module bidir(tri_inout, out, in, en, b);
inout tri_inout;
output out;
input in, en, b;
assign tri_inout = en ? in : 1'bz;
assign out = tri_inout ^ b;
endmodule
我无法理解这个设计中b的实际作用,似乎和en信号无关,在b=0时输出tri_out信号,在b=1时输出~tri_out信号,使得输出端口一直有信号输入,而en端口实际控制的只有是否为输出模式,即使在输出模式,out端口仍然有效并且存在输出;我对这个设计的合理性和应用场景存疑。
我自己编写了一个我理解下的三态驱动器代码设计实例,附带verilog代码和RTL Viewer。我的设计是否合理,和考虑不周的地方。
module bidir(tri_inout, out, in, en, b);
inout tri_inout;
output out;
input in, en, b;
assign tri_inout = (en == 1'b1 && b == 1'b1) ? in : 1'bz;
assign out = (en == 1'b1 && b == 1'b0) ? tri_inout : 1'bz;
endmodule
RTL Viewer如下所示:
