丁紅暉,馬游春,張 衡,顧澤凌,楊明遠(yuǎn),吳正洋
(1.中北大學(xué),儀器科學(xué)與動(dòng)態(tài)測(cè)試教育部重點(diǎn)實(shí)驗(yàn)室,山西太原 030051;2.上海無(wú)線電設(shè)備研究所,上海 200090)
隨著視頻采集技術(shù)的快速發(fā)展,視頻存儲(chǔ)設(shè)備已經(jīng)越來(lái)越廣泛地應(yīng)用在各個(gè)行業(yè)中,它的出現(xiàn)為人們生活提供了許多便利,成為社會(huì)發(fā)展中必不可缺的一部分。根據(jù)人們對(duì)大容量存儲(chǔ)、高帶寬傳輸?shù)男枨?,文章提出了一種基于高速eMMC(embedded multi media card,嵌入式多媒體卡)陣列的視頻存儲(chǔ)系統(tǒng)設(shè)計(jì),由于eMMC存儲(chǔ)芯片具有高集成度、高速讀寫傳輸、低功耗、高性能等特點(diǎn),使得視頻數(shù)據(jù)讀寫速度翻倍遞增,存儲(chǔ)容量擴(kuò)大[1]。同時(shí)由于內(nèi)部集成控制芯片可以自我管理壞塊及錯(cuò)誤檢測(cè)與糾正,使得通過FPGA操作起來(lái)更加簡(jiǎn)單方便,僅需控制數(shù)據(jù)的讀寫操作過程即可,很好地節(jié)約了系統(tǒng)的資源[2]。
視頻存儲(chǔ)系統(tǒng)主要由FPGA(field programmable gate array,現(xiàn)場(chǎng)可編程門陣列)主控模塊、eMMC陣列存儲(chǔ)模塊、DDR3(double date rate 3,雙倍數(shù)據(jù)速率的同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器)緩存模塊、網(wǎng)口讀數(shù)模塊、電源模塊及相機(jī)接口電路組成。FPGA主控模塊實(shí)現(xiàn)對(duì)外設(shè)緩存、存儲(chǔ)陣列和網(wǎng)口傳輸?shù)目刂?;eMMC存儲(chǔ)模塊實(shí)現(xiàn)對(duì)視頻數(shù)據(jù)的存儲(chǔ)與讀取;DDR3模塊完成FPGA對(duì)eMMC陣列進(jìn)行寫操作時(shí)的數(shù)據(jù)緩存;網(wǎng)口讀數(shù)模塊實(shí)現(xiàn)上位機(jī)與存儲(chǔ)系統(tǒng)的命令控制與數(shù)據(jù)通信;電源模塊負(fù)責(zé)為整個(gè)系統(tǒng)供電,并通過電源管理芯片為每個(gè)模塊提供所需的電壓;相機(jī)接口電路完成視頻圖像數(shù)據(jù)的接收和信號(hào)的轉(zhuǎn)換[3]??傮w設(shè)計(jì)框圖如圖1所示。
圖1 總體設(shè)計(jì)框圖
系統(tǒng)選用基于CMOS傳感的工業(yè)相機(jī),與傳統(tǒng)攝像機(jī)相對(duì)比而言,具有很高的圖像穩(wěn)定性和抗干擾能力。型號(hào)選定為STC-CMC200PCL,可實(shí)現(xiàn)2 048×1 088最高分辨率,333 幀/s的最高幀頻率,配備標(biāo)準(zhǔn)的Camera-Link接口。在Camera-Link總線上,選擇對(duì)分辨率為1 280×720、幀速率為200 幀/s的視頻圖像進(jìn)行采集,則1 s的數(shù)據(jù)量為1 280×720×200 B,即176 MB/s。像素?cái)?shù)據(jù)信號(hào)以串行差分的形式進(jìn)行傳輸,輸出的信號(hào)需要通過串轉(zhuǎn)并芯片DS90CR288A進(jìn)行轉(zhuǎn)換,將1路差分時(shí)鐘信號(hào)和4路串行差分?jǐn)?shù)據(jù)信號(hào)轉(zhuǎn)換成1路TTL時(shí)鐘信號(hào)和1個(gè)28位的并行TTL信號(hào),通過PLL來(lái)統(tǒng)一時(shí)鐘與數(shù)據(jù)信號(hào),輸出穩(wěn)定的TTL信號(hào)[4]。
系統(tǒng)采用10片eMMC并行的方式進(jìn)行同步讀寫。選用MTFC16GJVED-4M IT作為數(shù)據(jù)存儲(chǔ)芯片,單片容量為16 GB,可支持最大的時(shí)鐘速率為52 MHz,連續(xù)寫數(shù)據(jù)20 MB/s,連續(xù)讀數(shù)為44 MB/s。單塊eMMC芯片共有10根信號(hào)控制線,8根數(shù)據(jù)線DAT7-DAT0,1根時(shí)鐘線CLK和1根命令線CMD。系統(tǒng)采用10片eMMC陣列并行的方式進(jìn)行同步讀寫,寫入速度達(dá)到200 MB/s,讀出速度為440 MB/s,存儲(chǔ)容量共計(jì)160 GB。并行傳輸方式將80根數(shù)據(jù)線、10根命令線CMD并行連接到FPGA上,通過片選信號(hào)選擇讀取每片eMMC的數(shù)據(jù),在硬件實(shí)現(xiàn)上這個(gè)架構(gòu)是切實(shí)可行的[5]。eMMC并行傳輸架構(gòu)如圖2所示。
圖2 多片eMMC并行框架
FPGA程序在開發(fā)環(huán)境Vivado中通過VHDL語(yǔ)言編寫,圖3為整個(gè)系統(tǒng)工作的流程圖。
圖3 系統(tǒng)工作流程圖
2.2.1 相機(jī)數(shù)據(jù)輸出格式
系統(tǒng)圖像數(shù)據(jù)通過Camera-Link接口的Base模式進(jìn)行傳輸,每個(gè)像素時(shí)鐘PixelClock以3×8 bits的方式輸出,相機(jī)輸出的數(shù)據(jù)含有幀有效信號(hào)FVAL、行有效信號(hào)LVAL、圖像數(shù)據(jù)、數(shù)據(jù)有效信號(hào)DVAL和保留信號(hào)SPARE。
在相機(jī)的CMOS感光器件曝光1幀畫面后,等待8 s左右,幀有效信號(hào)FVAL升為高電平,經(jīng)過1個(gè)像素時(shí)鐘PixelClock,數(shù)據(jù)有效信號(hào)DVAL和行有效信號(hào)LVAL同時(shí)都被相機(jī)拉高,再待時(shí)鐘像素PixelClock的上升沿來(lái)臨時(shí),輸出像素?cái)?shù)據(jù)。此刻相機(jī)輸出的像素信號(hào)為真實(shí)有效信號(hào)[6]。
2.2.2 視頻數(shù)據(jù)接收
視頻數(shù)據(jù)接收模塊是對(duì)圖像有效信號(hào)的采集,并為視頻數(shù)據(jù)輸入給FPGA提前做好準(zhǔn)備。主要包括幀標(biāo)志的寫入和每幀畫面的數(shù)據(jù)接收。幀標(biāo)志的插入是為了在上位機(jī)讀數(shù)時(shí)可以方便截取有效信號(hào)[7]。其邏輯流程圖如圖4所示。
圖4 視頻數(shù)據(jù)接收流程圖
首先系統(tǒng)對(duì)數(shù)據(jù)接收模塊進(jìn)行初始化,待初始化結(jié)束后開始判斷幀有效信號(hào),幀有效信號(hào)正確的變化方式是從低電平升為高電平,若過程中幀有效信號(hào)持續(xù)為低則一直等待。幀有效信號(hào)升高后開始判斷行有效信號(hào),因?yàn)樾杏行盘?hào)的變化與幀有效信號(hào)的變化是同步的,故此時(shí)也為高電平,若不是則等待直到為高。接下來(lái)在時(shí)鐘上升沿到來(lái)時(shí)便可以取數(shù),幀行有效信號(hào)皆為低,取數(shù)結(jié)束,寫入幀標(biāo)志,開始下一幀的采集[7]。
系統(tǒng)采用10片容量共為160 GB的eMMC陣列進(jìn)行數(shù)據(jù)存儲(chǔ),通過高速SDR模式進(jìn)行數(shù)據(jù)傳輸,時(shí)鐘速率選用40 MHz,4位的傳輸位寬,即1個(gè)字節(jié)分2次傳輸,先傳高4位,再傳低4位。經(jīng)計(jì)算理論峰值速度為40 MHz×4 bits×10,即200 MB/s。在每條數(shù)據(jù)線上都具有CRC校驗(yàn),保證數(shù)據(jù)傳輸?shù)恼_性和完整性[8]。
2.3.1 eMMC陣列寫數(shù)據(jù)流程
在寫操作開始之前,首先需要設(shè)置eMMC塊長(zhǎng)度,F(xiàn)PGA向eMMC陣列發(fā)送指令CMD6(0x5000-0000-09BB),令塊長(zhǎng)度設(shè)置為512 B。然后FPGA發(fā)送多塊的寫命令CMD25(0x5800-0000-006F),包含起始地址,若陣列塊收到指令且不響應(yīng)錯(cuò)誤,則開始數(shù)據(jù)寫操作,但只要命令CMD25響應(yīng)錯(cuò)誤或超時(shí)就需要再次發(fā)送。在每個(gè)塊傳輸完畢后,eMMC會(huì)向FPGA發(fā)送回復(fù)檢測(cè)CRC,如果CRC校驗(yàn)正確且eMMC
處于不忙狀態(tài),F(xiàn)PGA就會(huì)發(fā)送下一塊的數(shù)據(jù),若BUSY標(biāo)志位為高,則一直等待直到為低,完成當(dāng)前的寫操作。在發(fā)送數(shù)據(jù)時(shí),F(xiàn)PGA也可以查詢eMMC的狀態(tài)寄存器,對(duì)設(shè)備存在的任何新的狀態(tài)信息進(jìn)行檢測(cè)[9]。當(dāng)FPGA發(fā)送停止指令,寫操作結(jié)束。eMMC陣列寫流程如圖5所示。
圖5 eMMC陣列數(shù)據(jù)寫流程圖
2.3.2 eMMC陣列讀數(shù)據(jù)流程
在陣列讀操作開始時(shí),同數(shù)據(jù)寫操作流程一致,首先發(fā)送CMD16(0x5000-0000-09BB)命令設(shè)置塊的長(zhǎng)度,待塊長(zhǎng)度設(shè)置結(jié)束后,開始發(fā)送eMMC陣列讀命令CMD17(0x5100-0000-0055),包含讀起始地址參數(shù),等待讀命令是否響應(yīng),若未響應(yīng)待2 s后再次發(fā)送寫命令CMD25,響應(yīng)成功則進(jìn)行陣列寫入,寫入結(jié)束后會(huì)有CRC校驗(yàn),若校驗(yàn)成功,就完成陣列數(shù)據(jù)有效的讀出,若失敗,則返回陣列讀命令CMD17重新開始讀取數(shù)據(jù)。接下來(lái)發(fā)送命令CMD13查詢?cè)O(shè)備狀態(tài),同數(shù)據(jù)寫流程,直到BUSY位為低,讀數(shù)據(jù)流程結(jié)束[10]。圖6為eMMC數(shù)據(jù)讀過程的信號(hào)捕捉圖,data_out顯示的是讀出的64位遞增數(shù)據(jù)。
圖6 eMMC數(shù)據(jù)讀過程的信號(hào)捕捉圖
為驗(yàn)證相機(jī)采集數(shù)據(jù)的準(zhǔn)確性,采集后將視頻圖像數(shù)據(jù)讀出保存為.dat文件。回讀的原始數(shù)據(jù)如圖7所示,第一和第二列為數(shù)據(jù)的幀頭,第三和第四列為數(shù)據(jù)的幀計(jì)數(shù),第五到第十六列為采集到相機(jī)的數(shù)據(jù)[11]。在采集過程中,沒有出現(xiàn)丟幀和錯(cuò)幀的現(xiàn)象,為檢驗(yàn)相機(jī)采集數(shù)據(jù)的準(zhǔn)確性,需要將數(shù)據(jù)轉(zhuǎn)化為直觀的圖像以便于驗(yàn)證。通過使用上位機(jī)軟件生成.bmp圖像,對(duì)螺釘落入水中濺起水花的某一幀畫面進(jìn)行顯示,如圖8所示,表明相機(jī)采集到的圖像數(shù)據(jù)是準(zhǔn)確的。
圖7 采集的data文件
圖8 通過上位機(jī)還原的一幀圖像
文章提出的視頻存儲(chǔ)系統(tǒng)以FPGA作為主控制器,采用Camera-link視頻總線接口,以多塊eMMC陣列作為存儲(chǔ)介質(zhì),通過硬件設(shè)計(jì)和軟件邏輯控制完成視頻存儲(chǔ)系統(tǒng)的設(shè)計(jì)。系統(tǒng)在40 MHz的時(shí)鐘下,實(shí)現(xiàn)了對(duì)分辨率為1 280×720、幀頻為200 幀/s的視頻數(shù)據(jù)進(jìn)行采集和存儲(chǔ),存儲(chǔ)容量高達(dá)160 GB,寫速度為200 MB/s。文章的創(chuàng)新點(diǎn)是采用eMMC陣列存儲(chǔ)的形式,通過并行傳輸方式進(jìn)行同步讀寫。經(jīng)過實(shí)際試驗(yàn),驗(yàn)證了系統(tǒng)設(shè)計(jì)能夠采集到準(zhǔn)確的圖像畫面進(jìn)行顯示。