FPGA中的時鍾域問題
一、時鍾域的定義
所謂時鍾域,就是同一個時鍾驅動的區域。這里的驅動,是指時鍾刷新D觸發器的事件,體現在verilog中就是always的邊沿觸發信號。單一時鍾域是FPGA的基本組成部分,但是隨着設計規模擴大,多時鍾域的設計是必要的。維持龐大的單時鍾域對時鍾源的要求是極為苛刻的。數字電路系統一般采用時鍾分區和時鍾網絡來保證時鍾到達每個單元的時間基本一致,但是,隨着設計規模的擴大,時鍾網絡也變得極為復雜,且同步效果變差。所以,進行多時鍾域設計是必要的。
二、Altera中PLL的時鍾管理
Altera中可以使用PLL將輸入時鍾分為多個時鍾域,以便實現不同時鍾域的驅動。門控時鍾也可以產生不同的時鍾域(雖然不推薦,但是在簡單的設計中是可以實現的)。在TimeQuest中默認所有時鍾都是關聯的,對於無數據交換的時鍾域,需要設置偽路徑來滿足時序條件。對於PLL的輸出時鍾,可以使用多周期路徑約束,就是對輸入時鍾約束后對PLL所有輸出時鍾進行約束。
三、單比特信號跨時鍾域
(1)跨時鍾域(CDC)技術
在不同的時鍾域之間設計需要使用CDC技術,其難點在於EDA工具無法發現這個問題,STA進行獨立的時鍾域分析,需要偽路徑或者多周期路徑實現關聯后才能實現跨時鍾域的分析。這就要求設計者在設計之初就很好的考慮這個問題。
(2)亞穩態及其危害
時鍾邊沿前有建立時間,后有保持時間,一旦違反兩個要求之一,就發生時序違規。違規的后果就是產生亞穩態,即電平處於邏輯0和1之間的狀態,可能產生邏輯錯誤。亞穩態持續的時間和具體的時鍾有關。
(3)亞穩態的解決方法1-雙觸發
在跨時鍾域的設計中,有兩種情況:
保證數據精確識別,犧牲部分數據;
保證數據完整識別,犧牲部分時間。
兩種情況都需要同步器。常用的同步器就是兩級級聯寄存器。第一級寄存器將采樣變化數據的信號緩存,有第二級寄存器讀出亞穩態的信號。實際上,亞穩態並沒有由於同步器消除,只不過降低了亞穩態出現邏輯錯誤的可能。
(4)三級觸發器
亞穩態出現錯誤的間隔時間(MTBF)是對同步器性能的描述。故障間隔時間越長,同步效果越好。使用三級觸發器要比二級觸發器的效果要好。
(5)如何同步快速信號到慢速信號
前面的多級觸發器同步器可以有效處理從低速信號傳輸到高速信號,但是對於高速信號傳輸到低速信號,則需要其他的結構實現同步。
1️⃣開環方案,即將高速信號展寬,大於低速信號的1.5倍為好。該方案無需握手,是用於時鍾頻率固定且信號可分析的設計中。
2️⃣閉環方案,將時鍾域之間做成握手通信模型,優勢在於保證信號采樣正確,缺點在於時間等待長,需要信號保持足夠長的時間。
四、多比特信號跨時鍾域
(1)融合多比特信號為單比特信號
某些多比特信號之間存在關聯性,使用單比特信號即可滿足設計的要求。這時候對信號進行融合,可以有效地保證信號的穩定性。
(2)多周期路徑規划
就是加入同步信號,保證數據完整讀取的時機是正確的,進而確保數據完整。是一個單向握手模型。
五、使用fifo處理多比特跨時鍾域信號
異步fifo支持不同周期的時鍾寫入和讀取,可以將多比特信號暫存后在讀取,保證數據完整。使用異步fifo需要考慮寫入速率、讀取速率和最大序列尺寸。
六、多時鍾域設計分區
設計分區,就是將不同時鍾域划分為不同的區域,分別進行時序分析。同步器單獨作為一個分區,不做時序分析(存在時序違規,但是可以自我調整的模塊)。這樣可以加快時序分析的效率和時序報告的明確性。
分區后的時序分析也是基於這個方案的,注意在設計時忽略同步器的路徑時序。
七、門控時鍾行波時鍾的處理
(1)行波時鍾和門控時鍾
行波時鍾:寄存器驅動的時鍾
門控時鍾:組合邏輯生成的時鍾
(2)處理原則
盡量不適用衍生時鍾,使用PLL鎖相環或者數字鎖相環實現時鍾產生。
實在使用了就盡量不要有跨派生時鍾域的數據同步。
Altera器件出現保持時間問題可以利用軟件自動布線延時來保證保持時間的合理。
Altera中可以使用ALTCLKCTRL這類的時鍾處理IP實現時鍾的派生,可以避免派生時鍾的時序問題。