龔家亮,唐清善,白 創(chuàng)
(長沙理工大學(xué) 物理與電子科學(xué)學(xué)院,湖南 長沙 410114)
多路視頻技術(shù)在視頻監(jiān)控[1-2]、全景視頻圖像顯示等方面被廣泛應(yīng)用,但其在設(shè)計時仍存在一些問題,例如電路面積過大、I/O資源消耗較多、多路視頻擴(kuò)展性差等。造成這些問題的主要原因是視頻采集或發(fā)送需要使用專門的編解碼芯片,例如HDMI(High-Definition Multimedia Interface)[3]的發(fā)送芯片ADV7511以及DVI(Digital Visual Interface)[4]的接收芯片TFP401[5-6]。使用這類外接芯片會占用較大的電路面積和I/O口資源。雖然使用片上集成的編解碼器不會存在這些問題,但是片上集成的編解碼器數(shù)量一般較少,對多路視頻的擴(kuò)展性較差。FPGA集成度高,可并行處理,可重配置邏輯,且具有豐富的I/O資源[7]。結(jié)合這些優(yōu)點并基于FPGA編解碼器的設(shè)計方式能較好地解決上述問題。
現(xiàn)有的多路視頻顯示系統(tǒng)大多采用DVI、光纖等視頻接口[8-9],但DVI或光纖的接口體積較大且傳輸帶寬不高。目前,具備超高清視頻傳輸能力的視頻接口標(biāo)準(zhǔn)主要有HDMI和DisplayPort兩種,HDMI憑借其先發(fā)的優(yōu)勢已經(jīng)成為多媒體接口主要的應(yīng)用標(biāo)準(zhǔn)之一[10],因此本文選擇對HDMI編碼器進(jìn)行設(shè)計。
目前,文獻(xiàn)[11~13]基于FPGA的HDMI編解碼器進(jìn)行了設(shè)計,所設(shè)計的編解碼器基于HDMI 1.4版標(biāo)準(zhǔn)。魏國基于HDMI 2.0版標(biāo)準(zhǔn)設(shè)計了編碼器和加擾器[10,14],但只進(jìn)行了原型驗證。本文基于FPGA設(shè)計了一種高效并行HDMI 2.0編碼器,可在占用少量電路面積和使用較少的I/O資源的情況下實現(xiàn)多路視頻擴(kuò)展。
HDMI用于傳輸視頻數(shù)據(jù)、音頻數(shù)據(jù)和信息幀包(InfoFrame Packet)[15-16]。視頻數(shù)據(jù)不經(jīng)過壓縮直接傳輸;音頻數(shù)據(jù)則以數(shù)據(jù)包的方式傳輸。HDMI支持的數(shù)據(jù)包包括HDMI標(biāo)準(zhǔn)和CEA-861-D[15]與CEA-861-F[16]定義的信息幀包和音頻數(shù)據(jù)包。為保證數(shù)據(jù)的有效傳輸,數(shù)據(jù)包在進(jìn)行傳輸編碼前需進(jìn)行糾錯編碼(Error Correction Code,ECC)[17]。
HDMI定義了3種傳輸周期,分別為控制周期(Control Period)、數(shù)據(jù)島周期(Data Island Period)和視頻數(shù)據(jù)周期(Video Data Period)[3]。各數(shù)據(jù)周期傳輸特定類型的數(shù)據(jù),具有不同的編碼方式:控制周期用于傳輸視頻的行同步信號、場同步信號和控制數(shù)據(jù),采用控制周期編碼[10];數(shù)據(jù)島周期傳輸音頻或輔助信息等數(shù)據(jù)包,采用TERC4(TMDS Error Reduction Coding)[2]編碼;視頻數(shù)據(jù)周期傳輸視頻數(shù)據(jù),采用視頻數(shù)據(jù)編碼[10]。為降低EMI(Electro Magnetic Interference)和RFI(Radio Frequency Interference)的影響,HDMI 2.0版標(biāo)準(zhǔn)增加了加擾特性,除了8個周期長度的非加擾控制周期外[10,12],其余數(shù)據(jù)在編碼器都需進(jìn)行加擾。
按照數(shù)據(jù)流的方向,原始數(shù)據(jù)經(jīng)過多路復(fù)用器進(jìn)入3個數(shù)據(jù)通道,然后根據(jù)HDMI接收端的HDMI標(biāo)準(zhǔn),選擇是否進(jìn)行加擾處理,最后按照數(shù)據(jù)周期類型選擇不同的編碼方式。編碼之后的數(shù)據(jù)通過串行發(fā)送器,以TMDS(Transition-Minimized Differential Signaling)的方式傳輸。HDMI 2.0編碼器設(shè)計框圖如圖1所示。發(fā)送控制狀態(tài)機(jī)Tx_Ctrl_FSM用于控制數(shù)據(jù)島周期、前導(dǎo)帶、非加擾控制周期和擴(kuò)展控制周期的發(fā)送。
圖1 HDMI 2.0編碼器設(shè)計框圖
本文設(shè)計的HDMI 2.0編碼器保留了必要的編碼功能且提供了簡化的數(shù)據(jù)接口,可根據(jù)需要增加不同顏色深度的打包模塊來實現(xiàn)對多種顏色深度的視頻格式的支持。
在HDMI標(biāo)準(zhǔn)中,數(shù)據(jù)包由1個包頭(Packet Header)和4個子包(Subpacket 0/1/2/3)[2]組成。包頭和4個子包分別進(jìn)行BCH(32,24)和BCH(64,56)糾錯編碼[17]。BCH(32,24)和BCH(64,56)生成多項式如式(1)所示[2]。ECC編碼器電路[17]如圖2所示。
圖2 1-bit ECC編碼器
G(x)=1+x6+x7+x8
(1)
由圖2可知,一次完整的BCH(32,24)糾錯編碼需要32個時鐘周期,一次完整的BCH(64,56)糾錯編碼則需要64個時鐘周期。為使BCH(32,24)編碼和BCH(64,56)編碼能夠在相同時間內(nèi)完成,本文設(shè)計了并行的ECC編碼器。設(shè)第n個時鐘的寄存器組的狀態(tài)為Q(n),輸入數(shù)據(jù)為in(n),輸入使能為e(n)。圖2中的ECC編碼器電路,可用式(2)表示。
Q(n)=M((Q(n-1)+I(n-1))·E(n-1))
(2)
式中,“·”表示Schur-Hadamard積;M是傳遞矩陣;I(n)=[in(n)0 0 0 0 0 0 0]T;E(n)=[e(n)1 1 1 1 1 1 1]T。2 bit并行ECC編碼電路表達(dá)式可通過式(3)計算得到。
(3)
將式(3)中I(n-1)和I(n-2)用I0(n-1)和I1(n-1)替換,用E′(n-1)表示輸入使能。然后,將Q(n)替換為Q′(n),式(3)整理可得
Q′(n)=M((M((Q′(n-1)+I0(n-1))·E′(n-1))+I1(n-1))·E′(n-1))
(4)
由式(4)可設(shè)計得到2-bit 的ECC編碼器電路。4-bit和8-bit并行ECC編碼器可通過同樣的方式設(shè)計得到。
HDMI 2.0版標(biāo)準(zhǔn)中引入了新的加擾技術(shù),對3個數(shù)據(jù)通道進(jìn)行加擾[14]。整個加擾過程包括生成加擾因子和加擾運算;加擾運算如式(5)~式(7)所示。
SCV[0:4]={IToggle,controlVector[0:3]⊕
lq[14:11]}
(5)
SDI[0:3]=ID[0:3]⊕lq[15:12]
(6)
SDV[0:7]=VD[0:7]⊕lq[15:8]
(7)
式中,各標(biāo)量以二進(jìn)制的形式表示;ID為數(shù)據(jù)島數(shù)據(jù);VD為視頻數(shù)據(jù);SCV、SDI和SDV為加擾后的結(jié)果;lq為加擾因子;“{}”為拼接運算符;“⊕”為異或運算符,以上3式均為二進(jìn)制按位異或運算;“[]”代表二進(jìn)制的取值范圍;controlVerctor是控制矢量,如式(8)所示。
controlVerctor[3:0]={D1,D0,LN1,LN0}
(8)
式中,{D1,D0}為控制數(shù)據(jù);{LN1, LN0}是數(shù)據(jù)通道通道數(shù)的編碼。
每個數(shù)據(jù)通道的加擾因子由一個線性移位寄存器(Linear Feedback Shift Register,LFSR)生成。LFSR生成多項式如式(9)所示,LFSR電路[14]如圖3所示。
圖3 LFSR電路圖
H(x)=1+x11+x12+x13+x16
(9)
用于LFSR初始化的加擾因子稱為種子值,種子值作為第一個加擾因子對非加擾控制周期后的第一個數(shù)據(jù)進(jìn)行加擾,LFSR輸出的第一個加擾因子用于非加擾控制周期后的第二個數(shù)據(jù)的加擾,以此類推,直到下一個非加擾控制周期[14]。在此需特別指出,LFSR輸出的第一個加擾因子是種子值輸入后LFSR的第8個狀態(tài),LFSR輸出的第二個值是LFSR輸出第一個加擾因子后的第8個狀態(tài),以此類推。為使加擾因子生成器與整個編碼器具有相同的速率,設(shè)計了并行的加擾因子生成器。設(shè)寄存器組在第n個時鐘時的狀態(tài)為LQ(n),LQ(n)∈R16×1,則LFSR可表示為
LQ(n)=NLQ(n-1)
(10)
式中,N為傳遞矩陣。串行加擾因子生成器電路可根據(jù)式(11)得到
LQ(n)=N8LQ′(n-1)
(11)
式中,LQ′(n-1)=LQ(n-8);N8是N的8次冪。同理可設(shè)計兩字符并行的加擾因子生成器。該生成器輸出的第一個加擾因子實際上是原生成器輸出的第二個加擾因子,即種子值與第一個加擾因子之間間隔一個加擾因子。若要實現(xiàn)同時輸出兩個連續(xù)的加擾因子,則需使用兩個生成器,兩個生成器的種子值分別為原來的種子值和輸出的第一個加擾因子。同理可設(shè)計出四字符并行的加擾因子生成器。
HDMI的編碼共有3種:控制數(shù)據(jù)編碼、TERC4編碼和視頻數(shù)據(jù)編碼??刂茢?shù)據(jù)編碼和TERC4編碼均有固定的對應(yīng)關(guān)系[18]。在此僅對視頻數(shù)據(jù)編碼器的設(shè)計進(jìn)行討論。
視頻數(shù)據(jù)編碼是將8位的數(shù)據(jù)編碼為10位的字符,編碼后的字符可近似的達(dá)到直流平衡,并且編碼后的字符中相鄰兩位為二進(jìn)制01或者10的次數(shù)少于或等于5,這種字符被稱為最小傳輸碼(A Transition-Minimized Code)。整個的視頻數(shù)據(jù)編碼過程可分為兩步:第一步將8位的數(shù)據(jù)轉(zhuǎn)換成9位的最小化傳輸碼;第二個步添加1位數(shù)據(jù)使得傳輸?shù)淖址鞅3种绷髌胶??;喓蟮囊曨l數(shù)據(jù)編碼算法如圖4所示[17]。
在圖4中,D[0:7]為輸入的原始數(shù)據(jù),cnt(n)表示當(dāng)前數(shù)據(jù)流中0和1的數(shù)量差異(Data Stream Disparity),cnt(n)初始化值為0;q_m表示第一步得到的9位碼字,q_out表示第二步得到的10位碼字,即最后的編碼結(jié)果;N0{x}和N1{x}分別表示二進(jìn)制x中0和1的個數(shù);為簡化后續(xù)的判決,引入diff_q_m用于表示q_m[0:7]中0和1的個數(shù)差異;Judge1、Judge2和Judge3分別代表3次判決。整個編碼器由若干個異或、同或、加法和選擇器等邏輯運算組成。為了獲得較高的性能,采用流水線的方式設(shè)計視頻數(shù)據(jù)編碼器??紤]到編碼結(jié)果輸出的連續(xù)性,將包含第二次判決及第二次判決以后的運算作為流水線的最后一級。N1{D[0:7]}或N1{q_m[0:7]}是8個1位二進(jìn)制數(shù)的加法運算,需將它們分開設(shè)置為一級。為平衡性能與邏輯資源的使用量,將N1{D[0:7]}計算設(shè)置為流水線的第一級,從第一次判決(包含第一次判決)到第二次判決之間設(shè)置為流水線的第二級。
圖4 視頻數(shù)據(jù)編碼算法流程圖
由于編碼器的第二次判決需以cnt(n-1)作為條件,相鄰兩個字符的編碼之間僅傳遞cnt(n)。對于兩字符并行的編碼器,仍然可以采用上述流水線的方式進(jìn)行編碼。高位字符的編碼流水線滯后于低位字符的編碼流水線一個時鐘周期,在這個滯后的時鐘周期中,通過寄存器對數(shù)據(jù)進(jìn)行緩存。兩字符并行的視頻數(shù)據(jù)編碼器電路圖如圖5所示,同理可用相同的方式設(shè)計四字符并行的視頻數(shù)據(jù)編碼器。
圖5 兩字符并行的視頻數(shù)據(jù)編碼器電路圖
本文使用Verilog HDL實現(xiàn)HDMI 2.0編碼器,在VIVADO 17.4軟件平臺上進(jìn)行仿真測試,在PYNQ-Z2開發(fā)板上進(jìn)行系統(tǒng)測試。
對于ECC電路,本文采用PacketHeader = 24'h05_02_82(十六進(jìn)制數(shù),下同)作為BCH(32,24)編碼的測試數(shù)據(jù),Subpack0 = 56'h00_C0_01_70_08_00_3E作為BCH(64,56)編碼的測試數(shù)據(jù)。為便于觀察,對ECC編碼后的結(jié)果進(jìn)行了解碼。1-bit、2-bit、4-bit和8-bit的ECC電路仿真結(jié)果如圖6(a)所示,解碼的仿真結(jié)果如圖6(b)所示。由如圖6(a)可知,1-bit、2-bit、4-bit和8-bit的ECC電路編碼結(jié)果相同,PacketHeader的8位糾錯碼是8′h3e(圖中已標(biāo)出),Subpack0的8位糾錯碼是8′hbd(圖中已標(biāo)出)。由圖6(b)可知,原始包數(shù)據(jù)能夠被正確的解碼,接收的8位糾錯碼與ECC解碼所得的糾錯碼一致。
(a)
HDMI 2.0標(biāo)準(zhǔn)給出了3個數(shù)據(jù)通道的前32個加擾因子,可通過將生成的加擾因子與HDMI 2.0標(biāo)準(zhǔn)中的加擾因子進(jìn)行比較來實現(xiàn)對加擾因子生成器的功能驗證。除種子值外,3個數(shù)據(jù)通道的加擾因子生成器電路完全相同,在此僅對數(shù)據(jù)通道0的加擾因子生成器進(jìn)行仿真。數(shù)據(jù)通道0的前32個加擾因子如表1所示,一個字符、兩個字符和四個字符的加擾因子生成器的仿真結(jié)果如圖7所示。圖7中標(biāo)出了第32個加擾因子,對比圖7和表1可知,加擾因子生成器所生成的加擾因子與HDMI 2.0標(biāo)準(zhǔn)所給出的加擾因子完全吻合。
表1 數(shù)據(jù)通道0的前32個加擾因子
加擾因子不同,即使3個數(shù)據(jù)通道的原始數(shù)據(jù)完全一致,加擾后的數(shù)據(jù)也會不同。為便于觀察仿真結(jié)果,本文對視頻數(shù)據(jù)編碼后的結(jié)果進(jìn)行解碼,通過對比原始數(shù)據(jù)和解碼后的數(shù)據(jù)來驗證視頻數(shù)據(jù)編碼器的功能,仿真結(jié)果如圖8所示。圖8中原始數(shù)據(jù)與解碼后的數(shù)據(jù)完成一致。
圖8 視頻數(shù)據(jù)編碼器的仿真
為驗證所設(shè)計的HDMI 2.0編碼器是否可用于系統(tǒng)設(shè)計中,本文對編碼器進(jìn)行了系統(tǒng)測試。本文以PYNQ-Z2開發(fā)板作為測試平臺,以O(shè)SERDESE2邏輯資源作為HDMI接口的物理層,以1 280×720@60Hz作為測試視頻的格式,通過按鍵來切換視頻畫面來測試視頻畫面切換的流暢度。顯示結(jié)果如圖9所示,測試中通過按鍵切換了黑白方格、彩條、全紅等多個畫面,未發(fā)現(xiàn)任何與整幅畫面不協(xié)調(diào)的顯示點,顯示畫面沒有明顯的跳動、閃爍或變形。由此可知,所設(shè)計的HDMI 2.0編碼器能夠穩(wěn)定得編碼和輸出。
圖9 系統(tǒng)測試
最后,本文對串行和并行編碼器的相關(guān)參數(shù)進(jìn)行了對比和分析,綜合后的數(shù)據(jù)如表2所示。根據(jù)CEA-861-F對4K視頻的定義,4K@30Hz的像素頻率為297 MHz,4K@60Hz的像素頻率為594 MHz,HDMI 2.0標(biāo)準(zhǔn)中TMDS時鐘頻率最高600 MHz。通過對比可以發(fā)現(xiàn),串行HDMI 2.0編碼器可以編碼4K@30Hz的視頻;并行HDMI 2.0編碼器可編碼4K@60Hz的視頻,可達(dá)到HDMI 2.0版標(biāo)準(zhǔn)的最大數(shù)據(jù)速率。
表2 HDMI 2.0編碼器的參數(shù)對比
本文設(shè)計了一種高效并行HDMI 2.0編碼器,并詳細(xì)介紹了并行的ECC編碼器、加擾因子生成器和視頻數(shù)據(jù)編碼器的設(shè)計方式,最后對編碼器進(jìn)行了功能仿真和板上測試。測試結(jié)果表明,HDMI 2.0編碼器符合HDMI標(biāo)準(zhǔn),并行設(shè)計的HDMI 2.0編碼器具備編碼超高清視頻的能力。所設(shè)計的HDMI 2.0編碼器可作為軟核應(yīng)用于顯示系統(tǒng)的設(shè)計中,結(jié)合FPGA的可重配置邏輯資源和豐富的I/O資源,可輕松實現(xiàn)多路視頻擴(kuò)展。該方法在減小電路面積和I/O使用數(shù)量的同時,也降低了設(shè)計成本。目前,大多數(shù)FPGA已經(jīng)集成了吉比特收發(fā)器,由普通I/O的數(shù)據(jù)速率不高而導(dǎo)致的無法進(jìn)行多路超高清視頻信號傳輸問題將逐步得到解決。