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