基於FPGA的數字系統設計中大都推薦採用同步時序的設計,也就是單時鐘系統。但是實際的工程中,純粹單時鐘系統設計的情況很少,特別是設計模塊與外圍晶片的通信中,跨時鐘域的情況經常不可避免。如果對跨時鐘域帶來的亞穩態、採樣丟失、潛在邏輯錯誤等等一系列問題處理不當,將導致系統無法運行。本文總結出了幾種同步策略來解決跨時鐘域問題。
01 異步設計中的亞穩態
觸發器是FPGA設計中最常用的基本器件。觸發器工作過程中存在數據的建立(setup)和保持(hold)時間。對於使用上升沿觸發的觸發器來說,建立時間就是在時鐘上升沿到來之前,觸發器數據端數據保持穩定的最小時間。而保持時間是時鐘上升沿到來之後,觸發器數據端數據還應該繼續保持穩定的最小時間。我們把這段時間成為setup-hold時間(如圖1所示)。在這個時間參數內,輸入信號在時鐘的上升沿是不允許發生變化的。如果輸入信號在這段時間內發生了變化,輸出結果將是不可知的,即亞穩態 (Metastability)。
一個信號在過渡到另一個時鐘域時,如果僅僅用一個觸發器將其鎖存,那麼採樣的結果將可能是亞穩態。這也就是信號在跨時鐘域時應該注意的問題。如圖2所示。
信號dat經過一個鎖存器的輸出數據為a_dat。用時鐘b_clk進行採樣的時候,如果a_dat正好在b_clk的setup-hold時間內發生變化,此時b_ dat就既不是邏輯「1」,也不是邏輯「0」,而是處於中間狀態。經過一段時間之後,有可能回升到高電平,也有可能降低到低電平。輸出信號處於中間狀態到恢復為邏輯「1」或邏輯「0」的這段時間,我們稱之為亞穩態時間。
觸發器進入亞穩態的時間可以用參數MTBF(Mean Time Between Failures)來描述,MTBF即觸發器採樣失敗的時間間隔,表示為:
其中fclock表示系統時鐘頻率,fdata代表異步輸入信號的頻率,tmet代表不會引起故障的最長亞穩態時間,C1和C2分別為與器件特性相關的常數。如果MTBF很大,就認為這個設計在實際工作中是能夠正常運行的,不會因為亞穩態導致整個系統的失效。當觸發器處於亞穩態,且處於亞穩態的時間超過了一個時鐘周期,這種不確定的狀態還會影響到下一級的觸發器,最終導致連鎖反應,從而使整個系統功能失常。
02 同步策略
在異步設計中,完全避免亞穩態是不可能的。因此,設計的基本思路應該是:首先儘可能減少出現亞穩態的可能性,其次是儘可能減少出現亞穩態並給系統帶來危害的可能性。以下是根據實際工作總結出來的幾種同步策略。
2.1 雙鎖存器法
為了避免進入亞穩態,應當使參數MTBF儘可能大。通常採用的方法是雙鎖存器法,即在一個信號進入另一個時鐘域之前,將該信號用兩個鎖存器連續鎖存兩次(如圖3所示)。理論研究表明這種設計可以將出現亞穩態的機率降低到一個很小的程度,但這種方法同時帶來了對輸入信號的一級延時,需要在設計時鐘的時候加以注意。
對於上面的雙鎖存器法,如果a_clk的頻率比b_clk的頻率高,將可能出現因為dat變化太快,而使b_clk無法採樣的問題。即在信號從快時鐘域向慢時鐘域過渡的時候,如果信號變化太快,慢時鐘將可能無法對該信號進行正確的採樣,所以在使用雙鎖存器法的時候,應該使原始信號保持足夠長的時間,以便另一個時鐘域的鎖存器可以正確地對其進行採樣。
2.2 結繩法
由於雙鎖存器法在快時鐘域向慢時鐘域過渡中可能存在採樣失效的問題,我們引入了一種安全的跨時鐘域的方法:結繩法。結繩法適合任何時鐘域的過渡(clk1,clk2的頻率和相位關係可以任意選定),如圖4所示。
圖4中的_clk1表示該信號屬於clk1時鐘域,_clk2的信號表示該信號屬於clk2時鐘域。在兩次src_req_clk1之間被src_vld_clk1結繩(Pluse2Toggle)。將src_vld—clk1用雙鎖存器同步以後,該信號轉換為dst_req_clk2(Toggle2Pluse)同理,用dst_vld_clk2將dat_req_clk2結繩,dst_vld_clk2表明在clk2時鐘域中,src_dat_clk1已經可以進行正確的採樣了。最後將dst_vld_clk2轉換為dst_ack_clk1(Synchronizer and Toggle2Pluse)。dst_ack_clk表明src_dat_clk1已經被clk2正確採樣了,此後clk1時鐘域就可以安全地傳輸下一個數據了。可以看出,結繩法的關鍵是將信號結繩以後,使其保持足夠長的時間,以便另一個時鐘可以正確採樣。圖5描述了結繩法的具體實現,主要包括3個基本單元:Pluse2Toggle、Synchronizer和Toggle2Pluse。
Pluse2Toggle模塊負責將兩個脈衝信號結繩,即將單脈衝信號延長;Synchronizer模塊用雙鎖存器法將得到的信號過渡到另一個時鐘域;Toggle2Pluse模塊與Pluse2Toggle功能相對,即將延長的脈衝信號還原為單脈衝,這裡用到了異或門。整體的設計思想就是用Pluse2Toggle將信號延長,用Synchronizer過渡,再用Toggle2Pluse還原,以保證另一個時鐘域可以正確採樣,而接收方用相反的流程送迴響應信號。
結繩法可以解決快時鐘域向慢時鐘域過渡的問題,且適用的範圍很廣。但是結繩法實現較複雜,在設計要求較高的場合應該慎用。
本文主要把FPGA異步時鐘設計中產生的問題,原因以及解決問題所採用的同步策略做了詳細的分析。其中雙鎖存器法比較適用於只有少數信號跨時鐘域;結繩法比較適用快時鐘域向慢時鐘過渡的情況。所以,在實際的應用中,應根據自身設計的特點選擇適當的同步策略。
為了幫助學員能夠更深入地掌握FPGA系統設計與實際應用。編者給大家準備了FPGA系列學習電子書籍,包括了CPLD/Verilog程式語言基礎與設計,數字IC、基本邏輯、組合邏輯等基礎電路,Vivado平臺開發與調試、集成開發環境使用及相關技巧,FPGA數位訊號處理、數字圖像處理及各種FPGA實戰項目設計案例等等。
1.Verilog數字系統設計教程
本書從算法和計算的基本概念出發,講述如何用硬線邏輯電路實現複雜數字邏輯系統的方法。全書共分三部分。部分內容共18章;二部分共12個上機練習實驗範例;三部分是Verilog硬體描述語言參考手冊,可供讀者學習、查詢之用。本書2版後,在語法篇中增加了IEEE Verilog1364-2001標準簡介,以反映Verilog語法的新變化。
2.數字電路與邏輯設計
本書系統地闡述了邏輯電路的基礎理論--邏輯函數及其數學工具;重點討論了邏輯電路的設計方法和分析方法;詳細介紹了通用性強的幾類中、大規模集成器件,並結合實例介紹了它們在各領域中的應用;對可編程邏輯器件及其硬體描述語言也進行了系統介紹。
全書共10章,主要內容有:邏輯函數、集成邏輯門、組合邏輯電路、集成觸發器、時序邏輯電路、硬體描述語言、半導體存儲器、可編程邏輯器件、脈衝單元電路、模數及數模轉換技術等。各章均附有內容提要、小結、思考題和習題。
3.Vivado從此開始
本書涵蓋了Vivado的四大主題:設計流程、時序約束、設計分析和Tcl腳本的使用,結合實例深入淺出地闡述了Vivado的使用方法,精心總結了Vivado在實際工程應用中的一些技巧和注意事項,既包含圖形界面操作方式,也包含相應的Tcl命令。本書語言流暢,圖文並茂。全書共包含405張圖片、17個表格、172個Tcl腳本和39個HDL代碼,同時,本書配有41個電子教學課件,為讀者提供了直觀而生動的資料。本書可供電子工程領域內的本科高年級學生和研究生學習參考,也可供FPGA工程師和自學者參考使用。
4.Xilinx新一代FPGA設計套件Vivado應用指南
本書系統論述了新一代FPGA設計套件Vivado的性能、使用方法以及FPGA的開發方法。全書內容包括Vivado設計套件的特性,全面可編程FPGA器件的架構,使用Vivado套件創建複雜數字系統設計項目,仿真系統功能,RTL分析產生網表文件,性能要求的時序約束及綜合,布局布線及靜態時序分析和生成位流文件等全部設計過程,基於項目和非項目批作業兩種用Tcl指令的設計模式,同步設計技術、HDL編碼技術、時序收斂和HI.S優化DSP算法等關鍵技術,並以實例介紹了嵌入式系統的設計方法等。
5.Xilinx FPGA設計權威指南 Vivado集成設計環境
本書全面系統地介紹了Xilinx新一代集成開發環境Vivado的設計方法、設計流程和具體實現。全書共分8章,內容包括:Vivado設計導論、Vivado工程模式和非工程模式設計流程、Vivado調試流程、基於IP的嵌入式系統設計流程、Vivado HLS設計流程、System Generator設計流程、Vivado部分可重配置設計流程和Vivado高級設計技術。本書參考了Xilinx公司提供的Vivado最新設計資料,理論與應用並重,將Xilinx公司最新的設計方法貫穿在具體的設計實現中。
6.基於FPGA的嵌入式圖像處理系統設計
本書詳細介紹了FPGA這種新型可編程電子器件的特點,對FPGA的各種程式語言的發展歷程進行了回顧,並針對嵌入式圖像處理系統的特點和應用背景,詳細介紹了如何利用FPGA的硬體並行性特點研製開發高性能嵌入式圖像處理系統。作者還結合自己的經驗,介紹了研製開發基於FPGA的嵌入式圖像處理系統所需要的正確思路以及許多實用,並給出了許多圖像處理算法在FPGA上的具體實現方法以及多個基於FPGA實現嵌入式圖像處理系統的應用實例。
7.基於FPGA的數字圖像處理原理及應用
本書首先介紹FPGA程序設計和圖像與視頻處理的關鍵基礎理論,然後通過實例代碼詳細講解了如何利用FPGA實現直方圖操作中的直方圖統計/均衡化/線性拉伸/規定化、線性濾波器操作中的均值濾波器、Sobel算子(濾波、求模、求角度)、非線性濾波器操作中的排序類算法/形態學濾波、圖像分割算法中的局部自適應分割/Canny算子等。本書在仿真測試部分設計了一種完善的通用測試系統,並利用此測試系統在每一章的仿真測試環節對所設計算法進行嚴格的測試和驗證。本書在很後一章介紹了在視頻處理領域常見的輸入/輸出接口。本書偏向於工程應用,在書中有大量關於如何利用FPGA實現圖像處理算法的實例及代碼,並對這些算法的原理及其實現過程、算法測試等做了詳細的介紹,全部的算法都進行了仿真測試驗證。
8.數位訊號處理的FPGA實現
FPGA仍舊是快速創新的領域,很高興SpringerVerla9公司給我這個機會將FPGA領域的新發展囊括到本書的第3版中。本版新增了總計150多頁全新的理念和當前的設計方法。第3版的創新主要包括以下幾方面。
現在許多FPGA都包含嵌入式l8位×18位乘法器,因而推薦在以DSP為主的應用中使用這些器件,因為嵌入式乘法器可以節省很多LE。例如,在本版的所有示例,中都用到的CycloneIIEP2C35F672C6器件就具有35個18位×18位乘法器。
9.FPGA設計實戰演練(邏輯篇+高級技巧篇)
FPGA設計實戰演練共分為兩冊,分別是邏輯篇和高級技巧篇。
邏輯篇:主要面向廣大的FPGA/CPLD初學者,從零基礎開始講述FPGA/CPLD以及相關的基礎知識,並以一個支持各種入門、進階的子母板形式的學習套件為實驗平臺,針對Altera公司的Cyclone Ⅲ器件量身打造的24個應用實例貫穿其中。實例講解深入淺出,不僅有基本的Verilog語法講解,也有設計思路和背景知識的詳細描述; 開發工具(Quartus Ⅱ+ModelSim)的使用更是手把手、圖文並茂地展示給讀者。
高級技巧篇:現代FPGA的結構越來越複雜,多時鐘域的設計現在已是常態。對於功能電路來說,復位結構都必不可少。在同步邏輯設計中如何很好地處理異步復位,甚至在多時鐘域之間傳遞(異步)復位信號也是邏輯工程師經常面臨的挑戰。本書除專門介紹了上述電路的設計方法外,還介紹了狀態機的設計。在介紹這些通用電路結構的基礎上,還介紹了代碼優化以及如何對設計進行綜合與布局布線優化方面的相關內容。
10.FPGA項目開發實戰講解
本書立足於工程實踐經驗,首先介紹FPGA的原理、語法、設計技巧,然後詳細介紹了7項常用技術的實現。每項技術從以下幾方面介紹:相關技術介紹、FPGA方案框圖設計、子模塊設計、仿真和測試、項目開發過程中遇到的問題、定位和解決措施,其中插入了大量的狀態機轉換圖和關鍵代碼,方便讀者學習。
FPGA工程師經典必讀10+本全階學習推薦書目,資料截圖如下:
如何領取以上完整FPGA經典開發電子書?
掃一掃立即領取!