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