作者:duoduo
对于CPLD/FPGA初学者而言,如何实现双向信号往往是个难题。duoduo当年初接触CPLD/FPGA的时候也为这个问题头疼过。让我们透过下面这个简单的例子看看CPLD/FPGA设计中如何实现双向信号。 假设HOST通过CPLD/FPGA读写外设(比如MCU通过CPLD/FPGA读写一块memory的情况),为了简化问题的说明,假设HOST端只有写信号hwr_,读信号hrd_和双向8位数据总线hd;外设端相应有写信号swr_,读信号srd_和双向8位数据总线sd。CPLD/FPGA对所有信号只作一个通路的作用,即对HOST和外设来讲,它们都认为自己是直接连接到了对方,而不知道CPLD/FPGA的存在(显然实际电路中这样做可能并没有什么用处,但是这个例子只是用来说明双向信号的用法)。单向信号很简单就不多说了,看看双向信号如何实现。首先从CPLD/FPGA的IO结构上分析如何实现双向。尽管IC在IOPad结构上可能很复杂,但是从实现双向功能这个目的来看,我们可以把IOPad结构简化成下面的图示:
图中A_OUT_OE,A_OUT,A_IN均为CPLD/FPGA内部信号,A则是CPLD/FPGA的引脚信号名。显然,A_IN始终反映了A的实际状态,即引脚输入,A_OUT受A_OUT_OE控制,当A_OUT_OE为高的时候A_OUT可以通过三态缓冲器输出到引脚上,即引脚输出。因此,在CPLD/FPGA内部定义A_IN(实际上A_IN就是A),A_OUT,A_OUT_OE三个信号用于内部逻辑,并合适地产生A_OUT_OE信号,就可以实现双向引脚。欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |