国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于FPGA的HDMI轉(zhuǎn)SDI設(shè)計(jì)與實(shí)現(xiàn)

2020-10-09 10:10:17李雁
中國科技縱橫 2020年9期

李雁

摘 要:介紹了HDMI2.0的協(xié)議及通過FPGA編碼實(shí)現(xiàn)HDMI協(xié)議的DDC、解擾、解碼、音頻包提取、視頻數(shù)據(jù)提取的功能。使用IP SMPTE UHD-SDI和UHD SDI Audio實(shí)現(xiàn)SDI協(xié)議,自編接口適配程序完成SDI音頻嵌入接口實(shí)現(xiàn)以及SDI視頻DS流成幀器的實(shí)現(xiàn)。

關(guān)鍵詞:HDMI;SDI;IEC60958;EDID;I2C;HPD

中圖分類號:TN948.6 文獻(xiàn)標(biāo)識碼:A 文章編號:1671-2064(2020)09-0062-03

0 引言

高清晰多媒體接口HDMI已經(jīng)成為任何高清數(shù)字電視和多媒體設(shè)備之間的標(biāo)準(zhǔn)接口,目前廣泛應(yīng)用在數(shù)字液晶電視、數(shù)碼相機(jī)、家用投影機(jī)、機(jī)頂盒、平板電腦等消費(fèi)類電子中。在專業(yè)的數(shù)字電影投影機(jī)領(lǐng)域,串行數(shù)字接口SDI作為專業(yè)廣播室視頻設(shè)備中的數(shù)據(jù)傳輸接口,通過同軸電纜傳輸無壓縮的數(shù)字視頻信號,保證畫質(zhì)無損。由于SDI接口的硬件成本比較高昂,且信號傳輸?shù)臄?shù)據(jù)量大,對信號質(zhì)量要求度比較高,所以只有在一些專業(yè)的音視頻設(shè)備中才具有SDI接口,但由于一系列消費(fèi)類電子產(chǎn)品目前已經(jīng)能支持清晰度質(zhì)量高的HDMI信號輸出,為了實(shí)現(xiàn)HDMI信號能夠輸出到具有SDI接口的設(shè)備中進(jìn)行處理,所以需要進(jìn)行HDMI轉(zhuǎn)SDI的信號轉(zhuǎn)換[1]。

1 FPGA內(nèi)部實(shí)現(xiàn)架構(gòu)

FPGA采用XILINX公司的XCKU035-FBVA676-2,該芯片的GTH高速串行收發(fā)器能支持12G SDI所需的11.88G速率,在接收端,HDP模塊上電后輸出高電平,使得源端檢測到HDMI在線,然后源端通過I2C訪問FPGA內(nèi)部的EDID,獲取FPGA作為HDMI接收端的接收能力,例如分辨率,刷新率等,從而源端發(fā)送最適合接收端的視頻源數(shù)據(jù)。3路5.94G的HDMI信號CH0/1/2進(jìn)入FPGA的GTH,GTH主要完成時(shí)鐘恢復(fù),串并轉(zhuǎn)換,得到40bit位寬的并行數(shù)據(jù)輸出,對原始數(shù)據(jù)進(jìn)行解擾后,識別出控制周期,數(shù)據(jù)島周期,視頻數(shù)據(jù)周期。從視頻數(shù)據(jù)周期數(shù)據(jù)提取出HS,VS,DEN,DATA,從數(shù)據(jù)島周期提取出AES格式音頻數(shù)據(jù)。

HDMI接收到的視頻數(shù)據(jù)一般為RBG格式,轉(zhuǎn)換成SDI的YCbCr格式后緩存,SDI成幀器根據(jù)前級數(shù)據(jù)的HS,VS,DEN產(chǎn)生行列計(jì)數(shù)及相應(yīng)的前導(dǎo)數(shù)據(jù),將YCbCr數(shù)據(jù)取出填充到幀結(jié)構(gòu)的數(shù)據(jù)中形成DS數(shù)據(jù)流,使用XILINX的IPCORE SMPTE UHD-SDI完成12G-SDI信號合成,首先是在DS數(shù)據(jù)流中插入ST352,輸出的DS流進(jìn)入XILINX的IPCORE UHD SDI Audio,該IP可以將音頻數(shù)據(jù)通過AXIS接口插入到DS中,插入音頻數(shù)據(jù)的DS再接回SMPTE UHD-SDI的DS_IN,形成40bit的并行數(shù)據(jù)后通過GTH發(fā)送出12G-SDI。模塊端內(nèi)部框圖如圖1所示。

2 FPGA內(nèi)部詳細(xì)設(shè)計(jì)

2.1 HPD

HDP是HDMI的熱插拔功能,當(dāng)HDMI線纜沒有插入或者FPGA沒有上電的時(shí)候,該信號是0V,F(xiàn)PGA上電后固定輸出高電平,經(jīng)過硬件器件變?yōu)?V,插上HDMI線纜后,源端就能檢測到HDMI從機(jī)在線。

2.2 EDID

EDID是源端通過I2C讀取從機(jī)ROM,獲取從機(jī)接收能力,從而發(fā)送相應(yīng)的數(shù)據(jù)源。I2C的設(shè)計(jì)遵循I2C的標(biāo)準(zhǔn)協(xié)議。使用本地晶振25M作為系統(tǒng)時(shí)鐘,該時(shí)鐘遠(yuǎn)大于400k的I2C速率,方便準(zhǔn)確采集I2C的時(shí)鐘和數(shù)據(jù)邊沿以及判斷時(shí)鐘高電平的中間時(shí)刻。

使用狀態(tài)機(jī)進(jìn)行從機(jī)設(shè)計(jì),劃分9個狀態(tài),分別是Idle(空閑),Start(開始),Saddr(從機(jī)地址),JudgeRW(讀寫判斷),Ark(應(yīng)答),WrRegAddr(寫寄存器地址),WrData(寫數(shù)據(jù)),RdData(讀數(shù)據(jù)),WaitArk(等待應(yīng)答)。狀態(tài)跳轉(zhuǎn)規(guī)則要符合I2C標(biāo)準(zhǔn)協(xié)議。

在時(shí)鐘高電平時(shí)檢測到數(shù)據(jù)出現(xiàn)下降沿,強(qiáng)制進(jìn)入Start狀態(tài),在時(shí)鐘高電平時(shí)檢測到數(shù)據(jù)上升沿,強(qiáng)制進(jìn)入Idle狀態(tài)。每次檢測到時(shí)鐘高電平中間時(shí)刻,對狀態(tài)進(jìn)行BIT計(jì)數(shù),每次轉(zhuǎn)換狀態(tài),BIT計(jì)數(shù)歸零。達(dá)到狀態(tài)預(yù)設(shè)的BIT值時(shí),狀態(tài)跳變。各個狀態(tài)對應(yīng)的BIT計(jì)數(shù)值如表1所示。

在WrRegAddr狀態(tài),記錄主機(jī)要訪問的寄存器,在WaitArk狀態(tài),檢測到主機(jī)應(yīng)答后,寄存器地址自動+1。從而支持連續(xù)讀模式。在WaitArk狀態(tài),根據(jù)寄存器地址將相應(yīng)數(shù)據(jù)寄存到輸出移位寄存器,移位寄存器在時(shí)鐘高電平時(shí)刻將數(shù)據(jù)移位輸出,完成I2C的數(shù)據(jù)傳輸。

2.3 HDMI解擾

HDMI2.0版標(biāo)準(zhǔn)中定義了非加擾控制周期,占用8個時(shí)鐘周期,用于三個數(shù)據(jù)通道的同步對齊及復(fù)位加擾因子為初始值。加擾算法的線性反饋移位多項(xiàng)式為G(x)=1+x11+x12+x13+x16。數(shù)據(jù)通道0的初始值為0xFFFF,數(shù)據(jù)通道1的初始值為0xFFFE,數(shù)據(jù)通道2的初始值為0xFFFD。當(dāng)接收器狀態(tài)為視頻數(shù)據(jù)周期時(shí),將8bit視頻數(shù)據(jù)與解擾因子的高8bit進(jìn)行異或運(yùn)算,得到解擾后的視頻數(shù)據(jù)。當(dāng)接收器狀態(tài)為數(shù)據(jù)島周期時(shí),將4bit音頻及輔助數(shù)據(jù)與解擾因子的高4bit進(jìn)行異或運(yùn)算,得到解擾后的音頻及輔助數(shù)據(jù)。當(dāng)接收器狀態(tài)為加擾控制周期時(shí),將4bit控制矢量與解擾因子的高4bit進(jìn)行異或運(yùn)算,得到控制數(shù)據(jù)[2]。

2.4 信號段檢測

數(shù)據(jù)解擾后,需要識別出控制周期,數(shù)據(jù)島周期,視頻數(shù)據(jù)周期。識別的特征數(shù)據(jù)在HDMI2.0中,與以前的版本略有不同,不同之處在于:

(1)視頻數(shù)據(jù)周期保護(hù)帶,HDMI2.0采用的是視頻數(shù)據(jù)編碼,而HDMI1.4采用的是固定值;

(2)數(shù)據(jù)島周期保護(hù)帶,HDMI2.0通道0采用的是可糾錯編碼,通道1和2采用的是視頻數(shù)據(jù)編碼,而HDMI1.4采用的是固定值;

(3)控制周期,HDMI2.0中非加擾控制周期采用控制周期編碼,加擾控制周期采用查找表,而HDMI1.4只采用控制周期編碼。

根據(jù)各個周期的特征數(shù)據(jù)完成識別后,生成特征標(biāo)致信號給后級模塊[3]。

2.5 視頻接收

從CH0中提取出HS,VS,在控制周期,HS,VS采用CTL編碼。在數(shù)據(jù)島周期,采用TERC4編碼。視頻數(shù)據(jù)使用TMDS編碼。CTL編碼和TERC4編碼分別又4種情況和16種情況,采用查找表完成,TMDS解碼根據(jù)協(xié)議中的解碼流圖進(jìn)行設(shè)計(jì)。最高位為1時(shí),低8位取反,否則保持不變,得到解碼中間數(shù)據(jù)。次高位為1時(shí),解碼的bit[i]=解碼中間數(shù)據(jù)的bit[i]異或解碼中間數(shù)據(jù)的bit[i-1]。次高位為0時(shí),解碼的bit[i]=解碼中間數(shù)據(jù)的bit[i]異或解碼中間數(shù)據(jù)的bit[i-1]后取反。上述操作i=7到1。解碼的bit[0]=解碼中間數(shù)據(jù)的bit[0]。

2.6 音頻接收

音頻數(shù)據(jù)位于數(shù)據(jù)島周期中,數(shù)據(jù)島周期除了傳遞音頻包,還可以傳遞各種控制包,在本次設(shè)計(jì)中,我們只提取數(shù)據(jù)島周期包類型值為0x02的音頻采樣包。首先數(shù)據(jù)先進(jìn)行TERC4解碼,得到4bit的原始數(shù)據(jù)。每次數(shù)據(jù)島周期持續(xù)時(shí)間為32個時(shí)鐘周期的整數(shù)倍。連續(xù)32個CH0的bit[2]組合得到4個包頭字節(jié),其中前三個字節(jié)是內(nèi)容,最后一個字節(jié)是BCH(32,24)編碼后的校驗(yàn)位。通過BCH解碼能夠?qū)崿F(xiàn)序列的誤碼探測和誤碼糾錯,最多可糾正4個bit錯誤。我們需要提取第一字節(jié)為0x02的音頻采樣包,第二字節(jié)的bit[4]為0表示音頻包中有2個音頻通道,為1表示音頻包中有8個音頻通道。當(dāng)2通道時(shí),子包0/1/2/3分別傳遞音頻采樣channel 0/1的采樣點(diǎn)N,N+1,N+2,N+3。當(dāng)8通道時(shí),子包0/1/2/3分別傳遞音頻采樣channel 0~7的采樣點(diǎn)N。第二字節(jié)的bit[3∶0]表示音頻通道有效。第三字節(jié)的bit[3:0]在音頻通道有效的條件下,為1表示該通道此包的音頻采樣點(diǎn)是填充數(shù)據(jù),解碼時(shí)應(yīng)當(dāng)刪除該填充采樣點(diǎn)。第三字節(jié)的bit[7∶4]各個bit為1時(shí)分別代表每個音頻通道對此時(shí)時(shí)IEC60958的幀頭第一個音頻采樣點(diǎn)。用于設(shè)置PCUV的幀同步計(jì)數(shù)器歸零。

CH1和CH2的bit位按一定規(guī)律結(jié)合成4個子包,每個子包有7個有效字節(jié),1個字節(jié)的BCH(64,56)校驗(yàn)位,能夠檢測錯誤并糾正最多4個bit的錯誤。bit組合規(guī)則是CH1和CH2的bit[N]交叉組合得到子包N。每個子包的內(nèi)部結(jié)構(gòu)相同。字節(jié)0~2傳遞IEC60958的子幀0的bit[27∶4],也就是左聲道音頻采樣,字節(jié)3~5傳遞IEC60958的子幀1的bit[27∶4],也就是右聲道音頻采樣,字節(jié)6的bit[3∶0]和[7∶4]傳遞IEC60958子幀0和1的bit[3∶0],即PCUV。P為校驗(yàn)位,C為狀態(tài)位,U為用戶定義位,V為有效指示位。其中192個C組成一個控制幀,指示音頻的采樣速率,有效位等信息。

FPGA內(nèi)收到前級的數(shù)據(jù)島周期指示信號后啟動數(shù)據(jù)計(jì)數(shù)器,每次計(jì)數(shù)到32的整數(shù)倍產(chǎn)生一個收包完成信號,在計(jì)數(shù)的同時(shí),對CH1/2的數(shù)據(jù)bit[3∶0],CH0的bit[2]分別進(jìn)行移位寄存。得到9組32bit的數(shù)據(jù)。收包完成信號有效時(shí),按照前面所述的bit排列規(guī)則組合得到包頭和子包,同時(shí)啟動步驟計(jì)數(shù)器,分步對數(shù)據(jù)包進(jìn)行解析。由于有可能出現(xiàn)連續(xù)兩個數(shù)據(jù)島周期,所以必須在32個步驟內(nèi)完成解析。在步驟0判斷包頭第一個字節(jié)是0x02,產(chǎn)生音頻包指示信號,有效期設(shè)定為16個時(shí)鐘,則說明設(shè)計(jì)在16個步驟內(nèi)完成解析。在步驟1解析出通道有效和通道填充位以及IEC60958的幀起始標(biāo)致。在步驟2~9中,分別解析出4個子包中的8個音頻采樣點(diǎn)和對應(yīng)通道號以及相應(yīng)的PCUV。

2.7 RGB轉(zhuǎn)YCbCr

HDMI一般默認(rèn)傳遞的是RGB信號,這是協(xié)議中要求必須支持的視頻格式,SDI傳遞的則是YCbCr格式的視頻數(shù)據(jù),因此兩者之間需要進(jìn)行格式轉(zhuǎn)換。實(shí)現(xiàn)公式如下:

Y=0.299R+0.587G+0.114B

Cb=-0.1687R-0.3313G+0.5B

Cr=0.5R-0.4187G-0.0813B

FPGA中的乘法位寬位18位,本次設(shè)計(jì)實(shí)現(xiàn)采用Q16實(shí)現(xiàn),轉(zhuǎn)換后的公式為:

Y=19595R+38470G+7471B

Cb=-11056R-21712G+32768B

Cr=32768R-27440G-5328B

得到的結(jié)果右移16位即可。

轉(zhuǎn)換的結(jié)果需存入8個緩存,以便生成12G-SDI的8個DS流。奇數(shù)行的采樣點(diǎn)Y0,1存入DS1,采樣點(diǎn)Y3,4存入DS3,依次逐個存入DS1,3。奇數(shù)行的采樣點(diǎn)Cb0,Cr1,存入DS2,采樣點(diǎn)Cb2,Cr3存入DS4。依次逐個存入DS2,4。偶數(shù)行的采樣點(diǎn)Y0,1存入DS5,采樣點(diǎn)Y3,4存入DS7,依次逐個存入DS5,7。偶數(shù)行的采樣點(diǎn)Cb0,Cr1,存入DS6,采樣點(diǎn)Cb2,Cr3存入DS8,依次逐個存入DS6,8。

2.8 SDI音頻緩存

HDMI解碼的音頻數(shù)據(jù)格式與SDI是基本一致的,只需將IEC60958的子幀0幀頭指示標(biāo)志轉(zhuǎn)譯成0x1,其余子幀0標(biāo)志轉(zhuǎn)譯成0x2,所有子幀1標(biāo)志轉(zhuǎn)譯成0x3即可和PCUV,音頻數(shù)據(jù)一起組合成32bit存入音頻緩存,使用AXIS接口的緩存,AXIS入口的ID信號繼續(xù)使用前級的TID表示通道號。當(dāng)后級有效后,寫使能置1,從而才能將前級音頻數(shù)據(jù)寫入緩存。寫入緩存達(dá)到緩存量的一半時(shí),讀使能置1,F(xiàn)PGA內(nèi)部對主時(shí)鐘進(jìn)行分頻計(jì)數(shù)得到48kHz的讀時(shí)鐘使能,在該使能的作用下,產(chǎn)生通道有效計(jì)數(shù)器,將輸出給后級AXIS的valid信號拉高,當(dāng)后級AXIS接口的ready信號有效時(shí),通道計(jì)數(shù)器加1,當(dāng)通道計(jì)數(shù)器的值大于設(shè)定的N通道時(shí),valid信號拉低。結(jié)束本次采樣使能的AXIS傳輸。當(dāng)AXIS的valid和ready都有效時(shí),產(chǎn)生AXIS緩存Master接口的ready,更新下一個通道數(shù)據(jù)。

时尚| 阳原县| 衡阳市| 来凤县| 宁安市| 奉贤区| 澳门| 长宁县| 兴安县| 苍南县| 山阳县| 满城县| 泉州市| 五河县| 兴安县| 沙洋县| 徐闻县| 简阳市| 迭部县| 南部县| 兴安县| 安吉县| 黔西| 丹巴县| 黔江区| 运城市| 保德县| 楚雄市| 鹤岗市| 中江县| 新昌县| 县级市| 赣榆县| 阿坝县| 徐水县| 新巴尔虎左旗| 丁青县| 绿春县| 梅州市| 临澧县| 松江区|