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