请教各位有关双向端口的使用问题
时间:10-02
整理:3721RD
点击:
今天突然看到一种双向端口的使用方法,跟我所知的 assign sda = link?sda_buf:1'bz;不同,是这样的
inout sda;
reg sda_buf;
always ......
begin
sda_buf = 1'bz;//输出为1并释放总线
.....
end
sda = sda_buf;
请问为什么上面这种用法也行?always块中的那句赋值为什么有那个功能(如注释)
谢谢各位了
inout sda;
reg sda_buf;
always ......
begin
sda_buf = 1'bz;//输出为1并释放总线
.....
end
sda = sda_buf;
请问为什么上面这种用法也行?always块中的那句赋值为什么有那个功能(如注释)
谢谢各位了
双端口的操作和三态门是相似的。三态门选通信号z:input z;
当z=1 时,把三态门置为高阻态,这时 dinout 作为输入口用;当z=0 时,开通三态门,这时 dinout 作为输出口用。 三态门控制语句为: asign dinout=(!z)?din_reg:8'bz;
小编描述的两种操作时等价的,只不过是一个是直接assign赋值了用的是三目运算符,另外一个分别在程序不同位置执行的。最后结果都是一样的。