在之前的实验中,我们所接触到的IO都是单纯的输入(input)或者输出(output)类型,而我们的一些总线协议如IIC等,要求信号为三态类型,也就是我们所说的输入输出(inout)类型。
接下来,我们就来看一下这类信号的具体用法,输入输出类型,顾名思义就是既可以作为输入,也可以作为输出,我们可以通过如下代码学习这类信号的赋值驱动方式。
1-11
编写测试代码如下:
1-12
查看仿真波形如下:
1-13
由上述波形可以看出,当开关关闭(flag==0),sda总线放开,处于高阻状态,此时外部数据可以输入,相当于我们模块的输入。
当开关打开(flag==1),sda等于sda_buf的值,说明此时,sda相当于我们模块的输出。
三态门是FPGA开发过程中经常遇到的一个问题,一个典型应用就是TI的DSP的EMIF总线。
1. 三态输出缓冲器,即三态门,是指逻辑门的输出除有高、低电平两种状态外,还有第三种状态——高阻状态的门电路。高阻态相当于隔断状态(电阻很大,相当于开路)。
三态门都有一个EN 控制使能端,来控制门电路的通断。 可以具备这三种状态的器件就叫做三态。
2. 三态门(tri-state)和数据选择器(mux)的目的一样:根据控制信号 多选1.
3. 区别:
三态:通过控制信号,把N个信号中的N-1个信号设置为开路,只让一个信号通路。
多路选择器:通过与或门实现逻辑运算,选出信号。
4. 实现场合区别:
(1)三态多用在board level(板级),不可能再多个信号外部专门做一个mux实现信号选择。
(2)数据选择器则应用在逻辑内部,实现数据选择的逻辑比较容易运算,而此时选择三态会造成一些问题。