1、前言
FPGA實(shí)現(xiàn)SDI視頻編解碼目前有兩種方案:
一是使用專用編解碼芯片,比如典型的接收器GS2971,發(fā)送器GS2972,優(yōu)點(diǎn)是簡(jiǎn)單,比如GS2971直接將SDI解碼為并行的YCRCB,缺點(diǎn)是成本較高,可以百度一下GS2971的價(jià)格;
另一種方案是使用FPGA實(shí)現(xiàn)編解碼,利用FPGA的GTP/GTX資源實(shí)現(xiàn)解串,優(yōu)點(diǎn)是合理利用了FPGA資源,GTP/GTX資源不用白不用,缺點(diǎn)是操作難度大一些,對(duì)FPGA水平要求較高。
PCIE(PCI Express)采用了目前業(yè)內(nèi)流行的點(diǎn)對(duì)點(diǎn)串行連接,比起 PCI 以及更早期的計(jì)算機(jī)總線的共享并行架構(gòu),每個(gè)設(shè)備都有自己的專用連接,不需要向整個(gè)總線請(qǐng)求帶寬,而且可以把數(shù)據(jù)傳輸率提高到一個(gè)很高的頻率,達(dá)到 PCI 所不能提供的高帶寬,是目前各行業(yè)高速接口的優(yōu)先選擇方向,具有很高的實(shí)用價(jià)值和學(xué)習(xí)價(jià)值;
本設(shè)計(jì)使用Xilinx官方的XDMA方案搭建基于Xilinx系列FPGA的PCIE通信平臺(tái),該方案只適用于Xilinx系列FPGA,一并提供了XDMA的安裝驅(qū)動(dòng)和QT上位機(jī)源代碼,省去了使用XDMA繁瑣的驅(qū)動(dòng)尋找和上位機(jī)軟件開(kāi)發(fā)的不知所措,并以搭建好vivado工程,省去了不知道如何使用XDMA的尷尬,使得PCIE的使用變得簡(jiǎn)單易上手,而不用關(guān)心其復(fù)雜的PCIE協(xié)議;由于我的開(kāi)發(fā)板只支持PCIE X8,所以提供的代碼是PCIE X8架構(gòu),若需要PCIE X1、 X2、 X8、 X16、 X32的朋友,可自行修改本工程,也可關(guān)注我,我會(huì)實(shí)時(shí)發(fā)布新的工程。
本文詳細(xì)描述了FPGA純verilog解碼SDI視頻并發(fā)送PCIE到上位機(jī)用QT現(xiàn)實(shí)采集視頻的實(shí)現(xiàn)設(shè)計(jì)方案,利用開(kāi)發(fā)板自帶的SDI輸入接口,實(shí)時(shí)采集HDMI輸入視頻,緩存DDR3后,一路經(jīng)HDMI輸出芯片輸出顯示器,另一路經(jīng)XDMA,通過(guò)PCIE發(fā)送給QT上位機(jī)顯示程序顯示;達(dá)到SDI采集視頻環(huán)出和PCIE輸出到電腦端顯示的同步操作,屬于FPGA圖像采集領(lǐng)域的高端項(xiàng)目。。。
工程代碼編譯通過(guò)后上板調(diào)試驗(yàn)證,文章末尾有演示視頻,可直接項(xiàng)目移植,適用于在校學(xué)生做畢業(yè)設(shè)計(jì)、研究生項(xiàng)目開(kāi)發(fā),也適用于在職工程師做項(xiàng)目開(kāi)發(fā),可應(yīng)用于醫(yī)療、軍工等行業(yè)的數(shù)字成像和圖像傳輸領(lǐng)域;
提供完整的、跑通的工程源碼和技術(shù)支持;
工程源碼和技術(shù)支持的獲取方式放在了文章末尾,請(qǐng)耐心看到最后;
免責(zé)聲明
本工程及其源碼即有自己寫(xiě)的一部分,也有網(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è)有SDI視頻專欄,既有FPGA純邏輯資源的SDI編解碼,其中有基于GTX的,也有基于GTH的編解碼,又有基于例如GS2971/GS2972的SDI視頻收發(fā)工程,既有普通的SDI接受發(fā)送,也有SDI視頻的縮放、拼接、UDP傳輸、SFP光纖傳輸、PCIE傳輸?shù)鹊?;以下是專欄地址?br>點(diǎn)擊直接前往
3、我已有的PCIE方案
我的主頁(yè)有PCIE通信專欄,既有基于RIFFA實(shí)現(xiàn)的PCIE方案,也有基于XDMA實(shí)現(xiàn)的PCIE方案;既有簡(jiǎn)單的數(shù)據(jù)交互、測(cè)速,也有應(yīng)用級(jí)別的圖像采集傳輸;既有純FPGA的PCIE,也有zynq的PCIE;以下是專欄地址:
點(diǎn)擊直接前往
4、總體設(shè)計(jì)思路和方案
總體設(shè)計(jì)思路和方案如下:
SDI攝像頭
我用到的SDI攝像頭輸出視頻分辨率1080P@30Hz;根據(jù)不同相機(jī)有所區(qū)別;
Gv8601a單端轉(zhuǎn)差
Gv8601a起到均衡 EQ 功能,這里選用Gv8601a是因?yàn)槌u了Xilinx官方的板子,當(dāng)然也可以用其他型號(hào)器件。
GTX解串
GTX負(fù)責(zé)解串,將原始SDI視頻解為20位的并行數(shù)據(jù),我的板子是K7,所以用GTX,如果是A7的板子則用GTP,這里使用GTX并沒(méi)有調(diào)用IP,而是直接調(diào)用GTXE2_CHANNEL和GTXE2_COMMON源語(yǔ),這一點(diǎn)可謂將Xilinx的GTX資源用到了極致水平,值得好好品讀,其實(shí)調(diào)用IP無(wú)非也就是把調(diào)用源語(yǔ)變得界面化而已,直接調(diào)用源語(yǔ)或許理解更為深刻,這一點(diǎn),在市面上的所謂FPGA教程里都學(xué)不到。
SDI解碼
調(diào)用SMPTE-SDI IP核實(shí)現(xiàn),GTX只是將高速串行數(shù)據(jù)解為了并行,但并沒(méi)有解析SDI協(xié)議,SMPTE-SDI IP核則完成了SDI協(xié)議的解碼,去掉了SDI協(xié)議中的數(shù)據(jù)包信息和控制信息,解析出有效的視頻數(shù)據(jù),詳細(xì)的SMPTE-SDI IP核接口定義請(qǐng)參考官方的使用手冊(cè);
VGA時(shí)序恢復(fù)
此模塊的作用就是解碼恢復(fù)出hs、vs以及de信號(hào),即恢復(fù)正常的VGA視頻時(shí)序;
要恢復(fù)正常的VGA視頻時(shí)序,首先得看懂下面這張圖:
根據(jù)這張表即可恢復(fù)出圖像時(shí)序,具體看代碼,這里一兩句話實(shí)在講不清楚,如果要完全講明白,寫(xiě)5本書(shū)都搓搓有余;
YUV轉(zhuǎn)RGB
這里就簡(jiǎn)單了,YUV4:4:4轉(zhuǎn)RGB8:8:8,幾條公式和幾行代碼的事兒,屬于低端操作;
至此,SDI解碼過(guò)程就完成了,接下來(lái)就是圖像輸出過(guò)程;
具體的SDI解碼部分原理講解,請(qǐng)參考我之前的文章:點(diǎn)擊直接前往
圖像緩存
其實(shí)就是一個(gè)AXI4主機(jī),加上讀寫(xiě)邏輯構(gòu)成的DMA;具體看代碼。。。
PCIE發(fā)送通路
調(diào)用Xilinx官方的XDMA作為PCIE發(fā)送引擎,不需要了解PCIE復(fù)雜的協(xié)議,XDMA集成AXI4接口,直接與DDR3交互,用戶通過(guò)DDR3的指定地址做數(shù)據(jù)讀寫(xiě)即可;
具體的PCIE發(fā)送通路部分原理講解,請(qǐng)參考我之前的文章:點(diǎn)擊直接前往
SDI同步輸出通路
SDI視頻采集緩存后,讀出數(shù)據(jù)送HDMI輸出現(xiàn)實(shí),這一步可作為QT上位機(jī)的參考,同步輸出可比較PCIE視頻傳輸?shù)恼_性,有的項(xiàng)目也有PCIE和HDMI同步輸出的需求,所以這里設(shè)計(jì)得高度貼近真實(shí)項(xiàng)目。。。
HDMI發(fā)送使用silicon9134芯片,silicon9134需要i2c配置才能使用,關(guān)于silicon9134得i2c配置和使用,請(qǐng)參考我之前的文章:點(diǎn)擊直接前往
5、vivado工程詳解
開(kāi)發(fā)板FPGA型號(hào):Xilinx–xc7k325tffg900-2;
開(kāi)發(fā)環(huán)境:Vivado2019.1;
輸入:3G-SDI;分辨率1920X1080@30Hz;
輸出1:PCIE X8至電腦端QT上位機(jī);
輸出2:HDMI輸出;分辨率1920X1080@60Hz;;
應(yīng)用:SDI視頻采集卡;
工程BD如下:
綜合后的工程代碼架構(gòu)如下:
SDI解碼部分源碼位置如圖:
綜合編譯完成后的FPGA資源消耗和功耗預(yù)估如下:
6、驅(qū)動(dòng)安裝
提供提供Win系統(tǒng)驅(qū)動(dòng),目錄如下:
驅(qū)動(dòng)安裝參考前面的測(cè)速試驗(yàn):點(diǎn)擊直接前往
7、QT上位機(jī)軟件
QT顯示上位機(jī):提供源代碼和可執(zhí)行程序,發(fā)開(kāi)版本為QT5.6.2;位置如下:
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)證
SDI同步HDMI輸出驗(yàn)證
PCIE輸出驗(yàn)證
開(kāi)啟上位機(jī)測(cè)程序進(jìn)行 PCIe 顯示測(cè)試,打開(kāi)下圖的顯示軟件 pcie2screen,軟件在如下位置,實(shí)驗(yàn)結(jié)果如下:
打開(kāi)上位機(jī)以后可以看到軟件暫停播放:
點(diǎn)擊中間的按鈕,開(kāi)始播放SDI輸入視頻源的視頻:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-459772.html
10、福利:工程代碼的獲取
福利:工程代碼的獲取
代碼太大,無(wú)法郵箱發(fā)送,以某度網(wǎng)盤(pán)鏈接方式發(fā)送,
資料獲取方式1:私,或者文章末尾的V名片。
資料獲取方式2:文章末尾的XX號(hào),回復(fù) 001006
網(wǎng)盤(pán)資料如下:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-459772.html
到了這里,關(guān)于FPGA實(shí)現(xiàn)SDI視頻解碼PCIE傳輸 提供工程源碼和QT上位機(jī)源碼加技術(shù)支持的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!