王國忠,劉 磊,儲(chǔ)成群,任勇峰,焦新泉
(中北大學(xué),電子測試技術(shù)國家重點(diǎn)實(shí)驗(yàn)室,山西太原 030051)
隨著大數(shù)據(jù)智能化時(shí)代的到來,以及工業(yè)4.0的提出,智能化系統(tǒng)對(duì)圖像分辨率的要求越來越高,即圖像采集系統(tǒng)需要傳輸?shù)臄?shù)據(jù)量越來越大。數(shù)據(jù)傳輸?shù)乃俣群途彌_區(qū)的大小是圖像采集系統(tǒng)中非常重要的一部分,如果緩沖的速度與傳輸?shù)乃俣炔黄ヅ涞脑?,就?huì)使數(shù)據(jù)丟失或者堵塞,因此需要對(duì)整個(gè)系統(tǒng)進(jìn)行綜合設(shè)計(jì)。
系統(tǒng)總體方案設(shè)計(jì)如圖1所示,由圖像采集模塊、數(shù)據(jù)處理模塊、數(shù)據(jù)傳輸模塊3部分組成。圖像采集模塊采集模擬數(shù)據(jù),并轉(zhuǎn)化為數(shù)字圖像數(shù)據(jù)傳輸給數(shù)據(jù)處理模塊;數(shù)據(jù)處理模塊接收?qǐng)D像數(shù)據(jù),經(jīng)處理后轉(zhuǎn)存到緩沖芯片DDR2 SDRAM中,同時(shí)接收上位機(jī)下發(fā)命令,把數(shù)據(jù)實(shí)時(shí)上傳;數(shù)據(jù)傳輸模塊把數(shù)據(jù)上傳到上位機(jī)軟件進(jìn)行圖像顯示,并負(fù)責(zé)上位機(jī)與FPGA之間的通信。
本系統(tǒng)采用MT9P031圖像傳感器作為本系統(tǒng)數(shù)據(jù)采集模塊,把高速圖像數(shù)據(jù)實(shí)時(shí)上傳給數(shù)據(jù)處理模塊[1]。數(shù)據(jù)處理模塊把數(shù)據(jù)重新編幀后轉(zhuǎn)存到DDR2 SDRAM中。數(shù)據(jù)傳輸模塊采用USB3.0傳輸,把圖像數(shù)據(jù)實(shí)時(shí)上傳到上位機(jī)軟件,在數(shù)據(jù)編碼方面,USB3.0采用了安全性更高的8b/10b編碼,使用這種編碼方式可以保持電路中的直流平衡,從而提高可靠性;在邏輯設(shè)計(jì)中,采用手動(dòng)DMA模式,提高了傳輸速度,同時(shí)提高了數(shù)據(jù)傳輸?shù)恼_率以及可靠性[2]。
FPGA作為整個(gè)系統(tǒng)的硬件控制核心,是整個(gè)系統(tǒng)數(shù)據(jù)傳輸?shù)闹修D(zhuǎn)站,其主要功能是實(shí)現(xiàn)各模塊之間的數(shù)據(jù)交換和接口時(shí)序等協(xié)調(diào)控制。同時(shí)FPGA既要實(shí)現(xiàn)與USB控制芯片CYUSB3014連接,也要與DDR2連接,因此本系統(tǒng)選擇I/O口豐富、內(nèi)部資源多、處理速度快的EP3C40F484C6N作為控制中心。該芯片內(nèi)部具有較多的RAM容量,利用IP核可以搭建邏輯控制模塊,如FIFO緩沖模塊,PLL鎖相環(huán)等。
圖1 總體方案設(shè)計(jì)
圖2 DDR2與FPGA硬件連接圖
本系統(tǒng)為了防止有效數(shù)據(jù)在FIFO中積累而丟失,設(shè)計(jì)了外置DDR2 SDRAM緩沖模塊,用來存儲(chǔ)海量的圖像數(shù)據(jù)。圖2為DDR2與FPGA的硬件連接圖。選用MT47H128M16RT-25EC作為DDR2 的芯片,其內(nèi)存為2 Gbit,數(shù)據(jù)位寬為16 bit,內(nèi)部有8個(gè)塊,能以內(nèi)部控制總線4倍的速度工作,還能以外部總線4倍的速度進(jìn)行讀寫操作。CK和CKN為時(shí)鐘差分線,在他們的相交處均有數(shù)據(jù)傳輸,即在CLK的上升沿和下降沿均有數(shù)據(jù)傳輸。A[13:0]為列地址,BA[2:0]為塊地址,對(duì)DDR2進(jìn)行數(shù)據(jù)讀寫時(shí),首先發(fā)送要讀取或?qū)懭氲木唧w地址。D[15:0]為16位數(shù)據(jù)線。CKE,ODT,CS分別為DDR2的控制信號(hào)線,對(duì)DDR2進(jìn)行讀寫操作時(shí),首先要激活時(shí)鐘使能信號(hào)線(CKE)和片選信號(hào)線(CS),ODT為一種新技術(shù)叫片內(nèi)終結(jié)電阻,通過控制該信號(hào),來實(shí)現(xiàn)對(duì)匹配電阻的值及其開關(guān)狀態(tài)進(jìn)行控制,從而達(dá)到讀寫信號(hào)的完整性。RAS,WE,CAS為命令信號(hào)線,通過這3條命令FPGA控制DDR2的讀寫。采用UDQS和UDQSN、LDQS和LDQSN作為雙向差分信號(hào)線,寫數(shù)據(jù)時(shí)由FPGA發(fā)出,讀數(shù)據(jù)時(shí)由DDR2發(fā)出,可以減少信號(hào)間串?dāng)_的影響,同時(shí)減少信號(hào)輸出脈寬對(duì)工作電壓和溫度穩(wěn)定性的依賴。UDM,LDM在進(jìn)行突發(fā)傳輸時(shí),可屏蔽掉不存儲(chǔ)的數(shù)據(jù)[3]。
本系統(tǒng)采用CYUSB3014作為USB3.0的控制芯片,該芯片具有高度集成的靈活特性,具有一個(gè)可進(jìn)行數(shù)據(jù)并行讀寫的通用可編程接口GPIFⅡ,其內(nèi)部同時(shí)集成了USB3.0和USB2.0物理層(PHY)以及32位ARM926EJ-S微處理器,具有強(qiáng)大的數(shù)據(jù)處理能力。GPIFⅡ接口可進(jìn)行8位、16位、32位數(shù)據(jù)傳輸,可實(shí)現(xiàn)與FPGA之間無縫連接;GPIFⅡ?yàn)橐环N可編程狀態(tài)機(jī),其接口即可作為主控制器也可作為從器件,并行和串行接口均可通過該接口實(shí)現(xiàn)。本系統(tǒng)將CYUSB3014配置為32位并行的SLAVE FIFO模式,實(shí)現(xiàn)與FPGA之間的高速圖像數(shù)據(jù)傳輸,F(xiàn)PGA通過GPIFⅡ接口可訪問其內(nèi)部32個(gè)緩沖區(qū)[4]。
圖3為USB3.0周圍的硬件電路。如圖3所示,GPIFⅡ的32位數(shù)據(jù)總線直接與FPGA的I/0口相連,而在CYUSB3014內(nèi)部GPIFⅡ直接連接到了DMA通道上。SLCS為片選信號(hào),系統(tǒng)開始工作時(shí)被激活。PKTEND為短包數(shù)據(jù)發(fā)送結(jié)束信號(hào),當(dāng)一包數(shù)據(jù)結(jié)束時(shí)該信號(hào)有效。FLAGA和FLAGB為DMA通道對(duì)應(yīng)的緩沖區(qū)空滿狀態(tài)的標(biāo)志信號(hào),由CYUSB3014芯片發(fā)出,F(xiàn)PGA接收。SLWR為寫使能信號(hào),當(dāng)通過USB3.0讀取數(shù)據(jù)時(shí),該信號(hào)使能有效,GPIFⅡ隨之將數(shù)據(jù)通過DMA通道存入到對(duì)應(yīng)的緩沖區(qū)中。SLOE為讀使能信號(hào),即FPGA發(fā)出讀請(qǐng)求時(shí),該信號(hào)使能有效同時(shí)驅(qū)動(dòng)數(shù)據(jù)總線DQT翻轉(zhuǎn)。A(1∶0)為線程選擇信號(hào),通過改變它的數(shù)值,對(duì)GPIFⅡ內(nèi)部的4個(gè)獨(dú)立進(jìn)程進(jìn)行選擇,從而實(shí)現(xiàn)選用那個(gè)DMA通道進(jìn)行數(shù)據(jù)傳輸。
圖3 USB3.0硬件電路圖
SLRD為讀請(qǐng)求信號(hào),當(dāng)該信號(hào)有效時(shí),F(xiàn)PGA讀取GPIFⅡ接口的數(shù)據(jù)。PCLK與FPGA的CLK相連,提供最高可達(dá)100 MHz的接口頻率。
圖3中的24FC1025T-I/SN是容量為1 024KB的EEPROM,用于存儲(chǔ)USB3.0的固件程序,通過I2C總線與CYUSB3014相連。而I2C總線是由一條數(shù)據(jù)線和一條時(shí)鐘線構(gòu)成,根據(jù)I2C總線規(guī)范,總線空閑時(shí)必須為高電平,所以本設(shè)計(jì)通過2.21 kΩ電阻連接至3.3 V電源上拉。NCP361SN1G為過壓保護(hù)芯片,CYUSB3014的VBUS引腳的最大輸入電壓為6 V,而在USB接口上VBUS的供電電壓最大可達(dá)9 V,因此為了保護(hù)CYUSB3014的VBUS免受損壞,本設(shè)計(jì)增加了過壓保護(hù)芯片。同時(shí)為了使輸入電壓穩(wěn)定,在VBUS串聯(lián)一個(gè)2.2 μH的電感。使用2.2 μH的電感與105電容并聯(lián),同時(shí)將USB插座上的“屏蔽”引腳接地,實(shí)現(xiàn)隔離屏蔽的作用。本系統(tǒng)選用四通道的SP3010-04UTG作為SSRX+、SSRX-、SSTX+、SSTX-的外部ESD器件,它具有高性能、低電容的特性,其保護(hù)電平為±8 kV接觸放電和±15kV氣隙放電[5]。
DDR2 SDRAM的讀寫控制是整個(gè)系統(tǒng)的關(guān)鍵。在系統(tǒng)上電后,DDR2 SDRAM內(nèi)部需要進(jìn)行一系列復(fù)雜的初始化操作,才能開始正常工作。具體操作為:預(yù)充電→空命令→配置外部寄存器→空命令→配置內(nèi)部寄存器→預(yù)充電→空命令→自動(dòng)刷新→空命令→開始接收命令。在正常開始工作,每次讀寫切換和行、塊地址變化時(shí),必須通過預(yù)充電來關(guān)閉當(dāng)前讀寫的存儲(chǔ)單元,同時(shí)在進(jìn)行新的操作時(shí),需要先激活要讀寫的存儲(chǔ)單元所在的地址[6]。
圖4 DDR2邏輯設(shè)計(jì)圖
由于DDR2 SDRAM只有一套數(shù)據(jù)、地址和控制總線,在某一時(shí)刻只能讀或者寫,因此本文采用輸入FIFO和輸出FIFO對(duì)DDR2 SDRAM進(jìn)行分時(shí)復(fù)用讀寫控制[7]。DDR2 SDRAM的讀寫邏輯控制如圖4所示,通過判斷DDR2 SDRAM內(nèi)部的控制信號(hào),來控制FIFO的讀寫。當(dāng)上位機(jī)發(fā)出采集命令時(shí),圖像采集前端配置完寄存器之后開始采集圖像數(shù)據(jù),DDR2 SDRAM控制器通過監(jiān)測場同步信號(hào)的到來,把圖像數(shù)據(jù)不斷存入輸入FIFO中,當(dāng)FIFO中達(dá)到一次突發(fā)傳輸數(shù)據(jù)量2 KB時(shí),DDR2 SDRAM控制器發(fā)出寫命令,并一次性讀完輸入FIFO中的所有數(shù)據(jù),DDR2 SDRAM控制器不斷監(jiān)測輸入FIFO的數(shù)據(jù)量并發(fā)出寫命令。因?yàn)閳D像數(shù)據(jù)有場消隱和行消隱的時(shí)間,在此期間對(duì)DDR2 SDRAM進(jìn)行寫操作,且寫的速率比較快,因此在一定系統(tǒng)時(shí)鐘條件下,圖像采集前端不會(huì)出現(xiàn)數(shù)據(jù)堵塞。
當(dāng)上位機(jī)發(fā)出讀取數(shù)據(jù)的命令時(shí),DDR2 SDRAM控制器首先檢測輸入FIFO的狀態(tài),在空信號(hào)有效時(shí)DDR2 SDRAM一次性向輸出FIFO寫入2 KB數(shù)據(jù),此時(shí)用戶通過輸出FIFO進(jìn)行數(shù)據(jù)讀取。當(dāng)FIFO中的數(shù)據(jù)即將讀完時(shí),DDR2 SDRAM一次性向輸出FIFO寫入2 KB數(shù)據(jù),然后通過USB3.0把圖像數(shù)據(jù)不斷上傳到上位機(jī),其實(shí)際傳輸速度達(dá)390 MB/s,因此不會(huì)出現(xiàn)丟數(shù)的情況。
本系統(tǒng)采取手動(dòng)DMA傳輸模式,用來將GPIFⅡ接口連接至內(nèi)部緩沖器和USB3.0數(shù)據(jù)傳輸接口,通過手動(dòng)DMA模式可以控制圖像數(shù)據(jù)的傳輸速度,從而保證了數(shù)據(jù)的可靠傳輸。該模式可以把其中2個(gè)線程中共32個(gè)緩沖器分別分配到輸入和輸出DMA通道上,緩沖器的容量通過USB3.0的傳輸速度來設(shè)置。圖5為DMA通道的設(shè)計(jì)圖[8]。
如圖5所示,設(shè)計(jì)中只用了GPIFⅡ 4個(gè)線程中的2個(gè),線程0和線程1,并且采用了默認(rèn)的對(duì)應(yīng)關(guān)系,套接字0與線程0相對(duì)應(yīng);套接字1與線程1相對(duì)應(yīng)[9]。線程的切換是FPGA通過控制USB_A0和USB_A1信號(hào)來實(shí)現(xiàn),當(dāng)為00時(shí),選擇線程0;當(dāng)為01時(shí),選擇線程1。套接字是外部硬件與內(nèi)部緩沖區(qū)之間的橋梁,即套接字可以看作是外設(shè)的接口,每個(gè)硬件模塊有其固定的套接字。其中每個(gè)描述符存有緩沖區(qū)的地址和緩沖區(qū)的容量,以及指向下一個(gè)描述符的指針。
圖5 DMA通道的設(shè)計(jì)圖
在邏輯設(shè)計(jì)中,將USB_FLGA和USB_FLGB均設(shè)置為低電平有效,故當(dāng)其為低電平時(shí),它們指示緩沖區(qū)進(jìn)入滿狀態(tài)[10]。本設(shè)計(jì)FPGA通過從設(shè)備FIFO控制USB3.0進(jìn)行突發(fā)傳輸,圖6為32位數(shù)據(jù)總線突發(fā)傳輸?shù)倪壿嫹治鰞x截圖,在突發(fā)傳輸過程中,為了保證數(shù)據(jù)連續(xù)輸出,USB_RD和USB_OE始終保持有效,只要一行圖像數(shù)據(jù)寫入完成,就對(duì)DDR2 SDRAM進(jìn)行讀操作。這樣一來DMA緩沖區(qū)就不會(huì)出現(xiàn)滿狀態(tài),即整個(gè)過程USB_FLGA和USB_FLGB一直為高電平,為了避免DMA通道的失鎖以及對(duì)上次數(shù)據(jù)的清空處理,本設(shè)計(jì)采用了每次重新寫入數(shù)據(jù)時(shí),再次激活GPIFⅡ接口的思想,即USB_CS信號(hào)在USB_WR從低電平變?yōu)楦唠娖綍r(shí),重新被激活。
圖6 突發(fā)傳輸?shù)倪壿媹D
本系統(tǒng)圖像采集模塊采集到的圖像分辨率為2 048×1 536,幀頻為21 fps,且顯示為256級(jí)8位灰度圖像,因此每秒采集的數(shù)據(jù)量為63 MB(2 048×1 536×21B)。DDR2工作在125 MHz時(shí)鐘下,其傳輸速度峰值高達(dá)500 MB/s(125 MHz×2B×2),通過邏輯分析儀發(fā)現(xiàn)突發(fā)傳輸1行圖像數(shù)據(jù)需要512個(gè)系統(tǒng)時(shí)鐘,而DDR2自動(dòng)刷新、預(yù)充電、狀態(tài)信息等消耗50個(gè)系統(tǒng)時(shí)鐘,因此DDR2實(shí)際平均數(shù)據(jù)吞吐量為500 MB/s×512/(512+50)≈456 MB/s。USB3.0數(shù)據(jù)傳輸速度為390 MB/s,通過理論分析,本系統(tǒng)可以正常工作。而且經(jīng)過長時(shí)間重復(fù)測試,在沒有上位機(jī)引起其他開銷的情況下,采集的圖像如圖7所示。其畫面清晰、流暢,且實(shí)時(shí)性較好,證明了本系統(tǒng)能夠?qū)崟r(shí)進(jìn)行圖像數(shù)據(jù)上傳,且穩(wěn)定可靠。
本設(shè)計(jì)中,采用了占用資源少、支持熱插拔、可連接多個(gè)設(shè)備的USB3.0數(shù)據(jù)總線和緩沖速度快的DDR2緩沖器,設(shè)計(jì)了高速圖像傳輸系統(tǒng),大幅提高了圖像數(shù)據(jù)的傳輸速度和存儲(chǔ)空間,在邏輯設(shè)計(jì)中采用了手動(dòng)DMA模式,實(shí)現(xiàn)了海量圖像數(shù)據(jù)的傳輸,確保了高清圖像的實(shí)時(shí)顯示。
圖7 圖像截圖