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