錢宏文,劉會,付強(qiáng),王毅
(中國電子科技集團(tuán)公司第五十八研究所,江蘇 無錫 214072)
數(shù)字串行接口(Serial Digital Interface,SDI)是由美國電影與電視工程學(xué)會(the Society of Motion Picture and Television Engineers,SMPTE)制定的一系列由同軸電纜傳輸?shù)姆菈嚎s數(shù)字視頻接口標(biāo)準(zhǔn)[1]。目前,按照分辨率和傳輸速率的不同可分為標(biāo)清SDSDI、高清HD-SDI以及3G-SDI 3種[2]。其中,HD-SDI接口遵循 SMPTE292標(biāo)準(zhǔn)制定,傳送YCrCb(4∶2∶2)串行數(shù)字分量,采用720 P或1 080 P的格式,因其具有分辨率高,動態(tài)范圍廣以及在白平衡、亮度、對比度等方面的優(yōu)異性,是當(dāng)前廣播電視行業(yè)高清成像及顯示設(shè)備的主要接口形式,應(yīng)用范圍越來越廣。
與此同時,高分辨率意味著高的數(shù)據(jù)帶寬。因此,在采集HD-SDI高清視頻信號,要求采用具有更高傳輸速率的通信方式。傳統(tǒng)的USB2.0在實(shí)際應(yīng)用中的最大傳輸速率僅為30~40 Mb/s,無法滿足HD-SDI 1.485 Gb/s的傳輸需求。常用的CameraLink[3]圖像采集接口雖然具有傳輸速度快和易于編程實(shí)現(xiàn)等優(yōu)勢,但因其需要額外的PCIe等采集設(shè)備才能在臺式計(jì)算機(jī)上使用,因此存在通用性差,應(yīng)用不便等缺陷。
USB3.0引入全雙工數(shù)據(jù)傳輸[4],5根線中有2根用來發(fā)送數(shù)據(jù),有2根用來接收數(shù)據(jù),也就是說USB3.0可以全速進(jìn)行數(shù)據(jù)讀寫,因此較USB2.0性能上具有很大的提升,其理論最大傳輸帶寬在5.0 Gb/s(即640MB/s)[5],實(shí)際應(yīng)用中可達(dá)1.7Gb/s(即220MB/s),完全滿足HD-SDI 1.485 Gbps的傳輸需求。除此之外,采用USB3.0,在通用筆記本上即可完成視頻數(shù)據(jù)的高速采集[6]。因此,基于USB3.0實(shí)現(xiàn)HD-SDI高清視頻信號采集,可集合USB2.0和CameraLink兩種接口的優(yōu)點(diǎn),具有應(yīng)用方便、適用性廣等優(yōu)勢。
高清視頻采集系統(tǒng)(如圖1所示)主要由視頻信號均衡器、FPGA控制器、內(nèi)部緩存DDR2 SDRAM、USB3.0接口以及時鐘和電源組成。
HD-SDI高清視頻信號由于速率比較高,經(jīng)過同軸線纜長距離的傳輸會導(dǎo)致其高頻成分衰減過大[7],因此,需要增加均衡器來減少高頻信號的衰減,改善接收視頻信號的傳輸質(zhì)量。采用TI公司的SDI均衡器,不但能夠自適應(yīng)地調(diào)整高頻增益,而且還能實(shí)現(xiàn)由LVPECL電平轉(zhuǎn)化為LVDS標(biāo)準(zhǔn)電平,實(shí)現(xiàn)電平和阻抗匹配,從而能夠使FPGA獲得質(zhì)量較高的SDI差分輸入信號。
圖1 采集系統(tǒng)設(shè)計(jì)框圖
FPGA選用Xilinx的Virtex-5器件,其配置的Rocket I/O GTP收發(fā)器,可編程實(shí)現(xiàn)100 Mb/s到3.75 Gb/s的傳輸速率,能夠滿足HD-SDI 1.485 Gb/s的接收要求。
DDR2 SDRAM選用鎂光(Micron)的128 M×16 bit器件,核心頻率和工作時鐘均為267 MHz,雙邊沿采樣,數(shù)據(jù)時鐘為534 MHz。因此,計(jì)算數(shù)據(jù)速率為:534 MHz(數(shù)據(jù)時鐘)×16(數(shù)據(jù)位寬)×2(DDR2數(shù)量)×80%(讀寫效率)=13 Gb/s;系統(tǒng)DDR2的速寫數(shù)據(jù)吞吐量為3.4 Gb/s,因此,該文采用的DDR2幀緩存方案可滿足HD-SDI系統(tǒng)傳輸帶寬需求。
USB3.0控制器選用CYPRESS的EZ-USB FX3,內(nèi)部集成了512K的SRAM、ARM9內(nèi)核以及豐富的IO接口(如GPIF、UART等),滿足文中方案的設(shè)計(jì)需求。
時鐘模塊主要為FPGA提供所需的參考時鐘,主要包括以下內(nèi)容:
1)系統(tǒng)時鐘(時鐘頻率為100 MHz);
2)Rocket I/O GTP收發(fā)器的參考時鐘(時鐘頻率為148.5 MHz);
3)DDR2控制器IP核的輸入?yún)⒖紩r鐘(時鐘頻率為 267 MHz)。
電源模塊為系統(tǒng)上所有子模塊供電。
當(dāng)前,利用FPGA接收SDI信號主流有兩種處理方案:一是利用解串芯片將從同軸電纜傳輸并均衡后的串行視頻信號轉(zhuǎn)為并行信號,然后將并行信號發(fā)送給FPGA進(jìn)行處理;另一種是利用FPGA的高速收發(fā)器即將同軸電纜傳輸并均衡后的HD-SDI信號直接輸出到高速BANK的差分端,利用高速收發(fā)器進(jìn)行解串。與前者相比,后者設(shè)計(jì)簡單、成本低、配置靈活且有成熟的高速IP(GTP_DUAL)支持,因此,采集系統(tǒng)選用第二種方案,模塊框圖如圖2所示。
圖2 GTP SDI接收模塊框圖
具體實(shí)現(xiàn)流程:首先GTP利用時鐘恢復(fù)電路(CDR)將輸入的HD-SDI信號的時鐘和數(shù)據(jù)恢復(fù)出來;然后對接收到的HD-SDI數(shù)據(jù)解碼,解碼流程如圖3所示包括將不歸零倒置碼(NRZI)轉(zhuǎn)為歸零倒置碼以及對NRZ解擾[8]。
圖3 HD-SDI信號解碼流程
在調(diào)整圖像采樣后可輸出Y分量和C分量(Cr或Cb)。接著對兩個分量進(jìn)行序列檢測,即提取分量中的定時基準(zhǔn)碼(TRS)[9],如圖 4(a)、(b)所示。最后,利用提取的TRS判斷視頻格式、分辨率及幀頻以及數(shù)據(jù)的穩(wěn)定性(在圖4中判斷mode_locked和rx_locke是否鎖定即是否為高,鎖定后可分別判斷模式是HD-SDI、SD-SDI還是3G-SDI以及傳輸?shù)臄?shù)據(jù)格式即分辨率和幀頻)。在穩(wěn)定后,可從中提取有效的像素數(shù)據(jù),如圖4(c)中橢圓區(qū)域標(biāo)識所示。
圖4 HD-SDI信號接收時序
控制模塊的主要功能包括GTP收發(fā)器的主復(fù)位(包括GTP_DUAL內(nèi)部的PLL復(fù)位)、發(fā)送器復(fù)位、接收器復(fù)位以及速率檢測。
系統(tǒng)中視頻流以逐行掃描1 080 P格式持續(xù)輸入,圖像的分辨率為1 920*1 080,幀頻是25 f/s,圖像像素時鐘是74.25 MHz,每幀圖像的包含2 640*1 125個像素時鐘,即行消隱720個像素,場消隱45個行周期,傳輸一幀視頻數(shù)據(jù)用時40 ms[10]。
有效圖像數(shù)據(jù)提出后,經(jīng)FIFO作跨時鐘域處理后,輸入至DDR2進(jìn)行緩存后按要求的輸出格式經(jīng)輸出FIFO讀出。在流水線處理的過程中,為防止讀寫沖突,采用乒乓處理,即對PING區(qū)域進(jìn)行寫操作時,對PANG區(qū)域進(jìn)行讀,反之亦然。DDR2幀存儲模塊框圖如圖5所示。
HD_SDI信號在經(jīng)過解碼、緩存至USB接口輸出,共跨過3個時鐘域:
圖5 DDR2幀存儲模塊框圖
1)GTP經(jīng)CDR模塊恢復(fù)出的時鐘,頻率為74.25 MHz,數(shù)據(jù)位寬為20位(Y分量與C分量各10位);
2)Xilinx IP核輸出的同步時鐘,頻率為267 MHz,數(shù)據(jù)位寬為64位(雙邊沿采樣,數(shù)據(jù)位寬為DDR2 SDRAM位寬的2倍);
3)USB3.0控制器的Slave FIFO輸入時鐘,頻率為100 MHz,數(shù)據(jù)位寬為Slave FIFO位寬即32位。
跨時鐘域處理如圖6所示。
圖6 跨時鐘域處理
為解決以上3個時鐘域不同步給系統(tǒng)所帶來的亞穩(wěn)態(tài)問題,該文利用異步FIFO,通過空滿、近空近滿等標(biāo)志信號控制讀寫速率[11],實(shí)現(xiàn)不同速率不同位寬接口的無縫連接。
USB3.0控制接口模塊通過控制FX3與FPGA的GPIF II接口,實(shí)現(xiàn)FPGA與FX3之間的數(shù)據(jù)交互。在該方案中,F(xiàn)PGA每秒定時將1 920×1 080的25幀HD-SDI圖像數(shù)據(jù)以及信號的連接狀態(tài)和各個模塊的工作狀態(tài)(系統(tǒng)監(jiān)測信號如表1所示)[12]上傳給FX3,同時FX3將上位機(jī)控制指令(如表2所示)下發(fā)給FPGA以同步和控制各個模塊的運(yùn)行。
表1 狀態(tài)監(jiān)控
如圖7所示,為USB3.0控制模塊的狀態(tài)轉(zhuǎn)移圖[13]。系統(tǒng)上電復(fù)位,狀態(tài)機(jī)處于空閑態(tài)(FX_IDLE),當(dāng)檢測到圖7中輸出緩存FIFO不空時,狀態(tài)切換至WR_STATE1,開始向Slave FIFO中寫入數(shù)據(jù),寫狀態(tài)定義如下。
表2 控制指令
WR_STATE1:寫入指定的FIFO地址;
WR_STATE2:將寫命令使能(低有效);
WR_STATE3:把寫入的數(shù)據(jù)送到數(shù)據(jù)總線;
在完成1次寫操作后即在WR_STATE3狀態(tài)時判斷數(shù)據(jù)是否寫完(即輸出FIFO是否為空),未寫完則進(jìn)行下一次寫操作(即WR_STATE1狀態(tài)),寫完則跳轉(zhuǎn)至FX_WR_DONE狀態(tài),最后回到FX_IDLE狀態(tài)。
當(dāng)檢測到Slave FIFO的讀狀態(tài)為高即不空時,狀態(tài)機(jī)由FX_IDLE切換至RD_STATE1,開始從Slave FIFO中讀取數(shù)據(jù)。讀狀態(tài)定義如下:
RD_STATE1:寫入需要讀取的FIFO地址;
RD_STATE2:數(shù)據(jù)輸出使能(低有效);
RD_STATE3:將讀指令使能(低有效)。
在完成1次讀操作后即在RD_STATE3狀態(tài)時判斷數(shù)據(jù)Slave FIFO的讀狀態(tài)是否有效,有效則進(jìn)行下一次讀操作(即RD_STATE1狀態(tài)),無效則跳轉(zhuǎn)至FX_RD_DONE狀態(tài),最后回到FX_IDLE狀態(tài)。
USB3.0接口控制狀態(tài)機(jī)如圖7所示。
在固件程序設(shè)計(jì)中,為縮短設(shè)計(jì)開發(fā)周期,該系統(tǒng)使用CYPRESS提供的SDK開發(fā)包[14]。
固件的設(shè)計(jì)分為兩部分,一部分是利用GPIF II Designer工具完成GPIF II接口設(shè)計(jì),編譯生成與接口配置相關(guān)的C頭文件;另一部分是把頭文件添加到固件工程中,使用Eclipse編譯,利用SDK開發(fā)包中的API接口調(diào)用固件程序[15]。
利用CYPRESS的Streamer軟件對USB3.0接口進(jìn)行最大速度測試。內(nèi)部產(chǎn)生0~255的循環(huán)測試數(shù)據(jù),向輸出緩存FIFO寫入,并將數(shù)據(jù)讀出發(fā)送給Slave FIFO[16]。
圖7 USB3.0接口控制狀態(tài)機(jī)
如圖8所示,該系統(tǒng)USB3.0的數(shù)據(jù)最大讀取速率可達(dá)到224.5 MB/s,能夠滿足HD-SDI高清圖像采集系統(tǒng)的傳輸速率要求。
圖8 USB3.0數(shù)據(jù)速率測試結(jié)果
文中利用FPGA和USB3.0控制器實(shí)現(xiàn)了高清HD-SDI視頻信號的采集及高速傳輸。充分利用FPGA內(nèi)部的Rocket IO資源,既提升系統(tǒng)性能又降低了硬件成本,具有使用方便、適用性廣等優(yōu)勢。除此之外,系統(tǒng)性能留有較大余量,F(xiàn)PGA軟件調(diào)整后,可靈活兼容HD-SDI及3G-SDI接口標(biāo)準(zhǔn)[17],為其他種類SDI接口的應(yīng)用拓展提供了參考和指導(dǎo),具有實(shí)際應(yīng)用價值。