跨時鐘信號處理方法

1. 背景

????????現在的芯片(比如SOC,片上系統)集成度和復雜度越來越高,通常一顆芯片上會有許多不同的信號工作在不同的時鐘頻率下。比如SOC芯片中的CPU通常會工作在一個頻率上,總線信號(比如DRAM BUS)會工作在另一個時鐘頻率下,而普通的信號又會工作在另外的時鐘頻率下。這3個不同時鐘頻率下工作的信號往往需要相互溝通和傳遞信號。

????????不同時鐘域下的信號傳遞就涉及到跨時鐘域信號處理,因為相互之間的頻率、相位不一樣,如果不做處理或者處理不當,可能導致:

  1. 數據丟失,無法采到預期中的信號;
  2. 亞穩態的產生。

????????跨時鐘域的信號可以分為單bit信號和多bit信號,處理方法有所不同。

2. 單bit

2.1?快時鐘域到慢時鐘域

2.1.1 問題

????????下圖顯示了當在一個時鐘域(aclk)中生成的信號adat被送到了另一個時鐘域(bclk)中采樣,由于采樣時間太靠近第二個時鐘的上升沿時,發生的同步失敗。同步失敗是由于輸出bdat1變為亞穩態,而在bdat1再次被采樣時沒有收斂到合法的穩定狀態。

????????這里注意一下,如果是電平信號進行CDC, 那么不用考慮時鐘快慢,直接用同步器就可以了,因為總能被采樣到。所以,下面考慮的主要是信號位寬有限的CDC。

????????快時鐘到慢時鐘的(單bit)信號處理,主要問題就是信號在快時鐘域中,可能會多次改變,這樣慢時鐘可能來不及采樣,導致丟失數據。這個問題被稱為信號寬度問題,在CDC檢查工具中,如果快時鐘的信號寬度不足,會報出CDC違例

????????快時鐘到慢時鐘的(單bit)信號處理分為兩種:

  1. 采樣丟失是被允許的。單bit信號一般不會是這種情況,如果是這種情況,直接用同步器同步就可以了。
  2. 采樣丟失不被允許。這樣就要采樣其他手段來保證數據不丟失。主要原理是保證快時鐘域的信號寬度滿足一定的條件,使得慢時鐘域有足夠時間采樣到。

2.1.2?信號寬度的“三時鐘沿”要求

????????那么信號在快時鐘域到底需要多寬,才能保證在慢時鐘域安全的被采樣到呢?比較安全的寬度是,快時鐘域的信號寬度必須是慢時鐘域時鐘周期的1.5倍以上。也就是要持續3個時鐘沿以上(上升沿和下降沿都算)。這個被稱為:“三時鐘沿”要求。

????????下面是一個CDC信號只持續一個周期的例子。發送時鐘域的頻率高于接收時鐘域,而CDC脈沖在發送時鐘域中只有一個周期寬,這樣CDC信號可以在慢時鐘上升沿之間變動,不會被捕獲到慢時鐘域,如下圖所示

????????如果CDC信號寬度超過慢時鐘周期,但是不足1.5個周期,也會發生問題。如下圖所示

????????如上圖所示,信號寬度超過了一個慢時鐘周期,但是可能會setup和hold time違例,導致信號采樣失敗

2.1.3?信號寬度問題的解決方法

????????一種最簡單的方法是,通過保證信號寬度滿足超過慢時鐘的時鐘周期1.5倍,來解決這個問題。這種方法是最直接,也是跨時鐘最快的方法。可以通過system Verilog加“斷言”的方式來檢測是否滿足條件。但是實際中很少用這種方式,因為設計可能會變,設計人員在改變設計時,可能會忘記這個限制,以為是一個通用的解決方法。

????????所以,常用的還是通過“握手”的方式來保證數據被采樣到。通常的做法是:是發送一個使能控制信號,將它同步到新的時鐘域,然后通過另一個同步器將同步信號作為確認信號傳回發送時鐘域。如下圖所示:

????????優點:

????????同步反饋信號是一種非常安全的技術,可以識別第一個控制信號并將其采樣到新的時鐘域。

????????缺點:

????????在允許控制信號改變之前,在兩個方向上同步控制信號可能會有相當大的延遲。也就是說,在應答信號到來之前,是不允許源信號改變的。

????????在實際的芯片設計中,脈沖(寬度有限)信號的同步都是采用這種握手機制來處理。

2.2?慢時鐘到快時鐘域

????????慢時鐘域到快時鐘域的CDC, 直接使用信號同步器就可以了。很多人可能會問,為什么是兩級DFF呢?一級或者三級DFF行不行呢?這里有一個平均失效間隔時間MTBF(Mean Time Between Failure)的考慮。MTBF時間越長,出現亞穩態的概率就越小,但是也不能完全避免亞穩態。注意采樣時鐘頻率越高,MTBF可能會迅速減小。

????????有文獻給出的數據:對于一個采樣頻率為200Mhz的系統,如果不做同步MTBF是2.5us,一級DFF同步的MTBF大概是23年,兩級DFF同步的大約MTBF大概是640年,MTBF越長出錯的概率越小。所以一級看上去不太穩,二級差不多夠用了,至于三級可能會影響到系統的性能,而且增加面積,所以看上去沒什么必要。

????????但是,這里有一點要指出來,那就是怎么才算慢時鐘域到快時鐘域的CDC呢?這里和平常理解的有點不一樣。

????????目標時鐘頻率必須是源時鐘頻率1.5倍或者以上,才能算慢時鐘到快時鐘的CDC.

????????這也很好理解,只有滿足快1.5倍以上,才能滿足“三時鐘沿”的要求,才能保證快時鐘域保證能夠采樣到慢時鐘域的脈沖。如果目標時鐘域只快一點,比如1~1.5倍之內,為了保險起見,請按照1.1中快時鐘到慢時鐘域的處理方法來處理。

????????另外,有的設計中為了保險和以后修改的方便;或者還不清楚時鐘之間的關系;都會按照2.1中的方式來進行單bit的CDC處理。

3. 多bit

????????在兩個時鐘域之間傳遞多個信號,簡單的同步器已經不能滿足要求。工程師經常容易犯的錯誤是,直接用簡單同步器來同步多個信號。

????????這里列出兩個信號分別通過同步器同步后,在目標時鐘域聚合后使用的場景。問題是兩個同步器,跨時鐘的延時可能不一樣,比如信號從2’b00->2’b11, 上面的同步器花了2個周期同步到了目標時鐘域;下面的同步器花了3個周期才同步到目標時鐘域。那么在第二和第三周期之間,就出現了2’b10的值了,即出現了錯誤的采樣信號,這樣功能有可能就不正確了。

????????另外,不同同步器的芯片上的走線也可能不同,導致延時不一樣。即使我們完美的控制后端不同bit同步信號的走線長度一樣,同一個die上面不同芯片之間或者不同制程之間的偏差,都可能引入差異,導致多bit信號的延時不同。而且這樣對后端走線難度增大。

????????考慮到以上兩點,多個信號的CDC一般不用簡單同步器的方法。在CDC檢查時,會有專門的規則來檢查是否采樣了多bit信號用同步器同步聚合使用的情況。

????????為了避免多位CDC傾斜采樣的情況,多個信號CDC策略可以分為三種:

  1. 多周期路徑法。使用同步負載信號安全地傳遞多個CDC位。
  2. 使用格雷碼傳遞多個CDC位。
  3. 使用異步FIFO來傳遞多位信號。

3.1?多周期路徑(Multi-Cycle Path, MCP)

????????下圖中顯示了在時鐘域之間傳遞的兩個編碼控制信號。如果這兩個編碼信號在采樣時略有偏差,則在接收時鐘域中的一個時鐘周期內可能會產生錯誤的解碼輸出。

????????多位數據問題可以用“多周期路徑法(MCP)”來解決。MCP方法是指直接不同步將數據發送到目標時鐘域,但是同時送一個同步過的控制信號到目標時鐘域。數據和控制信號同時發送,允許數據在目標寄存器的輸入端進行設置,同時控制信號在到達目標寄存器的負載輸入端之前做同步。

????????MCP方法的優點:

  1. 不需要在發送時鐘域計算適當的脈沖寬度
  2. 發送時鐘域只需要將enable toggle到接收時鐘域,表示數據已經被傳遞完成,已經準備好被加載。使能信號不需要返回到初始邏輯電平。

????????MCP方法的實質就是,不同步多位的數據,只同步一位的控制信號,通過握手保證控制信號能夠正確傳輸,然后在目標時鐘域通過控制信號來采樣數據。MCP需要用到“同步脈沖器”:

????????同步脈沖器的符號表示如下:

????????多周期路徑法有兩種方法來傳遞多位信號:

3.1.1 帶反饋的MCP

3.1.2?帶應答反饋的MCP

????????多周期路徑法的思想十分有用,但是實際中用來傳遞多位信號比較少見,因為邏輯過于復雜。但是MCP方法用來傳遞單bit的信號卻十分有用。這里就不展開講了,有興趣的可以參考最后的參考文檔中的描述。

3.2?格雷碼

????????對于計數器的CDC, 大部分是不必要的。如果一定需要,那么可以使用格雷碼。格雷碼每次只允許更改一個位,從而消除了跨時鐘域同步更改多個CDC位所帶來的問題。格雷碼和二進制碼之間的轉換是一種很成熟的技術,很容易就能找到現成的代碼,這里就不在詳細描述。

????????需要注意的是:格雷碼必須是計數到2^n才是每次改變一個bit。

????????如果計數器是從0~5計數,那么從5->0的計數,不止一個bit改變,就失去了只改變一個bit的初衷。格雷碼最常見的應用是在異步FIFO中,通常異步FIFO的深度都是2^N,原因就是上面說的。所以,就算浪費面積,也需要把FIFO深度設置為2^N。

3.3?通過AFIFO進行多位信號CDC

????????多位信號CDC的工程上的一般做法都是采用異步FIFO,這里有一個特殊的應用,那就是深度為2的AFIFO,來進行多bit數據的CDC. 如下圖所示:

????????2個寄存器搭建的AFIFO,地址只需要一位。相比MCP方法,邏輯簡單,可以復用AFIFO代碼,而且延時也比MCP方法小。所以多bit僅僅跨時鐘域,不需要進行數據吞吐率匹配(FIFO的重要功能之一)的情況,推薦用深度為2的AFIFO來實現,而不是MCP方法。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/718298.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/718298.shtml
英文地址,請注明出處:http://en.pswp.cn/news/718298.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python+Django+Neo4j中醫藥知識圖譜與智能問答平臺

文章目錄 項目地址基礎準備正式運行 項目地址 https://github.com/ZhChessOvO/ZeLanChao_KGQA 基礎準備 請確保您的電腦有以下環境:python3,neo4j 在安裝目錄下進入cmd,輸入指令“pip install -r requirement.txt”,安裝需要的python庫 打…

貓為什么挑食?可以改善、預防貓咪挑食的主食凍干分享

現在的貓咪主人都把自家的小貓當成了心頭的寶貝,呵護備至。最令人頭疼的就是貓咪挑食不吃貓糧,貓為什么挑食?遇到這類情況怎么辦呢?今天,我要分享一個既能確保貓咪不受苦,又能有效改善挑食問題的方法。 一、…

vue api封裝

api封裝 由于一個項目里api是很多的,隨處都在調,如果按照之前的寫法,在每個組件中去調api,一旦api有改動,遍地都要去改,所以api應該也要封裝一下,將api的調用封裝在函數中,將函數集…

C++實現簡易版http server

mini服務器簡介 mini服務器功能 1.實現了GET和POST方法的HTTP request和HTTP respond的構建和發送,使服務器可以完成基本通信功能。 2.使用了線程池技術,使服務器可以一次接收更多的鏈接和加快了服務器處理數據的速度。 3.實現了簡易的CGI&#xff0…

【MATLAB源碼-第155期】基于matlab的OFDM系統多徑信道LS,LMMSE,SVD三種估計算法的比較誤碼率對比仿真。

操作環境: MATLAB 2022a 1、算法描述 OFDM(Orthogonal Frequency Division Multiplexing,正交頻分復用)是一種高效的無線信號傳輸技術,廣泛應用于現代通信系統,如Wi-Fi、LTE和5G。OFDM通過將寬帶信道劃分…

jmeter 按流量階梯式壓測數據庫

當前版本: jmeter 5.6.3mysql 5.7.39 簡介 JMeter 通過 BZM - Arrivals Thread Group 來模擬并發到達的用戶流量、按時間加壓,可以有效地幫助測試人員評估系統在高壓力和高并發情況下的性能表現。 文章目錄如下 1. 下載插件 2. 界面說明 3. 測試步驟…

C#在并發編程使用Frozen來確保線程安全性

在C#中,Frozen方法通常用于通過不可變對象來確保線程安全性。這通常在并發編程中很有用,特別是在共享狀態的多線程環境中。Frozen方法是Caliburn Micro框架中的一個方法,它用于將對象標記為不可變。 當你調用Frozen方法時,它返回…

云計算 2月26號 (進程管理和常用命令)

一、權限擴展 文件權限管理之: 隱藏權限防止root誤刪除 文件屬性添加與查看 [rootlinux-server ~]# touch file1 file2 file3 1.查看文件屬性 [rootlinux-server ~]# lsattr file1 file2 file3 ---------------- file1 ---------------- file2 ---------------- f…

【FAQ】HarmonyOS SDK 閉源開放能力 —Account Kit

1.問題描述 實時驗證和非實時驗證的區別是什么? 解決方案 相同點: “手機號快速驗證”和“實時驗證”都是為了向用戶發起獲取手機號信息的請求。最終目的都是為了獲取到手機號。這兩種獲取方式都需要完成“獲取您的手機號”的Scope權限申請。 區別&…

UDP協議和TCP協議詳解

文章目錄 應用層自定義協議 傳輸層udp協議TCP協議1.確認應答2.超時重傳3.連接管理建立連接, 三次握手斷開連接, 四次揮手tcp的狀態 4.滑動窗口5.流量控制6.擁塞控制7.延時應答8.攜帶應答9.面向字節流10.異常情況 應用層 自定義協議 客戶端和服務器之間往往要進行交互的是“結構…

Eigen-約簡,訪問和廣播

約簡化,訪客和廣播 一、約簡化1. 標準計算2. 布爾約減 二、訪問三、部分約簡1. 將部分約減與其他業務相結合 四、廣播1. 將廣播與其他業務相結合 一、約簡化 在Eigen中,約簡化是一個接受矩陣或數組并返回單個標量值的函數。最常用的約簡方法之一是.sum(…

心法利器[108] | 微調與RAG的優缺點分析

心法利器 本欄目主要和大家一起討論近期自己學習的心得和體會。具體介紹:倉頡專項:飛機大炮我都會,利器心法我還有。 2023年新的文章合集已經發布,獲取方式看這里:又添十萬字-CS的陋室2023年文章合集來襲,更…

修復通達OA 百度ueditor 文件上傳漏動

前些日子,服務器阿里云監控報警,有文件木馬文件,因為非常忙,就沒及時處理,直接刪除了木馬文件了事。 誰知,這幾天對方又上傳了木馬文件。好家伙,今天不花點時間修復下,你都傳上癮了…

PHP【swoole】

前言 Swoole官方文檔:Swoole 文檔 Swoole 使 PHP 開發人員可以編寫高性能高并發的 TCP、UDP、Unix Socket、HTTP、 WebSocket 等服務,讓 PHP 不再局限于 Web 領域。Swoole4 協程的成熟將 PHP 帶入了前所未有的時期, 為性能的提升提供了獨一無…

Dynamo初學嘗試梳理

學習Dynamo有一段時間了,最近整理了下自己的筆記,分享一些給初學者,做個備忘吧!(PS:很多資料網上都能搜到,我僅僅是收集整理下筆記,分享給大家) 今天先簡單介紹下Dynamo…

展廳設計中多媒體的常用技術

1、互動投影 可以大大提高展廳和觀眾之間的互動體驗,使觀眾不僅可以享受觀看,還可以在輕松娛樂的氛圍中娛樂的氛圍中享受每個展覽的背景故事和內涵,使整個參觀過程非常輕松愉快。 2、幻影成像 可以全面展示企業產品的生產過程,讓觀…

STM32 (4) GPIO(1)

1.芯片的引腳分布 2.普通IO引腳的命名規則 3.IO復用 IO引腳身兼數職的現象叫做IO復用,可以使芯片擁有更多的功能,例如: PA9和PA10既可以用于GPIO的引腳,也可以用于串口或定時器的引腳 通用:CPU直接控制IO引腳的輸入輸…

Linux:用戶格式顯示進程

簡介 在Linux系統中,ps 命令用于查看當前系統中的進程。ps -aux 是該命令的一個常用選項組合,用于以用戶格式顯示所有進程。 ps -aux 輸出的信息內容及含義: USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND r…

【OpenGL編程手冊-04】詳細解釋著色器

著色器 目錄 一、說明二、著色器語言GLSL2.1 典型的著色器代碼2.2 數據類型2.2.1 向量 2.3 輸入與輸出2.3.1 頂點著色器2.3.2 片段著色器 2.4 Uniform2.5 函數后綴含義2 .6 更多屬性! 三、我們自己的著色器類四、從文件讀取五、 編譯著色器練習 一、說明 在Hello T…

shopee、美客多、敦煌、國際站賣家如何掌握測評補單的核心要素

對于賣家而言,測評補單是一種經濟高效的推廣策略,它對于提升商品流量、優化轉化率、增強關鍵詞質量分以及加強鏈接權重都起到了積極的推動作用。然而,要實現自養號測評,需滿足以下條件: 首要之務,建立一個穩…