當(dāng)今的數(shù)字系統(tǒng)往往是圍繞CPLD/ FPGA 進(jìn)行設(shè)計(jì)的, 首選的方案是采用同步時(shí)序電路設(shè)計(jì) , 也稱作單時(shí)鐘系統(tǒng), 電路中所有觸發(fā)器的時(shí)鐘輸入端共享同一個(gè)時(shí)鐘, 每個(gè)觸發(fā)器的狀態(tài)變化都是在時(shí)鐘的上升沿( 或下降沿) 完成的, 與時(shí)鐘脈沖信號(hào)同步。
但在實(shí)際的工程應(yīng)用中, 純粹單時(shí)鐘系統(tǒng)設(shè)計(jì)不能完成數(shù)據(jù)在不同時(shí)鐘域間的傳遞, 跨時(shí)鐘域的異步時(shí)序設(shè)計(jì)不可避免。異步時(shí)序電路中有多個(gè)獨(dú)立的時(shí)鐘源, 不同時(shí)鐘源存在頻率和相位的差異, 當(dāng)數(shù)據(jù)信號(hào)通過兩個(gè)時(shí)鐘域的交界處時(shí), 將會(huì)分別由這兩個(gè)時(shí)鐘來控制信號(hào)的值。此時(shí)如果兩時(shí)鐘信號(hào)的敏感沿非常接近并超過了允許的額度, 則將出現(xiàn)數(shù)據(jù)信號(hào)的不穩(wěn)定, 即電路陷入亞穩(wěn)態(tài), 也稱為同步失敗。
異步電路設(shè)計(jì)的關(guān)鍵就是把數(shù)據(jù)或控制信號(hào)正確地進(jìn)行跨時(shí)鐘域傳輸, 同時(shí)防止亞穩(wěn)態(tài)的出現(xiàn)。如果對(duì)跨時(shí)鐘域帶來的亞穩(wěn)態(tài)、采樣丟失等問題處理不當(dāng), 將導(dǎo)致系統(tǒng)無法正常運(yùn)行。
隨著信息技術(shù)的飛速發(fā)展, 航天航空、軍事應(yīng)用領(lǐng)域?qū)?shù)據(jù)異步傳輸?shù)目煽啃蕴岢隽烁叩囊? 如果不徹底消除亞穩(wěn)態(tài)隱患, 將可能導(dǎo)致災(zāi)難性的后果。
1 亞穩(wěn)態(tài)的產(chǎn)生
1. 1 單觸發(fā)器的亞穩(wěn)態(tài)
觸發(fā)器是數(shù)字電路設(shè)計(jì)中最常用的基本器件, 內(nèi)部包含兩個(gè)雙穩(wěn)態(tài)元件, 其特性曲線如圖1 所示。除了兩個(gè)穩(wěn)定狀態(tài)0 和1 外, 還有一個(gè)狀態(tài)也滿足雙穩(wěn)態(tài)元件的方程,即當(dāng)兩個(gè)反相器都處于中間值的第3 種半穩(wěn)定態(tài)----- 亞穩(wěn)態(tài), 反相器在非邏輯值范圍的反饋系數(shù)是相當(dāng)大的, 一旦因干擾或噪音離開了這個(gè)中心點(diǎn), 就會(huì)很快地進(jìn)入邏輯值范圍( 穩(wěn)態(tài)) 。
圖1:亞穩(wěn)態(tài)問題
觸發(fā)器工作過程中要滿足數(shù)據(jù)建立( setup ) / 保持( hold) 的時(shí)間要求, 輸入信號(hào)在時(shí)鐘的上升沿前后是不允許發(fā)生變化的。對(duì)于使用上升沿觸發(fā)的觸發(fā)器來說,建立時(shí)間就是在時(shí)鐘上升沿到來之前, 觸發(fā)器輸入端數(shù)據(jù)必須保持穩(wěn)定不變的最小時(shí)間; 而保持時(shí)間是時(shí)鐘上升沿到來之后, 觸發(fā)器輸入端數(shù)據(jù)還應(yīng)該繼續(xù)保持穩(wěn)定不變的最小時(shí)間。建立( setup) / 保持( hold) 時(shí)間與時(shí)鐘跳變沿的關(guān)系如圖2 所示。
圖2 setup-hold 時(shí)間
因?yàn)橛|發(fā)器內(nèi)部數(shù)據(jù)的形成需要一定的時(shí)間, 如果不滿足建立和保持時(shí)間, 觸發(fā)器將進(jìn)入亞穩(wěn)態(tài), 其輸出在經(jīng)過一段時(shí)間的不確定狀態(tài)后才能隨機(jī)地穩(wěn)定到0 或1。在穩(wěn)定期間, 觸發(fā)器輸出一些中間級(jí)電平, 或者可能處于振蕩狀態(tài), 并且這種無用的輸出電平可以沿信號(hào)通道上的各個(gè)觸發(fā)器級(jí)聯(lián)傳播下去, 導(dǎo)致其他數(shù)字部件的邏輯混亂。
1. 2 異步時(shí)鐘造成的亞穩(wěn)態(tài)
信號(hào)在跨時(shí)鐘域時(shí)應(yīng)特別注意亞穩(wěn)態(tài)問題。一個(gè)信號(hào)在過渡到另一個(gè)時(shí)鐘域時(shí), 如果僅僅用一個(gè)觸發(fā)器將其鎖存, 那么采樣的結(jié)果將可能是亞穩(wěn)態(tài)。圖3 所示為異步時(shí)鐘和亞穩(wěn)態(tài), 圖中a_ck 和b_ck 為異步時(shí)鐘。
圖3 觸發(fā)器產(chǎn)生亞穩(wěn)態(tài)
信號(hào)dat 經(jīng)過一個(gè)鎖存器的輸出數(shù)據(jù)為a_dat。用時(shí)鐘b_ck 進(jìn)行采樣的時(shí)候, 如果a_dat 正好在b_ck 的set up??hold 時(shí)間內(nèi)發(fā)生變化, 此時(shí)b_dat 就既不是邏輯1, 也不是邏輯0, 而是處于中間狀態(tài)。輸出信號(hào)處于中間狀態(tài)到恢復(fù)為邏輯1 或0 的這段時(shí)間, 稱為亞穩(wěn)態(tài)時(shí)間。當(dāng)觸發(fā)器的亞穩(wěn)態(tài)時(shí)間超過一個(gè)時(shí)鐘周期時(shí), 這種不確定狀態(tài)將會(huì)影響下一級(jí)的觸發(fā)器, 最終導(dǎo)致連鎖反應(yīng)使整個(gè)系統(tǒng)功能失常。
1. 3 降低亞穩(wěn)態(tài)的現(xiàn)有方法
常用于降低異步電路中亞穩(wěn)態(tài)發(fā)生概率的方法有:
1) 兩級(jí)觸發(fā)器法
兩級(jí)觸發(fā)器法就是在一個(gè)信號(hào)進(jìn)入另一個(gè)時(shí)鐘域之前, 將該信號(hào)用兩個(gè)觸發(fā)器連續(xù)鎖存兩次, 也稱為雙鎖存器法。這樣做可以防止由于異步輸入信號(hào)對(duì)于本級(jí)時(shí)鐘可能不滿足建立保持時(shí)間而使本級(jí)觸發(fā)器產(chǎn)生的亞穩(wěn)態(tài)傳播到后面邏輯中。理論研究表明這種設(shè)計(jì)可以將出現(xiàn)亞穩(wěn)態(tài)的幾率降低到一個(gè)很小的程度, 但這種方法同時(shí)帶來了對(duì)輸入信號(hào)的一級(jí)延時(shí)。
兩級(jí)觸發(fā)器法在2 個(gè)異步時(shí)鐘周期相差不大的情況下比較適合。在信號(hào)從快時(shí)鐘域向慢時(shí)鐘域過渡的時(shí)候,如果信號(hào)變化太快, 慢時(shí)鐘將可能無法對(duì)該信號(hào)進(jìn)行正確的采樣, 導(dǎo)致采樣失敗。使用兩級(jí)觸發(fā)器法時(shí), 應(yīng)使原始信號(hào)保持足夠長的時(shí)間, 以便另一個(gè)時(shí)鐘域的觸發(fā)器可以正確地對(duì)其采樣。
2) 結(jié)繩法
針對(duì)雙鎖存器法在快時(shí)鐘域向慢時(shí)鐘域過渡中可能存在采樣失效的問題, 一般采用"結(jié)繩法" 進(jìn)行設(shè)計(jì), 通過分頻方式將慢時(shí)鐘信號(hào)的周期增長, 經(jīng)雙鎖存采樣后再使其恢復(fù)原來的時(shí)鐘周期。即用"結(jié)繩" 將信號(hào)延長, 用"同步"實(shí)現(xiàn)雙鎖存采樣, 用"解繩"還原為原來的時(shí)鐘, 保證另一個(gè)時(shí)鐘域也可以正確采樣, 而接收方用相反的流程送回響應(yīng)信號(hào)。
"結(jié)繩法"是一種安全的跨時(shí)鐘域的方法, 可以解決快時(shí)鐘域向慢時(shí)鐘域過渡的問題, 適用的范圍也很廣。但是"結(jié)繩法"實(shí)現(xiàn)較為復(fù)雜, 特別是其頻率不高, 所以在對(duì)設(shè)計(jì)性能要求較高的場合,應(yīng)該慎用。
3) 異步FIFO
在有大量的數(shù)據(jù)需要進(jìn)行跨時(shí)鐘域傳輸且對(duì)數(shù)據(jù)傳輸速度要求比較高的場合, 一般采用異步FIFO, 異步FIFO 即用一種時(shí)鐘寫入數(shù)據(jù), 而用另外一種時(shí)鐘讀出數(shù)據(jù), 其中這兩個(gè)讀寫時(shí)鐘是異步的。
4) 格雷編碼法
由實(shí)踐可知, 同步多個(gè)輸入信號(hào)出現(xiàn)亞穩(wěn)態(tài)的概率遠(yuǎn)大于同步1 個(gè)異步信號(hào)的概率。由于格雷碼每次只變化1位, 因此異步FIFO 的讀寫地址使用格雷碼計(jì)數(shù)器可以有效地減少亞穩(wěn)態(tài)的產(chǎn)生, 特別是在地址位比較多的情況下能更好地解決亞穩(wěn)態(tài)的問題。
2 外部邏輯控制方法消除亞穩(wěn)態(tài)
傳統(tǒng)的觀點(diǎn)認(rèn)為: 只要系統(tǒng)中有異步元件, 亞穩(wěn)態(tài)就是無法避免的。
在多時(shí)鐘域的異步電路系統(tǒng)中, 數(shù)據(jù)的建立和保持時(shí)間很難得到保證, 這時(shí)最好的方法是將所有非同源時(shí)鐘同步化[5] , 具體措施是使用帶復(fù)位端的D 觸發(fā)器, 并引入一個(gè)高頻時(shí)鐘( 頻率高于系統(tǒng)中的所有源時(shí)鐘) , 達(dá)到使系統(tǒng)中所有源時(shí)鐘同步的效果?;谶@種思想, 本文提出一種
新的方法-----半拍錯(cuò)位同步法!, 選擇適當(dāng)參數(shù)的邏輯器件, 便能徹底消除異步電路中的亞穩(wěn)態(tài)。
2. 1 半拍錯(cuò)位同步法原理
半拍錯(cuò)位同步法的思想是: 從外部引入一高頻時(shí)鐘h_ck 到異步電路中, 通過一定的邏輯和時(shí)序處理, 將異步時(shí)鐘a_ck 同步到高頻時(shí)鐘的上升沿, 同時(shí)將異步時(shí)鐘b_ck同步到高頻時(shí)鐘h_ ck 的下降沿, 這樣兩個(gè)完全獨(dú)立的異步時(shí)鐘經(jīng)過高頻時(shí)鐘h_ck 同步處理后, 時(shí)間上至少錯(cuò)開時(shí)鐘h_ck 的半周期, 只要半周期滿足原電路中觸發(fā)器的建立時(shí)間要求, 便可徹底避免亞穩(wěn)態(tài)的發(fā)生。
半拍錯(cuò)位同步法的電路和時(shí)序波形圖如圖4 所示, 電路包括兩個(gè)帶異步復(fù)位端的D 觸發(fā)器、兩個(gè)信號(hào)延遲環(huán)節(jié)、兩個(gè)2 輸入端或門、兩個(gè)3 輸入端與門、1 個(gè)反相器。異步時(shí)鐘a_ck 與其延遲信號(hào)a_ck_d 的或輸出接觸發(fā)器D_A 的數(shù)據(jù)端D 和異步復(fù)位端CLR, a_ck 和a_ck_d 的與用于選通高頻時(shí)鐘h_ck 進(jìn)入觸發(fā)器D_A 的時(shí)鐘端CP( 要求延遲時(shí)間大于觸發(fā)器D_A 的建立時(shí)間) 。
圖4 半拍錯(cuò)位同步法的電路和時(shí)序波形圖
時(shí)序如下:
1) a_ck= 0 時(shí), 觸發(fā)器復(fù)位端CLR 有效, a_ck_o= 0;
2) 上升沿過后, a_ck= 1 穩(wěn)定作用在數(shù)據(jù)端D, 經(jīng)延遲環(huán)節(jié)a_d 的適當(dāng)延時(shí)后, a_ck 和a_ck_d 同時(shí)為1, 高頻時(shí)鐘h_ck 進(jìn)入觸發(fā)器D_A 的時(shí)鐘端CP;
3) 高頻時(shí)鐘h_ ck 的上升沿將數(shù)據(jù)端D 的數(shù)據(jù)1 鎖存, 使輸出端a_ck_o= 1, a_ck_o 與h_ck 的上升沿同步;
4) a_ck 下降沿后a_ck= 0, 與門a_and 輸出0, 即觸發(fā)器D_A 的時(shí)鐘端CP 保持0, a_ck_o= 1;
5) a_ck 延時(shí)信號(hào)a_ck_d 下降沿后, 或門a_or 輸出0,觸發(fā)器復(fù)位使a_ck_o= 0。
異步時(shí)鐘b_ck 的時(shí)序情況與a_ck 類似, 唯一不同的是h_ck 的反相信號(hào)經(jīng)b_ck 和b_ck_d 的與選通后進(jìn)入D_B 的時(shí)鐘端, b_ck_o 與h_ck 的下降沿同步。
由圖4 可見, 設(shè)信號(hào)a_ck 和b_ck 分別在極為接近的時(shí)刻1 和2 向上跳變, 其相應(yīng)輸出a_ck_o 和b _ck_o 的上升沿分別處于時(shí)刻3 和4, 時(shí)間上錯(cuò)開了高頻時(shí)鐘的半周期, 同樣在時(shí)刻5 幾乎同時(shí)升上跳的信號(hào)a_ck 和b_ck, 輸出a_ck_o 和b_ck_o 的上升沿分別處于時(shí)刻7 和6, 也在時(shí)間上錯(cuò)開了高頻時(shí)鐘的半周期。因此, 經(jīng)過上部電路的處理后, 原來時(shí)間上完全獨(dú)立的信號(hào)a_ ck 和b_ck 變成了時(shí)間上有一最小固定間隔的信號(hào)a_ck_o 和b_ck_o。
為了敘述方便, 規(guī)定電路中參數(shù)的符號(hào)表示為: 延遲環(huán)節(jié)的延遲時(shí)間為T d, 高頻時(shí)鐘h_ck 的周期為T hck, 同步電路中D 觸發(fā)器的建立時(shí)間為信號(hào)T set, 保持時(shí)間為信號(hào)T hold , a_ck 和b_ck 的高電平寬度為T H , 基于上述表示, 根據(jù)半拍錯(cuò)位同步法的時(shí)序要求, 對(duì)電路的相關(guān)參數(shù)選擇原則總結(jié)如下:
1) T hck> T of f, T of f表示后面電路中對(duì)異步時(shí)鐘信號(hào)的時(shí)間分離或數(shù)據(jù)建立時(shí)間要求, 高頻時(shí)鐘應(yīng)在滿足此條件基礎(chǔ)上取較高的頻率;
2) T d> T s , 確保D 觸發(fā)器的數(shù)據(jù)建立時(shí)間滿足要求;
3) T H+ T d> T set + T hold ;
4) T H> T d+ 2 # T hck。
2. 2 半拍錯(cuò)位同步法的應(yīng)用
2. 2. 1 在異步觸發(fā)電路中的應(yīng)用
以圖3( a) 電路為例說明半拍錯(cuò)位同步法在異步觸發(fā)電路中的應(yīng)用, 將半拍錯(cuò)位同步電路串行接入圖3 的異步觸發(fā)電路, 給同步電路引入一高頻時(shí)鐘h _ck, 圖3( a) 電路中的a_ck 和b_ck 接同步電路的相應(yīng)觸發(fā)器, dat 連接關(guān)系不變, 同步電路輸出a_ck_ o 和b _ck_ o 分別代替a_ck 和
b_ck接入原電路相應(yīng)位置, 由2. 1 小節(jié)的分析知, 給原電路串入半拍錯(cuò)位同步電路后, 由于a_ck_o 和b_ck_o 在時(shí)間上錯(cuò)開半個(gè)h_ck 周期, 其后的觸發(fā)電路中不會(huì)再發(fā)生亞穩(wěn)態(tài)。
2. 2. 2 在異步FIFO 中的應(yīng)用
異步FIFO( First In First Out ) 為多時(shí)鐘域系統(tǒng)異步時(shí)鐘間接口設(shè)計(jì)提供了一種簡便、快捷的解決方案, 在網(wǎng)絡(luò)接口、圖像處理等方面, 得到了廣泛的應(yīng)用。
異步FIFO 是跨時(shí)鐘域設(shè)計(jì)方法的集中體現(xiàn), 體現(xiàn)了很多的方法。其中最重要的有兩點(diǎn), 一個(gè)是亞穩(wěn)態(tài), 另一個(gè)就是和亞穩(wěn)態(tài)類似但不相同的------多個(gè)控制/ 狀態(tài)信號(hào)的跨時(shí)鐘傳遞。對(duì)于異步FIFO, 采用格雷碼進(jìn)行讀寫地址計(jì)數(shù), 每次只變化1 個(gè)位, 大大減小了亞穩(wěn)態(tài)發(fā)生的概率。由于異步FIFO 的讀寫信號(hào)屬于不同的時(shí)間域, 因此set up/ hold 沖突和亞穩(wěn)態(tài)的發(fā)生是必然的, 數(shù)據(jù)的丟失概率不為零。
異步FIFO 產(chǎn)生亞穩(wěn)態(tài)的原因是讀寫信號(hào)屬于不同的時(shí)間域, 沒有確定的時(shí)間關(guān)系, 因此只要通過適當(dāng)?shù)耐獠窟壿媽⒆x寫信號(hào)在時(shí)間上產(chǎn)生間隔, 就能消除亞穩(wěn)態(tài), 解決異步FIFO 丟失數(shù)據(jù)問題。將半拍錯(cuò)位同步法用于異步FIFO 的讀寫信號(hào)控制的電路如圖5 所示, 圖中虛線框內(nèi)是半拍錯(cuò)位同步電路。給同步電路引入高頻時(shí)鐘h_ck, 外部獨(dú)立的讀R# 和寫W# 信號(hào)接在虛線框內(nèi)的同步器上,
同步電路的輸出R_O 和W_O 接FIFO 的讀寫管腳, 由2. 1小節(jié)的分析知, 給原電路串入半拍錯(cuò)位同步電路后, 由于R_O和W_O 在時(shí)間上至少錯(cuò)開半個(gè)h_ck 周期, 因此其后的異步FIFO 中不會(huì)發(fā)生亞穩(wěn)態(tài)造成數(shù)據(jù)丟失。
圖5 半拍錯(cuò)位同步法在異步FIFO 中應(yīng)用
圖5 所示的電路是對(duì)異步FIFO 外加控制邏輯消除亞穩(wěn)態(tài)。半拍錯(cuò)位同步法也可用于由異步FIFO 的FPGA 設(shè)計(jì)中。
3 結(jié)論
亞穩(wěn)態(tài)是異步電路和異步FIFO 設(shè)計(jì)中的常見問題,將異步信號(hào)同步化的幾種常用方法雖能大大將降低亞穩(wěn)態(tài)發(fā)生的概率, 但無法 根除! 亞穩(wěn)態(tài)的發(fā)生。本文提出的半拍錯(cuò)位同步法!, 通過附加的帶異步復(fù)位端的D 觸發(fā)器和高頻時(shí)鐘, 將異步時(shí)鐘分別同步到高頻時(shí)鐘的上升沿和下降沿, 使得過于接近的異步時(shí)鐘在時(shí)間上拉開一定的間隔, 只要選擇適當(dāng)?shù)难舆t時(shí)間和高頻時(shí)鐘, 便能徹底消除亞穩(wěn)態(tài)的發(fā)生, 在航天航空、軍事等對(duì)要求高可靠數(shù)據(jù)傳遞的應(yīng)用領(lǐng)域具有廣闊的應(yīng)用前景。