什么是三態電路
一般來說,我們認為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等通訊接口上是經常被用到的。具體電路,具體分析。
-
上拉電阻
+關注
關注
5文章
360瀏覽量
30621 -
VDD
+關注
關注
1文章
312瀏覽量
33226 -
三態電路
+關注
關注
0文章
4瀏覽量
5576 -
FPGA開發板
+關注
關注
10文章
122瀏覽量
31506 -
CMOS數字電路
+關注
關注
0文章
3瀏覽量
6147
發布評論請先 登錄
相關推薦
評論