摘 要
隨著科學技術的發(fā)展,在FPGA設計中多時鐘設計是一個經常遇到而且因為功能的需要無法避免問題。在不同時鐘域之間傳輸數(shù)據(jù)或者控制信號,如果對其中出現(xiàn)的特殊情況估計不足,將會對設計造成災難性的后果。因此,設計人員在設計電路時必須加入相應的同步機制,確保信號在跨時鐘域傳輸時能夠可靠進行。本文從觸發(fā)器時序理論基礎為出發(fā)點,分析研究數(shù)字化電路設計中跨時鐘域傳輸信號時亞穩(wěn)態(tài)現(xiàn)象產生的原因以及危害,然后分析和研究了解決跨時鐘域傳輸過程中遇到的各種同步技術,分析和比較在不同場合的應用以及各自的優(yōu)缺點。
【關鍵詞】FPGA 跨時鐘域 亞穩(wěn)態(tài)
FPGA(Field-Programmable Gate Array),即現(xiàn)場可編程門陣列,它是在PAL、GAL、CPLD等可編程期間的基礎上進一步發(fā)展起來的一種可編程門陣列。它是作為專用集成電路(ASIC)領用中的一種半定制電路而出現(xiàn)的,既解決了定制電路的不足,又克服了原有可編程期間門電路數(shù)目有限的缺點。
隨著計算機硬件以及電子技術飛速發(fā)展,F(xiàn)PGA設計中需要用到的邏輯門數(shù)目急速增長,其中難免會遇到亞穩(wěn)態(tài)以及電路中存在毛刺的現(xiàn)象,本文在通過深入分析研究,現(xiàn)將在FPGA設計中經常會遇到和用到的方法進行講述。
1 應用領域
在多時鐘設計中,跨時鐘域問題總是當數(shù)據(jù)在時鐘的驅動下由一個觸發(fā)器傳送到另一個觸發(fā)器的時候產生,如圖1所示。
2 問題的定義
亞穩(wěn)態(tài)、毛刺、多扇出和重新收斂在異步設計中很有可能出現(xiàn),他們有可能使整個設計進入不穩(wěn)定狀態(tài),甚至最終會引起功能性錯誤。
亞穩(wěn)態(tài)現(xiàn)象:數(shù)字信號通過異步時鐘域時,如果時鐘信號不能滿足觸發(fā)器的建立時間或保持時間,此時很可能產生亞穩(wěn)態(tài)現(xiàn)象。
毛刺現(xiàn)象:同步邏輯電路中產生毛刺現(xiàn)象主要取決于數(shù)字信號傳播時延,這些毛刺有可能會被成功鎖存,也有可能導致錯誤脈沖在同步裝置中輸出。
多扇出現(xiàn)象:在同步邏輯電路中,由于不同的傳播延時,會產生不同值得同步邏輯輸出。
信號重匯聚:重匯聚信號當經過同步之后可能導致功能性錯誤。
3 解決方式
這部分主要介紹幾種正確處理跨時鐘域邏輯電路設計方式,這些設計方式可以保持數(shù)據(jù)在跨時鐘域傳輸時的穩(wěn)定性。
3.1 多同步設計
對于有1bit跨時鐘域信號,通常的做法是使用兩個觸發(fā)器去然后再通往目的時鐘域。但是其前提條件是信號從源時鐘域通往目的時鐘域時必須有足夠的保持時間以供目的時鐘域采樣,即時鐘A的頻率應該低于時鐘B的頻率。
當我們使用兩個觸發(fā)器進行同步設計時設計者需要保證設計的CDC路徑中沒有組合邏輯,但是反相器和緩存器除外。否則毛刺現(xiàn)象和多扇出現(xiàn)象便會出現(xiàn)。
3.2 多結構同步設計
對于多位信號在不同的時鐘域之間傳輸,多路復用設計可以保持跨時鐘域傳輸時的正確性,如下圖所示。多路復用設計可以適用于如下的設計中,一組數(shù)據(jù)需要從一個時鐘域傳輸?shù)搅硗庖粋€時鐘域;當斷言時,有標記的表明數(shù)據(jù)信號穩(wěn)定的一組信號。
3.3 握手設計
握手設計是基于以下協(xié)議進行設計的:源時鐘域向目的時鐘域發(fā)出請求,而且該請求信號一直保持著,直到源時鐘域接受到目的時鐘域的返回信號;目的時鐘域接收到請求信號之后,連續(xù)不斷地發(fā)送確認信號,直到其接收到源時鐘域是重復斷言的。握手機制可以設計為簡單的反饋同步器,也可以設計為全握手機制或者半握手機制。
3.3.1 反饋同步設計
對于圖2所示,使用的是反饋同步設計實現(xiàn)的邏輯電路。對于該電路來講,時鐘A和時鐘B之間的頻率差值是沒有極限要求的,時鐘A的頻率可以比時鐘B的頻率低,也可以比時鐘B的頻率高。然而該電路使用的是信號A由一個時鐘周期組成,而且從當前脈沖到下一個脈沖的時間間隔要大于兩倍的時鐘A和兩倍的時鐘B的時間之和。
3.3.2 請求-應答設計
請求和回答傳輸方式在發(fā)送信號Tx和接收信號Rx之間需要雙重同步,而且數(shù)據(jù)的保持時間必須保持到發(fā)送信號Tx收到確認無效之后,如圖3所示。
3.4 異步FIFO同步設計
當有突發(fā)量數(shù)據(jù)在兩個時鐘域之間傳輸時,F(xiàn)IFO同步器是最常用的一種解決方案。如下圖,是使用FIFO實現(xiàn)的同步器示意圖。它包含雙端口RAM,讀寫控制模塊以及兩個同步觸發(fā)器。在使用FIFO實現(xiàn)同步時最關鍵的問題在于FIFO狀態(tài)信號的形成,包括滿信號、半滿信號、空信號以及半空信號。通常情況下,讀寫指針使用格雷編碼,他們可以使用兩個同步觸發(fā)器來保證同步的正確性,如圖4所示。
2n隊列FIFO是異步FIFO典型例子,它的深度是2n,是一個比較小的FIFO,根據(jù)設計的需要,n可以賦予任何的正整數(shù)值。理論上來講,2n隊列FIFO可以穩(wěn)定的傳輸信號,即使源時鐘頻率是目的時鐘頻率的n倍。
參考文獻
[1]王利祥,肖鐵軍.邊標志算法的改進與硬件實現(xiàn)[J].計算機工程與設計,2014(08):2817-2821.
[2]孫曉東.FPGA毛刺產生的原因及其抑制放法[J].電腦編程技巧與維護,2010(05).
作者單位
河南護理職業(yè)學院 河南省安陽市 455000endprint