本來是準備花一次課(兩個課時)好好講講這方面的內(nèi)容的,實驗課老師緊催慢催,花了不到一節(jié)課就過去了,感覺很多東西都來不及講,借助這篇簡述詳細說說,希望對大家能有點幫助。
概述
前面的課程中,我們學(xué)習(xí)的都是理想情況,即:假設(shè)電信號經(jīng)過線路和每個邏輯門電路時,沒有延遲,在這一前提下,得到非常規(guī)整的波形圖。然而,在現(xiàn)實中,這種情況是不可能存在的(否則,我們學(xué)完這門課就能造CPU了),信號經(jīng)過線路和邏輯門都會有延遲。在IT界,任何分析只要加上時間(有些還會加上空間)這個維度,問題就很難解了,同樣,數(shù)字電路中只要加上時間,其難度立馬就難上一個級別,分析起來比較燒腦。
如果線路延遲和邏輯門的延遲,會有怎樣的結(jié)果呢?
基本概念
先說基本概念。在組合電路中,同一信號或同時變化的某些信號,經(jīng)過不同路徑到達某一點的時間有先有后,這種現(xiàn)象稱為競爭。
由于競爭而引起電路輸出發(fā)生瞬間錯誤的現(xiàn)象稱為險象(冒險)。表現(xiàn)為輸出端出現(xiàn)了原設(shè)計中沒有的窄脈沖,常稱為“毛刺”。在組合電路中,“毛刺”不一定造成嚴重后果。但當(dāng)組合邏輯與時序邏輯結(jié)合在一起時,險象就可能造成嚴重錯誤。特別是當(dāng)組合邏輯的輸出作為時序電路的使能輸入時。
競爭是邏輯電路正常工作時也會出現(xiàn)的現(xiàn)象,有競爭的地方不一定會出現(xiàn)險象,而險象一定是競爭的結(jié)果。
引起錯誤輸出的競爭稱為臨界競爭;沒產(chǎn)生錯誤輸出的競爭稱為非臨界競爭。
靜態(tài)險象
下面以一個例子進行說明:

我們對這個例子進行分析,例子中假設(shè)經(jīng)過線路沒有延遲,經(jīng)過每個門的延遲是一樣的,均為td(其實已經(jīng)很理想化了,但分析起來也很煩)。分析的條件,假設(shè)A=B=1,C從1->0。顯然,此時:
F = !C + C
理論上,它的值應(yīng)該為1,但是實際的電路表現(xiàn)呢?當(dāng)C從1變?yōu)?時,!C的值變化需要經(jīng)過一個td,A!C的值需要經(jīng)過兩個td,BC的值變化需要一個td,F(xiàn)的值變化需要幾個td呢?因為產(chǎn)生F的是一個或門,所以,如果BC是1,則不用考慮A!C,可以認為此時F的延遲是兩個td;如果BC是0時,則F的值由A!C決定,這時認為F的延遲是三個td。
現(xiàn)在我們具體分析C從1變?yōu)?時的情況,分為幾個時刻:
| 各門輸出\ 時刻| t-1 | t0| t1 | t2 | t3 | t4 |
|:-----------:|:-------------:||:-------------:|:-------:|:-----:|:-----:|:-----:|
| C | 1| 0 | 0 | 0 | 0 | 0 |
| !C | 0| 0 | 1 | 1 | 1 | 1 |
| A!C | 0| 0 | 0 | 1 | 1 | 1 |
| BC | 1| 1 | 0 | 1 | 1 | 1 |
| F | 1| 1 | 1 | 0 | 1 | 1 |
在看上面這個表格時,因為門有延遲,所以!C的在 t1時刻的取值實際上是t0時刻C的值取非(經(jīng)過一個非門延遲);同理A!C在 t2時刻的值是t1時刻!C的值(因為A取1),其它的類似分析,根據(jù)這個表格,我們可以看到F的值有一個毛刺出現(xiàn)(在 t2錯誤輸出0)。大家看的時候,結(jié)合電路圖可以畫上面類似的表格。
現(xiàn)在,我們再分析另一種情況,假設(shè)A=B=1,如果C從0變?yōu)?呢?會不會有險象呢?還是按照上面來畫表:
| 各門輸出 \ 時刻 | t-1 | t0 | t1 | t2 | t3 | t4 |
|---|---|---|---|---|---|---|
| C | 0 | 1 | 1 | 1 | 1 | 1 |
| !C | 1 | 1 | 0 | 0 | 0 | 1 |
| A!C | 1 | 1 | 1 | 0 | 0 | 1 |
| BC | 0 | 0 | 1 | 1 | 1 | 1 |
| F | 1 | 1 | 1 | 1 | 1 | 1 |
顯然,當(dāng)C從0變?yōu)?的時候,沒有險象產(chǎn)生。
上面的情況是一個變量發(fā)生變化的情況,其具體表現(xiàn)有兩種可能,如下圖所示:

靜1險象就是出現(xiàn)“1-0-1”的電路(1為穩(wěn)態(tài),0為毛刺);靜0險象就是“0-1-0”電路(0為穩(wěn)態(tài),1為毛刺),具體規(guī)律為:
- 當(dāng)F=A+!A時,當(dāng)A由1-->0時,會產(chǎn)生靜1險象
- 當(dāng)F = A * !A時,當(dāng)A由0-->1時,會產(chǎn)生靜0險象
一個變量變化時產(chǎn)生的險象叫做邏輯險象,兩個變量變化產(chǎn)生的險象叫功能險象。還是針對圖1中的例子,假設(shè)A=1,BC從00-->11,則其變化在卡諾圖上的示意圖如下所示:

由圖可知,BC從00變?yōu)?1,有兩條路徑:
- B先從0-->1, 然后C從0-->1,此時,電路的值變化情況如圖3中的綠色箭頭所示,所經(jīng)歷的都是F值為1的卡諾圖方格,不會產(chǎn)生錯誤輸出,不會產(chǎn)生險象;
- C先從0-->1,然后B先從0-->1,此時,電路按照圖3中白色箭頭變化,會有一個毛刺產(chǎn)生,從而產(chǎn)生險象。
功能險象是電路中不可避免的,靜態(tài)險象則是我們需要防范的重點。如何防范呢?
靜態(tài)險象的判斷與避免
在上面分析的基礎(chǔ)上,其實單從邏輯表達式就可以對是否存在靜態(tài)險象進行判斷。
對于與或表達式F,如果對變量進行適當(dāng)賦值之后,F(xiàn)能變成:F=A+!A,其對應(yīng)的卡諾圖具有如下特征:

在圖4中,F(xiàn)的表達式在A的原變量區(qū)和反變量區(qū)相切,其對應(yīng)的語義是:當(dāng)A從1-->0時,會出現(xiàn)值為0的毛刺,其規(guī)避方法為:將相切界面的兩個1方格用卡諾圈圈起來,將F變?yōu)椋?/p>
F = !A!C + !AB + AC + BC
對于或與表達式,對變量進行賦值后,F(xiàn)變?yōu)?F=A * !A的形式,則其對應(yīng)的電路圖中存在險象,其對應(yīng)的卡諾圖具有如下特征:

在圖5中,F(xiàn)在C的原變量區(qū)和反變量區(qū)相切,對應(yīng)的語義是:當(dāng)C從0-->1時,會出現(xiàn)值為1的毛刺,規(guī)避方法則是:將相切界面的兩個0方格用卡諾圈圈起來,將F變?yōu)椋?/p>
F = (A + C)(B + !C)(!A+!B)
總結(jié)
本節(jié)主要是了解掌握電路中競爭與險象的基本概念,對電路中存在的各種風(fēng)險有較為清晰的認識,如何對電路進行測試分析是EE工程相關(guān)研究生的一個研究方向,有興趣的童鞋可以進一步挖坑填坑。