隋旭陽,賴文娟,李 健
(中國兵器裝備集團自動化研究所 武器裝備信息與控制技術研發(fā)中心, 四川 綿陽 621000)
隨著現(xiàn)代圖像處理領域的高速發(fā)展,對高分辨率、高幀頻圖像數(shù)據(jù)進行高速、大容量、實時處理的要求越來越高,F(xiàn)PGA憑借其結構靈活、集成度高等優(yōu)勢,便于實現(xiàn)硬件邏輯接口的設計,完成高速、大數(shù)據(jù)量的圖像處理。基于FPGA的高速圖像采集系統(tǒng)需要與之相匹配的數(shù)據(jù)緩存設計,DDR3 SDRAM成為當前最常用的高效解決方案[1-3]。
DDR(Double Data Rate SDRAM)是雙倍速率同步動態(tài)隨機存儲器,雙倍速率存取即為數(shù)據(jù)在工作時鐘的上升沿和下降沿都會進行采樣,有效地提升了存儲速率。DDR SDRAM在經(jīng)歷了DDR、DDR2階段后,在DDR3階段系統(tǒng)性能有了明顯提升[4-6]。一方面核心工作電壓由1.8 V降低為1.5 V,大幅度降低了系統(tǒng)功耗。另一方面,DDR3的內(nèi)存模式也有了很大的改進:邏輯Bank數(shù)量由DDR2的4個增加為8個;突發(fā)長度增加為8 bit,并采用更為靈活的突發(fā)傳輸控制;增加了ZQ校準功能,從而大大提高了存儲信號的完整性[7-9]。
結合Xilinx提供的MIG 7 Series 4.0 IP核,本文給出了一種利用Verilog HDL語言設計DDR3 SDRAM用戶接口的方法,采用類FIFO的封裝方式優(yōu)化了與MIG IP核信號互聯(lián)的用戶接口,用戶只需要控制數(shù)據(jù)向FIFO寫入和從FIFO讀出,無需再對內(nèi)存控制器的眾多控制信號進行操作,為實現(xiàn)DDR3數(shù)據(jù)流的緩存提供了便利。
針對高速圖像數(shù)據(jù)采集系統(tǒng)的應用,創(chuàng)新地提出了基于DDR3 SDRAM存儲地址的讀寫控制方法,更加靈活地處理數(shù)據(jù)在DDR3中的緩存。
根據(jù)Xilinx提供的IP核用戶手冊介紹,用戶首先需要在MIG IP核配置頁面對DDR3芯片型號、數(shù)據(jù)位寬、引腳分配等參數(shù)進行設置。設置完成后即可得到Xilinx 官方提供的DDR3控制器接口解決方案[10-11]。解決方案如圖1所示。
該方案由用戶邏輯控制模塊、用戶接口模塊[12-13]、內(nèi)存控制模塊和物理層接口模塊4個部分組成。
1) 用戶邏輯控制模塊。用戶自己設計的DDR3邏輯控制模塊與位于IP核最前端的用戶接口模塊對接,即可通過用戶接口模塊控制DDR3進行讀寫操作。
2) 內(nèi)存控制模塊。內(nèi)存控制模塊[14]位于用戶接口模塊和物理層模塊之間,其前端為用戶接口模塊提供連接至IP核的本地接口,該接口可為用戶提交對存儲器的讀寫請求,并提供了用戶設計模塊與外部存儲設備DDR3之間的數(shù)據(jù)傳輸機制;內(nèi)存控制器后端連接至物理層接口,并處理所有物理層模塊的接口請求。
3) 物理層接口。物理層接口[15]前端連接至內(nèi)存控制器模塊,后端通過物理引腳連接外部存儲設備DDR3,其主要功能是將內(nèi)存控制模塊輸入的所有DDR3的控制信號、地址信號以及數(shù)據(jù)信號緩存,產(chǎn)生DDR3所需要的控制指令信號,保證指令與地址、數(shù)據(jù)的同步和信號的維持,并捕獲DDR3發(fā)出的數(shù)據(jù),傳輸給內(nèi)存控制模塊。
用戶接口模塊在MIG IP核配置頁面中對DDR3的參數(shù)進行設置時已經(jīng)確定,用戶邏輯控制模塊主要工作是控制圖1所示的用戶接口信號,進而控制DDR3讀寫操作。
1) 讀操作。在進行讀操作時,用戶接口模塊準備信號app_rdy,使能信號app_en高使能,寫地址信號app_addr與命令信號app_cmd有效,更新讀地址。讀操作時序如圖2所示。數(shù)據(jù)會延時有效輸出,延時由IP核自動確定給出[12]。
2) 寫操作。若要成功進行寫操作,必須保證寫地址和寫數(shù)據(jù)都有效。當用戶接口準備信號app_rdy和使能信號app_en高使能,保證了寫操作命令app_cmd以及寫地址信號app_addr有效。當app_wdf_rdy信號和app_wdf_wren信號高使能時,保證了寫入數(shù)據(jù)的app_wdf_data信號有效[13]。寫操作對應的時序如圖3所示。另外,根據(jù)用戶手冊介紹,寫地址和寫數(shù)據(jù)不必同時有效,可以相差幾個周期[10]。
由于IP核提供的DDR3用戶接口信號邏輯復雜,為提升用戶使用的方便性,對DDR3 SDRAM用戶接口進行優(yōu)化,引入讀、寫FIFO和讀寫邏輯控制模塊,屏蔽掉了DDR3 IP核復雜的用戶接口,設計如圖4所示的接口封裝,使得用戶使用時只需控制數(shù)據(jù)能正確存入寫FIFO以及從讀FIFO中讀取使用,不再需要對內(nèi)存控制器的眾多控制信號進行操作。由此,DDR3用戶接口優(yōu)化的關鍵是為讀寫邏輯控制模塊提供解決方法[16-17]。
簡易的讀寫控制方法,是利用Xilinx提供FIFO的IP核中可編程標識信號建立讀寫控制狀態(tài)機,控制數(shù)據(jù)寫入、讀出等操作。利用寫FIFO編程空標識信號和讀FIFO編程滿標識信號判斷狀態(tài)機的讀寫切換,邏輯簡單,讀寫高效,避免了頻繁的讀寫切換操作以保證較高的讀寫效率。
該方法將DDR3視作大容量數(shù)據(jù)的“蓄水池”,使用中只需合理控制讀寫切換,避免數(shù)據(jù)溢出,即可完成高效讀寫。該方法優(yōu)點是簡化了DDR3使用時眾多的讀寫控制信號和讀寫邏輯判斷,寫FIFO模塊用來接收數(shù)據(jù),讀FIFO模塊用來輸出從DDR3內(nèi)讀取的數(shù)據(jù),F(xiàn)IFO邏輯控制模塊用來控制DDR3的讀寫操作,合理切換讀寫狀態(tài),保證讀寫效率。采用類FIFO封裝方式的讀寫控制狀態(tài)機邏輯簡單,大幅度地減少用戶繁雜的控制操作,可應用于高速、大容量的數(shù)據(jù)緩存。
針對圖像數(shù)據(jù)存儲的應用,為提升DDR3使用的靈活性,本文在簡易的讀寫控制方法基礎上進行了改進,提出了基于DDR3 SDRAM存儲地址的讀寫控制方法,需要通過FIFO計數(shù)器對FIFO中緩存的數(shù)據(jù)狀態(tài)進行判斷,生成讀寫控制命令,進而通過發(fā)送讀寫控制命令控制DDR3讀寫操作,將用戶設定的一定數(shù)量的數(shù)據(jù)寫入用戶指定的DDR3的地址空間位置中,并通過讀寫切換操作讀出使用。設計的狀態(tài)機有3種狀態(tài),IDLE狀態(tài)為初始狀態(tài),該狀態(tài)下不進行讀寫操作,WRITE狀態(tài)下進行寫操作,READ狀態(tài)下進行讀操作。方案設計如圖5所示。狀態(tài)機的讀寫切換如圖6所示。
基于DDR3 SDRAM存儲地址的讀寫控制方法將DDR3作為大容量數(shù)據(jù)的“收納盒”。對于DDR3的使用,在邏輯控制上實現(xiàn)了更加精確的基于DDR3存儲地址位置的讀寫控制。每一次的寫操作都可以將用戶設定的數(shù)據(jù)量存儲到用戶指定的存儲地址位置中,讀操作也可以根據(jù)用戶控制將所需地址空間的數(shù)據(jù)讀出使用,充分發(fā)揮DDR3存儲的靈活性,增強用戶的可操作性。此外,精確的基于DDR3存儲地址位置的讀寫控制為圖像的每一處數(shù)據(jù)存儲提供良好的定位,用戶可根據(jù)后端顯示、處理需求進行調整,使圖像的顯示和后端處理更加方便。該方法為多路視頻源的圖像存儲提供了參考。
對上述兩種設計進行板級驗證以確??煽啃?。在Kintex-7 xc7k325t的FPGA上進行了高速圖像數(shù)據(jù)采集與顯示的實現(xiàn)。選用DDR3 SDRAM型號為MT41K256M16XX-125,視頻圖像來源于模擬源生成器,分辨率為1 920×1 080,幀頻200 Hz,視頻圖像經(jīng)DDR3存儲和幀率轉換后,得到穩(wěn)定的VGA顯示,如圖7所示。同時由于模塊化、通用化、參數(shù)化設計,可以通過頂層模塊的參數(shù)配置實現(xiàn)多種分辨率圖像視頻的顯示。
采用VIVADO軟件的ILA對兩種方法分別抓取數(shù)據(jù)進行測試。如圖8、圖9所示。
設計中對DDR3的讀寫,采用的是順序讀寫,數(shù)據(jù)位寬為32bit,理論帶寬為4 000 MB/s。在圖9中,ddr_write_address對應視頻通道的數(shù)據(jù)寫入地址,ddr_read_address對應讀出數(shù)據(jù)地址,每次寫入地址增減量為F0 H,即為240個十進制地址;在387~568時間周期內(nèi),共寫入、讀出數(shù)據(jù)3次,時間周期為8 ns,可計算帶寬為:
效率為:1 988.95÷4 000×100%=49.7%。
從圖9發(fā)現(xiàn),在數(shù)據(jù)緩存過程中有很長時間是在等待視頻源數(shù)據(jù),造成帶寬未利用。應用中,可達到70%以上的讀寫效率。
本文結合Xilinx提供的MIG_v1.9 IP核,首先講解Xilinx提供的7系列FPGA內(nèi)存控制器接口解決方案;其次,為提升用戶使用的方便性,避免繁雜的控制操作,引入讀、寫FIFO和讀寫邏輯控制模塊進行用戶接口優(yōu)化;最后,在簡易的讀寫控制方法的基礎上,提出了基于DDR3 SDRAM存儲地址的讀寫控制方法,提升DDR3使用的靈活性。兩種設計進行板級驗證,實現(xiàn)了高速圖像數(shù)據(jù)采集與顯示,工作穩(wěn)定可靠,參數(shù)化的頂層設計更加方便用戶對不同分辨率需求地修改,具有較強的可移植性。基于DDR3 SDRAM存儲地址的讀寫控制方法為多路視頻源的圖像存儲提供了參考。
[1] 代耀東,蘇彥辰.基于FPGA的高速數(shù)據(jù)采集系統(tǒng)設計[J].兵器裝備工程學報,2012,33(6):89-91.
[2] 宋明,趙英瀟,林錢強.基于FPGA的DDR3 SDRAM控制器的設計與優(yōu)化[J].電子科技,2016,29(11):47-50.
[3] 陳一波,楊玉華,王紅亮,等.基于DDR3-SDRAM的圖像采集與顯示系統(tǒng)[J].電子器件,2017,40(3):702-707.
[4] 董岱岳.基于FPGA的DDR3 SDRAM控制器設計[D].濟南:山東大學,2015.
[5] 焦淑紅,程仁濤.基于FPGA的DDR3控制器設計[J].電子科技,2015,28(7):41-43.
[6] 畢然.基于DDR3的CMOS高速圖像采集系統(tǒng)的FPGA設計與實現(xiàn)[D].哈爾濱:哈爾濱理工大學,2017.
[7] 丁寧,馬游春,秦麗,等.基于FPGA的DDR3-SDRAM控制器用戶接口設計[J].科學技術與工程,2014,17(14):225-229.
[8] 王正宇.DDR3內(nèi)存控制器的IP核設計及FPGA驗證[D].蘭州:蘭州交通大學,2012.
[9] 高勝.高速采樣數(shù)據(jù)存儲控制器的設計與實現(xiàn)[D].成都:電子科技大學,2016.
[10] XILINX C.Xilinx corporation 7 series devices memory interface solutions (UG586)[M].PD,USA:Xilinx Corporation,2013.
[11] 吳連慧,周建江,夏偉杰.基于FPGA的DDR3多端口讀寫存儲管理設計[J].單片機與嵌入式系統(tǒng)應用,2015,15(1):71-74.
[12] 宗凱.基于FPGA的DDR3控制器設計[J].電子測量技術,2017,40(1):118-122.
[13] 潘一飛,余海.基于FPGA的DDR3用戶接口設計[J].電子制作,2013(15):9-10.
[14] 張剛,賈建超,趙龍.基于FPGA的DDR3 SDRAM控制器設計與實現(xiàn)[J].電子科技,2014,27(1):70-73.
[15] 吳進,劉路.同步動態(tài)隨機存儲器的控制器設計與實現(xiàn)[J].西安郵電大學學報,2012,17(5):78-80.
[16] 王紅兵,強景,周珍龍.Xilinx MIG IP核的研究及大容量數(shù)據(jù)緩沖區(qū)的實現(xiàn)[J].電子產(chǎn)品世界,2016,23(8):43-46.
[17] 任敏.多通道高速數(shù)據(jù)轉發(fā)系統(tǒng)的設計與實現(xiàn)[D].成都:電子科技大學,2016.
[18] 張素萍,李朝強,張建芬. 一種高速實時數(shù)據(jù)采集處理系統(tǒng)設計[J].火力與指揮控制,2016(7):125-129.