FIFO是實(shí)現(xiàn)多位寬數(shù)據(jù)的異步跨時(shí)鐘域操作的常用方法,相比于握手方式,F(xiàn)IFO一方面允許發(fā)送端在每個(gè)時(shí)鐘周期都發(fā)送數(shù)據(jù),另一方面還可以對(duì)數(shù)據(jù)進(jìn)行緩存。需要注意的是對(duì)FIFO控制信號(hào)的管理,以避免發(fā)生“寫滿”后繼續(xù)寫或“讀空”后繼續(xù)讀的狀況。這些控制信號(hào)包括寫時(shí)鐘域下的寫使能信號(hào)(wr_en,輸入)和寫滿標(biāo)記信號(hào)(full,輸出),讀時(shí)鐘域下的讀使能信號(hào)(rd_en,輸入)和讀空標(biāo)記信號(hào)(empty,輸出),如下圖所示。圖中黑色標(biāo)記信號(hào)為必選信號(hào)如輸入/輸出數(shù)據(jù)信號(hào)2(din/dout),藍(lán)色標(biāo)記信號(hào)為可選信號(hào)如快滿/快空信號(hào)(almost_full/almost_empty)。
無論是通過XPM方式(XPM_FIFO)還是IP方式(FIFO Generator),都需要注意,因?yàn)檫@里針對(duì)的是異步跨時(shí)鐘域情形,所以XPM應(yīng)選擇xpm_fifo_async,使用IP時(shí)應(yīng)選擇Independent Clocks,如下圖所示。
從約束層面看,無論是XPM_FIFO還是IP方式,都會(huì)有自帶的約束,如下圖所示。這些自帶約束包括set_max_delay,set_bus_skew和set_false_path,如圖中藍(lán)色方框內(nèi)容所示。尤其要注意的是set_max_delay約束,由于其優(yōu)先級(jí)較set_clock_groups和set_false_path低,故要避免該約束被其所覆蓋,導(dǎo)致約束失效。
具體來說,如果wr_clk和rd_clk兩個(gè)時(shí)鐘域下除了通過FIFO隔離的路徑外,還有其他跨時(shí)鐘域路徑,對(duì)于這些跨時(shí)鐘域路徑,倘若直接采用set_clock_groups進(jìn)行約束,如下圖所示,那么就會(huì)導(dǎo)致FIFO自帶的set_max_delay被覆蓋掉。這可通過命令report_exceptions查看,如下圖所示,注意圖中紅色方框標(biāo)記。
在這種情形下,顯然不能再用set_clock_groups進(jìn)行約束。那么該如何對(duì)這些跨時(shí)鐘域路徑約束呢?我們分情況討論。如果對(duì)這些跨時(shí)鐘域路徑操作使用的是XPM_CDC,那么Vivado會(huì)直接使用其自帶約束,這些自帶約束的作用域僅限于XPM_CDC,所以不會(huì)覆蓋FIFO自帶約束。如果對(duì)這些跨時(shí)鐘域路徑操作使用的是用戶模塊,那么在約束時(shí),若確認(rèn)為偽路徑,應(yīng)使用set_false_path,同時(shí)-from和-to的對(duì)象應(yīng)使用get_cells或get_pins獲取,而不能使用get_clocks獲取。如果cell較多,而且也無法用通配符完全匹配到,那么可以使用如下方式:即仍使用set_max_delay外加選項(xiàng)-datapath_only,-from和-to的對(duì)象仍通過get_clocks獲取,而延遲值可以填一個(gè)很大的值,如這里的50(代表50ns),這樣就等效于set_false_path。report_exceptions的結(jié)果也顯示FIFO自帶約束沒有被覆蓋,如下圖所示。
綜上所述,使用異步FIFO完成多位寬數(shù)據(jù)的跨時(shí)鐘域操作時(shí),要注意FIFO自帶有set_max_delay約束,確保該約束不會(huì)被set_false_path或set_clock_groups所覆蓋,否則可能發(fā)生時(shí)序收斂,但系統(tǒng)不能正常工作的情形。
審核編輯:湯梓紅
-
電路設(shè)計(jì)
+關(guān)注
關(guān)注
6677文章
2463瀏覽量
205279 -
fifo
+關(guān)注
關(guān)注
3文章
389瀏覽量
43836 -
信號(hào)
+關(guān)注
關(guān)注
11文章
2804瀏覽量
77068 -
時(shí)鐘域
+關(guān)注
關(guān)注
0文章
52瀏覽量
9569 -
Vivado
+關(guān)注
關(guān)注
19文章
815瀏覽量
66862
原文標(biāo)題:跨時(shí)鐘域電路設(shè)計(jì)(7):多位寬數(shù)據(jù)通過FIFO跨時(shí)鐘域
文章出處:【微信號(hào):Lauren_FPGA,微信公眾號(hào):FPGA技術(shù)驛站】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論