假如data_inout不是高阻态,则用作输出,无法做输入的,不然两者岂不有了抵触?
inout端口信号做输入时,调查比如中的输出data_out_t就应该是高阻态的.
见许多问这个问题的,总结一下我们的贴子,期望能对我们有点用途,假如有不对的当地,欢迎指出.
芯片外部引脚许多都运用inout类型的,为的是节约管腿。便是一个端口一起做输入和输出。 inout在具体完成上一般用三态门来完成。三态门的第三个状况便是高阻Z。 当inout端口不输出时,将三态门置高阻。这样信号就不会由于两头一起输出而出错了,更具体的内容能够查找一下三态门tri-state的材料.
1 运用inout类型数据,能够用如下写法:
inout data_inout;
input data_in;
reg data_reg;//data_inout的映象寄存器
reg link_data;
assign data_inout=link_data?data_reg:1bz;//link_data操控三态门
//关于data_reg,能够经过组合逻辑或许时序逻辑依据data_in对其赋值.经过操控link_data的凹凸电平,然后设置data_inout是输出数据仍是处于高阻态,假如处于高阻态,则此刻当作输入端口运用.link_data能够经过相关电路来操控.
2 编写测验模块时,关于inout类型的端口,需求界说成wire类型变量,而其它输入端口都界说成reg类型,这两者是有差异的.
当上面比如中的data_inout用作输入时,需求赋值给data_inout,其他状况能够断开.此刻能够用assign句子完成:assign data_inout=link?data_in_t:1bz;其间的link ,data_in_t是reg类型变量,在测验模块中赋值.
别的,能够设置一个输出端口调查data_inout用作输出的状况:
Wire data_out;
Assign data_out_t=(!link)?data_inout:1bz;