引言
??類似于電源域(電源規劃與時鐘規劃亦是對應的),假如設計中所有的 D 觸發器都使用一個全局網絡 GCLK ,比如 FPGA 的主時鐘輸入,那么我們說這個設計只有一個時鐘域。假如設計有兩個輸入時鐘,分別給不同的接口使用,那么我們說這個設計中有兩個時鐘域,不同的時鐘域,有著不同的時鐘頻率和時鐘相位。
??在實際的 FPGA 系統設計中,經常有多個不同的時鐘源的參與,比如 FPGA 內部的 Clock Wizard 時鐘分頻 IP 核,連接到許多不同的頻率輸入的 IP 模塊,這個在視頻顯示系統中是很常見的,畢竟,不同的視頻顯示格式需要不同的像素頻率,也就需要不同的輸入時鐘。例如 640X480@60Hz 需要 25.175MHz 時鐘,而 1280X720@60Hz 需要 74.2MHz 時鐘等等。
一、跨時鐘域處理方式
1、對于單比特數據的跨時鐘域: 打兩拍 (即定義兩級寄存器對輸入數據進行延拍,這個在解決 “亞穩態” 方式的隨筆中已經提及)。
2、對于多比特數據的跨時鐘域: 異步 FIFO(異步雙口 RAM) 。例如前面一個模塊的數據發送速率為 100MHz,而后面一個模塊的數據接收速率為 50MHz,這樣就是數據速率傳輸的不同步,那么,我們可以在中間插入一個異步 FIFO,一端接收前面的 100MHz 速率的數據進行緩存,另一端發送 50MHz 速率的數據,從而達到數據的同步接收與發送。當然,這里的 FIFO 的深度就需要自己計算了。
3、 握手協議 。由于兩個異步時鐘的頻率關系不確定,所以,也就無法保證能否滿足觸發器之間的建立時間和保持時間,如果違反了建立時間或者保持時間的要求,那么接收域將會采樣到處于亞穩態的數據,那么系統就可能崩潰了。
??因此,我們可以使如下用握手協議方式處理跨時鐘域數據傳輸,只需要對雙方的握手信號(req 和 ack)分別使用脈沖檢測方法進行同步。如下所示,假設 req、ack、data 總線在初始化時都處于無效狀態,發送域先把數據放入總線,隨后發送有效的 req 信號給接收域,接收域在檢測到有效的 req 信號后鎖存數據總線,然后回送一個有效的 ack 信號表示讀取完成應答,發送域在檢測到有效 ack 信號后撤銷當前的 req 信號,接收域在檢測到 req 撤銷后也相應撤銷 ack 信號,此時完成一次正常握手通信。
基于握手協議的跨時鐘域處理方式
??此后,發送域可以繼續開始下一次握手通信,依次循環。該握手協議方式能夠保證接收到的數據穩定可靠,有效的避免了亞穩態的出現,但是,控制信號握手檢測會消耗通信雙方較多的時間和資源。這樣的通信協議類似于 AXI4-Stream 流協議,當然,前者是一次握手發送一次數據,后者是一次握手可以連續發送數據,AXI4-Stream 流協議的主要通信信號為 tvalid 和 tready,這個協議在視頻流傳輸中非常重要且實用,大家可以去學一學。
-
FPGA
+關注
關注
1629文章
21729瀏覽量
603013 -
fifo
+關注
關注
3文章
387瀏覽量
43649 -
時鐘
+關注
關注
10文章
1733瀏覽量
131451 -
觸發器
+關注
關注
14文章
2000瀏覽量
61132
發布評論請先 登錄
相關推薦
評論