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