李雁
摘要:介紹了基于XILINX公司FPGA的12G-SDI收發(fā)器的實現(xiàn),接收的是SDI信號,發(fā)送的是光纖信號。使用FPGA內(nèi)部的GTH實現(xiàn)高速串并轉(zhuǎn)換,使用FPGA中的RAM實現(xiàn)數(shù)據(jù)緩存,使用GTH的TX Phase Interpolaror PPM Controller實現(xiàn)發(fā)送時鐘調(diào)整。
關(guān)鍵詞:FPGA;12G-SDI;GTH;時鐘調(diào)整
中圖分類號:TN929.11 文獻(xiàn)標(biāo)識碼:A 文章編號:1007-9416(2020)06-0022-02
0 引言
SDI接口是數(shù)字分量串行接口,是由SMPTE組織制定的一種數(shù)字視頻接口標(biāo)準(zhǔn)。SMPTE組織在2015年正式發(fā)布了串行數(shù)據(jù)接口的6G-SDI和12G-SDI。6G-SDI面向2160p30的應(yīng)用,對應(yīng)每秒30幀畫面的刷新。而12G-SDI面向2160p60的應(yīng)用,對應(yīng)著每秒60幀畫面的刷新。使用12G-SDI進(jìn)行較高速的數(shù)據(jù)傳輸會增加傳輸介質(zhì)中的損耗,并且減少視頻源與接收端之間的總可支持電纜長度。因此需要其它方式實現(xiàn)遠(yuǎn)距離的傳輸[1]。為此。本文介紹了一種12G-SDI信號的光纖傳輸方案。
1 FPGA內(nèi)部實現(xiàn)架構(gòu)
FPGA采用XILINX公司的XCKU035-FBVA676-2,該芯片的GTH高速串行收發(fā)器能支持我們系統(tǒng)所需的11.88G速率,12G-SDI信號經(jīng)過TI公司的LM1219電纜均衡器后送入FPGA,在FPGA中必須使用高速串行收發(fā)器對高速串行信號進(jìn)行串并轉(zhuǎn)換,時鐘恢復(fù)[2]。轉(zhuǎn)換出來的并行數(shù)據(jù)緩存在內(nèi)部BLOCK RAM中,由發(fā)送GTH的時鐘進(jìn)行讀取。由于發(fā)送GTH的本地晶振與接收GTH恢復(fù)的時鐘不同源,所以需要對發(fā)送GTH的時鐘進(jìn)行相位調(diào)整,以便收發(fā)時鐘同步。發(fā)送GTH的輸出連接到SFP進(jìn)行電光轉(zhuǎn)換,最終通過光纖連接到遠(yuǎn)端。系統(tǒng)框圖如圖1所示。
2 FPGA內(nèi)部詳細(xì)設(shè)計
2.1 高速串行接口設(shè)計
使用VIVADO2018.3進(jìn)行邏輯開發(fā),在IP Catalog里選擇UltraScale FPGA Transceivers Wizard,在向?qū)е羞x擇GTH-12G_SDI,向?qū)鶕?jù)12G-SDI的數(shù)據(jù)結(jié)構(gòu)對GTH內(nèi)部進(jìn)行配置。包括鏈路速率11.88G,參考時鐘148.5M,并行數(shù)據(jù)位寬40bit,編碼模式(無編碼)。一般很多高速串行鏈路在編碼模式時會使用8B/10B編碼,這是因為串行數(shù)據(jù)變成并行數(shù)據(jù)后需要字符邊界對齊,并且8B/10B可以把原始數(shù)據(jù)里的連續(xù)長時間0或連續(xù)長時間1編碼成具有豐富時鐘邊沿的短時間0或1。由于SDI原始數(shù)據(jù)中有加擾器。所以不會造成長時間0或1,且8B/10B會使得帶寬額外消耗25%,所以SDI系統(tǒng)沒有使用8B/10B編碼。
2.2 數(shù)據(jù)緩存設(shè)計
數(shù)據(jù)緩存在本設(shè)計中使用RAM,而不是FIFO。因為后續(xù)模塊要根據(jù)讀寫地址差值進(jìn)行發(fā)送時鐘調(diào)整。同調(diào)用GTH類似,在IP Catalog里選擇Block Memory Generator,設(shè)置數(shù)據(jù)深度和數(shù)據(jù)寬度,再此數(shù)據(jù)深度設(shè)置為256,數(shù)據(jù)寬度設(shè)置為40bit。只有地址控制需自行編寫代碼設(shè)計。首先只允許寫。不允許讀,當(dāng)寫地址寫到RAM緩存的一半時,才允許讀。這樣做是為了拉開讀寫地址距離,避免收發(fā)時鐘抖動造成同時讀空或?qū)憹M。類似的做法還有乒乓操作,但需要兩個RAM。
2.3 時鐘調(diào)整設(shè)計
設(shè)計思路是當(dāng)數(shù)據(jù)緩存讀寫地址差值拉大時,說明寫時鐘快,讀時鐘慢,此時就應(yīng)該加快讀時鐘,反之就應(yīng)該減緩讀時鐘。由于讀寫時鐘域不同,直接對兩者進(jìn)行比較會出現(xiàn)亞穩(wěn)態(tài),即采樣時鐘采集到數(shù)據(jù)的跳變沿。這樣會帶來數(shù)據(jù)判斷錯誤,從而誤判讀寫地址差值。例如二進(jìn)制11111111加1變?yōu)?0000000的時候,每個bit都在跳變,所以可能被采集判斷成任何一個8位二進(jìn)制數(shù),誤差不可控。由于時鐘域不同,所以出現(xiàn)這種采集到跳變沿的情況是不可避免的。但是可以采用格雷碼進(jìn)行補(bǔ)救。格雷碼的特點是每次二進(jìn)制自然碼增加1,格雷編碼后只有一個bit位翻轉(zhuǎn)。先對寫地址進(jìn)行格雷編碼,然后使用讀地址進(jìn)行采集,這樣即使采集到寫地址跳變沿,也只會造成1個偏差,即采集值為真實地址加1或減1。之后在讀時鐘域?qū)懙刂愤M(jìn)行格雷解碼,轉(zhuǎn)換為自然二進(jìn)制碼。從而在讀時鐘域比較讀地址和寫地址的差值,誤差僅為1。
時鐘調(diào)整設(shè)計采用狀態(tài)機(jī)實現(xiàn),如圖2所示。
由于我們的RAM深度是256,且當(dāng)寫入128個數(shù)據(jù)后才允許讀,所以讀寫差值理想狀態(tài)是128。由于接收GTH恢復(fù)的時鐘(RAM寫時鐘)本身會抖動,所以即使收發(fā)時鐘同源,讀寫差值也不會永遠(yuǎn)為128,所以不能簡單地以讀寫差值不為128就進(jìn)行發(fā)送GTH時鐘(RAM讀時鐘)調(diào)整。當(dāng)讀寫地址差值大于192時,偏移了理想差值64個時鐘,此時應(yīng)該進(jìn)行加快讀時鐘的操作,且留有64個時鐘的余量。以免調(diào)整不夠迅速,導(dǎo)致RAM寫滿。通過加快讀時鐘后,讀寫地址差值會逐漸減小,回到理想差值128,此時狀態(tài)機(jī)跳回idle,不再進(jìn)行速率調(diào)整。隨著時間積累,讀寫差值會重新變大,狀態(tài)機(jī)跳轉(zhuǎn)重復(fù)上述過程。當(dāng)寫時鐘比讀時鐘慢時,讀寫地址差值逐漸變小,小于64時,進(jìn)行發(fā)送時鐘減緩狀態(tài),地址差值逐漸恢復(fù)到128后,回到idle狀態(tài),不再進(jìn)行時鐘調(diào)整。同理,隨著時間積累,讀寫差值會重新變小,狀態(tài)機(jī)跳轉(zhuǎn)重復(fù)上述過程。
2.4 GTH發(fā)送時鐘控制器
GTH模塊中有個TX Phase Interpolaror PPM Controller,通過該控制器能調(diào)節(jié)發(fā)送時鐘,當(dāng)前級狀態(tài)機(jī)進(jìn)入到時鐘加快狀態(tài)時,設(shè)置該控制器的時鐘加快功能,從而使得發(fā)送時鐘變快,在前級狀態(tài)機(jī)進(jìn)入到時鐘減慢狀態(tài)時,設(shè)置該控制器的時鐘減慢功能,從而使得發(fā)送時鐘減慢。在前級狀態(tài)機(jī)進(jìn)入idel狀態(tài)時,關(guān)閉該控制器,使之進(jìn)入power down狀態(tài),減小耗電。
3 結(jié)語
利用FPGA的GTH實現(xiàn)收發(fā)器,省去了外部收發(fā)器芯片,且利用GTH時鐘控制器,省去了外部PLL芯片,整個系統(tǒng)硬件得以簡化,從而設(shè)備可以做成一個小盒子,方便攜帶。內(nèi)部RAM的緩存空間可根據(jù)實際場景增大或者減小。增大RAM能允許更大的時鐘抖動,且對發(fā)送時鐘進(jìn)行更加細(xì)微的調(diào)整,使得接收機(jī)恢復(fù)的時鐘更為穩(wěn)定。減小RAM能降低系統(tǒng)延時,使用分布式RAM來節(jié)省FPGA資源消耗,更為節(jié)能。
參考文獻(xiàn)
[1] 嘉恒圖像,真4K(12G/60Hz SDI)信號的采集壓縮傳輸技術(shù)[Z].https://www.sohu.com/a/324469589_120200283,2019-07-03.
[2] Jamille Estonilo,Three things to consider when upgrading to 4K Ultra HD 12G-SDI interfaces[Z].http://e2e.ti.com/blogs_/b/analogwire/archive/2016/04/13/three-things-to-consider-when-upgrading-to-4k-ultra-hd-12g-sdi,2016-04-13.