文獻(xiàn)標(biāo)識碼: A
DOI:10.16157/j.issn.0258-7998.190715
中文引用格式: 任勇峰,張澤芳,王國忠,等. 基于DDR2的高速圖像數(shù)據(jù)傳輸系統(tǒng)設(shè)計[J].電子技術(shù)應(yīng)用,2020,46(1):62-65.
英文引用格式: Ren Yongfeng,Zhang Zefang,Wang Guozhong,et al. Design of high-speed image data transmission system based on DDR2[J]. Application of Electronic Technique,2020,46(1):62-65.
0 引言
CMOS圖像傳感器憑借著集成度高、功耗小、速度快、成本低、靈活性強(qiáng)等特點[1],在各個行業(yè)得到了廣泛的應(yīng)用。隨著CMOS傳感器的快速發(fā)展,其幀頻、分辨率等參數(shù)得到了大幅度提升[2]。當(dāng)CMOS傳感器分辨率設(shè)置為2 048×2 048(約400萬像素),幀頻設(shè)置為20 f/s時,CMOS圖像傳感器每秒產(chǎn)生的圖像數(shù)據(jù)量可達(dá)80 MB,這意味著圖像數(shù)據(jù)傳輸系統(tǒng)需在短時間內(nèi)對大量數(shù)據(jù)進(jìn)行快速讀寫操作,對內(nèi)存的容量和速度提出了較高的要求。
為了滿足對高速圖像數(shù)據(jù)的傳輸要求,在綜合考慮帶寬、速率、數(shù)據(jù)存儲容量、成本、功耗等因素后[3],本設(shè)計選用DDR2作為數(shù)據(jù)緩存單元。本文提出的分布式三級數(shù)據(jù)緩存結(jié)構(gòu),結(jié)合了FPGA內(nèi)部FIFO的高數(shù)據(jù)吞吐量與片外DDR2大容量的特點,很好地解決了高速圖像數(shù)據(jù)的緩存難題,實現(xiàn)了圖像數(shù)據(jù)的實時顯示。
1 系統(tǒng)總體方案設(shè)計
本文介紹的基于DDR2的高速圖像數(shù)據(jù)傳輸系統(tǒng)能夠?qū)崟r顯示數(shù)據(jù)采集前端接收的圖像數(shù)據(jù),該系統(tǒng)的總體結(jié)構(gòu)框圖如圖1所示。
該設(shè)計由數(shù)據(jù)采集、數(shù)據(jù)緩存、數(shù)據(jù)傳輸[4]共3個模塊構(gòu)成。數(shù)據(jù)采集模塊利用CMOS圖像傳感器進(jìn)行圖像數(shù)據(jù)的采集,采集到的信號為串行信號;數(shù)據(jù)緩存模塊利用FPGA片內(nèi)FIFO資源與片外DDR2進(jìn)行圖像數(shù)據(jù)的緩存,其中,F(xiàn)IFO主要用來解決各個模塊之間數(shù)據(jù)位寬不一致以及數(shù)據(jù)傳輸速度不匹配的問題,DDR2主要用來滿足高速大容量的數(shù)據(jù)緩存要求;數(shù)據(jù)傳輸模塊利用千兆以太網(wǎng)將圖像數(shù)據(jù)以巨型幀格式發(fā)送至上位機(jī)軟件并進(jìn)行實時顯示。
該設(shè)計選用的DDR2存儲容量為2 Gbit,有8個Bank存儲塊,由于DDR2讀寫操作不能同時進(jìn)行,因此需要對DDR2的地址總線進(jìn)行分時復(fù)用,以提高其數(shù)據(jù)帶寬利用率。為了適應(yīng)不同分辨率的圖像數(shù)據(jù),設(shè)計了圖像參數(shù)計算模塊以得到不同分辨率下的圖像數(shù)據(jù)量以及各個參數(shù),從而對DDR2存儲空間的重新分布提供理論基礎(chǔ)。同時,重新分布DDR2的存儲空間可實現(xiàn)對圖像數(shù)據(jù)的便捷式管理與控制。
2 數(shù)據(jù)緩存模塊硬件電路設(shè)計
本設(shè)計選用的DDR2芯片為Micron公司生產(chǎn)的MT47H128M16RT,該芯片在時鐘上升沿與下降沿同時進(jìn)行數(shù)據(jù)的傳輸,因而其傳輸速度為普通存儲器件的兩倍。DDR2控制器邏輯設(shè)計復(fù)雜,為了節(jié)省人力、加快開發(fā)速度,采用嵌入FPGA內(nèi)部的DDR2控制器對DDR2進(jìn)行讀寫操作的控制[5]。
本設(shè)計利用FPGA的Bank1控制DDR2,在硬件電路設(shè)計時嚴(yán)格遵照固定引腳分配連接FPGA與DDR2,如圖2所示。其中,CK和CKN為時鐘差分線,數(shù)據(jù)在差分時鐘相交處進(jìn)行數(shù)據(jù)傳輸;A[13:0]為行列地址復(fù)用線,BA[2:0]為塊地址,在進(jìn)行讀寫操作時,需首先確定數(shù)據(jù)具體地址[6];D[15:0]為數(shù)據(jù)線;CKE、ODT、CS為控制信號線,其中,ODT為片內(nèi)終結(jié)電阻,通過調(diào)整電阻值來克服片內(nèi)總線上的信號反射效應(yīng)[3];RAS、WE、CAS為命令信號線,F(xiàn)PGA通過這3條命令實現(xiàn)對DDR2讀寫操作的控制;UDM、LDM為數(shù)據(jù)屏蔽線,可用來屏蔽來自外部的干擾。
3 關(guān)鍵技術(shù)研究
3.1 DDR2讀寫邏輯設(shè)計
數(shù)據(jù)采集模塊在接收到上位機(jī)開始采集指令后,將會持續(xù)輸出串行數(shù)據(jù),由于FPGA邏輯控制一般處理并行信號,因此需先對圖像數(shù)據(jù)進(jìn)行串并轉(zhuǎn)換,而后再將其緩存至FIFO_in中。從FIFO_in中讀取圖像數(shù)據(jù)并按照一定格式寫入DDR2中;同時,從DDR2中讀取圖像數(shù)據(jù),利用FIFO_out陣列進(jìn)行位寬轉(zhuǎn)換及速度匹配后,通過千兆以太網(wǎng)傳輸至上位機(jī)軟件[7]。整體邏輯控制框圖如圖3所示。
3.1.1 寫邏輯設(shè)計
圖像采集時鐘與DDR2的工作時鐘頻率不同,又由于DDR2只支持突發(fā)寫入,一次寫入256 B的數(shù)據(jù)量,因而設(shè)計容量為2 KB的異步FIFO可將串并轉(zhuǎn)換輸出的并行數(shù)據(jù)進(jìn)行緩沖,F(xiàn)IFO_in既能夠滿足數(shù)據(jù)緩存,又可以防止數(shù)據(jù)溢出。
系統(tǒng)上電開始工作,F(xiàn)PGA為DDR2提供125 MHz的參考時鐘,DDR2開始初始化;待初始化完成后,通過判斷DDR2控制器的寫入命令是否有效,對DDR2輸入寫命令、突發(fā)長度命令以及命令使能信號[8];其后,當(dāng)FIFO讀空信號為‘0’,即該信號無效時,將DDR2的寫入使能置‘1’,并從FIFO_in中讀取圖像數(shù)據(jù)存入DDR2中,當(dāng)FIFO讀空信號有效時,停止從FIFO_in中讀取數(shù)據(jù),以確保讀取的數(shù)據(jù)均為有效數(shù)據(jù);最后,通過計數(shù)信號判斷一次突發(fā)寫入是否完成。寫DDR2將會一直持續(xù)到整個數(shù)據(jù)采集裝置掉電為止。
此外,為了方便對圖像數(shù)據(jù)進(jìn)行管理,圖像數(shù)據(jù)以以太網(wǎng)包添加包頭包尾后寫入DDR2中,該過程在一個獨立的進(jìn)程中實現(xiàn)。
3.1.2 讀邏輯控制
本設(shè)計利用千兆以太網(wǎng)作為傳輸方式將數(shù)據(jù)上傳至上位機(jī)軟件,所涉及的千兆以太網(wǎng)包大小為9 014 B,位寬為8 bit,不支持突發(fā)傳輸,所以為了與前級實現(xiàn)更好的匹配,設(shè)計FIFO來實現(xiàn)數(shù)據(jù)的緩沖。DDR2與千兆以太網(wǎng)時鐘均為125 MHz,由于DDR2的傳輸速度可達(dá)456 MB/s,而千兆以太網(wǎng)傳輸速率為125 MB/s,因此設(shè)置4個容量為16 KB的FIFO陣列即可滿足系統(tǒng)對數(shù)據(jù)傳輸?shù)男枨蟆?/p>
當(dāng)上位機(jī)接收到千兆以太網(wǎng)下發(fā)的讀取指令后,首先判斷DDR2的寫塊地址是否大于讀塊地址[9],若寫地址塊大于讀地址塊,則讀取的數(shù)據(jù)為有效數(shù)據(jù);而后判斷DDR2控制器的讀取命令是否有效,若有效,輸入對DDR2的讀取命令、突發(fā)長度命令以及命令使能信號;最后,通過計數(shù)信號完成對FIFO_out陣列的輪換寫入以及讀取操作。
在往FIFO_out陣列寫數(shù)據(jù)前,通過復(fù)位信號將FIFO中數(shù)據(jù)清空;寫數(shù)據(jù)同時,將計數(shù)信號及地址信息上傳至數(shù)據(jù)傳輸模塊。
利用邏輯分析儀Chipscope抓取到的DDR2讀寫時序圖如圖4所示。由圖可得,可以連續(xù)對DDR2進(jìn)行突發(fā)讀寫操作,并且讀寫可分時進(jìn)行;往DDR2中寫數(shù)據(jù)時,需要等待圖像傳感器采集滿256 B時才可突發(fā)寫入;在進(jìn)行讀寫操作之前都要先進(jìn)行命令空信號判斷。
3.2 重新分布DDR2存儲空間
DDR2僅有一組地址總線,讀寫操作不能夠同時進(jìn)行,所以要對DDR2的地址總線進(jìn)行分時復(fù)用[10]??刂艱DR2地址即可實現(xiàn)對其內(nèi)部存儲空間的控制,因此,通過更改地址即可完成對DDR2內(nèi)部存儲空間的重新分布。為了滿足分辨率為2 048×2 048的圖像數(shù)據(jù)以巨型幀格式進(jìn)行傳輸,本設(shè)計對DDR2存儲空間進(jìn)行了擴(kuò)展。
本設(shè)計使用的DDR2的存儲容量為2 Gbit,內(nèi)部含有8個Bank,通過14位行地址與10位列地址判斷讀寫操作的具體地址,其中一個地址存儲2 B數(shù)據(jù)。為了方便對數(shù)據(jù)的讀寫以及對地址的管理,本設(shè)計利用一個地址存儲1 B數(shù)據(jù),一個列地址存儲256 B數(shù)據(jù),一個行地址存儲一包圖像數(shù)據(jù),以行地址為尋址的主地址方式進(jìn)行數(shù)據(jù)存儲。在一包數(shù)據(jù)中,除協(xié)議占用的50 B外,剩余8 964 B均為圖像數(shù)據(jù)。
圖像參數(shù)計算模塊可計算不同分辨率下的一幅圖像要傳輸?shù)陌鼣?shù),一包數(shù)據(jù)需要突發(fā)讀寫的次數(shù)以及最后一包數(shù)據(jù)需要突發(fā)讀寫的次數(shù)等參數(shù),通過一幅圖像最后一包的行地址來判斷該幅圖像是否傳輸完成。
文中數(shù)據(jù)采集模塊采集到的圖像數(shù)據(jù)的分辨率為2 048×2 048,一幅圖像需要傳輸467包余8 116 B,一包數(shù)據(jù)需要突發(fā)讀寫的次數(shù)為35次,最后一包數(shù)據(jù)需要突發(fā)讀寫的次數(shù)為31次余180 B,因此可通過最后一行列地址與其他行列地址是否相同來判斷數(shù)據(jù)是否有效。在DDR讀寫邏輯設(shè)計中首先判斷是否為最后一行數(shù)據(jù),然后再對列地址進(jìn)行操作。
一列數(shù)據(jù)存儲256 B,所以列地址低8位需全部賦值為0;一包數(shù)據(jù)最大需要突發(fā)讀寫35(100011)次,因此列地址總共需要14位,即DDR2存儲空間的10位列地址需擴(kuò)展至14位。由于DDR2控制器的IP核實際列地址位寬為11位,因而將列地址高3位以行地址高3位的形式輸入到地址控制端口即可完成列地址的擴(kuò)展。DDR2存儲空間經(jīng)過擴(kuò)展后,當(dāng)行地址小于468,列地址增加至35時,行地址加1列地址歸0;當(dāng)行地址增加至468,列地址增加至32時,行地址歸0塊地址加1。所以在邏輯設(shè)計中首先判斷是否為最后一行數(shù)據(jù),然后再對列地址進(jìn)行分別增加。
4 結(jié)果分析
本設(shè)計數(shù)據(jù)采集模塊采集的圖像數(shù)據(jù)分辨率為2 048×2 048,幀頻為20 f/s,即1 s可產(chǎn)生80 MB的圖像數(shù)據(jù);在數(shù)據(jù)緩存模塊中,DDR2的工作時鐘為125 MHz,再考慮到自動刷新及預(yù)充電等消耗的時鐘,實際平均數(shù)據(jù)吞吐量為456 MB/s;數(shù)據(jù)傳輸模塊中,以太網(wǎng)傳輸速度為125 MB/s;經(jīng)測試,該設(shè)計能夠正常工作,上位機(jī)可實時顯示數(shù)據(jù)采集模塊采集的圖像數(shù)據(jù),且穩(wěn)定可靠。
5 結(jié)論
本設(shè)計以FPGA為核心,對圖像數(shù)據(jù)流進(jìn)行整體邏輯設(shè)計,采用三級數(shù)據(jù)緩存機(jī)制,利用FPGA內(nèi)部FIFO的高效讀寫性能與片外DDR2大容量存儲的特點,形成速率與容量(時間與空間)的優(yōu)勢互補,很好地滿足了高速圖像數(shù)據(jù)傳輸系統(tǒng)對于圖像數(shù)據(jù)傳輸?shù)男阅苄枨?。同時,本設(shè)計通過設(shè)計圖像參數(shù)計算模塊,可應(yīng)對不同分辨率的圖像數(shù)據(jù),增強(qiáng)了該設(shè)計的可操作性和可移植性。
參考文獻(xiàn)
[1] 葉威,肖康,康冰鋒,等.CMOS傳感器在航空攝影測量中的應(yīng)用[J].測繪通報,2017(8):150-151.
[2] 丁寧,常玉春,趙健博,等.基于USB 3.0的高速CMOS圖像傳感器數(shù)據(jù)采集系統(tǒng)[J].吉林大學(xué)學(xué)報(工學(xué)版),2018,48(4):1298-1304.
[3] 周彬,宋茂忠,熊駿,等.基于FPGA和DDR2的北斗導(dǎo)航信號模擬[J].電子設(shè)計工程,2016,24(6):138-141.
[4] 王昊.基于FPGA的千兆以太網(wǎng)高速圖像采集與傳輸系統(tǒng)的設(shè)計[D].呼和浩特:內(nèi)蒙古大學(xué),2017.
[5] 袁鑫,盧磊,景彥哲.基于FPGA的DDR2緩存控制器在無線鏈路圖像跟蹤系統(tǒng)中的應(yīng)用[J].導(dǎo)航與控制,2016,15(4):63-69,7.
[6] 段岑林.DDR2 SDRAM控制器的設(shè)計與實現(xiàn)[D].西安:西安電子科技大學(xué),2018.
[7] 高俊嶺,陳志飛,章佩佩.基于FPGA的實時視頻圖像采集處理系統(tǒng)設(shè)計[J].電子技術(shù)應(yīng)用,2018,44(2):10-12,19.
[8] 王曉鵬.基于FPGA片內(nèi)存儲器讀寫控制與仿真[J].農(nóng)村經(jīng)濟(jì)與科技,2018,29(14):296.
[9] WANG H,WENG Z,LI Y.Design of high-speed image acquisition system based on FPGA[C].第30屆中國控制與決策會議論文集(2),2018.
[10] 田杰,王廣龍,喬中濤,等.基于FPGA高速視頻圖像實時采集與處理系統(tǒng)設(shè)計[J].電子器件,2016,39(3):623-627.
作者信息:
任勇峰,張澤芳,王國忠,張凱華
(中北大學(xué) 電子測試技術(shù)國家重點實驗室,山西 太原030051)