FPGA異步時鐘域怎麼同步,教你幾招!(附10+FPGA經典必讀書籍)

2020-09-07 電子發燒友網

基於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經典開發電子書?

掃一掃立即領取!

相關焦點

  • 一種節能型可升級異步FIFO的FPGA實現
    現代數字系統中,異步FIFO是一種被廣泛應用於跨時鐘域進行數據傳輸的有效方式。異步FIFO主要應用於兩種不同時鐘域的數據傳輸,這意味著數據的寫入在一個時鐘域,而數據的讀出卻在另一個時鐘域,兩個時鐘完全異步[1]。
  • FPGA異步時鐘設計中的同步策略
    1 引言   基於FPGA的數字系統設計中大都推薦採用同步時序的設計,也就是單時鐘系統。但是實際的工程中,純粹單時鐘系統設計的情況很少,特別是設計模塊與外圍晶片的通信中,跨時鐘域的情況經常不可避免。
  • 9年FPGA工作經驗,轉行了,苦海無涯……
    剛畢業那會兒在冠捷被虐畫pcb 畫了一年,現在隔了幾年再搞,也不是難事。而且過了幾年,思想沉澱,做的還好的。公司招了一個另外硬體工程師,工作了10年,比我更垃圾,要不是做板子有pcb 炒,這個硬體工程師必死無疑。
  • 異步fifo的設計(FPGA)
    跨時鐘域的問題:上面我們已經提到要通過比較讀寫指針來判斷產生讀空和寫滿信號但是讀指針是屬於讀時鐘域的,寫指針是屬於寫時鐘域的,而異步FIFO的讀寫時鐘域不同,是異步的,要是將讀時鐘域的讀指針與寫時鐘域的寫指針不做任何處理直接比較肯定是錯誤的,因此我們需要進行同步處理以後仔進行比較解決方法:兩級寄存器同步 + 格雷碼同步的過程有兩個
  • FPGA quartus ii裡的靜態時序分析
    提出時序要求; 2、quartusii 在布局布線時會儘量優先去滿足給出的時序要求; 3、STA靜態時序分析工具根據你提出的約束去判斷時序是否滿足的標準。 舉個形象的比喻:就好比我要讓代工廠(類比quartus ii)給我加工一批零件,要求長寬高為10x10x10cm,誤差不超過1mm(類比時序約束條件)。代工廠按要求(即約束條件)開始進行生產加工,工廠為了不返工,肯定會儘量生產出達到我要求的零件。當加工完成後,質檢員(類比STA靜態時序分析工具)按我給出的要求進行檢驗看是否滿足要求。
  • 基於FPGA的高速異步FIFO的設計與實現
    多時鐘帶來的一個問題就是,如何設計異步時鐘之間的接口電路。異步FIFO(First In First Out)是解決這個問題的一種簡便、快捷的解決方案。使用異步FIFO可以在兩個不同時鐘系統之間快速而方便地傳輸實時數據.在網絡接口、圖像處理等方面,異步FIFO都得到廣泛的應用。異步FIFO是一種先進先出的電路,使用在數據接口部分,用來存儲、緩衝在兩個異步時鐘之間的數據傳輸。
  • 淺析FPGA中異步復位同步釋放的原理
    打開APP 淺析FPGA中異步復位同步釋放的原理 發表於 2019-08-21 17:51:49 FPGA有同步復位和異步復位兩種
  • 手把手課堂:Xilinx FPGA設計時序約束指南
    PERIOD 約束與建組  每個同步設計要有至少一個PERIOD 約束(時鐘周期規格),這是最基本的約束類型,指定了時鐘周期及其佔空比。若設計中有不止一個時鐘,則每個時鐘都有自己的 PERIOD 約束。PERIOD約束決定了我們如何進行布線,來滿足設計正常工作的時序要求。  為簡化時序約束應用過程,常常可將具有類似屬性的連線分組為一組總線或一組控制線。
  • 基於SoC+FPGA平臺快速動態加載驅動開發及實現
    、片外時鐘及I/O接口,提供穩定的時鐘管理及同步;  5)支持32位Nios II嵌入式處理器,可在單片上集成Nios II軟核、片上外設及內存、片外內存接口[3],提供低成本可定製的嵌入式處理解決方案;  6)提供多種高速內存接口,例如DDR、DDR2、SDR、 SDRAM以及 QDRII SRAM。
  • 基於FPGA的異步LVDS過採樣的研究和實現
    在傳統的LVDS互連設計中,均採用同步採樣方式,在發送端,一組數據伴隨一個時鐘同時傳輸,在接收端,利用一個時鐘去採集數據。在Xilinx最新的7系列器件中,支持一種異步過採樣方法,當採樣的數據時鐘相近時(±100ppm)利用SelectIO資源中的ISEKDES2原語可以實現4X最高頻率為1.25Gbps的異步過採樣。
  • 學的FPGA如何轉行做ASIC?9年老工程師的肺腑之言
    剛畢業那會兒在冠捷被虐畫pcb 畫了一年,現在隔了幾年再搞,也不是難事。而且過了幾年,思想沉澱,做的還好的。公司招了一個另外硬體工程師,工作了10年,比我更垃圾,要不是做板子有pcb 炒,這個硬體工程師必死無疑。pi6ednc有時候想想,年紀這麼大了,去打工老被人鄙視,32歲的人,沒用過高端器件,以前的行業也不是菊花大公司和高科技。
  • 基於FPGA的RS232行列式矩陣鍵盤接口設計
    能通過動態掃描來判有鍵按下、將鍵值轉換成對應的ASCII碼值,在時鐘脈衝的作用實現串行數據的接收與發送。二、設計方案1.晶片引腳定義  reset復位輸入端;clk時鐘輸入端;rxd串行數據接收端;retn0-retn7鍵盤掃描行輸入線;txd串行數據發送端;scan0-scan7鍵盤掃描列輸出線;led0-led2顯示輸出端。
  • 一種基於FPGA的視頻圖像畫面分割器設計
    研究的主要特色在於構建了以FPGA為核心器件的視頻畫面分割的硬體平臺,首先,將DVI視頻信號,經視頻解碼晶片轉換為數字視頻圖像信號後送入異步FIFO緩衝。然後,根據畫面分割需要進行視頻圖像數據抽取,並將抽取的視頻圖像數據按照一定的規則存儲到圖像存儲器。
  • 基於FPGA的高速PID控制器設計與仿真
    1 增量式數字PID控制算法的FPGA實現  經典PID控制方程為:     式中,KP為比例放大係數;K1為積分時間常數;KD為微分時間常數。數字PID控制算法的實現,必須用數值逼近的方法。     LPM_MULT宏功能模塊還可以定製運算結果輸出時等待同步脈衝(clock)的個數,這就是LPM_MULT的流水線輸出功能
  • 【從零開始走進FPGA】 SignalTap II Logic Analyzer
    (4)在node雙擊添加需要觀察的數位訊號;不要調入系統時鐘,因為本例打算用系統時鐘來做邏輯分析儀的採樣時鐘     (5)添加系統採樣時鐘(類似示波器的採樣)    (10)Save and Yes,再次編譯,和本工程捆綁在一起Download to Device,(當然也可以在Settings設置);關於PIN,如果沒有邏輯分析儀測試沒有信號輸入,如果你懶得設置,可以不分配out的信號,但是clk和rst_n必須分配,因為那是系統的驅動信號。
  • 集成電路FPGA設計的四點建議
    FPGA的設計要點之一:時鐘樹對於FPGA,應避免異步設計,儘量採用同步設計。同步設計的第一個關鍵是時鐘樹。一個壞的時鐘樹,對於FPGA的設計來說,是一個無法挽回的災難,是一座沒有良好基礎的建築,崩潰是必然的。。
  • FPGA系統設計的仿真驗證之: ModelSim的仿真流程
    所謂分頻電路是將較高頻率的時鐘分頻,得到較低頻率的時鐘。分頻電路的使用較為廣泛。  例如,我們要編寫一個顯示時間的電路就需要一個分頻器,將晶振的頻率分頻得到1Hz的時鐘信號。分頻有幾種方法。對於較為規則的分頻,如2分頻、4分頻、8分頻等,可以調用Quartus或者ISE本身的庫函數來實現。
  • FPGA設計的高速FIFO電路技術
    異步FIFO生成FIFO佔用的內存資源為FPGA內嵌的block RAM,由Xilinx公司提供的ISE開發平臺自動生成。讀寫時鐘有通用時鐘和獨立時鐘可選,我們採用獨立時鐘,rd_clk和wr_clk獨立,為了保證在高速採集時數據不丟失,rd_clk頻率不低於wr_clk。
  • 學DSP、FPGA、ARM,哪個更有前途?
    因此,對大多數FPGA開發者來說,FPGA內部有幾個核基本上只能從庫文件裡面選——除非你有能力自己設計核心內部的電路和核間總線——ram和rom也是用宏來配置,自己只需要改改外部的專用電路和接線方式等等。甚至外部的專用電路都有庫文件,搭個積木就完事了。玩FPGA真正掙錢的人是做積木的人,你原創幾個積木並且能申請專利,迫使人家給你交專利費,那你這輩子可以衣食無憂了。
  • 基於FPGA與DDR2 SDRAM的大容量異步FIFO緩存設計
    FIFO作為數據緩存被廣泛應用於高速實時數據採集、不同時鐘域之間的高性能數據傳輸以及多機處理等系統中[1]。1 大容量異步FIFO系統方案設計    設計主要由兩塊片上FIFO、兩塊數據位寬轉換模塊、FIFO控制器、DDR2 SDRAM控制器、時鐘模塊和外部的DDR2 SDRAM構成[3]。其整體結構框圖如圖1所示。