現代數字系統中,異步FIFO是一種被廣泛應用於跨時鐘域進行數據傳輸的有效方式。異步FIFO主要應用於兩種不同時鐘域的數據傳輸,這意味著數據的寫入在一個時鐘域,而數據的讀出卻在另一個時鐘域,兩個時鐘完全異步[1]。現代通信系統中,特別是在移動通信系統中,人們對於節能型的產品提出了更高的要求。隨著技術的發展,FPGA的技術、性能、穩定性等指標已經得到很大提高,同時FPGA廠商為不同的應用開發提供了各種IP核,大大減少了產品的開發周期,在各大FPGA廠商中,Xilinx的IP核應用比較廣泛。但其IP核卻沒有關於異步FIFO節能方面的設計。在文獻[2]中對於FIFO的設計有節能方面的改進,由於其主要應用於ASIC設計,對於FPGA中的應用並不完全適用。
本文引用地址:http://www.eepw.com.cn/article/265945.htm本文提出了一種更加節能而且能應用於高速應用的FPGA設計,同時本文提出一種改進的格雷碼二進位碼轉換結構,在此基礎上利用Xilinx的FPGA晶片現有的數字時鐘管理模塊實現節能方面改進。本文所提出的結構不依賴於現有的IP核,而且可以容易地建立自己的IP核。實際應用中,通過FPGA與DSP進行數據傳輸可工作於高達100/153.6 MHz讀/寫時鐘域。
1 FIFO的主要結構
1.1 主要的FIFO結構
在所有FIFO結構中,首先要提到的是單時鐘域的同步FIFO,雖然同步FIFO在現在的實際應用中很少被使用,但是其結構將有助於理解兩個時鐘域的異步FIFO的實現。主要有線性結構的FIFO和線性可調結構的FIFO[2]。其結構圖如圖1。
線性可調FIFO只是在線性FIFO的基礎上增加了控制信號以便於容量擴展。從圖1中可以看出,無論線性的FIFO還是線性可調結構的FIFO,都是由一些移位寄存器所組成,其主要優點是結構簡單容易實現。從數據的輸入到輸出這一過程看,數據都要經過每個寄存器,當FIFO容量變大時,這類結構的缺點也很突出,如數據從輸入到輸出的延時時間長,而且能耗比較大。
為了克服以上FIFO結構的缺點,人們提出了很多改善的結構,其中有並行的FIFO、樹型FIFO、摺疊型的FIFO[2]、環型結構的FIFO[1]。在這些結構中,由於環型的FIFO結構設計相對容易而被廣泛採用。本文實現的是基於環型的FIFO結構,並在此基礎上進行了節能型的設計改進,使之應用於現代FPGA中。環型結構的FIFO是一種雙時鐘域的FIFO結構,數據在不同的時鐘域中傳輸時需要考慮數據傳輸的有效性,同時必需克服數據在不同的時鐘中傳輸時而產生的亞穩態。
1.2 亞穩態
數據在傳輸的過程中,接收寄存器收到變化的數據時,數據的改變發生在時鐘觸發沿而導致接受數據出現不穩定的狀態[3]稱為亞穩態,如圖2上部分所示。因此在異步時鐘之間進行數據傳輸常常會用到同步單元。單字節同步單元比較簡單,而其常用的同步單元的結構如圖2下半部分所示。在多位的跨時鐘域數據傳輸中,情況比單比特的數據傳輸複雜得多,由於存在多位數據同時變化的情況,為了提高數據傳輸的穩定性,採用將二進位碼轉化為格雷碼[2]後傳輸。
2 主體結構與具體實現
本文所採用的結構是基於環型FIFO結構[1],其整體結構如圖3所示。在圖3中,總線用粗實線表示,其中總線上的數字(如m)表示總線位寬;控制線用虛線表示,輸入、輸出的信號(如FIFO空/滿信號)用細的實線表示,箭頭表示輸入/出方向。從圖3中可以清楚地看出,整個異步FIFO的結構由讀/寫控制模塊、讀/寫同步模塊、讀/寫時鐘控制模塊以及雙口的RAM七個模塊組成。由於採用模塊化的設計結構,以上的結構並不局限於具體的應用,可以很容易設計成實際應用需求的IP核,而且容易升級,相對於傳統的設計,增加的時鐘控制模塊能有效提高能效。
fpga相關文章:fpga是什麼