昆明做網(wǎng)站的個(gè)人整合營(yíng)銷傳播最基礎(chǔ)的形式是
目錄
- 1、前言
- 免責(zé)聲明
- 2、我目前已有的SDI編解碼方案
- 3、設(shè)計(jì)思路框架核模塊解析
- 設(shè)計(jì)框圖
- IT6802解碼芯片配置及采集
- ADV7611解碼芯片配置及采集
- silicon9011解碼芯片配置及采集
- 純verilog的HDMI 解碼模塊
- RGB888轉(zhuǎn)YUV422
- SPMTE編碼
- SDI模式
- 圖像緩存
- SPMTE SDI
- GTX
- GV8500
- 4、vivado工程1-->IT6802采集SDI輸出
- 5、vivado工程2-->ADV7611采集SDI輸出
- 6、vivado工程3-->silicon9011采集SDI輸出
- 7、vivado工程4-->HDMI RTL解碼SDI輸出
- 8、工程移植說(shuō)明
- vivado版本不一致處理
- FPGA型號(hào)不一致處理
- 其他注意事項(xiàng)
- 9、上板調(diào)試驗(yàn)證并演示
- 準(zhǔn)備工作
- 輸出演示
- 10、福利:工程代碼的獲取
FPGA實(shí)現(xiàn)HDMI輸入轉(zhuǎn)SDI視頻輸出,提供4套工程源碼和技術(shù)支持
1、前言
FPGA實(shí)現(xiàn)SDI視頻編解碼目前有兩種方案:
一是使用專用編解碼芯片,比如典型的接收器GS2971,發(fā)送器GS2972,優(yōu)點(diǎn)是簡(jiǎn)單,比如GS2971接收器直接將SDI解碼為并行的YCRCB,GS2972發(fā)送器直接將并行的YCRCB編碼為SDI視頻,缺點(diǎn)是成本較高,可以百度一下GS2971和GS2972的價(jià)格;另一種方案是使用FPGA實(shí)現(xiàn)編解碼,利用FPGA的GTP/GTX資源實(shí)現(xiàn)解串,優(yōu)點(diǎn)是合理利用了FPGA資源,GTP/GTX資源不用白不用,缺點(diǎn)是操作難度大一些,對(duì)FPGA水平要求較高。
沒(méi)玩過(guò)SDI都不好意思說(shuō)自己玩兒過(guò)FPGA,這是CSDN某大佬說(shuō)過(guò)的一句話,鄙人深信不疑。。。本文使用Xilinx的Kintex7 FPGA實(shí)現(xiàn)HDMI轉(zhuǎn)SDI視頻輸出;提供3套vivado2019.1版本的工程源碼,4套工程的不同點(diǎn)在于輸入HDMI視頻解碼方式的不同,以適應(yīng)不同的FPGA開(kāi)發(fā)板。第一套工程使用IT6802解碼輸入的HDMI視頻,適應(yīng)板載IT6802解碼芯片的FPGA開(kāi)發(fā)板;第二套工程使用ADV7611解碼輸入的HDMI視頻,適應(yīng)板載ADV7611解碼芯片的FPGA開(kāi)發(fā)板;第三套工程使用silicon9011解碼輸入的HDMI視頻,適應(yīng)板載silicon9011解碼芯片的FPGA開(kāi)發(fā)板;第四套工程使用純verilog實(shí)現(xiàn)的HDMI解碼模塊解碼輸入的HDMI視頻,適應(yīng)沒(méi)有板載HDMI解碼芯片只有HDMI輸入接口的FPGA開(kāi)發(fā)板;四套工程列表如下:
_______________________________________________________________
|vivado工程 | 第一套工程 | 第二套工程 | 第三套工程 | 第四套工程 |
|vivado版本 | 2019.1 | 2019.1 | 2019.1 | 2019.1 |
|HDMI解碼芯片 | IT6802 | ADV7611 |silicon9011| 無(wú) |
|HDMI解碼方式 | 硬件解碼 | 硬件解碼 | 硬件解碼 | RTL模塊解碼 |
|輸入視頻 | HDMI | HDMI | HDMI | HDMI |
|HDMI解碼后視頻| RGB888 | RGB888 | RGB888 | RGB888 |
|輸出視頻 | SDI | SDI | SDI | SDI |
_______________________________________________________________
使用筆記本電腦模擬HDMI輸入視頻,分辨率為1920X1080@60Hz,FPGA首先用純verilog實(shí)現(xiàn)的i2c控制器配置HDMI解碼芯片(第四套工程除外),FPGA采集HDMI輸入解碼后的RGB888數(shù)據(jù),經(jīng)過(guò)RGB888轉(zhuǎn)YUV422模塊輸出YUV422視頻,再經(jīng)過(guò)SPMTE編碼模塊將YUV422視頻數(shù)據(jù)加上SDI數(shù)據(jù)幀頭、幀尾以及控制信息等組成數(shù)據(jù)包,此時(shí),原有的視頻時(shí)序已經(jīng)被打亂,需要將視頻緩存致DDR3中,所以先將視頻寫入DDR3,然后讀出送入Xilinx官方的SPMTE SDI IP核做SDI數(shù)據(jù)編碼,同時(shí)需要輸入SDI模式,該模塊也包含在代碼中,從SPMTE SDI IP核輸出的已是標(biāo)準(zhǔn)SDI并行視頻,最后調(diào)用GTX原語(yǔ)將SDI并行視頻進(jìn)行高速串行編碼發(fā)送,為了保證數(shù)據(jù)的可靠性,在FPGA開(kāi)發(fā)板需配套一顆GV8500以增強(qiáng)驅(qū)動(dòng),當(dāng)然換其他IC也可以做到,最后通過(guò)板載的BNC接口將SDI視頻發(fā)送出去。
本文詳細(xì)描述了FPGA實(shí)現(xiàn)HDMI轉(zhuǎn)SDI視頻輸出的實(shí)現(xiàn)設(shè)計(jì)方案,工程代碼編譯通過(guò)后上板調(diào)試驗(yàn)證,文章末尾有演示視頻,可直接項(xiàng)目移植,適用于在校學(xué)生、研究生項(xiàng)目開(kāi)發(fā),也適用于在職工程師做項(xiàng)目開(kāi)發(fā),可應(yīng)用于醫(yī)療、軍工等行業(yè)的數(shù)字成像和圖像傳輸領(lǐng)域;
提供完整的、跑通的工程源碼和技術(shù)支持;
工程源碼和技術(shù)支持的獲取方式放在了文章末尾,請(qǐng)耐心看到最后;
關(guān)于SDI的理論知識(shí)部分,可自行搜索一下,很多大佬講得很詳細(xì),也可以參考我之前寫的文章點(diǎn)擊查看:SDI理論
免責(zé)聲明
本工程及其源碼即有自己寫的一部分,也有網(wǎng)絡(luò)公開(kāi)渠道獲取的一部分(包括CSDN、Xilinx官網(wǎng)、Altera官網(wǎng)等等),若大佬們覺(jué)得有所冒犯,請(qǐng)私信批評(píng)教育;基于此,本工程及其源碼僅限于讀者或粉絲個(gè)人學(xué)習(xí)和研究,禁止用于商業(yè)用途,若由于讀者或粉絲自身原因用于商業(yè)用途所導(dǎo)致的法律問(wèn)題,與本博客及博主無(wú)關(guān),請(qǐng)謹(jǐn)慎使用。。。
2、我目前已有的SDI編解碼方案
我的博客主頁(yè)開(kāi)設(shè)有SDI視頻專欄,里面全是FPGA編解碼SDI的工程源碼及博客介紹;既有基于GS2971/GS2972的SDI編解碼,也有基于GTP/GTX資源的SDI編解碼;專欄地址鏈接:點(diǎn)擊直接前往
3、設(shè)計(jì)思路框架核模塊解析
提供3套vivado2019.1版本的工程源碼,4套工程的不同點(diǎn)在于輸入HDMI視頻解碼方式的不同,以適應(yīng)不同的FPGA開(kāi)發(fā)板。第一套工程使用IT6802解碼輸入的HDMI視頻,適應(yīng)板載IT6802解碼芯片的FPGA開(kāi)發(fā)板;第二套工程使用ADV7611解碼輸入的HDMI視頻,適應(yīng)板載ADV7611解碼芯片的FPGA開(kāi)發(fā)板;第三套工程使用silicon9011解碼輸入的HDMI視頻,適應(yīng)板載silicon9011解碼芯片的FPGA開(kāi)發(fā)板;第四套工程使用純verilog實(shí)現(xiàn)的HDMI解碼模塊解碼輸入的HDMI視頻,適應(yīng)沒(méi)有板載HDMI解碼芯片只有HDMI輸入接口的FPGA開(kāi)發(fā)板;四套工程列表如下:
設(shè)計(jì)框圖
第一套工程設(shè)計(jì)框架如下:
第二套工程設(shè)計(jì)框架如下:
第三套工程設(shè)計(jì)框架如下:
第四套工程設(shè)計(jì)框架如下:
IT6802解碼芯片配置及采集
第一套工程使用IT6802解碼輸入的HDMI視頻,適應(yīng)板載IT6802解碼芯片的FPGA開(kāi)發(fā)板;IT6802解碼芯片需要i2c配置才能使用,關(guān)于IT6802解碼芯片的配置和使用,請(qǐng)參考我往期的博客,博客地址:點(diǎn)擊直接前往
IT6802解碼芯片配置及采集這兩部分均用verilog代碼模塊實(shí)現(xiàn),代碼中配置為1920x1080分辨率;代碼位置如下:
ADV7611解碼芯片配置及采集
第二套工程使用ADV7611解碼輸入的HDMI視頻,適應(yīng)板載ADV7611解碼芯片的FPGA開(kāi)發(fā)板;ADV7611解碼芯片需要i2c配置才能使用,ADV7611解碼芯片配置及采集這兩部分均用verilog代碼模塊實(shí)現(xiàn),代碼中配置為1920x1080分辨率;代碼位置如下:
silicon9011解碼芯片配置及采集
第三套工程使用silicon9011解碼輸入的HDMI視頻,適應(yīng)板載silicon9011解碼芯片的FPGA開(kāi)發(fā)板;silicon9011解碼芯片需要i2c配置才能使用,關(guān)于silicon9011解碼芯片的配置和使用,請(qǐng)參考我往期的博客,博客地址:點(diǎn)擊直接前往
silicon9011解碼芯片配置及采集這兩部分均用verilog代碼模塊實(shí)現(xiàn),代碼位置如下:
純verilog的HDMI 解碼模塊
第四套工程使用純verilog實(shí)現(xiàn)的HDMI解碼模塊解碼輸入的HDMI視頻,適應(yīng)沒(méi)有板載HDMI解碼芯片只有HDMI輸入接口的FPGA開(kāi)發(fā)板;模塊輸入為差分HDMI視頻,輸出為RGB888的VGA視頻,并伴隨解碼的像素時(shí)鐘、行同步信號(hào)、場(chǎng)同步信號(hào)以及數(shù)據(jù)有效信號(hào);此外,該模塊還有配套的EDID模塊,負(fù)責(zé)和輸入源協(xié)商視頻分辨率等基本信息,通過(guò)i2c接口與外接通信,IDED信息是固定的十六進(jìn)制文件,例化了ROM用來(lái)存儲(chǔ),上電自動(dòng)加載;該模塊最高只支持1920x1080@60Hz分辨率的輸入視頻解碼,更高的2K、4K暫不支持;代碼位置如下:
RGB888轉(zhuǎn)YUV422
這個(gè)模塊很簡(jiǎn)單, RGB888進(jìn)YUV422出,十幾行代碼的事兒,不必多講,采用純verilog代碼實(shí)現(xiàn),代碼位置如下:
SPMTE編碼
SPMTE編碼模塊將YUV422視頻數(shù)據(jù)加上SDI數(shù)據(jù)幀頭、幀尾以及控制信息等組成數(shù)據(jù)包,此時(shí),原有的視頻時(shí)序已經(jīng)被打亂,代碼位置和核心代碼部分如下:
SDI模式
這個(gè)模塊根據(jù)輸入的HDMI視頻分辨率來(lái)選擇不同的SDI模式,這個(gè)信號(hào)會(huì)給到后面的Xilinx官方的SPMTE SDI IP核使用,根據(jù)Xilinx官方手冊(cè),SDI發(fā)送模式如下:
代碼中體現(xiàn)如下:
代碼位置如下:
圖像緩存
由于原有的輸入視頻時(shí)序已經(jīng)被打亂,所以輸入圖像必須經(jīng)DDR緩存,調(diào)用Xilinx官方的MIG 核FIFO IP核,將DDR的用戶接口封裝為FIFO讀寫模式,方便用戶使用,將圖像緩存進(jìn)DDR3中做4幀緩存,如果你覺(jué)得延時(shí)太高了,可以改為緩存2幀,DDR3地址讀寫部分如下:
圖像緩存代碼位置如下:
SPMTE SDI
調(diào)用Xilinx官方的SPMTE SDI IP核做SDI數(shù)據(jù)編碼,同時(shí)需要輸入SDI模式,該模塊也包含在代碼中,從SPMTE SDI IP核輸出的已是標(biāo)準(zhǔn)SDI并行視頻,SPMTE SDI IP是Xilinx提供的專門用于SDI視頻編解碼的IP,可以免費(fèi)試用,這里調(diào)用該IP,并添加了一些用戶代碼,代碼位置如下:
GTX
調(diào)用GTX原語(yǔ)將SDI并行視頻進(jìn)行高速串行編碼發(fā)送,為了達(dá)到GTX變速的目的,這里沒(méi)有調(diào)用GTX IP,而是直接調(diào)用其原語(yǔ)實(shí)現(xiàn),需要讀者對(duì)GTX有較深的理解,代碼位置如下:
這里對(duì)GTX的時(shí)鐘有嚴(yán)格要求,必須使用一對(duì)148.5 MHz和一對(duì)148.35 MHz的時(shí)鐘作為參考時(shí)鐘,否則運(yùn)行不了SDI視頻解碼;原理圖如下:
GV8500
為了保證數(shù)據(jù)的可靠性,在FPGA開(kāi)發(fā)板需配套一顆GV8500以增強(qiáng)驅(qū)動(dòng),當(dāng)然換其他IC也可以做到,最后通過(guò)板載的BNC接口將SDI視頻發(fā)送出去。原理圖如下:
4、vivado工程1–>IT6802采集SDI輸出
開(kāi)發(fā)板FPGA型號(hào):Xilinx–Kintex7–xc7k325tffg676-2;
開(kāi)發(fā)環(huán)境:Vivado2019.1;
輸入:筆記本電腦輸出模擬HDMI視頻輸入,分辨率1920x1080@60Hz,IT6802解碼;
輸出:SDI;
應(yīng)用:FPGA實(shí)現(xiàn)HDMI轉(zhuǎn)SDI視頻輸出
工程代碼架構(gòu)如下:
綜合編譯完成后的FPGA資源消耗和功耗預(yù)估如下:
5、vivado工程2–>ADV7611采集SDI輸出
開(kāi)發(fā)板FPGA型號(hào):Xilinx–Kintex7–xc7k325tffg676-2;
開(kāi)發(fā)環(huán)境:Vivado2019.1;
輸入:筆記本電腦輸出模擬HDMI視頻輸入,分辨率1920x1080@60Hz,ADV7611解碼;
輸出:SDI;
應(yīng)用:FPGA實(shí)現(xiàn)HDMI轉(zhuǎn)SDI視頻輸出
工程代碼架構(gòu)如下:
綜合編譯完成后的FPGA資源消耗和功耗預(yù)估如下:
6、vivado工程3–>silicon9011采集SDI輸出
開(kāi)發(fā)板FPGA型號(hào):Xilinx–Kintex7–xc7k325tffg676-2;
開(kāi)發(fā)環(huán)境:Vivado2019.1;
輸入:筆記本電腦輸出模擬HDMI視頻輸入,分辨率1920x1080@60Hz,silicon9011解碼;
輸出:SDI;
應(yīng)用:FPGA實(shí)現(xiàn)HDMI轉(zhuǎn)SDI視頻輸出
工程代碼架構(gòu)如下:
綜合編譯完成后的FPGA資源消耗和功耗預(yù)估如下:
7、vivado工程4–>HDMI RTL解碼SDI輸出
開(kāi)發(fā)板FPGA型號(hào):Xilinx–Kintex7–xc7k325tffg676-2;
開(kāi)發(fā)環(huán)境:Vivado2019.1;
輸入:筆記本電腦輸出模擬HDMI視頻輸入,分辨率1920x1080@60Hz,HDMI RTL模塊解碼;
輸出:SDI;
應(yīng)用:FPGA實(shí)現(xiàn)HDMI轉(zhuǎn)SDI視頻輸出
工程代碼架構(gòu)如下:
綜合編譯完成后的FPGA資源消耗和功耗預(yù)估如下:
8、工程移植說(shuō)明
vivado版本不一致處理
1:如果你的vivado版本與本工程vivado版本一致,則直接打開(kāi)工程;
2:如果你的vivado版本低于本工程vivado版本,則需要打開(kāi)工程后,點(diǎn)擊文件–>另存為;但此方法并不保險(xiǎn),最保險(xiǎn)的方法是將你的vivado版本升級(jí)到本工程vivado的版本或者更高版本;
3:如果你的vivado版本高于本工程vivado版本,解決如下:
打開(kāi)工程后會(huì)發(fā)現(xiàn)IP都被鎖住了,如下:
此時(shí)需要升級(jí)IP,操作如下:
FPGA型號(hào)不一致處理
如果你的FPGA型號(hào)與我的不一致,則需要更改FPGA型號(hào),操作如下:
更改FPGA型號(hào)后還需要升級(jí)IP,升級(jí)IP的方法前面已經(jīng)講述了;
其他注意事項(xiàng)
1:由于每個(gè)板子的DDR不一定完全一樣,所以MIG IP需要根據(jù)你自己的原理圖進(jìn)行配置,甚至可以直接刪掉我這里原工程的MIG并重新添加IP,重新配置;
2:根據(jù)你自己的原理圖修改引腳約束,在xdc文件中修改即可;
3:純FPGA移植到Zynq需要在工程中添加zynq軟核;
9、上板調(diào)試驗(yàn)證并演示
準(zhǔn)備工作
你需要有以下裝備才能移植并測(cè)試該工程代碼:
1:筆記本電腦
2:FPGA開(kāi)發(fā)板;
3:板載的HDMI輸入接口和SDI輸出接口;
4:SDI轉(zhuǎn)HDMI盒子;
5:HDMI顯示,要求分辨率支持1920x1080;
測(cè)試平臺(tái)框圖如下:
我用的SDI轉(zhuǎn)HDMI盒子如下,某寶有賣:
輸出演示
輸出演示如下:
10、福利:工程代碼的獲取
福利:工程代碼的獲取
代碼太大,無(wú)法郵箱發(fā)送,以某度網(wǎng)盤鏈接方式發(fā)送,
資料獲取方式:私,或者文章末尾的V名片。
網(wǎng)盤資料如下: