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

評論