《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 設計應用 > 基于FPGA與DDR2 SDRAM的大容量異步FIFO緩存設計
基于FPGA與DDR2 SDRAM的大容量異步FIFO緩存設計
來源:微型機與應用2011年第4期
庾志衡1,葉俊明2,鄧迪文3
(1. 桂林電子科技大學 電子工程與自動化學院,廣西 桂林 541004; 2. 桂林電子科技大學
摘要: 為了滿足高速實時數據采集系統對所采集海量數據進行緩存的要求,通過研究FIFO的基本工作原理,利用FPGA和DDR2 SDRAM設計了一種高速大容量異步FIFO。使用Xilinx提供的存儲器接口生成器(MIG)實現FPGA與DDR2的存儲器接口,并結合片上FIFO和相應的控制模塊完成FIFO的基本框架結構。詳細介紹了各個組成模塊的功能和原理,并設計了專門的測試模塊。
Abstract:
Key words :

摘  要: 為了滿足高速實時數據采集系統對所采集海量數據進行緩存的要求,通過研究FIFO的基本工作原理,利用FPGADDR2 SDRAM設計了一種高速大容量異步FIFO。使用Xilinx提供的存儲器接口生成器(MIG)實現FPGA與DDR2的存儲器接口,并結合片上FIFO和相應的控制模塊完成FIFO的基本框架結構。詳細介紹了各個組成模塊的功能和原理,并設計了專門的測試模塊。
關鍵詞: 高速大容量異步FIFO; MIG; FPGA; DDR2 SDRAM

 異步FIFO作為數據緩存被廣泛應用于高速實時數據采集、不同時鐘域之間的高性能數據傳輸以及多機處理等系統中[1]。如在視頻系統中用于視頻信號轉換、視頻分割和畫中畫電視[2]。在高速傳感信號實時檢測處理系統中用于數據緩存等。隨著微電子技術的發展,FIFO芯片也在向著高速、大容量、小體積、低成本的方向發展。特別是Xilinx FPGA 提供的FIFO IP核已經能夠達到500 MHz的速率和4 MB的容量。這些都為FIFO的實際工程應用提供了廣闊的空間。但是在某些價格敏感、要求海量數據緩存的高速系統中,出于價格和性能方面的考慮,大容量異步FIFO芯片并非這類設計的最佳選擇。FPGA具有工作速度高、可配置性強、靈活性好等突出優點,使用Xilinx FPGA 提供的免費MIG IP核可以很容易實現FPGA與外部存儲器之間的接口,而DDR2 SDRAM具有單位空間存儲容量大、高數據帶寬、價格便宜等優點。因此根據FIFO的基本原理,通過采用Xilinx FPGA器件和Micron公司的256MB DDR2 SDRAM MT4HTF3264HY-667設計并實現了一種異步FIFO。該FIFO具有價格相對便宜、高數據帶寬、容量大、數據位寬可以根據需要進行相應靈活配置等特點,具有較高的工程實用價值。
1 大容量異步FIFO系統方案設計
    設計主要由兩塊片上FIFO、兩塊數據位寬轉換模塊、FIFO控制器、DDR2 SDRAM控制器、時鐘模塊和外部的DDR2 SDRAM構成[3]。其整體結構框圖如圖1所示。

    基本工作機理是當WR_EN有效為高電平,輸入數據DIN[N:0]在WR_CLK的上升沿觸發下經過“數據位寬轉換模塊1”之后輸出位寬為128 bit的數據寫入到位寬為128 bit,深度為2 K的“片上FIFO1”中。當FIFO控制器檢測到“片上FIFO1”快滿時,開始讀取其中的數據,按照地址順序遞增的方式通過DDR2 SDRAM控制器寫入到DDR2 SDRAM中,直到“片上FIFO1”被取空。當FIFO控制器檢測到“片上FIFO2”快空時,通過DDR2 SDRAM控制器按照地址順序遞增讀取DDR2 SDRAM中的數據,寫入到“片上FIFO2”中,直到“片上FIFO2”被寫滿為止。DDR2 SDRAM只有一組地址總線,而在該項設計中需要對DDR2 SDRAM進行獨立的讀寫操作。為此,在FIFO控制器中定義了兩組地址總線用于分別記錄讀寫操作地址,當FIFO控制器處于寫DDR2 SDRAM狀態時,選通寫地址總線(wr_addr)與DDR2 SDRAM的地址總線(ddr2_addr)互聯。當FIFO控制器處于讀DDR2 SDRAM狀態時,選通讀地址總線(rd_addr)與DDR2 SDRAM的地址總線(ddr2_addr)互聯。另外為了保證讀數據有效,在FIFO控制器中設計有相應的限制語句,只有當讀地址(rd_addr)小于寫地址(wr_addr)時,才允許讀DDR2 SDRAM中的數據。“片上FIFO2”的空滿標志信號作為所設計的FIFO的空滿標志信號。從外部看,該設計是一個具有標準接口的大容量異步FIFO,而不用關心其內部操作。而且只需要對數據轉換模塊中的相關參數進行簡單的改動,便可以改變該大容量異步FIFO的位寬(THE WIDTH)。
2 高速大容量異步FIFO設計
    如圖1所示,設計主要集中在FPGA部分,包括數據位寬轉換模塊、FIFO控制器、時鐘模塊、DDR2 SDRAM控制器設計以及片上FIFO的定制。
2.1 DDR2 SDRAM控制器設計
    存儲器控制器需要對包括存儲器控制狀態機在內的所有構建模塊加以集成。控制器狀態機必須按正確順序發出命令,同時還要考慮存儲器器件的時序要求。而且存儲器控制器狀態機因存儲器架構(DDR、DDR2、QDRII、RLDRAM等)、組數(BANK)、數據總線寬度、存儲器器件的寬度和深度、組和行存取算法等變量的不同而異。因此,創建存儲器控制器是一項極其復雜、精細的任務。
    使用MIG(Memory Interface Generation)軟件工具[4]可以生成一個完整的設計,減少了設計人員的工作量,簡化了系統設計。設計人員通過在MIG GUI中設置系統和存儲器參數,整個過程不用一分鐘,MIG工具即可生成存儲控制器有關的RTL和UCF文件。MIG設計流程如圖2所示。

    設計采用Xilinx提供的免費IP核 MIG2.3來設計DDR2 SDRAM控制器。所用FPGA為Virtex-5  FPGA XC5vlx110T。控制器原理框圖如圖3所示。

    其中時鐘&復位模塊(Infrastructure)用于生成控制器所需要的各類時鐘和復位信號,它的輸入時鐘可根據用戶需求選擇單端或差分時鐘信號輸入。延時控制單元(Idelay_ctrl)用于同步校準設計中的延時單元以減少功耗。狀態控制單元(Ctrl)是控制器中的最關鍵單元,它生成DDR2 存儲器接口和用戶接口所必需的所有控制信號。物理層控制單元(Phy_top)是設計的物理層接口的頂層模塊,它封裝了FPGA 與 DDR2 SDRAM的物理接口信號。用戶接口單元(Usr_top)作為設計中的用戶接口,用于接收和存儲用戶數據、命令和地址信息。最終將復雜的DDR2 SDRAM訪問操作封裝成簡單的讀寫兩種操作。設計采用的Micron DDR2 SDRAM SODIMM MT4HTF3264HY-667容量為256MB、帶寬5.3 GB/S、數據位寬64 bit、含10位列地址線、13位行地址線和2位BANK地址線。上述MIG控制器右側信號端口用于連接DDR2 SDRAM物理引腳,右側信號端口用于連接輸入時鐘和來自FIFO控制器的數據和控制信號線。這些端口類型和位寬剛好與所選定的MT4HTF3264HY-667相匹配。
2.2 片上FIFO設計
    所設計的FIFO數據輸入/輸出端與外界的數據傳輸、FPGA與DDR2 SDRAM間的通信分別屬于不同的時鐘域,設計中通過采用兩塊小容量片上FIFO[5]作為緩沖來實現他們之間的跨時鐘域數據傳輸。根據所選定DDR2 SDRAM的性能參數,兩塊片上FIFO的數據位寬設置為128 bit,深度1 kHz。
2.3 FIFO控制器設計
    FIFO控制器用于控制兩塊片上FIFO與DDR2 SDRAM之間的數據通信,其狀態轉移圖如圖4所示。由于DDR2 SDRAM具有很高的數據帶寬,MT4HTF3264-667的帶寬為5.3 GB/S。遠大于FIFO1輸入/輸出端的數據帶寬。所以FIFO控制器根據兩塊片上FIFO的數據量狀況,對DDR2 SDRAM總線進行分時復用。

    該狀態機工作過程為:
    (1)系統上電或復位后,狀態機進入空閑狀態(idle),在該狀態下輸入端片上FIFO1讀使能信號(rd_en_wrfifo)、輸出端片上FIFO2寫使能信號(wr_en_rdfifo),DDR2 SDRAM控制器的用戶地址FIFO使能信號(app_af_wren),用戶數據FIFO使能信號(app_wdf_wren)均無效。
    (2)在空閑狀態下,當檢測到輸入端片上FIFO1幾乎滿,并且DDR2 SDRAM控制器初始化完畢,控制器發送寫DDR2 SDRAM命令(cmd =3’b000)。將讀到的數據直接寫入DDR2 SDRAM由于DDR2 SDRAM控制器突發長度為4,地址總線按4累加。當檢測到片上FIFO1被取空時,回到空閑狀態。
    (3)在空閑狀態,當檢測到輸出端片上FIFO2幾乎空,并且沒有檢測到輸入端片上FIFO1幾乎滿時,開始讀DDR2 SDRAM中的數據,并將讀出的數據寫入到輸出端片上FIFO2。待FIFO2寫滿后,回到空閑狀態。
2.4 時鐘模塊設計
    控制器所需要的系統時鐘(sys_clk)和200 MHz時鐘(idly_clk_200)由外部33  MHz時鐘信號通過FPGA的全局時鐘網絡后,分別輸入到兩個定制好的DCM后輸出生成。
2.5 數據位寬轉換模塊設計
    該模塊用于匹配N位的輸入/輸出數據位寬和兩個片上FIFO的128 bit數據位寬,實現所設計的大容量異步FIFO位寬可配置功能。輸入端數據位寬轉換模塊的基本工作機理是將在WR_CLK時鐘作用下連續輸入的128/N個數據按先后順序由高到低組成128 bit數據輸出到片上FIFO1的數據輸入端口,同時生成一個時鐘上升沿作為FIFO1的寫時鐘,將該128 bit寬數據寫入到片上FIFO1中。輸出端數據位寬轉換模塊將從片上FIFO2讀到的128 bit寬數據是由高到低依次拆分為128/N個N位寬數據,并且在RD_CLK上升沿先后輸出這些數據。當這些數據輸出完畢后,該模塊輸出一個上升沿脈沖作為輸出端片上FIFO2的讀時鐘信號,讀取下一個128 bit寬的數據。
3 實驗測試
    為了測試系統的性能,設計了專門的測試系統對所設計的FIFO進行測試,如圖5所示。

    基本工作機理是,在FPGA內部定制一塊存有4KB已知數據的嵌入式ROM。該ROM在時鐘CLK和循環地址計數器的作用下輸出數據流,該數據流經過待驗證的FIFO緩存后,通過串口發送到上位機上顯示。通過比較上位機接收到的數據與ROM中存儲的數據是否一致,便可以判斷系統設計是否正確。
    分別對不同位寬的FIFO,通過改變ROM的時鐘CLK模擬生成FIFO的高低速率輸入數據流,進行反復的實驗測試,結果表明上位機上接收到的數據與ROM中存儲的數據是一致的。
參考文獻
[1] 金明,羅飛路,朱霞飛.FIFO芯片在高速系統中的應用[J].電子技術應用,1998,24(3):61-62.
[2] 郭照南,李儒峰.FIFO 芯片AL422B在視頻系統中的應用[J].湖南工程學院學報, 2002,12(1):37-38.
[3] 徐欣,周舟,李楠,等.基于DDR2 SDRAM的高速大容量異步FIFO的設計與實現[J].中國測試,2009,35(6):34-37.
[4] Memory interface solutions user guide. http://www.xilinx.com/support/documentation/ip_documentation/ug086.pdf.
[5] LogiCORE? IP FIFO Generator v6.2. http://www.xilinx.com/support/documentation/ip_documentation/fifo_generator_ug175.pdf.

此內容為AET網站原創,未經授權禁止轉載。
主站蜘蛛池模板: 免费欧美一级 | 国产亚洲视频在线播放大全 | 国产一级大片在线观看 | 国产成人综合亚洲欧美天堂 | 欧美看片网站 | 精品久久久久久中文字幕无碍 | 色www精品视频在线观看 | 欧美在线视频一区在线观看 | 国产精品亚洲片在线牛牛影视 | 九九这里只有精品视频 | 欧美巨大精品欧美一区二区 | 丁香花在线视频 | 娼年免费在线观看 | 国产精品观看在线亚洲人成网 | 国产美女久久久久 | 免费在线亚洲视频 | 国产福利99 | 欧美亚洲另类久久综合 | 国产区福利 | 综合婷婷 | 国产视频一区在线 | 色视频在线免费观看 | 欧美日韩色 | 一级毛片免费视频观看 | 五月婷婷六月爱 | 精品999久久久久久中文字幕 | 日本久久综合视频 | 99re在线视频观看 | 国产免费69成人精品视频 | 国产一级毛片网站 | 久久精品视频免费 | 久青草视频免费观看青 | 色视频网站色视频播放 | 四虎网站在线观看 | 精品在线视频免费观看 | 99国产精品欧美久久久久久影院 | 国产成人精品久久免费动漫 | 澳门永久av免费网站 | 亚洲 欧美 中文 日韩专区 | 成年女人色费视频免费 | 1区1区3区4区产品亚洲 |