,
(1.工業(yè)和信息化部電子第五研究所,廣州 510610;2.重慶賽寶工業(yè)技術(shù)研究院)
隨著電子自動化設(shè)計(EDA)技術(shù)的發(fā)展,現(xiàn)場可編程門陣列(FPGA)已經(jīng)在許多方面得到廣泛應(yīng)用[1],比如將FPGA應(yīng)用于通信領(lǐng)域,實現(xiàn)數(shù)字調(diào)制解調(diào)、編碼解碼,F(xiàn)PGA還在實現(xiàn)通信系統(tǒng)中的各種接口中起著重要作用,如PCI總線、SPI總線、429總線等。在FPGA接口設(shè)計中,同步?jīng)Q定了系統(tǒng)的穩(wěn)定性與接收數(shù)據(jù)的準(zhǔn)確性。但是在實際的工程中,純粹單時鐘同步系統(tǒng)設(shè)計的情況很少,特別是在設(shè)計模塊與外圍芯片的通信中,跨時鐘域的情況經(jīng)常不可避免??鐣r鐘域信號處理不當(dāng)就會產(chǎn)生亞穩(wěn)態(tài)、采樣數(shù)據(jù)錯誤、采樣丟失和重聚合錯誤等一系列問題,從而使系統(tǒng)無法正常運行。本文就此討論了在FPGA設(shè)計中跨時鐘域設(shè)計中的常見問題,信號及數(shù)據(jù)同步的常見方法[2],在此基礎(chǔ)上說明了進行跨時鐘域分析時的方法和步驟。
在FPGA系統(tǒng)中,如果數(shù)據(jù)傳輸中觸發(fā)器的建立時間Tsu和保持時間Th不滿足,或者復(fù)位過程中復(fù)位信號的釋放相對于有效時鐘沿的恢復(fù)時間(recovery time)和撤離時間(removal time)不滿足,就可能產(chǎn)生亞穩(wěn)態(tài),此時觸發(fā)器輸出端Q在有效時鐘沿之后比較長的一段時間處于不確定的狀態(tài)。在這段時間里,Q端在0和1之間處于振蕩狀態(tài),而不是等于數(shù)據(jù)輸入端D的值,這段時間稱為決斷時間(resolution time)。經(jīng)過resolution time之后,Q端將穩(wěn)定到0或1上,但是穩(wěn)定到0還是1,是隨機的,與輸入沒有必然的關(guān)系[3-5]。亞穩(wěn)態(tài)示意圖如圖1所示。
圖1 亞穩(wěn)態(tài)示意圖
圖3 多信號聚合問題示意圖
亞穩(wěn)態(tài)產(chǎn)生的原因是觸發(fā)器Tsu和Th時間不滿足。對于同時鐘域的信號,可以采用時序約束來保證滿足Tsu和Th時間的要求,采用靜態(tài)時序分析工具測試是否滿足要求。但對于異步信號,源時鐘和目的時鐘相位關(guān)系完全不可控,而且會隨時間發(fā)生變化,這就必然會存在亞穩(wěn)態(tài)的問題。亞穩(wěn)態(tài)的危害主要是破壞系統(tǒng)的穩(wěn)定性、邏輯誤判和亞穩(wěn)態(tài)傳播。由于輸出在穩(wěn)定前可能有毛刺、振蕩、不固定的電壓值,因此亞穩(wěn)態(tài)將導(dǎo)致邏輯誤判,嚴(yán)重的情況,輸出0~1之間的電壓值還會使下一級產(chǎn)生亞穩(wěn)態(tài),即亞穩(wěn)態(tài)的傳播。邏輯誤判導(dǎo)致功能性錯誤,而亞穩(wěn)態(tài)傳播則擴大了故障面[6]。
數(shù)據(jù)丟失現(xiàn)象經(jīng)常發(fā)生在跨時鐘域信號進入快時鐘域的信號持續(xù)時間太短,如果異步信號的長度小于目的時鐘周期,作為采集方的慢時鐘域有可能采集不到該信號,造成數(shù)據(jù)丟失。為了安全起見,通常異步信號保持目的時鐘域兩個時鐘周期長度。
圖2 單信號重聚合問題示意圖
數(shù)據(jù)聚合是指信號在通過不同路徑傳輸后重新聚合到一起使用。通常有幾種情況:
① 單個信號多路扇出。如果信號從一個時鐘域分多路進入另外一個時鐘域,那么很有可能會導(dǎo)致功能上的錯誤。如圖2所示,由于Td的存在,DA1和DA2到達CLKB的時間不同,最終導(dǎo)致fsm1_en和fsm2_en這兩個本應(yīng)該同時有效的信號實際上相差一個CLKB的周期。這很可能會影響到后繼的電路功能。
② 多個信號的重聚合。如果多個信號從一個時鐘域進入另外一個時鐘域,然后這些信號在目的時鐘域中又聚合到一起,那么就有可能因為信號的重新聚合導(dǎo)致電路功能上的異常。如圖3所示,原本EN1和EN2轉(zhuǎn)換時鐘域后,期望得到的值是0b00和0b11,但由于EN1和EN2到達CLKB時鐘域的時間有差異,實際得到的值是0b00、0b10和0b11,最終導(dǎo)致后繼電路功能出現(xiàn)問題。
2.1.1 單個信號
單個信號跨時鐘域同步常用電路是兩拍同步,見圖4。
圖4 兩拍DFF信號同步電路
理論上,采用這種方法可以有效地減少亞穩(wěn)態(tài)繼續(xù)傳播的概率,但是并不能保證第2級輸出的穩(wěn)態(tài)電平就是正確電平。兩拍同步是大部分同步處理措施的基礎(chǔ),如下面介紹到多位相關(guān)信號處理是對多個信號之間相互關(guān)系進行分析后,采用合并、抽取特征信號、增加指示信號等形式變?yōu)橐粋€信號或邏輯獨立再進行兩拍同步。同樣,數(shù)據(jù)同步的基礎(chǔ)也是兩拍同步,如握手協(xié)議的請求和應(yīng)答信號、異步FIFO的地址信號。
2.1.2 多位相關(guān)信號
當(dāng)跨時鐘域傳輸多個相互關(guān)聯(lián)信號時,不能采樣簡單的兩拍同步,因為數(shù)據(jù)傳輸時多位數(shù)據(jù)之間的傳輸延遲不同,有可能造成多位數(shù)據(jù)在目的時鐘域不同周期被采樣,這種多位數(shù)據(jù)傳輸時由于數(shù)據(jù)之間的skew所引起的不能被目的時鐘在同一個周期采樣的現(xiàn)象,稱為多位數(shù)據(jù)的跨時鐘域問題。為簡便起見,以兩個信號為例。
(1)傳輸兩個需要同時有效的信號
目的時鐘需要源時鐘的兩個同時有效的控制信號,這兩個控制信號來自于同一個源時鐘,有可能會出現(xiàn)時鐘之間的偏移,從而導(dǎo)致兩個控制信號在目的時鐘域的不同周期被采樣,在此情形下兩個本應(yīng)該同時起控制作用的信號在目的時鐘域失去了作用。
此種問題產(chǎn)生的原因是,兩個來自于同一個時鐘的需同時有效的控制信號在目的時鐘發(fā)生作用時產(chǎn)生了多位信號傳輸。在邏輯設(shè)計中,通??蓪⑦@兩個信號在源時鐘中整合為一個信號,然后通過同步邏輯傳送到目的時鐘,從而消除多位信號的跨時鐘傳輸問題[7]。
(2)傳遞兩個順序控制的信號
此種問題產(chǎn)生的原因是,兩個來自于同一個時鐘的有順序關(guān)系的控制信號在目的時鐘發(fā)生作用時產(chǎn)生了多位信號傳輸。在邏輯設(shè)計中,可以對前序邏輯進行分析,觀察是否在一個信號有效后,其他信號一定會達到有效狀態(tài),這時可將該信號作為特征信號而僅傳輸該信號,那么經(jīng)過同步邏輯傳送到目的時鐘,從而消除多位信號的跨時鐘傳輸問題。
(3)傳遞兩個編碼控制信號
當(dāng)具有編碼關(guān)系的多位數(shù)據(jù)在不同的時鐘之間進行傳遞時,不同編碼信號之間具有skew導(dǎo)致目的時鐘采樣數(shù)據(jù)的不一致性,從而導(dǎo)致解碼的錯誤。
考慮到目的時鐘在接收多位信號時,無非是個別的信號在接收時晚一個時鐘周期或者多位信號撤銷時晚撤銷一個時鐘周期。所以可以得出以下解決方案:傳輸數(shù)據(jù)時增加一位ready_flag的寄存器。源時鐘必須在產(chǎn)生需傳輸?shù)亩辔粩?shù)據(jù)一個周期之后產(chǎn)生該read_flag信號,同時在需要傳輸?shù)亩辔恍盘柍蜂N之前一個周期撤銷ready_flag信號。該read_flag的使能信號需在目的時鐘至少保持兩個目的時鐘周期。
2.2.1 握手協(xié)議
根據(jù)不同的設(shè)計需求和不同的設(shè)計標(biāo)準(zhǔn),利用兩到三個握手信號可以實現(xiàn)數(shù)據(jù)在不同時鐘之間的傳遞,圖5給出了握手信號傳遞數(shù)據(jù)的機制。采用的握手信號越多,從一個時鐘到另外一個時鐘所需要的延遲也越多,同時數(shù)據(jù)傳遞也越準(zhǔn)確。對于許多沒有限制的傳輸,兩個握手信號足以使數(shù)據(jù)在兩個時鐘之間準(zhǔn)確地傳遞。
圖5 握手機制傳遞數(shù)據(jù)示意圖
與兩級同步器相比,異步握手同步器的信號切換過程很慢,需要很多個時鐘周期才能完成一組數(shù)據(jù)的傳遞,但這種通信方式能夠精確傳遞指定數(shù)目的數(shù)據(jù)。數(shù)據(jù)信號會有效持續(xù)一段時間,可以用于多比特數(shù)據(jù)的傳輸,適合于連續(xù)處理。當(dāng)幾個電路不能預(yù)知相互的響應(yīng)時間時,握手方法能讓數(shù)字電路間實現(xiàn)有效的通信。
2.2.2 異步FIFO
當(dāng)主機端的數(shù)據(jù)連續(xù)放入總線時,握手寫方式則可能無法正確進行數(shù)據(jù)同步,可以采用異步FIFO解決這一問題。異步FIFO的讀寫可以工作在不同的時鐘域內(nèi),將需要同步的數(shù)據(jù)利用寫時鐘暫存在FIFO內(nèi)部的一個雙口RAM里,然后利用讀時鐘讀取暫存在雙口RAM里的數(shù)據(jù)。FIFO的典型結(jié)構(gòu)圖如圖6所示,它由FIFO讀控制邏輯、FIFO寫控制邏輯、空/滿狀態(tài)判斷模塊和一個雙端口RAM四部分組成[8]??諠M狀態(tài)的判斷由于存在讀寫地址跨時鐘域的問題,容易產(chǎn)生錯誤,所以FIFO設(shè)計的關(guān)鍵是空滿標(biāo)志的產(chǎn)生,一般會將地址通過Gray碼編碼后傳給對方。
圖6 異步FIFO結(jié)構(gòu)框圖
由于跨時鐘域設(shè)計不當(dāng)會引入較多的問題,除在設(shè)計階段由開發(fā)工程師對跨時鐘域信號進行同步設(shè)計外,在設(shè)計完成后應(yīng)由驗證工程師對設(shè)計進行跨時鐘域的分析??鐣r鐘域分析可借助工具或由人工將跨時鐘域信號提取出來,然后再進行分析和驗證,主要包含兩個階段:一是協(xié)議檢查,二是仿真測試。
在對跨時鐘域信號進行協(xié)議檢查時,應(yīng)按照邏輯梳理各信號相互之間的關(guān)系,按照關(guān)系選擇是否應(yīng)該進行同步化處理,判斷同步化處理措施采用的同步協(xié)議是否合理。下面給出兩拍同步器、握手協(xié)議、異步FIFO等同步協(xié)議的原理、應(yīng)用場景和注意事項等[9-10]。
3.1.1 兩拍同步
在兩拍同步器中,觸發(fā)器到觸發(fā)器路徑上的時序裕量可以為潛在的亞穩(wěn)態(tài)信號到達設(shè)計的其他部分提供一定的判決時間,以便達到穩(wěn)定的值。在應(yīng)用兩拍同步器時,為了確保跨時鐘域信號能夠安全傳輸至目的時鐘域,應(yīng)注意以下幾點[11]:
① 跨時鐘域信號在源時鐘域盡量直接由寄存器驅(qū)動,直接輸入給同步器的第一級觸發(fā)器,不經(jīng)過任何組合邏輯。因為數(shù)據(jù)傳輸很重要的一點就是進入接收時鐘域的第一級觸發(fā)器的輸入信號不能出現(xiàn)毛刺,而組合邏輯電平不穩(wěn)定,極易使得同步器采樣到不穩(wěn)定的信號。
② 兩拍同步器采樣到源時鐘域的信號,經(jīng)過目的時鐘兩個周期后,才能輸出到目的時鐘域的邏輯電路中,因此,同步信號傳遞到新時鐘域時存在兩個目的時鐘周期的延時,這是需要注意的。
③ 兩拍同步器常應(yīng)用于單個異步數(shù)據(jù)的同步,而在同步多位異步數(shù)據(jù)時,如果多位異步數(shù)據(jù)存在同時變化的情況,則應(yīng)考慮過渡虛假數(shù)據(jù)的產(chǎn)生。
④ 不能對一個信號在多個地方進行同步,如果進入亞穩(wěn)態(tài),它們可能輸出不同的值,即使輸出同一個數(shù)值,時間上也會有差別,如此產(chǎn)生的競爭會對后續(xù)電路有影響。
3.1.2 握手協(xié)議
為了降低系統(tǒng)故障率就需要盡量減少跨時鐘域信號數(shù)目,使用握手協(xié)議可以僅僅對請求信號和應(yīng)答信號進行同步,使得并行數(shù)據(jù)有足夠的時間滿足建立時間和保持時間的要求,所以握手協(xié)議能夠滿足并行數(shù)據(jù)安全傳輸?shù)男枰N帐謪f(xié)議常應(yīng)用于解決并行總線信號的同步問題。
3.1.3 異步FIFO
異步FIFO的工作原理是先由寫時鐘把異步數(shù)據(jù)存儲到RAM,穩(wěn)定后再由讀時鐘讀取數(shù)據(jù),從而抑制亞穩(wěn)態(tài)??偩€數(shù)據(jù)同步、高速數(shù)據(jù)傳輸、數(shù)據(jù)在跨越時鐘域時需要存儲容量大的緩沖時,則可以采用異步FIFO[12-14]。
需要著重指出的是,在實際設(shè)計中,有時設(shè)計人員不會對跨時鐘域信號進行同步處理。由于目的時鐘域?qū)鐣r鐘域進行捕獲時,除可能引起的亞穩(wěn)態(tài)傳播外,帶來的影響無非是信號早一個時鐘出現(xiàn)或者晚一個時鐘出現(xiàn),又或者早一個時鐘消失或者晚一個時鐘消失,對于很多持續(xù)時間比較長的信號,一般不會造成影響。對于亞穩(wěn)態(tài)傳播的問題,由于芯片工藝的改進,決斷時間越來越短,如果采用同步設(shè)計,一般會產(chǎn)生亞穩(wěn)態(tài)傳播的問題。這時應(yīng)該具體分析不進行同步是否會對目的時鐘域邏輯產(chǎn)生影響。
對于復(fù)雜的信號關(guān)系,僅僅借助靜態(tài)的協(xié)議檢查不能確認(rèn)是否沒有問題,這時需要使用時序仿真測試的手段針對跨時鐘域信號進行專門的測試,可使用隨機測試的形式測試信號再聚合時產(chǎn)生的問題[15]。
宋文強(工程師),主要從事軟件可靠性測試和FPGA驗證技術(shù)研究。