b2c電子商務(wù)網(wǎng)站源碼網(wǎng)絡(luò)推廣深圳有效渠道
目錄
- 1、前言
- 工程概述
- 免責(zé)聲明
- 3、詳細(xì)設(shè)計(jì)方案
- 設(shè)計(jì)框圖
- SDI 輸入設(shè)備
- Gv8601a 均衡器
- GTX 解串與串化
- SMPTE SD/HD/3G SDI IP核
- BT1120轉(zhuǎn)RGB
- FDMA圖像緩存
- RIFFA用戶數(shù)據(jù)控制
- RIFFA架構(gòu)詳解
- Xilinx 7 Series Integrated Block for PCI Express
- RIFFA驅(qū)動(dòng)及其安裝
- QT上位機(jī)
- HDMI輸出
- RGB轉(zhuǎn)BT1120
- Gv8500 驅(qū)動(dòng)器
- SDI轉(zhuǎn)HDMI盒子
- 工程設(shè)計(jì)源碼層面架構(gòu)
- PCIE上板調(diào)試注意事項(xiàng)
- FPGA工程編譯注意事項(xiàng)
- 4、設(shè)計(jì)方案1詳解-->Kintex7-35T版本
- 5、設(shè)計(jì)方案2詳解-->Zynq7100版本
- 6、工程移植說明
- vivado版本不一致處理
- FPGA型號(hào)不一致處理
- 其他注意事項(xiàng)
- 7、上板調(diào)試驗(yàn)證
- 準(zhǔn)備工作
- SDI視頻采集轉(zhuǎn)PCIE輸出效果演示
技術(shù)總結(jié):FPGA基于GTX+RIFFA架構(gòu)實(shí)現(xiàn)多功能SDI視頻轉(zhuǎn)PCIE采集卡設(shè)計(jì)方案
1、前言
FPGA實(shí)現(xiàn)SDI視頻編解碼現(xiàn)狀;
目前FPGA實(shí)現(xiàn)SDI視頻編解碼有兩種方案:一是使用專用編解碼芯片,比如典型的接收器GS2971,發(fā)送器GS2972,優(yōu)點(diǎn)是簡單,比如GS2971接收器直接將SDI解碼為并行的YCrCb422,GS2972發(fā)送器直接將并行的YCrCb422編碼為SDI視頻,缺點(diǎn)是成本較高,可以百度一下GS2971和GS2972的價(jià)格;另一種方案是使用FPGA邏輯資源部實(shí)現(xiàn)SDI編解碼,利用Xilinx系列FPGA的GTP/GTX資源實(shí)現(xiàn)解串,利用Xilinx系列FPGA的SMPTE SDI資源實(shí)現(xiàn)SDI編解碼,優(yōu)點(diǎn)是合理利用了FPGA資源,GTP/GTX資源不用白不用,缺點(diǎn)是操作難度大一些,對(duì)FPGA開發(fā)者的技術(shù)水平要求較高。有意思的是,這兩種方案在本博這里都有對(duì)應(yīng)的解決方案,包括硬件的FPGA開發(fā)板、工程源碼等等。本設(shè)計(jì)采用GTX邏輯資源解串方案;
FPGA實(shí)現(xiàn)PCIE數(shù)據(jù)傳輸現(xiàn)狀;
目前基于Xilinx系列FPGA的PCIE通信架構(gòu)主要有以下2種,一種是簡單的、傻瓜式的、易于開發(fā)的、對(duì)新手友好的XDMA架構(gòu),該架構(gòu)對(duì)PCIE協(xié)議底層做了封裝,并加上了DMA引擎,使得使用的難度大大降低,加之Xilinx提供了配套的Windows和Linux系統(tǒng)驅(qū)動(dòng)和上位機(jī)參考源代碼,使得XDMA一經(jīng)推出就讓工程師們欲罷不能;另一種是更為底層的、需要設(shè)計(jì)者有一定PCIE協(xié)議知識(shí)的、更易于定制化開發(fā)的7 Series Integrated Block for PCI Express架構(gòu),該IP實(shí)現(xiàn)的是PCIe 的物理層、鏈路層和事務(wù)層,提供給用戶的是以 AXI4-stream 接口定義的TLP 包,使用該IP 核,需要對(duì)PCIe 協(xié)議有清楚的理解,特別是對(duì)事務(wù)包TLP報(bào)文格式;本設(shè)計(jì)采用第二種方案,調(diào)用7 Series Integrated Block for PCI Express IP核,加上RIFFA架構(gòu)實(shí)現(xiàn)PCIE通信,7 Series Integrated Block for PCI Express實(shí)現(xiàn)底層協(xié)議,RIFFA實(shí)現(xiàn)TLP報(bào)文組包、解包和輕量級(jí)DMA功能;本設(shè)計(jì)采用基于7 Series Integrated Block for PCI Express的RIFFA架構(gòu);
工程概述
本設(shè)計(jì)使用FPGA基于GTX+RIFFA架構(gòu)實(shí)現(xiàn)多功能SDI視頻采集卡;具體功能如下:
我的FPGA開發(fā)板硬件設(shè)計(jì)了2路SDI輸入接口+2路SDI輸出接口+PCIEX4接口+1路HDMI輸出接口;
基于以上接口,設(shè)計(jì)了多功能SDI視頻采集卡工程,具體如下:
第1路3G-SDI輸入視頻轉(zhuǎn)PCIE輸出給PC端電腦主機(jī),并用QT上位機(jī)接收;
第1路3G-SDI輸入視頻轉(zhuǎn)3G-SDI輸出,并用顯示器接收顯示;
第2路3G-SDI輸入視頻轉(zhuǎn)3G-SDI輸出,并用顯示器接收顯示;
第2路3G-SDI輸入視頻轉(zhuǎn)HDMI輸出,并用顯示器接收顯示;
第1路SDI輸入輸出路徑如下:
輸入源為3G-SDI相機(jī)或者HDMI轉(zhuǎn)3G-SDI盒子,也可以使用HD-SDI或者SD-SDI相機(jī),因?yàn)楸驹O(shè)計(jì)是三種SDI視頻自適應(yīng)的;同軸的SDI視頻通過同軸線連接到FPGA開發(fā)板的BNC座子,然后同軸視頻經(jīng)過板載的Gv8601a芯片實(shí)現(xiàn)單端轉(zhuǎn)差分和均衡EQ的功能;然后差分SDI視頻信號(hào)進(jìn)入FPGA內(nèi)部的GTX高速資源,實(shí)現(xiàn)數(shù)據(jù)高速串行到并行的轉(zhuǎn)換,本博稱之為解串;解串后的并行視頻再送入Xilinx系列FPGA特有的SMPTE SD/HD/3G SDI IP核,進(jìn)行SDI視頻解碼操作并輸出BT1120視頻,至此,SDI視頻解碼操作已經(jīng)完成,可以進(jìn)行常規(guī)的圖像處理操作了;然后使用純verilog實(shí)現(xiàn)的BT1120轉(zhuǎn)RGB模塊實(shí)現(xiàn)視頻格式轉(zhuǎn)換后輸出RGB888視頻;然后使用2路本博主常用的FDMA圖像緩存架構(gòu)對(duì)采集視頻做圖像緩存,緩存介質(zhì)為板載DDR3;其中1路視頻從DDR3中讀出,送入RIFFA模塊做視頻數(shù)據(jù)的TLP包封裝,并跨時(shí)鐘域后輸出給Xilinx官方的7 Series Integrated Block for PCI Express IP核實(shí)現(xiàn)PCIE物理層、鏈路層和事務(wù)層功能,并以差分?jǐn)?shù)據(jù)輸出;PCIE視頻數(shù)據(jù)通過PCIE金手指從FPGA板卡發(fā)送到PC主機(jī);PC端主機(jī)在RIFFA-PCIE驅(qū)動(dòng)的加持下有效識(shí)別并讀取PCIE數(shù)據(jù);PC端調(diào)用QT上位機(jī)調(diào)用RIFFA-PCIE驅(qū)動(dòng)的API實(shí)現(xiàn)視頻數(shù)據(jù)顯示;由此形成SDI相機(jī)+RIFFA+PCIE+QT的高端架構(gòu);另外1路視頻從DDR3中讀出,送入純Verilog實(shí)現(xiàn)的RGB轉(zhuǎn)BT1120模塊實(shí)現(xiàn)RGB888視頻到BT1120視頻流的轉(zhuǎn)換;然后調(diào)用Xilinx官方的SMPTE SD/HD/3G SDI IP核實(shí)現(xiàn)HD-SDI視頻編碼操作;然后調(diào)用Xilinx官方的GTX原語,實(shí)現(xiàn)并行數(shù)據(jù)到高速串行的轉(zhuǎn)換,差分高速信號(hào)再進(jìn)入板載的Gv8500芯片實(shí)現(xiàn)差分轉(zhuǎn)單端和驅(qū)動(dòng)增強(qiáng)的功能,SDI視頻通過FPGA開發(fā)板的BNC座子輸出,最后通過同軸線連接到SDI轉(zhuǎn)HDMI盒子連接到HDMI顯示器;由此形成SDI相機(jī)+GTX+SDI輸出的高端架構(gòu);
第2路SDI輸入輸出路徑如下:
輸入源為3G-SDI相機(jī)或者HDMI轉(zhuǎn)3G-SDI盒子,也可以使用HD-SDI或者SD-SDI相機(jī),因?yàn)楸驹O(shè)計(jì)是三種SDI視頻自適應(yīng)的;同軸的SDI視頻通過同軸線連接到FPGA開發(fā)板的BNC座子,然后同軸視頻經(jīng)過板載的Gv8601a芯片實(shí)現(xiàn)單端轉(zhuǎn)差分和均衡EQ的功能;然后差分SDI視頻信號(hào)進(jìn)入FPGA內(nèi)部的GTX高速資源,實(shí)現(xiàn)數(shù)據(jù)高速串行到并行的轉(zhuǎn)換,本博稱之為解串;解串后的并行視頻再送入Xilinx系列FPGA特有的SMPTE SD/HD/3G SDI IP核,進(jìn)行SDI視頻解碼操作并輸出BT1120視頻,至此,SDI視頻解碼操作已經(jīng)完成,可以進(jìn)行常規(guī)的圖像處理操作了;然后使用純verilog實(shí)現(xiàn)的BT1120轉(zhuǎn)RGB模塊實(shí)現(xiàn)視頻格式轉(zhuǎn)換后輸出RGB888視頻;然后使用2路本博主常用的FDMA圖像緩存架構(gòu)對(duì)采集視頻做圖像緩存,緩存介質(zhì)為板載DDR3;其中1路視頻從DDR3中讀出,送入純Verilog實(shí)現(xiàn)的RGB轉(zhuǎn)BT1120模塊實(shí)現(xiàn)RGB888視頻到BT1120視頻流的轉(zhuǎn)換;然后調(diào)用Xilinx官方的SMPTE SD/HD/3G SDI IP核實(shí)現(xiàn)HD-SDI視頻編碼操作;然后調(diào)用Xilinx官方的GTX原語,實(shí)現(xiàn)并行數(shù)據(jù)到高速串行的轉(zhuǎn)換,差分高速信號(hào)再進(jìn)入板載的Gv8500芯片實(shí)現(xiàn)差分轉(zhuǎn)單端和驅(qū)動(dòng)增強(qiáng)的功能,SDI視頻通過FPGA開發(fā)板的BNC座子輸出,最后通過同軸線連接到SDI轉(zhuǎn)HDMI盒子連接到HDMI顯示器;由此形成SDI相機(jī)+GTX+SDI輸出的高端架構(gòu);另外1路視頻從DDR3中讀出,送入純verilog實(shí)現(xiàn)的GRB888轉(zhuǎn)HDMI模塊實(shí)現(xiàn)TMDS差分視頻編碼,最后視頻輸出到顯示器顯示;由此形成SDI相機(jī)+GTX+HDMI輸出的高端架構(gòu);
針對(duì)市面上主流的FPGA,本博客設(shè)計(jì)了2套工程工程解決方案,具體如下:
現(xiàn)對(duì)上述2套工程工程解決方案做如下解釋,方便讀者理解:
工程解決方案1
開發(fā)板FPGA型號(hào)為Xilinx–>Kintex7–35T–xc7k325tffg484-2;輸入源為2個(gè)3G-SDI相機(jī)或者HDMI轉(zhuǎn)3G-SDI盒子,分辨率為1920x1080@60Hz,也可以使用HD-SDI或者SD-SDI相機(jī),因?yàn)楸驹O(shè)計(jì)是三種SDI視頻自適應(yīng)的;
第1路3G-SDI輸入視頻流向如下:
同軸的SDI視頻通過同軸線連接到FPGA開發(fā)板的BNC座子,然后同軸視頻經(jīng)過板載的Gv8601a芯片實(shí)現(xiàn)單端轉(zhuǎn)差分和均衡EQ的功能;然后差分SDI視頻信號(hào)進(jìn)入FPGA內(nèi)部的GTX高速資源,實(shí)現(xiàn)數(shù)據(jù)高速串行到并行的轉(zhuǎn)換,本博稱之為解串;解串后的并行視頻再送入Xilinx系列FPGA特有的SMPTE SD/HD/3G SDI IP核,進(jìn)行SDI視頻解碼操作并輸出BT1120視頻,至此,SDI視頻解碼操作已經(jīng)完成,可以進(jìn)行常規(guī)的圖像處理操作了;然后使用純verilog實(shí)現(xiàn)的BT1120轉(zhuǎn)RGB模塊實(shí)現(xiàn)視頻格式轉(zhuǎn)換后輸出RGB888視頻;然后使用2路本博主常用的FDMA圖像緩存架構(gòu)對(duì)采集視頻做圖像緩存,緩存介質(zhì)為板載DDR3;其中1路視頻從DDR3中讀出,送入RIFFA模塊做視頻數(shù)據(jù)的TLP包封裝,并跨時(shí)鐘域后輸出給Xilinx官方的7 Series Integrated Block for PCI Express IP核實(shí)現(xiàn)PCIE物理層、鏈路層和事務(wù)層功能,并以差分?jǐn)?shù)據(jù)輸出;PCIE視頻數(shù)據(jù)通過PCIE金手指從FPGA板卡發(fā)送到PC主機(jī),輸出分辨率為1920x1080@60Hz;PC端主機(jī)在RIFFA-PCIE驅(qū)動(dòng)的加持下有效識(shí)別并讀取PCIE數(shù)據(jù);PC端調(diào)用QT上位機(jī)調(diào)用RIFFA-PCIE驅(qū)動(dòng)的API實(shí)現(xiàn)視頻數(shù)據(jù)顯示;由此形成SDI相機(jī)+RIFFA+PCIE+QT的高端架構(gòu);另外1路視頻從DDR3中讀出,送入純Verilog實(shí)現(xiàn)的RGB轉(zhuǎn)BT1120模塊實(shí)現(xiàn)RGB888視頻到BT1120視頻流的轉(zhuǎn)換;然后調(diào)用Xilinx官方的SMPTE SD/HD/3G SDI IP核實(shí)現(xiàn)HD-SDI視頻編碼操作;然后調(diào)用Xilinx官方的GTX原語,實(shí)現(xiàn)并行數(shù)據(jù)到高速串行的轉(zhuǎn)換,差分高速信號(hào)再進(jìn)入板載的Gv8500芯片實(shí)現(xiàn)差分轉(zhuǎn)單端和驅(qū)動(dòng)增強(qiáng)的功能,SDI視頻通過FPGA開發(fā)板的BNC座子輸出,最后通過同軸線連接到SDI轉(zhuǎn)HDMI盒子連接到HDMI顯示器;由此形成SDI相機(jī)+GTX+SDI輸出的高端架構(gòu);
第2路3G-SDI輸入視頻流向如下:
同軸的SDI視頻通過同軸線連接到FPGA開發(fā)板的BNC座子,然后同軸視頻經(jīng)過板載的Gv8601a芯片實(shí)現(xiàn)單端轉(zhuǎn)差分和均衡EQ的功能;然后差分SDI視頻信號(hào)進(jìn)入FPGA內(nèi)部的GTX高速資源,實(shí)現(xiàn)數(shù)據(jù)高速串行到并行的轉(zhuǎn)換,本博稱之為解串;解串后的并行視頻再送入Xilinx系列FPGA特有的SMPTE SD/HD/3G SDI IP核,進(jìn)行SDI視頻解碼操作并輸出BT1120視頻,至此,SDI視頻解碼操作已經(jīng)完成,可以進(jìn)行常規(guī)的圖像處理操作了;然后使用純verilog實(shí)現(xiàn)的BT1120轉(zhuǎn)RGB模塊實(shí)現(xiàn)視頻格式轉(zhuǎn)換后輸出RGB888視頻;然后使用2路本博主常用的FDMA圖像緩存架構(gòu)對(duì)采集視頻做圖像緩存,緩存介質(zhì)為板載DDR3;其中1路視頻從DDR3中讀出,送入純Verilog實(shí)現(xiàn)的RGB轉(zhuǎn)BT1120模塊實(shí)現(xiàn)RGB888視頻到BT1120視頻流的轉(zhuǎn)換;然后調(diào)用Xilinx官方的SMPTE SD/HD/3G SDI IP核實(shí)現(xiàn)HD-SDI視頻編碼操作;然后調(diào)用Xilinx官方的GTX原語,實(shí)現(xiàn)并行數(shù)據(jù)到高速串行的轉(zhuǎn)換,差分高速信號(hào)再進(jìn)入板載的Gv8500芯片實(shí)現(xiàn)差分轉(zhuǎn)單端和驅(qū)動(dòng)增強(qiáng)的功能,SDI視頻通過FPGA開發(fā)板的BNC座子輸出,最后通過同軸線連接到SDI轉(zhuǎn)HDMI盒子連接到HDMI顯示器;由此形成SDI相機(jī)+GTX+SDI輸出的高端架構(gòu);另外1路視頻從DDR3中讀出,送入純verilog實(shí)現(xiàn)的GRB888轉(zhuǎn)HDMI模塊實(shí)現(xiàn)TMDS差分視頻編碼,最后視頻輸出到顯示器顯示,輸出分辨率為1920x1080@60Hz;由此形成SDI相機(jī)+GTX+HDMI輸出的高端架構(gòu);
工程解決方案2
開發(fā)板FPGA型號(hào)為Xilinx–>Zynq7100–xc7z100ffg900-2;輸入源為2個(gè)3G-SDI相機(jī)或者HDMI轉(zhuǎn)3G-SDI盒子,分辨率為1920x1080@60Hz,也可以使用HD-SDI或者SD-SDI相機(jī),因?yàn)楸驹O(shè)計(jì)是三種SDI視頻自適應(yīng)的;
第1路3G-SDI輸入視頻流向如下:
同軸的SDI視頻通過同軸線連接到FPGA開發(fā)板的BNC座子,然后同軸視頻經(jīng)過板載的Gv8601a芯片實(shí)現(xiàn)單端轉(zhuǎn)差分和均衡EQ的功能;然后差分SDI視頻信號(hào)進(jìn)入FPGA內(nèi)部的GTX高速資源,實(shí)現(xiàn)數(shù)據(jù)高速串行到并行的轉(zhuǎn)換,本博稱之為解串;解串后的并行視頻再送入Xilinx系列FPGA特有的SMPTE SD/HD/3G SDI IP核,進(jìn)行SDI視頻解碼操作并輸出BT1120視頻,至此,SDI視頻解碼操作已經(jīng)完成,可以進(jìn)行常規(guī)的圖像處理操作了;然后使用純verilog實(shí)現(xiàn)的BT1120轉(zhuǎn)RGB模塊實(shí)現(xiàn)視頻格式轉(zhuǎn)換后輸出RGB888視頻;然后使用2路本博主常用的FDMA圖像緩存架構(gòu)對(duì)采集視頻做圖像緩存,緩存介質(zhì)為Zynq PL端DDR3,不建議使用PS端DDR3做緩存,因?yàn)閆ynq的HP接口數(shù)據(jù)位寬僅有64bit,可能影響視頻傳輸效率;其中1路視頻從DDR3中讀出,送入RIFFA模塊做視頻數(shù)據(jù)的TLP包封裝,并跨時(shí)鐘域后輸出給Xilinx官方的7 Series Integrated Block for PCI Express IP核實(shí)現(xiàn)PCIE物理層、鏈路層和事務(wù)層功能,并以差分?jǐn)?shù)據(jù)輸出;PCIE視頻數(shù)據(jù)通過PCIE金手指從FPGA板卡發(fā)送到PC主機(jī),輸出分辨率為1920x1080@60Hz;PC端主機(jī)在RIFFA-PCIE驅(qū)動(dòng)的加持下有效識(shí)別并讀取PCIE數(shù)據(jù);PC端調(diào)用QT上位機(jī)調(diào)用RIFFA-PCIE驅(qū)動(dòng)的API實(shí)現(xiàn)視頻數(shù)據(jù)顯示;由此形成SDI相機(jī)+RIFFA+PCIE+QT的高端架構(gòu);另外1路視頻從DDR3中讀出,送入純Verilog實(shí)現(xiàn)的RGB轉(zhuǎn)BT1120模塊實(shí)現(xiàn)RGB888視頻到BT1120視頻流的轉(zhuǎn)換;然后調(diào)用Xilinx官方的SMPTE SD/HD/3G SDI IP核實(shí)現(xiàn)HD-SDI視頻編碼操作;然后調(diào)用Xilinx官方的GTX原語,實(shí)現(xiàn)并行數(shù)據(jù)到高速串行的轉(zhuǎn)換,差分高速信號(hào)再進(jìn)入板載的Gv8500芯片實(shí)現(xiàn)差分轉(zhuǎn)單端和驅(qū)動(dòng)增強(qiáng)的功能,SDI視頻通過FPGA開發(fā)板的BNC座子輸出,最后通過同軸線連接到SDI轉(zhuǎn)HDMI盒子連接到HDMI顯示器;由此形成SDI相機(jī)+GTX+SDI輸出的高端架構(gòu);
第2路3G-SDI輸入視頻流向如下:
同軸的SDI視頻通過同軸線連接到FPGA開發(fā)板的BNC座子,然后同軸視頻經(jīng)過板載的Gv8601a芯片實(shí)現(xiàn)單端轉(zhuǎn)差分和均衡EQ的功能;然后差分SDI視頻信號(hào)進(jìn)入FPGA內(nèi)部的GTX高速資源,實(shí)現(xiàn)數(shù)據(jù)高速串行到并行的轉(zhuǎn)換,本博稱之為解串;解串后的并行視頻再送入Xilinx系列FPGA特有的SMPTE SD/HD/3G SDI IP核,進(jìn)行SDI視頻解碼操作并輸出BT1120視頻,至此,SDI視頻解碼操作已經(jīng)完成,可以進(jìn)行常規(guī)的圖像處理操作了;然后使用純verilog實(shí)現(xiàn)的BT1120轉(zhuǎn)RGB模塊實(shí)現(xiàn)視頻格式轉(zhuǎn)換后輸出RGB888視頻;然后使用2路本博主常用的FDMA圖像緩存架構(gòu)對(duì)采集視頻做圖像緩存,緩存介質(zhì)為Zynq PL端DDR3,不建議使用PS端DDR3做緩存,因?yàn)閆ynq的HP接口數(shù)據(jù)位寬僅有64bit,可能影響視頻傳輸效率;其中1路視頻從DDR3中讀出,送入純Verilog實(shí)現(xiàn)的RGB轉(zhuǎn)BT1120模塊實(shí)現(xiàn)RGB888視頻到BT1120視頻流的轉(zhuǎn)換;然后調(diào)用Xilinx官方的SMPTE SD/HD/3G SDI IP核實(shí)現(xiàn)HD-SDI視頻編碼操作;然后調(diào)用Xilinx官方的GTX原語,實(shí)現(xiàn)并行數(shù)據(jù)到高速串行的轉(zhuǎn)換,差分高速信號(hào)再進(jìn)入板載的Gv8500芯片實(shí)現(xiàn)差分轉(zhuǎn)單端和驅(qū)動(dòng)增強(qiáng)的功能,SDI視頻通過FPGA開發(fā)板的BNC座子輸出,最后通過同軸線連接到SDI轉(zhuǎn)HDMI盒子連接到HDMI顯示器;由此形成SDI相機(jī)+GTX+SDI輸出的高端架構(gòu);另外1路視頻從DDR3中讀出,送入純verilog實(shí)現(xiàn)的GRB888轉(zhuǎn)HDMI模塊實(shí)現(xiàn)TMDS差分視頻編碼,最后視頻輸出到顯示器顯示,輸出分辨率為1920x1080@60Hz;由此形成SDI相機(jī)+GTX+HDMI輸出的高端架構(gòu);
免責(zé)聲明
本工程及其源碼即有自己寫的一部分,也有網(wǎng)絡(luò)公開渠道獲取的一部分(包括CSDN、Xilinx官網(wǎng)、Altera官網(wǎng)等等),若大佬們覺得有所冒犯,請(qǐng)私信批評(píng)教育;基于此,本工程及其源碼僅限于讀者或粉絲個(gè)人學(xué)習(xí)和研究,禁止用于商業(yè)用途,若由于讀者或粉絲自身原因用于商業(yè)用途所導(dǎo)致的法律問題,與本博客及博主無關(guān),請(qǐng)謹(jǐn)慎使用。。。
3、詳細(xì)設(shè)計(jì)方案
設(shè)計(jì)框圖
工程解決方案詳細(xì)設(shè)計(jì)方案框圖如下:
SDI 輸入設(shè)備
SDI 輸入設(shè)備可以是SDI相機(jī),代碼兼容HD/SD/3G-SDI三種模式;SDI相機(jī)相對(duì)比較貴,預(yù)算有限的朋友可以考慮用HDMI轉(zhuǎn)SDI盒子模擬SDI相機(jī),這種盒子某寶一百塊左右;當(dāng)使用HDMI轉(zhuǎn)SDI盒子時(shí),輸入源可以用筆記本電腦,即用筆記本電腦通過HDMI線連接到HDMI轉(zhuǎn)SDI盒子的HDMI輸入接口,再用SDI線連接HDMI轉(zhuǎn)SDI盒子的SDI輸出接口到FPGA開發(fā)板,如下:
Gv8601a 均衡器
Gv8601a芯片實(shí)現(xiàn)單端轉(zhuǎn)差分和均衡EQ的功能,這里選用Gv8601a是因?yàn)榻梃b了了Xilinx官方的方案,當(dāng)然也可以用其他型號(hào)器件。Gv8601a均衡器原理圖如下:
GTX 解串與串化
本設(shè)計(jì)使用Xilinx特有的GTX高速信號(hào)處理資源實(shí)現(xiàn)SDI差分視頻信號(hào)的解串與串化,對(duì)于SDI視頻接收而言,GTX起到解串的作用,即將輸入的高速串行的差分信號(hào)解為并行的數(shù)字信號(hào);對(duì)于SDI視頻發(fā)送而言,GTX起到串化的作用,即將輸入的并行的數(shù)字信號(hào)串化為高速串行的差分信號(hào);GTX的使用一般需要例化GTX IP核,通過vivado的UI界面進(jìn)行配置,但本設(shè)計(jì)需要對(duì)SD-SDI、HD-SDI、3G-SDI視頻進(jìn)行自動(dòng)識(shí)別和自適應(yīng)處理,所以需要使得GTX具有動(dòng)態(tài)改變線速率的功能,該功能可通過DRP接口配置,也可通過GTX的rate接口配置,所以不能使用vivado的UI界面進(jìn)行配置,而是直接例化GTX的GTXE2_CHANNEL和GTXE2_COMMON源語直接使用GTX資源;此外,為了動(dòng)態(tài)配置GTX線速率,還需要GTX控制模塊,該模塊參考了Xilinx的官方設(shè)計(jì)方案,具有動(dòng)態(tài)監(jiān)測SDI模式,動(dòng)態(tài)配置DRP等功能;該方案參考了Xilinx官方的設(shè)計(jì);GTX 解串與串化模塊代碼架構(gòu)如下:
SMPTE SD/HD/3G SDI IP核
SMPTE SD/HD/3G SDI IP核是Xilinx系列FPGA特有的用于SDI視頻編解碼的IP,該IP配置使用非常簡單,vivado的UI界面如下:
SMPTE SD/HD/3G SDI IP核必須與GTX配合才能使用,對(duì)于SDI視頻接收而言,該IP接收來自于GTX的數(shù)據(jù),然后將SDI視頻解碼為BT1120視頻輸出,對(duì)于SDI視頻發(fā)送而言,該IP接收來自于用戶側(cè)的的BT1120視頻數(shù)據(jù),然后將BT1120視頻編碼為SDI視頻輸出;該方案參考了Xilinx官方的設(shè)計(jì);SMPTE SD/HD/3G SDI IP核代碼架構(gòu)如下:
BT1120轉(zhuǎn)RGB
BT1120轉(zhuǎn)RGB模塊的作用是將SMPTE SD/HD/3G SDI IP核解碼輸出的BT1120視頻轉(zhuǎn)換為RGB888視頻,它由BT1120轉(zhuǎn)CEA861模塊、YUV422轉(zhuǎn)YUV444模塊、YUV444轉(zhuǎn)RGB888三個(gè)模塊組成,該方案參考了Xilinx官方的設(shè)計(jì);BT1120轉(zhuǎn)RGB模塊代碼架構(gòu)如下:
FDMA圖像緩存
FDMA圖像緩存架構(gòu)實(shí)現(xiàn)的功能是將輸入視頻緩存到板載DDR3中再讀出送RIFFA模塊,目的是實(shí)現(xiàn)視頻同步輸出,實(shí)現(xiàn)輸入視頻到輸出視頻的跨時(shí)鐘域問題,更好的呈現(xiàn)顯示效果;由于調(diào)用了Xilinx官方的MIG作為DDR控制器,所以FDMA圖像緩存架構(gòu)就是實(shí)現(xiàn)用戶數(shù)據(jù)到MIG的橋接作用;架構(gòu)如下:
FDMA圖像緩存架構(gòu)由FDMA控制器+FDMA組成;FDMA實(shí)際上就是一個(gè)AXI4-FULL總線主設(shè)備,與MIG對(duì)接,MIG配置為AXI4-FULL接口;FDMA控制器實(shí)際上就是一個(gè)視頻讀寫邏輯,以寫視頻為例,假設(shè)一幀圖像的大小為M×N,其中M代表圖像寬度,N代表圖像高度;FDMA控制器每次寫入一行視頻數(shù)據(jù),即每次向DDR3中寫入M個(gè)像素,寫N次即可完成1幀圖像的緩存,讀視頻與之一樣;同時(shí)調(diào)用兩個(gè)FIFO實(shí)現(xiàn)輸入輸出視頻的跨時(shí)鐘域處理,使得用戶可以AXI4內(nèi)部代碼,以簡單地像使用FIFO那樣操作AXI總線,從而達(dá)到讀寫DDR的目的,進(jìn)而實(shí)現(xiàn)視頻緩存;本設(shè)計(jì)圖像緩存方式為2幀乒乓緩存;圖像緩存模塊代碼架構(gòu)如下:
RIFFA用戶數(shù)據(jù)控制
RIFFA用戶數(shù)據(jù)控制模塊的功能為產(chǎn)生讀視頻控制信號(hào),控制視頻讀出并寫入RIFFA模塊;代碼里設(shè)置了狀態(tài)機(jī),首先接收RIFFA模塊的讀數(shù)據(jù)請(qǐng)求,然后生成讀視頻控制信號(hào)控制視頻讀出,再根據(jù)RIFFA用戶寫時(shí)序?qū)⒁曨l寫入RIFFA,當(dāng)寫完一幀圖像后再回來初始狀態(tài),由此形成循環(huán);代碼架構(gòu)如下:
RIFFA架構(gòu)詳解
本設(shè)計(jì)使用的RIFFA 版本為RIFFA1.0;
RIFFA (Reusable Integration Framework for FPGA Accelerators) 是一個(gè)簡單的框架,用于通過 PCI Express 總線將數(shù)據(jù)從主機(jī) CPU 傳輸?shù)?FPGA。該框架需要一個(gè)支持 PCIe 的工作站和一個(gè)帶有 PCIe 連接器的主板上的 FPGA。RIFFA支持Windows和Linux,Altera和Xilinx,并綁定了C / C++,Python,MATLAB和Java。在軟件方面有兩個(gè)主要功能:數(shù)據(jù)發(fā)送和數(shù)據(jù)接收。這些函數(shù)通過 C/C++、Python、MATLAB 和 Java 中的用戶庫公開。該驅(qū)動(dòng)程序支持每個(gè)系統(tǒng)多個(gè) FPGA(最多 5 個(gè))。軟件綁定適用于 Linux 和 Windows 操作系統(tǒng)。用戶只需編寫幾行代碼即可與FPGA IP核進(jìn)行通信。在硬件方面,用戶訪問具有獨(dú)立發(fā)送和接收信號(hào)的接口。這些信號(hào)通過FIFO接口提供交易握手和第一個(gè)單詞,用于讀取/寫入數(shù)據(jù)。無需了解總線地址、緩沖區(qū)大小或 PCIe 數(shù)據(jù)包格式。只需在FIFO接口上發(fā)送數(shù)據(jù),在FIFO接口上接收數(shù)據(jù)即可。RIFFA不依賴于PCIe橋接器,因此不受網(wǎng)橋?qū)崿F(xiàn)的限制。相反,RIFFA 直接與 PCIe 端點(diǎn)配合使用,并且運(yùn)行速度足夠快,使 PCIe 鏈路飽和。軟件和硬件界面都得到了極大的簡化。RIFFA架構(gòu)如下:
RIFFA純verilog代碼架構(gòu)如下:
復(fù)雜的代碼架構(gòu)需要長時(shí)間的品讀才能消化,代碼中提供了注釋,感興趣的可以去仔細(xì)研讀并修改為自己項(xiàng)目需要的情景,對(duì)于普通開發(fā)者而言,其實(shí)只需要掌握RIFFA的用戶邏輯即可完成數(shù)據(jù)讀寫操作,至于TLP包的封裝與解包等操作,代碼中已經(jīng)做好了,一般不需要修改,除非需要定制功能和性能優(yōu)化外;RIFFA用戶邏輯接口及其詳細(xì)注釋如下:該接口位于riffa_wrapper.v;
RIFFA 框架不依賴 PCIe Bridge ,因此它不受橋連接的控制,這就實(shí)現(xiàn)了PCIe 通信鏈路的高帶寬。下圖顯示了使用 32 位,64 位以及 128 位接口的RIFFA 框架性能圖,圖中的實(shí)線為理論上最大的帶寬值,虛線為可實(shí)現(xiàn)的最大帶寬值。PCIe Gen1 以及 PCIe Gen2 都是使用 8B/10B 編碼方式,理論上的最大帶寬利用率為 80%,在下圖中我們可以看出在使用 32 位,64 位接口的情況下,RIFFA 框架可以實(shí)現(xiàn)理論上的最大帶寬利用率 80%左右;在 128 位接口的情況下最大帶寬利用率為 76%左右;
以PCIEX4為例,RIFFA模塊資源消耗如下:
Xilinx 7 Series Integrated Block for PCI Express
7 Series Integrated Block for PCI Express是Xilinx官方推出的集成在FPGA內(nèi)部的PCIE硬核IP;主要實(shí)現(xiàn)的是PCIe 的物理層、鏈路層和事務(wù)層,提供給用戶的是以 AXI4-stream 接口定義的TLP 包,使用該IP 核,需要對(duì)PCIe 協(xié)議有清楚的理解,特別是對(duì)事務(wù)包TLP報(bào)文格式;7 Series Integrated Block for PCI Express例化使用十分簡單,只是配置項(xiàng)比較多,但大部分保持默認(rèn)即可,一般也用不到那么多功能,最主要的配置項(xiàng)如下:
7 Series Integrated Block for PCI Express在代碼中調(diào)用如下:
RIFFA驅(qū)動(dòng)及其安裝
本設(shè)計(jì)提供RIFFA驅(qū)動(dòng)源碼,該源碼既包括Windows也包括Linux,并提供Windows下的驅(qū)動(dòng)安裝可執(zhí)行文件,如下:
Windows下驅(qū)動(dòng)安裝步驟如下:友情提示,Windows下驅(qū)動(dòng)秩序安裝一次即可;
第一步:使系統(tǒng)禁用簽名并進(jìn)入測試模式,方法如下:
也可百度其他方法實(shí)現(xiàn)上述目的,完成后電腦屏幕右下角應(yīng)有如下顯示:
第二步:修改可執(zhí)行文件的兼容性,方法如下:
第三步:安裝驅(qū)動(dòng),方法如下:
驅(qū)動(dòng)裝好后,下載FPGA工程bit,然后重啟電腦,打開我的電腦–>管理–>設(shè)備管理器,應(yīng)看到如下設(shè)備:
QT上位機(jī)
PC端調(diào)用QT上位機(jī)調(diào)用RIFFA-PCIE驅(qū)動(dòng)的API實(shí)現(xiàn)視頻數(shù)據(jù)顯示;QT上位機(jī)源碼如下:
電腦端接收到 FPGA 開發(fā)板傳來的數(shù)據(jù)是用戶應(yīng)用程序通過調(diào)用庫函數(shù)fpga_rec才開始接收來自 FPGA 開發(fā)板的讀請(qǐng)求,然后電腦端將數(shù)據(jù)分包接收;上位機(jī)運(yùn)行樣式如下:
HDMI輸出
在HDMI輸出方式下,使用HDMI輸出模塊將RGB視頻編碼為HDMI差分信號(hào),HDMI輸出模塊采用verilog代碼手寫,可以用于FPGA的HDMI發(fā)送應(yīng)用,代碼如下:
關(guān)于這個(gè)模塊,請(qǐng)參考我之前的博客,博客地址:點(diǎn)擊直接前往
RGB轉(zhuǎn)BT1120
在SDI輸出方式下需要使用該模塊;RGB轉(zhuǎn)BT1200模塊的作用是將用戶側(cè)的RGB視頻轉(zhuǎn)換為BT1200視頻輸出給SMPTE SD/HD/3G SDI IP核;RGB轉(zhuǎn)BT1120模塊由RGB888轉(zhuǎn)YUV444模塊、YUV444轉(zhuǎn)YUV422模塊、SDI視頻編碼模塊、數(shù)據(jù)嵌入模塊組成,該方案參考了Xilinx官方的設(shè)計(jì);BT1120轉(zhuǎn)RGB模塊代碼架構(gòu)如下:
Gv8500 驅(qū)動(dòng)器
Gv8500芯片實(shí)現(xiàn)差分轉(zhuǎn)單端和增強(qiáng)驅(qū)動(dòng)的功能,這里選用Gv8500是因?yàn)榻梃b了了Xilinx官方的方案,當(dāng)然也可以用其他型號(hào)器件。Gv8500驅(qū)動(dòng)器原理圖如下:
SDI轉(zhuǎn)HDMI盒子
在SDI輸出方式下需要使用到SDI轉(zhuǎn)HDMI盒子,因?yàn)槲沂掷锏娘@示器沒有SDI接口,只有HDMI接口,為了顯示SDI視頻,只能這么做,當(dāng)然,如果你的顯示器有SDI接口,則可直接連接顯示,我的SDI轉(zhuǎn)HDMI盒子在某寶購買,不到100塊;
工程設(shè)計(jì)源碼層面架構(gòu)
工程源碼由Bolck Design設(shè)計(jì)和模塊例化組成,Bolck Design主要為基于FDMA架構(gòu)的圖像緩存;模塊例化則為包括Bolck Design在內(nèi)的整體代碼架構(gòu);以設(shè)計(jì)方案1為例Bolck Design設(shè)計(jì)如下,其他設(shè)計(jì)方案與之類似:
以設(shè)計(jì)方案1為例,綜合后的工程源碼層面架構(gòu)如下:
PCIE上板調(diào)試注意事項(xiàng)
1:必須先安裝RIFFA-PCIE驅(qū)動(dòng),詳情請(qǐng)參考第3章節(jié)的《RIFFA驅(qū)動(dòng)及其安裝》,驅(qū)動(dòng)只需安裝一次;
2:下載FPGA工程bit后需要重啟電腦,電腦才能識(shí)別到RIFFA-PCIE驅(qū)動(dòng);程序固化后也需要重啟電腦;
3:FPGA板卡插在主機(jī)上后一般不需要額外供電,如果你的板子元器件較多功耗較大,則需要額外供電,詳情咨詢開發(fā)板廠家,當(dāng)然;
4:PCIE調(diào)試需要電腦主機(jī),但筆記本電腦理論上也可以外接出來PCIE,詳情百度自行搜索一下,電腦主機(jī)PCIE插槽不方便操作時(shí)可以使用延長線接出來,某寶有賣;
FPGA工程編譯注意事項(xiàng)
由于RIFFA源碼包含的頭文件眾多,所以在編譯工程之前,必須設(shè)置全局包含文件,否則編譯器找不到頭文件導(dǎo)致報(bào)錯(cuò),設(shè)置如下:
4、設(shè)計(jì)方案1詳解–>Kintex7-35T版本
開發(fā)板FPGA型號(hào):Xilinx-Kintex7–35T–xc7k325tffg484-2;
FPGA開發(fā)環(huán)境:Vivado2019.1;
QT開發(fā)環(huán)境:VS2015 + Qt 5.12.10;
輸入:2路3G-SDI相機(jī)或HDMI轉(zhuǎn)SDI盒子,分辨率1920x1080@60Hz;
第1路SDI輸入視頻的輸出路徑:PCIE2.0+3G-SDI,分辨率1920x1080@60Hz;
第2路SDI輸入視頻的輸出路徑:HDMI+3G-SDI,分辨率1920x1080@60Hz;
SDI視頻解串方案:Xilinx–GTX高速接口解串;
SDI視頻解碼方案:Xilinx–SMPTE SD/HD/3G SDI解碼;
HDMI視頻編碼方案:純verilog編碼;
圖像緩存方案:FDMA圖像緩存+DDR3顆粒;圖像2幀乒乓緩存;
PCIE詳情:PCIE2.0版本,X4,5GT/s單lane線速率;
PCIE底層方案:Xilinx 7 Series Integrated Block for PCI Express;
PCIE上層方案:RIFFA;
實(shí)現(xiàn)功能:FPGA基于GTX+RIFFA架構(gòu)實(shí)現(xiàn)多功能SDI視頻采集卡;
工程作用:此工程目的是讓讀者掌握FPGA基于GTX+RIFFA架構(gòu)多功能SDI視頻采集卡的設(shè)計(jì)能力,以便能夠移植和設(shè)計(jì)自己的項(xiàng)目;
工程Block Design和工程代碼架構(gòu)請(qǐng)參考第3章節(jié)的《工程源碼架構(gòu)》小節(jié)內(nèi)容;
工程的資源消耗和功耗如下:
5、設(shè)計(jì)方案2詳解–>Zynq7100版本
開發(fā)板FPGA型號(hào):Xilinx–Zynq7100–xc7z100ffg900-2;
FPGA開發(fā)環(huán)境:Vivado2019.1;
QT開發(fā)環(huán)境:VS2015 + Qt 5.12.10;
輸入:2路3G-SDI相機(jī)或HDMI轉(zhuǎn)SDI盒子,分辨率1920x1080@60Hz;
第1路SDI輸入視頻的輸出路徑:PCIE2.0+3G-SDI,分辨率1920x1080@60Hz;
第2路SDI輸入視頻的輸出路徑:HDMI+3G-SDI,分辨率1920x1080@60Hz;
SDI視頻解串方案:Xilinx–GTX高速接口解串;
SDI視頻解碼方案:Xilinx–SMPTE SD/HD/3G SDI解碼;
HDMI視頻編碼方案:純verilog編碼;
圖像緩存方案:FDMA圖像緩存+PL端DDR3顆粒;圖像2幀乒乓緩存;
PCIE詳情:PCIE2.0版本,X4,5GT/s單lane線速率;
PCIE底層方案:Xilinx 7 Series Integrated Block for PCI Express;
PCIE上層方案:RIFFA;
實(shí)現(xiàn)功能:FPGA基于GTX+RIFFA架構(gòu)實(shí)現(xiàn)多功能SDI視頻采集卡;
工程作用:此工程目的是讓讀者掌握FPGA基于GTX+RIFFA架構(gòu)多功能SDI視頻采集卡的設(shè)計(jì)能力,以便能夠移植和設(shè)計(jì)自己的項(xiàng)目;
工程Block Design和工程代碼架構(gòu)請(qǐng)參考第3章節(jié)的《工程源碼架構(gòu)》小節(jié)內(nèi)容;
工程的資源消耗和功耗如下:
6、工程移植說明
vivado版本不一致處理
1:如果你的vivado版本與本工程vivado版本一致,則直接打開工程;
2:如果你的vivado版本低于本工程vivado版本,則需要打開工程后,點(diǎn)擊文件–>另存為;但此方法并不保險(xiǎn),最保險(xiǎn)的方法是將你的vivado版本升級(jí)到本工程vivado的版本或者更高版本;
3:如果你的vivado版本高于本工程vivado版本,解決如下:
打開工程后會(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軟核;
7、上板調(diào)試驗(yàn)證
準(zhǔn)備工作
需要準(zhǔn)備的器材如下:
SDI攝像頭或HDMI轉(zhuǎn)SDI盒子;
FPGA開發(fā)板;
PC主機(jī);
顯示器;
我的開發(fā)板連接如下:
下載FPGA工程bit,重啟電腦,打開上位機(jī)軟件,即可看到測速情況;
SDI視頻采集轉(zhuǎn)PCIE輸出效果演示
SDI視頻采集轉(zhuǎn)PCIE輸出效果如下:
SDI-RIFFA-PCIE