摘要:為了滿足高速圖像處理系統(tǒng)中需要高接口帶寬和大容量存儲(chǔ)的目的,采用了FPGA外接DDR2-SDRAM的設(shè)計(jì)方法,,提出一種基于VHDL語(yǔ)言的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)用越來(lái)越廣泛,一般而言,,同屬于數(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)過(guò)硬件(ASIC)下變頻處理后,,也不高于1 MHz。而圖像系統(tǒng)的處理帶寬一般在幾十兆至幾百兆字節(jié)每秒,。所以高處理帶寬是圖像處理系統(tǒng)設(shè)計(jì)中必須考慮的問(wèn)題,,高處理帶寬帶來(lái)的另外一個(gè)問(wèn)題是緩存設(shè)計(jì),顯然系統(tǒng)中的緩存也應(yīng)該具有較高帶寬,。同時(shí)在圖像處理系統(tǒng)中,,特別是高幀頻圖像處理系統(tǒng)中是需要大容量緩存的??刂萍袄走_(dá)領(lǐng)域一般需要的緩存為幾KB到幾十KB,,而圖像處理至少需要2幀圖像以實(shí)現(xiàn)乒乓緩存,在圖像處理時(shí)間超過(guò)幀獲取時(shí)間時(shí),,需要3幀緩存以保證系統(tǒng)累積丟幀而非一旦超時(shí)就發(fā)生丟幀,。
在實(shí)際工作中,高幀頻圖像的高處理帶寬和大存儲(chǔ)需求往往需要結(jié)合起來(lái)考慮,,集中體現(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語(yǔ)言設(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)來(lái)達(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片組成起來(lái)就構(gòu)成了MT4H3264HY-53ED3的64 b位寬。
DDR2 SDRAM的操作主要通過(guò)以下控制信號(hào)給出:行地址選擇信號(hào)(),,列地址選擇信號(hào)(),,寫使能信號(hào)(),時(shí)針使能信號(hào)(CKE),,片選擇信號(hào)(),。各種指令不同的組合方式完成不同的功能。表1為各種指令完成的組合方式,。
1.1.1 Load Mode指令
用來(lái)配置DDR2內(nèi)存的模式寄存器,,包括一個(gè)主模式寄存器及3個(gè)擴(kuò)展模式寄存器,它們被用來(lái)設(shè)定內(nèi)存的工作方式,,包括突發(fā)長(zhǎng)度的選擇,、突發(fā)的類型、CAS延遲,、CAS附加延遲,、DLL使能、ODT設(shè)置,、OCD設(shè)置以及DQS設(shè)置等,。
1.1.2 Precharge指令
預(yù)充電指令是用來(lái)重新激活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ù)器)用來(lái)自動(dòng)的依次生成行地址,。由于刷新是針對(duì)一行中所有的存儲(chǔ)體進(jìn)行,所以無(wú)需列地址,。在進(jìn)入自動(dòng)刷新模式前,,所有的bank必須都處于預(yù)充電狀態(tài),,自動(dòng)刷新指令在預(yù)充電指令后延遲tRP才能給出,。
1.1.4 Active指令
Active用來(lái)激活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ì)原來(lái)激活的行進(jìn)行預(yù)充電,才能激活新的行,。同一bank中連續(xù)的active命令之間的間隔必須受tRC(RAS cycle time)的控制,。
1.1.5 Read指令
讀指令是用來(lái)對(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指令用來(lái)控制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指令
用來(lái)使DDR2內(nèi)存處于空閑無(wú)操作狀態(tài),。
1.2 DDR2-SDRAM控制器的設(shè)計(jì)
本文中的DDR2 SDRAM控制器是采用VHDL硬件描述語(yǔ)言設(shè)計(jì)的,主要由4部分組成:用戶界面模塊(User Interface)、基礎(chǔ)模塊(infrast-ructure),、物理層模塊(Physical layer)和存儲(chǔ)控制模塊(Controller),。DDR2-SDRAM控制器的設(shè)計(jì)原理框圖如圖1所示。
時(shí)鐘生成模塊用來(lái)產(chǎn)生控制器中所有模塊的時(shí)鐘信號(hào),。外部用戶時(shí)鐘通過(guò)數(shù)字時(shí)鐘管理器(DCM)進(jìn)行處理后,,輸出0度和90度的時(shí)鐘。同時(shí)該包括了一個(gè)延遲校準(zhǔn)模塊,,是用來(lái)校準(zhǔn)讀數(shù)據(jù)(DQ)對(duì)讀數(shù)據(jù)選通脈沖(DQS)的延遲,,以便DQS的邊沿能正確對(duì)齊DQ有效窗口的中間位置。
用戶接口模塊主要包括讀/寫數(shù)據(jù)和地址三類FIFO,,用來(lái)接收和存儲(chǔ)用戶的數(shù)據(jù),,命令和地址等信息,起到緩沖和同步數(shù)據(jù)的作用,??刂破髂K生成該模塊所需要的控制信號(hào)。
物理層模塊負(fù)責(zé)在控制信號(hào)的約束下完成用戶訪問(wèn)地址與訪問(wèn)指令的解釋與匹配,,產(chǎn)生DDR2 SDRAM所需的控制指令信號(hào),,并保證指令與地址,數(shù)據(jù)的同步和信號(hào)的維持,。
控制模塊主要實(shí)現(xiàn)的功能為:在系統(tǒng)上電過(guò)程及系統(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)訪問(wèn)地址的采樣與同步,,完成所需的所有狀態(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)接收來(lái)自外部的圖像數(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來(lái)產(chǎn)生。
2.2 數(shù)據(jù)接口模塊
數(shù)據(jù)接口模塊主要是負(fù)責(zé)不同數(shù)據(jù)之間格式的轉(zhuǎn)換,,這個(gè)模塊主要是考慮到輸入端的數(shù)據(jù)的不同格式,,必須經(jīng)過(guò)格式轉(zhuǎn)換才能符合DDR2位寬的數(shù)據(jù)。
2.3 輸入/輸出緩存模塊
輸入/輸出緩存模塊是采用V5器件的DRAM來(lái)實(shí)現(xiàn)FIFO的,,輸入緩存是由兩個(gè)DRAM來(lái)完成的,,DRAM配置為12×1 024,12為數(shù)據(jù)寬度,,1 024為存儲(chǔ)深度,,這個(gè)配置是根據(jù)具體圖像的位寬和每行的像素點(diǎn)來(lái)設(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)定性。其中的輸入/輸出選擇單元是通過(guò)判斷VGA圖像的行數(shù)來(lái)判斷寫和讀哪個(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)換問(wè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讀空和寫滿的問(wèn)題。該問(wèn)題的一般解決方法是利用FIFO的ALMOSTFULL和ALMOSTEMPTY來(lái)解決,。在這個(gè)系統(tǒng)中,,考慮到輸入的數(shù)據(jù)源和VGA顯示的時(shí)鐘頻率都是40 MHz,所以采用VGA數(shù)據(jù)有效信號(hào)來(lái)控制FIFO的寫,,行消隱信號(hào)來(lái)控制輸入FIFO的讀,,即每來(lái)一行數(shù)據(jù)才讀一行數(shù)據(jù),這樣就保證了輸入FIFO不會(huì)讀空,。而輸出FIFO的寫是通過(guò)DDR2內(nèi)部的讀數(shù)據(jù)有效位來(lái)控制的,,因?yàn)镈DR2內(nèi)部的操作是寫1行,,讀1行,所以在寫入FIFO一行數(shù)據(jù)后,,要等到下一行到來(lái)后,,才會(huì)往輸出FIFO寫入數(shù)據(jù),所以也就解決了輸出FIFO寫滿的問(wèn)題,。
2.4 DDR2-SDRAM控制模塊
DDR2-SDRAM的讀/寫控制是整個(gè)系統(tǒng)的關(guān)鍵,。由于要緩存圖像,所以就必須在DDR2里面開辟兩個(gè)大小相同的存儲(chǔ)單元,。這兩個(gè)存儲(chǔ)單元的大小是根據(jù)一幀圖像的大小來(lái)開辟的,,其大小為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í)間里來(lái)交換讀/寫地址,。讀/寫控制的具體操作如圖5所示。
3 實(shí)驗(yàn)結(jié)果
為了測(cè)試基于DDR2的圖像存儲(chǔ)性能,,外部輸入圖像源選用標(biāo)準(zhǔn)VGA格式的圖像,,外部輸出端接到DVI接口,DVI外接一般的CRT顯示器,。D-VI接口的顯示芯片是CH7301,,通過(guò)配置這個(gè)芯片的寄存器選擇其VGA模式。配置這個(gè)芯片寄存器的操作是通過(guò)I2C總線來(lái)達(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é)語(yǔ)
通過(guò)具體的實(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ǔ),。