基于FPGA的跨時(shí)鐘域信號處理——借助存儲器
為了達到可靠的數據傳輸,借助存儲器來(lái)完成跨時(shí)鐘域通信也是很常用的手段。在早期的跨時(shí)鐘域設計中,在兩個(gè)處理器間添加一個(gè)雙口RAM或者FIFO來(lái)完成相互間的數據交換是很常見(jiàn)的做法。如今的FPGA大都集成了一些用戶(hù)可靈活配置的存儲塊,因此,使用開(kāi)發(fā)商提供的免費IP核可以很方便的嵌入一些常用的存儲器來(lái)完成跨時(shí)鐘域數據傳輸的任務(wù)。使用內嵌存儲器和使用外部擴展存儲器的基本原理是一樣的,如圖1所示。
本文引用地址:http://dyxdggzs.com/article/270067.htm
圖1 借助存儲器的跨時(shí)鐘域傳輸
雙口RAM更適合于需要互通信的設計,只要雙方對地址做好適當的分配,那么剩下的工作只是控制好存儲器的讀寫(xiě)時(shí)序。FIFO本身的特性(先進(jìn)先出)決定了它更適合于單向的數據傳輸??傊?,借助存儲器進(jìn)行跨時(shí)鐘域傳輸的最大好處在于,設計者不需要再花時(shí)間和精力考慮如何處理同步問(wèn)題,因為這些工作都交給了存儲器,我們也不用關(guān)心存儲器內部到底使用了怎樣的工作機制來(lái)解決沖突問(wèn)題(當然了,存儲芯片內部肯定是有一套完善的同步處理機制)。我們可以把更多的時(shí)間花在數據流以及存儲器接口的控制上。借助存儲器的另一個(gè)優(yōu)勢,它可以大大提高通信雙方的數據吞吐率,它不像握手信號和邏輯同步處理機制那樣在同步設計上耗費太多的時(shí)鐘周期,它的速度瓶頸基本就是存儲器本身的速度上限。不過(guò),在得到便利的同時(shí),我們也不得不以付出更多的Money作為代價(jià)。
下文將重點(diǎn)探討異步FIFO在跨時(shí)鐘域通信中的使用。常見(jiàn)的異步FIFO接口如圖2所示,FIFO兩側會(huì )有相對獨立的兩套控制總線(xiàn)。若寫(xiě)入請求wrreq在寫(xiě)入時(shí)鐘wrclk的上升沿處于有效狀態(tài),那么FIFO將在該時(shí)鐘沿將鎖存寫(xiě)入數據總線(xiàn)wrdata。同理,若讀請求rdreq在讀時(shí)鐘rdclk的上升沿處于有效狀態(tài),那么FIFO將把數據放置到讀數據總線(xiàn)rddata上,外部邏輯一般在下一個(gè)有效時(shí)鐘沿讀取該數據。
FIFO一般還會(huì )有指示內部狀態(tài)的一些接口信號,如圖2中的空標志位empty、滿(mǎn)標志位full,甚至還會(huì )有用多位數據線(xiàn)表示的FIFO當前數據量,這些狀態(tài)標志保證了讀寫(xiě)控制不出現空讀和滿(mǎn)寫(xiě)的情況。清除信號aclr在某些應用中也是需要的,它在有效時(shí)能夠清除當前FIFO的數據,讓FIFO復位到一個(gè)空的狀態(tài)。

圖2 常見(jiàn)異步FIFO接口
如圖3所示,在特權同學(xué)設計過(guò)的一個(gè)SDRAM控制器中,就使用了兩個(gè)FIFO。由于SDRAM需要定時(shí)預刷新,并且每次讀寫(xiě)時(shí)起始控制的時(shí)間開(kāi)銷(xiāo)相對大一些,因此采用頁(yè)讀寫(xiě)的方式可以大大的提高數據吞吐量,而頁(yè)讀寫(xiě)方式需要對數據做一些緩存處理。另外,該SDRAM控制器所在的工程中涉及了多個(gè)時(shí)鐘域。在寫(xiě)入SDRAM端是一個(gè)25MHz的時(shí)鐘,在讀SDRAM端是一個(gè)50MHz的時(shí)鐘,而SDRAM的控制則使用了100MHz的時(shí)鐘。盡管實(shí)際工程里這三個(gè)時(shí)鐘的相位關(guān)系固定,但是不做好多周期約束也很容易引起問(wèn)題。
最終,選擇在SDRAM控制器的寫(xiě)入端和讀出端各使用一個(gè)異步FIFO,這既解決了數據緩存的問(wèn)題,也能有效的完成跨時(shí)鐘域的信號傳輸。

圖3 用兩個(gè)FIFO設計的SDRAM控制器
樹(shù)莓派文章專(zhuān)題:樹(shù)莓派是什么?你不知道樹(shù)莓派的知識和應用
fpga相關(guān)文章:fpga是什么
存儲器相關(guān)文章:存儲器原理
評論