高速圖像處理系統(tǒng)中DDR2-SDRAM接口的設(shè)計(jì)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
摘要:為了滿足高速圖像處理系統(tǒng)中需要高接口帶寬和大容量存儲(chǔ)的目的,采用了FPGA外接DDR2-SDRAM的設(shè)計(jì)方法,提出一種基于VHDL語言的DDR2-SDRAM控制器的方案,針對(duì)高速圖像處理系統(tǒng)中的具體情況,在Xilinx的ML506開發(fā)板上搭建了簡(jiǎn)單的圖像處理系統(tǒng)平臺(tái)并進(jìn)行了連續(xù)讀/寫標(biāo)準(zhǔn)VGA格式圖像數(shù)據(jù)的實(shí)驗(yàn),在顯示端得到了清晰不掉幀的圖像結(jié)果,具有結(jié)構(gòu)簡(jiǎn)單和高速存取圖像的特點(diǎn)。
關(guān)鍵詞:圖像處理;DDR2-SDRAM控制器;FPGA;緩存設(shè)計(jì)
0 引言
隨著電子信息技術(shù)的快速發(fā)展,數(shù)字信號(hào)處理技術(shù)的應(yīng)用越來越廣泛,一般而言,同屬于數(shù)字信號(hào)處理的圖像系統(tǒng)處理帶寬遠(yuǎn)高于控制及雷達(dá)信號(hào)處理系統(tǒng)??刂祁I(lǐng)域的信號(hào)采樣頻率一般低于1 MHz,雷達(dá)信號(hào)采樣頻率可以高達(dá)幾百M(fèi)Hz,但經(jīng)過硬件(ASIC)下變頻處理后,也不高于1 MHz。而圖像系統(tǒng)的處理帶寬一般在幾十兆至幾百兆字節(jié)每秒。所以高處理帶寬是圖像處理系統(tǒng)設(shè)計(jì)中必須考慮的問題,高處理帶寬帶來的另外一個(gè)問題是緩存設(shè)計(jì),顯然系統(tǒng)中的緩存也應(yīng)該具有較高帶寬。同時(shí)在圖像處理系統(tǒng)中,特別是高幀頻圖像處理系統(tǒng)中是需要大容量緩存的??刂萍袄走_(dá)領(lǐng)域一般需要的緩存為幾KB到幾十KB,而圖像處理至少需要2幀圖像以實(shí)現(xiàn)乒乓緩存,在圖像處理時(shí)間超過幀獲取時(shí)間時(shí),需要3幀緩存以保證系統(tǒng)累積丟幀而非一旦超時(shí)就發(fā)生丟幀。
在實(shí)際工作中,高幀頻圖像的高處理帶寬和大存儲(chǔ)需求往往需要結(jié)合起來考慮,集中體現(xiàn)在外掛緩存的選擇與設(shè)計(jì)上,較成熟的方案有SRAM,SDRAM,DDR,DDR2,DDR3等,其中DDR3有最高接口帶寬和存儲(chǔ)深度,考慮到具體情況,選用僅次于DDR3的DDR2與FPGA實(shí)現(xiàn)接口,可以滿足高速圖像處理系統(tǒng)對(duì)高接口帶寬和大容量存儲(chǔ)的要求。
DDR2 SDRAM是由JEDEC(電子設(shè)備工程聯(lián)合委員會(huì))進(jìn)行開發(fā)的內(nèi)存技術(shù)標(biāo)準(zhǔn),工作電壓是1.8 V,采用了在時(shí)鐘的上升/下降沿同時(shí)進(jìn)行數(shù)據(jù)傳輸?shù)幕痉绞?。DDR2具有4 b預(yù)讀取速度,即DDR2內(nèi)存每個(gè)時(shí)鐘能夠以4倍外部總線的速度讀/寫數(shù)據(jù),同時(shí)DDR2的數(shù)據(jù)傳輸可以支持400 MHz,533 MHz,667 MHz的傳輸率。
文中在介紹DDR2的工作原理的基礎(chǔ)上,給出了一個(gè)用VHDL語言設(shè)計(jì)的DDR2 SDRAM控制器的方法,并且提出了一種在高速圖像處理系統(tǒng)中DDR2 SDRAM的應(yīng)用方案,同時(shí)在Virtex-5系列的FPGA上得到了實(shí)現(xiàn)。
1 DDR2-SDRAM控制器的操作原理與設(shè)計(jì)
1.1 DDR2-SDRAM的操作原理
DDR2 SDRAM是運(yùn)用DDR結(jié)構(gòu)來達(dá)到高速操作。本文采用的DDR2-SDRAM是Micron的MT4H3264HY-53ED3。這款DDR2的存儲(chǔ)空間為256 MB,由4片容量為512 Mb的內(nèi)存芯片構(gòu)成。每個(gè)芯片的數(shù)據(jù)位寬為16 b,有4 bank,13條行地址線,10條列地址線,因此每個(gè)內(nèi)存芯片容量為8 192×
1 024×4×16 b,即512 Mb。4片組成起來就構(gòu)成了MT4H3264HY-53ED3的64 b位寬。
DDR2 SDRAM的操作主要通過以下控制信號(hào)給出:行地址選擇信號(hào)(),列地址選擇信號(hào)(),寫使能信號(hào)(),時(shí)針使能信號(hào)(CKE),片選擇信號(hào)()。各種指令不同的組合方式完成不同的功能。表1為各種指令完成的組合方式。
1.1.1 Load Mode指令
用來配置DDR2內(nèi)存的模式寄存器,包括一個(gè)主模式寄存器及3個(gè)擴(kuò)展模式寄存器,它們被用來設(shè)定內(nèi)存的工作方式,包括突發(fā)長(zhǎng)度的選擇、突發(fā)的類型、CAS延遲、CAS附加延遲、DLL使能、ODT設(shè)置、OCD設(shè)置以及DQS設(shè)置等。
1.1.2 Precharge指令
預(yù)充電指令是用來重新激活bank中已經(jīng)打開的行。在預(yù)充電指令發(fā)出后,當(dāng)前bank必須等待一個(gè)特定的時(shí)間(tRP)后才可以再次激活。
1.1.3 自動(dòng)刷新指令
DDR2 SDRAM內(nèi)存需要每7.8μs刷新一次。自動(dòng)刷新不需要外部提供行地址信息,DDR2 SDRAM內(nèi)部有一個(gè)行地址生成器(也稱刷新計(jì)數(shù)器)用來自動(dòng)的依次生成行地址。由于刷新是針對(duì)一行中所有的存儲(chǔ)體進(jìn)行,所以無需列地址。在進(jìn)入自動(dòng)刷新模式前,所有的bank必須都處于預(yù)充電狀態(tài),自動(dòng)刷新指令在預(yù)充電指令后延遲tRP才能給出。
1.1.4 Active指令
Active用來激活bank中的某一行。在對(duì)DDR2內(nèi)存進(jìn)行讀/寫之前,都必須執(zhí)行該指令把bank中的某一行激活。激活命令到讀/寫命令之間的最小延遲由AL決定,當(dāng)AL為0時(shí),最小延遲由tRCD(RAS to CAS delay)決定。當(dāng)AL不為0時(shí),激活命令到讀/寫命令之間的最小延遲就可以不受tRCD限制,讀/寫命令可以提前,但其實(shí)最后數(shù)據(jù)的讀/寫并不提前,這樣可以提高總線的利用率。
需要注意的是,當(dāng)要激活同一bank中不同的行時(shí),必須先對(duì)原來激活的行進(jìn)行預(yù)充電,才能激活新的行。同一bank中連續(xù)的active命令之間的間隔必須受tRC(RAS cycle time)的控制。
1.1.5 Read指令
讀指令是用來對(duì)DDR2內(nèi)存進(jìn)行讀操作,并對(duì)突發(fā)讀進(jìn)行初始化。其中BA0和BA1給出bank地址,A0~A1給出起始列地址。突發(fā)讀結(jié)束后,激活的行在預(yù)充之前繼續(xù)保持有效,直到該行被預(yù)充電。從列選擇到數(shù)據(jù)輸出的延遲為CAS延遲(CL),整個(gè)讀延遲等于AL+CL。讀操作時(shí)由內(nèi)存給出一個(gè)與數(shù)據(jù)同步的數(shù)據(jù)濾波信號(hào)DQS,它的邊沿與讀取的數(shù)據(jù)邊沿對(duì)齊。
1.1.6 Write指令
Write指令用來控制DDR2內(nèi)存進(jìn)行寫操作,并給出burst寫的起始地址。其中BA0和BA1給出bank地址,A0~A1給出起始列地址。整個(gè)寫延遲為讀延遲減去一個(gè)時(shí)鐘周期,即寫延遲等于AL+CL-1。寫操作時(shí),控制器同樣給出一個(gè)與數(shù)據(jù)同步的數(shù)據(jù)濾波信號(hào)DQS,它的邊沿與寫數(shù)據(jù)的中間對(duì)齊。
1.1.7 Idle指令
用來使DDR2內(nèi)存處于空閑無操作狀態(tài)。
1.2 DDR2-SDRAM控制器的設(shè)計(jì)
本文中的DDR2 SDRAM控制器是采用VHDL硬件描述語言設(shè)計(jì)的,主要由4部分組成:用戶界面模塊(User Interface)、基礎(chǔ)模塊(infrast-ructure)、物理層模塊(Physical layer)和存儲(chǔ)控制模塊(Controller)。DDR2-SDRAM控制器的設(shè)計(jì)原理框圖如圖1所示。
時(shí)鐘生成模塊用來產(chǎn)生控制器中所有模塊的時(shí)鐘信號(hào)。外部用戶時(shí)鐘通過數(shù)字時(shí)鐘管理器(DCM)進(jìn)行處理后,輸出0度和90度的時(shí)鐘。同時(shí)該包括了一個(gè)延遲校準(zhǔn)模塊,是用來校準(zhǔn)讀數(shù)據(jù)(DQ)對(duì)讀數(shù)據(jù)選通脈沖(DQS)的延遲,以便DQS的邊沿能正確對(duì)齊DQ有效窗口的中間位置。
用戶接口模塊主要包括讀/寫數(shù)據(jù)和地址三類FIFO,用來接收和存儲(chǔ)用戶的數(shù)據(jù),命令和地址等信息,起到緩沖和同步數(shù)據(jù)的作用??刂破髂K生成該模塊所需要的控制信號(hào)。
物理層模塊負(fù)責(zé)在控制信號(hào)的約束下完成用戶訪問地址與訪問指令的解釋與匹配,產(chǎn)生DDR2 SDRAM所需的控制指令信號(hào),并保證指令與地址,數(shù)據(jù)的同步和信號(hào)的維持。
控制模塊主要實(shí)現(xiàn)的功能為:在系統(tǒng)上電過程及系統(tǒng)意外復(fù)位發(fā)生時(shí),與初始化模塊配合,對(duì)控制器和所控制的DDR2進(jìn)行初始化設(shè)置,復(fù)位延時(shí)保護(hù)等:在系統(tǒng)正常工作時(shí),進(jìn)行系統(tǒng)讀/寫請(qǐng)求指令的接收、應(yīng)答,對(duì)系統(tǒng)訪問地址的采樣與同步,完成所需的所有狀態(tài)轉(zhuǎn)換、任務(wù)調(diào)度、總線仲裁、時(shí)序同步,并為用戶接口模塊、物理層模塊產(chǎn)生相應(yīng)的控制信號(hào),為系統(tǒng)提供控制器狀態(tài)指示信號(hào)??刂破鞯臓顟B(tài)機(jī)結(jié)構(gòu)如圖2所示。
2 圖像處理系統(tǒng)中DDR2接口的設(shè)計(jì)
DDR2作為整個(gè)圖像處理系統(tǒng)的緩存,起著至關(guān)重要的作用。它將外部輸入的圖像按幀存入DDR2中,然后按幀將圖像數(shù)據(jù)送到外部繼續(xù)處理。基于單片F(xiàn)PGA的控制邏輯所需要完成的功能可以簡(jiǎn)單的概述如下:
(1)接收來自外部的圖像數(shù)據(jù),并進(jìn)行緩沖和數(shù)據(jù)重排,產(chǎn)生符合DDR2-SDRAM控制器位寬的數(shù)據(jù)信號(hào)。
(2)產(chǎn)生對(duì)DDR2-SDRAM的讀/寫命令和地址,并將它們寄存在FIFO中,隨時(shí)供DDR2控制器提取,因此系統(tǒng)需要一個(gè)地址產(chǎn)生邏輯。
(3)對(duì)DDR2-SDRAM進(jìn)行直接控制,將用戶產(chǎn)生的地址命令進(jìn)行解析,產(chǎn)生讀/寫、刷新等一系列操作,對(duì)DDR2-SDRAM發(fā)出的各種命令要符合特定的時(shí)序要求。在上電的時(shí)候還必須完成對(duì)DDR2-SDRAM的初始化工作。
(4)建立用戶與DDR2-SDRAM的數(shù)據(jù)通道,在DDR2-SDRAM和用戶接口之間傳遞需要寫入或者讀出的數(shù)據(jù),并且調(diào)整對(duì)應(yīng)讀/寫操作的DQS信號(hào)時(shí)序,使其滿足DDR2-SDRAM的要求。
(5)緩存從DDR2-SDRAM中讀出的數(shù)據(jù),由于直接讀出的速度非常高,直接處理會(huì)對(duì)后端產(chǎn)生很大的壓力,因此需要進(jìn)行緩存之后才送到后續(xù)處理。
由上面的描述可以看出,控制邏輯所要完成的功能是相當(dāng)復(fù)雜的,因此我們采用模塊化的設(shè)計(jì)方案。FPGA的控制邏輯功能劃分圖如圖3所示。
2.1 時(shí)鐘生成模塊
時(shí)鐘生成模塊主要負(fù)責(zé)整個(gè)系統(tǒng)的所有時(shí)鐘,包括DDR2控制器所需要的時(shí)鐘,外部圖像所需的時(shí)鐘。全部由DCM來產(chǎn)生。
2.2 數(shù)據(jù)接口模塊
數(shù)據(jù)接口模塊主要是負(fù)責(zé)不同數(shù)據(jù)之間格式的轉(zhuǎn)換,這個(gè)模塊主要是考慮到輸入端的數(shù)據(jù)的不同格式,必須經(jīng)過格式轉(zhuǎn)換才能符合DDR2位寬的數(shù)據(jù)。
2.3 輸入/輸出緩存模塊
輸入/輸出緩存模塊是采用V5器件的DRAM來實(shí)現(xiàn)FIFO的,輸入緩存是由兩個(gè)DRAM來完成的,DRAM配置為12×1 024,12為數(shù)據(jù)寬度,1 024為存儲(chǔ)深度,這個(gè)配置是根據(jù)具體圖像的位寬和每行的像素點(diǎn)來設(shè)定的。在這里暫定的圖像源是標(biāo)準(zhǔn)的VGA圖像,其大小為800×600。數(shù)據(jù)源每寫入一行數(shù)據(jù)(800個(gè)數(shù)),然后讀出一行數(shù)據(jù)??紤]到系統(tǒng)的穩(wěn)定性,采用兩個(gè)FIFO交替的讀/寫數(shù)據(jù),也就是所謂的乒乓操作,如圖4所示,當(dāng)一個(gè)FIFO在讀時(shí),另一個(gè)FIFO就寫,然后交替讀/寫。在每一個(gè)FIFO讀完數(shù)據(jù)后,對(duì)其清零。這樣就保證每一次寫入的數(shù)據(jù)不相互干擾,保證了系統(tǒng)的穩(wěn)定性。其中的輸入/輸出選擇單元是通過判斷VGA圖像的行數(shù)來判斷寫和讀哪個(gè)FIFO的。
除了緩存數(shù)據(jù),F(xiàn)IFO在本模塊的另一個(gè)重要的作用就是時(shí)鐘域的轉(zhuǎn)換。外部的輸入數(shù)據(jù)和輸出數(shù)據(jù)的時(shí)鐘都是40 MHz,而DDR2的讀/寫數(shù)據(jù)時(shí)鐘是100 MHz的,這樣就存在著時(shí)鐘域的轉(zhuǎn)換問題,由于FIFO的讀/寫可以用不同的時(shí)鐘。在輸入端,就可以用40 MHz的時(shí)鐘把數(shù)據(jù)寫入FIFO,然后用100 MHz的時(shí)鐘從FIFO讀出數(shù)據(jù)。在輸出端可以用100 MHz的時(shí)鐘把從DDR2讀出的數(shù)據(jù)送入FIFO,然后再用40 MHz的時(shí)鐘從FI-FO中讀出數(shù)據(jù),送到VGA顯示。但是由于讀入與寫出的時(shí)鐘頻率不一樣,很容易出現(xiàn)FIFO讀空和寫滿的問題。該問題的一般解決方法是利用FIFO的ALMOSTFULL和ALMOSTEMPTY來解決。在這個(gè)系統(tǒng)中,考慮到輸入的數(shù)據(jù)源和VGA顯示的時(shí)鐘頻率都是40 MHz,所以采用VGA數(shù)據(jù)有效信號(hào)來控制FIFO的寫,行消隱信號(hào)來控制輸入FIFO的讀,即每來一行數(shù)據(jù)才讀一行數(shù)據(jù),這樣就保證了輸入FIFO不會(huì)讀空。而輸出FIFO的寫是通過DDR2內(nèi)部的讀數(shù)據(jù)有效位來控制的,因?yàn)镈DR2內(nèi)部的操作是寫1行,讀1行,所以在寫入FIFO一行數(shù)據(jù)后,要等到下一行到來后,才會(huì)往輸出FIFO寫入數(shù)據(jù),所以也就解決了輸出FIFO寫滿的問題。
2.4 DDR2-SDRAM控制模塊
DDR2-SDRAM的讀/寫控制是整個(gè)系統(tǒng)的關(guān)鍵。由于要緩存圖像,所以就必須在DDR2里面開辟兩個(gè)大小相同的存儲(chǔ)單元。這兩個(gè)存儲(chǔ)單元的大小是根據(jù)一幀圖像的大小來開辟的,其大小為800×600個(gè)存儲(chǔ)單元。對(duì)DDR2的存儲(chǔ)操作為先向第一個(gè)存儲(chǔ)單元寫入第一行數(shù)據(jù),讀出第二個(gè)存儲(chǔ)單元的第一行數(shù)據(jù)。當(dāng)寫滿第一個(gè)存儲(chǔ)單片后,第二個(gè)存儲(chǔ)單元也被讀空,這時(shí)候交換讀/寫地址,讀一個(gè)存儲(chǔ)單元,寫第二個(gè)存儲(chǔ)單元,依次輪換。
由于圖像數(shù)據(jù)具有消隱時(shí)間,我們可以在場(chǎng)消隱的這段時(shí)間里來交換讀/寫地址。讀/寫控制的具體操作如圖5所示。
3 實(shí)驗(yàn)結(jié)果
為了測(cè)試基于DDR2的圖像存儲(chǔ)性能,外部輸入圖像源選用標(biāo)準(zhǔn)VGA格式的圖像,外部輸出端接到DVI接口,DVI外接一般的CRT顯示器。D-VI接口的顯示芯片是CH7301,通過配置這個(gè)芯片的寄存器選擇其VGA模式。配置這個(gè)芯片寄存器的操作是通過I2C總線來達(dá)到的。這里選用Xi-linx公司的Virtex-5器件與Micron公司的DDR2 SDRAM顆粒MT4H3264HY-53ED3搭建了實(shí)驗(yàn)的硬件平臺(tái)。
在輸入端的VGA數(shù)據(jù)源產(chǎn)生的圖像為800×600,幀頻為60/幀,底色為全黑,5×5個(gè)像素點(diǎn)的白色正方形圖像,其中白色正方形每幀以50個(gè)像素點(diǎn)距離移動(dòng),在CRT顯示端我們可以看見輸出端的圖像比輸入端的圖像延遲一幀。實(shí)驗(yàn)證明了設(shè)計(jì)是正確的。實(shí)驗(yàn)結(jié)果如圖6所示。
4 結(jié)語
通過具體的實(shí)測(cè),其DDR2的最高工作頻率為266MHz,并且在200 MHz主頻下,其64位的數(shù)據(jù)傳輸速率達(dá)到了3.2 GB/s,并且能正確的存儲(chǔ)圖像,滿足了在高幀頻圖像處理系統(tǒng)中緩存的應(yīng)用。解決了基于FPGA的高速圖像處理系統(tǒng)中圖像緩存的難點(diǎn),為基于FPGA的高幀頻圖像處理,包括圖像旋轉(zhuǎn),圖像切割等的實(shí)現(xiàn)打下了良好的基礎(chǔ)。