什么是三态电路
一般来说,我们认为cmos数字电路的输出的稳定状态只有2种,就是逻辑0和逻辑1,从模拟信号量来说,就是0v和vdd。
那么有些小伙伴会说了,实际上输出状态还有z态和x态。
z态表示没有驱动时信号的输出,又被表示为高阻状态high-z,在仿真波形上,喜欢用一条处于中间位置的线条表示,有的工具用黄色线条,有些工具用红色线条。
而x态,则表示输出状态不是逻辑0,也不是逻辑1,在仿真波形上,往往用一种红色块表示。如下图所示:
从仿真信号来看,这样的描述是为了区分稳定输出的信号逻辑状态,但客观世界里,并不存在x态以及z态这两种信号状态。只是在不稳定的情况下,由于外界不确定的驱动因素,会使得输出状态向逻辑0或逻辑1漂移。
一般来说如果想避免这种z态或x态,那么就必须确保信号有,且只有一个驱动源在驱动。(亚稳态也是导致z态或x态的一种原因,但在那个时候,其实就是存在多个驱动,或没有驱动的情况)
峰回路转,那么这里想说的三态电路,又是一个什么鬼呢?我们看下面这个电路结构。
上图所示,就是一种三态输出电路,当enable为vdd的时候,输出电压vout与a端输入电压保持一个逻辑电平转换。但是当enable控制信号为0v,也就是逻辑0时,无论输入电压a端怎么变化,输出反相器的pmos和nmos都处于关闭状态,vout就没有驱动了。
刚才我们说过,如果信号没有驱动,就是输出高阻态high-z,那么enable为逻辑0的时候,vout就是high-z。
这种可以输出第三种逻辑状态的电路,我们称之为三态电路。在数字逻辑设计中,原则上只有io电路上可以使用,常规的rtl设计,是不允许使用的。
如何让high-z从不稳定走向稳定
既然high-z是一种因为没有驱动而导致无法使用的不稳定信号逻辑,那么又怎样去使用呢?
因为三态电路常被用于io buffer的电路中,因此一般来说,我们会在vout输出上加一个上拉电路或下拉电路。当enable无效时,vout通过一个弱上拉或弱下拉连接到vdd或地上,使其稳定到vdd或0v。
如下所示,是某工艺下数字逻辑io cell的电路示意图,当oen为1'b1的时候,a端数据是无法送到p(即pad)端的,但通过配置pun为逻辑0的时候,则p端被拉到了vdd,即逻辑1上,确保了稳定的输出:
fpga上如何使用三态电路作为io
一般来说,asic设计时,有专门的io buffer可以实现三态io电路,实例化在电路中即可。但fpga没有,可以使用以下verilog hdl实现:
注意这只适用于fpga,同时要在io约束文件里设置pullup或pulldown可配置上拉或下拉。
使用buskeeper对三态输出做保持
有些早期设计的片内嵌入式存储电路,其输出口仍然会使用三态输出,原本是为了降低功耗(还没输出时,关闭输出驱动管),但这也导致输出端出现high-z,无法直接连接到数字逻辑上。
这个时候就可以在每个可能出现三态逻辑的输出信号上,接一个叫做buskeeper的电路逻辑,有时候又叫busholder。
buskeeper用了一对驱动力大体一致的反相器组成反馈,当内部关闭输出后,原本在信号上的逻辑1或逻辑0,就可以被保持住。确保数字逻辑中不存在高阻或不定态。
注意驱动能力
无论上拉或下拉,我们都会说 弱上拉 ,或 弱下拉 ,这是什么原因呢?
我们看下面这个io,当输出使能关闭后,drvp以及drvn都处于off状态,vddpst通过上拉pmos,pumos,为电容充电,使得pad达到vddpst的电压值,也就是逻辑1。
如果打开输出使能,并想输出逻辑1,如下图所示,因为驱动管drvn关闭,因此vddpst通过drvp以及pumos同时向电容充电,时pad达到逻辑1。这个还是比较好理解的。
但是如果我们想输出逻辑0呢?由于上拉管pumos与驱动管drvn同时打开,那么同时会有vddpst通过pumos向电容充电,以及电容通过drvn向地放电的两条通路。如果想让pad达到逻辑0,那么必须是放电通路的能力远远大于充电通路。
由此可见,必须使用较大的上拉或下拉电阻,或者使用驱动能力较弱的上拉或下拉晶体管,才更可能使pad在输出逻辑0的时候,更容易接近于地电平。
所谓驱动力,其实就是电流,对于电阻来说,电流就是电压与电阻的比值:
i=(vddpst-vpad)/r(i是驱动电流,vddpst是io的供电电压,而vpad是pad上的电压,理想结果是无限趋近于0v,r则是电阻的阻值)
由此可见,在假设vpad无限接近于0,则希望电流越小(驱动力越小),则上拉或下拉电阻的阻值就需要越大。
而对于mos来说,如果假设vpad的电压无限接近于vddpst或0v,则上拉或下拉晶体管处于饱和状态,可以提供电流的公式为下图中饱和区的计算方式:
根据公式可以看出,如果在一个特定工艺的芯片内,想减少电流,就是减小宽长比w/l的数值。
需要注意,因为pmos的迁移率只有nmos大概一半的样子,因此在设计电路时,下拉器件的选择尤为重要。经验不足的工程师,往往会在下拉驱动选择上翻跟头。
给大家一个问题思考,如果芯片内的下拉驱动能力比较强,后期芯片无法输出稳定的逻辑1,我们能不能通过板级设计解决这个问题呢?
电平适配电路
我们一般都认为io的输出电压就是芯片供电的post-drive电压,如果驱动芯片a的post-drive电压vddpsta是2.5v,则voh为2.5v,但接收芯片b的post-drive电压vddpstb是3.3v,vil为2.7v。如何让接收信号稳定的接收到驱动逻辑电平呢?
这里可以巧用三态io,当chipa要输出逻辑1的时候,不是通过驱动管输出逻辑1,而是输出一个high-z状态,这个时候pad上的信号就没有驱动了。在片外增加一个上拉电阻,并连接到vddpstb上,则此时pad上的电压vpad就会因为vddpstb通过板级上拉电阻向电容充电而上升到vddpstb上,并稳定为chipb提供逻辑1。
但也要注意一个问题,就是如果vddpstb比vddpsta高的太多,那么就要注意会不会因为vddpstb到地的电压过大,或者vddpstb到vddpsta的电压差过大烧坏了drvn或drvp。
通过上拉电阻输出逻辑1,或者通过下拉电阻输出逻辑0的三态io buffer,在gpio以及i2c等通讯接口上是经常被用到的。具体电路,具体分析。
HFCG-2000+高通滤波器的特性
钒电池,火了
如何解决电厂安全管控问题
光学心率传感器在可穿戴医疗设备中的应用
智能工厂如何实现深度学习自动化?
什么是三态电路?在FPGA上如何使用三态电路作为IO呢?
无线局域网性能优化知识
Redmi K30系列国内销量突破100万台 上市时间不到3个月
谷歌:即时动作追踪技术让物体可以无缝的和动态的实时环境进行互动
小米平板3:1500元升级4GB运存,实测续航9个小时
工业4.0板块未来涨幅或将更明显
探索了神经科学技术的相关应用,以确定人工神经网络中信息是如何结构化的
什么是面向对象编程(OOP)?面向对象的程序设计
物联网是如何改变供应链管理的
通过指纹传感器和Blackfin处理器增强设备识别与数据的安全性
成就客户,成就同路人!国仪量子成功举行2023新春年会
湖北师范大学党委常委、副校长余涛莅临本源量子考察调研
眼部按摩仪离线语音控制芯片——NRK3301
首个全国集成电路标准化组织即将成立
浅析相控阵的角分辨力和精度