<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何利用FPGA設計一個跨時鐘域的同步策略?

電子工程師 ? 來源:未知 ? 作者:工程師李察 ? 2018-09-01 08:29 ? 次閱讀

基于FPGA的數字系統設計中大都推薦采用同步時序的設計,也就是單時鐘系統。但是實際的工程中,純粹單時鐘系統設計的情況很少,特別是設計模塊與外圍芯片通信中,跨時鐘域的情況經常不可避免。如果對跨時鐘域帶來的亞穩態、采樣丟失、潛在邏輯錯誤等等一系列問題處理不當,將導致系統無法運行。本文總結出了幾種同步策略來解決跨時鐘域問題。

2 異步設計中的亞穩態

觸發器是FPGA設計中最常用的基本器件。觸發器工作過程中存在數據的建立(setup)和保持(hold)時間。對于使用上升沿觸發的觸發器來說,建立時間就是在時鐘上升沿到來之前,觸發器數據端數據保持穩定的最小時間。而保持時間是時鐘上升沿到來之后,觸發器數據端數據還應該繼續保持穩定的最小時間。我們把這段時間成為setup-hold時間(如圖1所示)。在這個時間參數內,輸入信號在時鐘的上升沿是不允許發生變化的。如果輸入信號在這段時間內發生了變化,輸出結果將是不可知的,即亞穩態 (Metastability)。

如何利用FPGA設計一個跨時鐘域的同步策略?

一個信號在過渡到另一個時鐘域時,如果僅僅用一個觸發器將其鎖存,那么采樣的結果將可能是亞穩態。這也就是信號在跨時鐘域時應該注意的問題。如圖2所示。

如何利用FPGA設計一個跨時鐘域的同步策略?

信號dat經過一個鎖存器的輸出數據為a_dat.用時鐘b_clk進行采樣的時候,如果a_dat正好在b_clk的setup-hold時間內發生變化,此時b_ dat就既不是邏輯“1”,也不是邏輯“0”,而是處于中間狀態。經過一段時間之后,有可能回升到高電平,也有可能降低到低電平。輸出信號處于中間狀態到恢復為邏輯“1”或邏輯“0”的這段時間,我們稱之為亞穩態時間。

觸發器進入亞穩態的時間可以用參數MTBF(Mean Time Between Failures)來描述,MTBF即觸發器采樣失敗的時間間隔,表示為:

如何利用FPGA設計一個跨時鐘域的同步策略?

其中fclock表示系統時鐘頻率,fdata代表異步輸入信號的頻率,tmet代表不會引起故障的最長亞穩態時間,C1和C2分別為與器件特性相關的常數。如果MTBF很大,就認為這個設計在實際工作中是能夠正常運行的,不會因為亞穩態導致整個系統的失效。當觸發器處于亞穩態,且處于亞穩態的時間超過了一個時鐘周期,這種不確定的狀態還會影響到下一級的觸發器,最終導致連鎖反應,從而使整個系統功能失常。

3 同步策略

在異步設計中,完全避免亞穩態是不可能的。因此,設計的基本思路應該是:首先盡可能減少出現亞穩態的可能性,其次是盡可能減少出現亞穩態并給系統帶來危害的可能性。以下是根據實際工作總結出來的幾種同步策略。

3.1 雙鎖存器法

為了避免進入亞穩態,應當使參數MTBF盡可能大。通常采用的方法是雙鎖存器法,即在一個信號進入另一個時鐘域之前,將該信號用兩個鎖存器連續鎖存兩次(如圖3所示)。理論研究表明這種設計可以將出現亞穩態的幾率降低到一個很小的程度,但這種方法同時帶來了對輸入信號的一級延時,需要在設計時鐘的時候加以注意。

對于上面的雙鎖存器法,如果a_clk的頻率比b_clk的頻率高,將可能出現因為dat變化太快,而使b_clk無法采樣的問題。即在信號從快時鐘域向慢時鐘域過渡的時候,如果信號變化太快,慢時鐘將可能無法對該信號進行正確的采樣,所以在使用雙鎖存器法的時候,應該使原始信號保持足夠長的時間,以便另一個時鐘域的鎖存器可以正確地對其進行采樣。

3.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
    +關注

    關注

    1604

    文章

    21340

    瀏覽量

    594032
  • 觸發器
    +關注

    關注

    14

    文章

    1803

    瀏覽量

    60486
  • 脈沖信號
    +關注

    關注

    6

    文章

    342

    瀏覽量

    36464

原文標題:怎樣利用FPGA設計一個跨時鐘域的同步策略?

文章出處:【微信號:FPGAer_Club,微信公眾號:FPGAer俱樂部】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    FPGA異步時鐘設計中的同步策略

    摘要:FPGA異步時鐘設計中如何避免亞穩態的產生是必須考慮的問題。本文介紹了FPGA異步時鐘
    發表于 04-21 16:52

    FPGA設計中有多個時鐘時如何處理?

    FPGA設計中有多個時鐘時如何處理?時鐘的基本設計方法是:(1)對于單個信號,使用雙D觸發
    發表于 02-24 15:47

    FPGA設計實例】FPGA跨越多時鐘

    跨越時鐘FPGA設計中可以使用多個時鐘。每個時鐘形成
    發表于 03-19 15:16

    同步時鐘到另一個時鐘的多位信號怎么實現?

    你好,我在Viv 2016.4上使用AC701板。我需要同步時鐘到另一個
    發表于 08-17 07:48

    時鐘為什么要雙寄存器同步

    出現了題目中的時鐘同步問題?怎么辦?十年不變的老難題。為了獲取穩定可靠的異步時鐘送來的信
    發表于 08-20 11:32

    如何處理好FPGA設計中時鐘問題?

    時鐘處理是 FPGA 設計中經常遇到的問題,而如何處理好時鐘
    發表于 09-22 10:24

    探尋FPGA中三種時鐘處理方法

    時鐘處理是 FPGA 設計中經常遇到的問題,而如何處理好時鐘
    發表于 10-20 09:27

    三種時鐘處理的方法

      時鐘處理是FPGA設計中經常遇到的問題,而如何處理好時鐘
    發表于 01-08 16:55

    三種FPGA界最常用的時鐘處理法式

    時鐘處理是FPGA設計中經常遇到的問題,而如何處理好時鐘
    發表于 02-21 07:00

    FPGA初學者的必修課:FPGA時鐘處理3大方法

    時鐘處理是FPGA設計中經常遇到的問題,而如何處理好時鐘
    發表于 03-04 09:22

    如何處理好FPGA設計中時鐘間的數據

    時鐘處理是FPGA設計中經常遇到的問題,而如何處理好時鐘
    發表于 07-29 06:19

    兩級DFF同步時鐘處理簡析

    異步bus交互()— 兩級DFF同步時鐘處理 & 亞穩態處理1.問題產生現在的芯片(比如SOC,片上系統)集成度和復雜度越來越高,通
    發表于 02-17 06:34

    FPGA時鐘處理簡介

    (10)FPGA時鐘處理1.1 目錄1)目錄2)FPGA簡介3)Verilog HDL簡介4)FPG
    發表于 02-23 07:47

    看看Stream信號里是如何做時鐘握手的

    。StreamCCByToggleWithoutBuffer除了StreamCCByToggle,另一個握手處理時鐘的例子便是StreamCCByToggleWithoutBuff
    發表于 07-07 17:25

    怎樣利用FPGA設計一個跨時鐘域的同步策略?

    觸發器是FPGA設計中最常用的基本器件。觸發器工作過程中存在數據的建立(setup)和保持(hold)時間。對于使用上升沿觸發的觸發器來說,建立時間就是在時鐘上升沿到來之前,觸發器數據端數據保持穩定
    發表于 08-18 09:50 ?1707次閱讀
    怎樣<b class='flag-5'>利用</b><b class='flag-5'>FPGA</b>設計一個跨<b class='flag-5'>時鐘</b>域的<b class='flag-5'>同步</b><b class='flag-5'>策略</b>?
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>