在fpga设计中,双向io(输入输出引脚)是一个比较麻烦的东西,但是信号线用作总线等双向数据传输时就要用到inout类型。
以下用液晶的的数据线用作双向io示例:
说是双向io端口,其实输入和输出不是同时进行的,需要有一个控制信号out_en来控制端口什么时候为输出,什么时候为输入。
那这里就需要引入一个三态门结构电路。
三态门结构
那么三态门的结构是怎样的呢?
三态门电路的输出结构和普通门电路的输出结构有很大的不同,因为它在电路中增加了一个输出控制端en。
由上图看出,在单相三态门中,当en=1时,对原电路无影响,电路的输出符合原来电路的所有逻辑关系,即a可以输出到b。当en= 0时,电路内部的所有输出与外部将处于一种关断状态。
因此,当fpga的信号线存在双向io时,可以有两个三态门来控制,一个控制输出,一个控制输入,结构如下:
当enout=1,enin=0时,双向三态门的电路传输方向是a->b;
当enout=0,enin=1时,双向三态门的电路传输方向是b->a;
模型分析
下面简单做个简易模型来说明双向io如何分别实现作为输入端口和输出端口的功能,模块图如下:
模型引脚定义
(1)输入口a定义:当双向端口dinout作为输出口时,我们将a端口输入数据传到模块中,让数据从dinout口出来。
(2)输出端口b定义:当当双向端口dinout作为输入口时,我们将dinout端口输入数据传到模块中,让数据从b口出来。
(3)en控制信号定义:当en=1时,开通三态门,将dinout作为输出口使用,当en=0时,把三态门置为高阻态,这时dinout作为输入口用。
代码展示
编译分析后查看rtl视角逻辑电路,符合原有模型设计。
总结说明
(1)fpga内部不允许传递双向io信号,只有fpga对外部才能定义为双向io端口,即只有在顶层输出的信号才可以被赋值为高阻态。
(2)在结构化建模的过程中,一个模块一个功能的建模,当涉及到内部模块的端口是双向io端口时,然后根据一个双向io对应一个输入,一个输出和一个使能控制,把模块中双向io的输出用输出端口代替,双向io的输入用输入端口代替,引出使能信号,并把对应assign中赋值的高阻态z根据实际情况给出0或1,来解决fpga内部双向io连接问题。
新AirPods Pro主动降噪能力翻倍提升
远翔FP8202:2A开关模式单节锂电池充电IC
长安睿骋1.8T尊贵型C-NCAP碰撞测试结果分析
安全继电器的作用和原理
tms320c6000系列dsp的flash启动设计
FPGA三态门的结构是怎样的呢?
乔布斯改变了半导体行业的游戏规则
后轮驱动长续航版特斯拉 Model Y 将在明年 1 月份推出
西部数据连续五年荣获ETHISPHERE“全球最具商业道德企业™”
PCB四层板的布线注意事项
数据正成为企业核心资产甚至“命门”
你们关心的环境传感器问题,我们替你整理好了!
盘点国内外主流单片机制造商
iPhone12系列新品机型的价格目前如何?
复旦大学在存储技术取得新的成果突破
百度成黑马 智能音箱市场份额增加到8%
最耐用的电机SCT E-motor
提供远超GPS和LTE精度的定位服务,5G、车联网成毫米波关键应用场景
硅锗技术增强无线电前端性能
微雪电子智能车学习板Arduino开发板简介