採用FPGA構建數字視頻矩陣的一些設計思路和設計需求

採用FPGA構建數字視頻矩陣的一些設計思路和設計需求

音視頻數字矩陣
高清視頻矩陣
高清視頻模擬數字混合矩陣

設計需求,方案討論。

矩陣描述

輸入視頻經過專用的視頻芯片轉換位RGB/YUV444/LVDS進 FPGA 將輸入音視頻轉換爲 Serdes 數字差分信號,進背板,經過數字差分交換到輸出板的FPGA Serdes,經過FPGA將視頻還原到DDR3 SDRAM 經過視頻裁剪縮放分割等輸出到專用視頻輸出芯片再輸出到顯示器。

矩陣組成

視頻矩陣由機箱、電源、背板、數字高速差分交換板、系統控制板(嵌入式系統管理)、基礎視頻輸入卡、基礎視頻輸出卡。以HDMI接口爲例子,簡單描述輸入卡輸出卡。考慮代碼移植的兼容性,板卡採用ARM CPU,沒有采用FPGA內嵌CPU。

A. 視頻輸入卡,HDMI 視頻經過HDMI 接收芯片轉換成 RGB888/YUV422/YUV444/LVDS 可選,進入FPGA,視頻與 FPGA 下的DDRS SDRAM 中的多個OSD疊加後,與音頻同步編碼轉換成Serdes發送到背板。ARM CPU管理CAN總線,HDMI輸入視頻接口芯片的舒適化設置,管理FPGA內部寄存器的設置。實現去隔行功能,視頻縮放(任意比列、支持4K)、每路視頻支持多個OSD與視頻透明半透明疊加,OSD 任意尺寸(不大於原視頻輸入的尺寸)的靜態真彩位圖、動態OSD視頻、動態中英文字母。

B. 視頻輸出卡,背板來的Serdes 經FPGA 解碼成音頻和視頻流,視頻經過FPGA存入DDR3 SDRAM,再從DDR3 SDRAM中讀出經過裁剪、縮放(任意比列、支持4K)、分割等處理將視頻與音頻送到視頻輸出芯片轉換成HDMI送到顯示器。

C. 多畫面分割卡,將背板來的多路Serdes輸入信號裁剪縮放後重新組成一路輸出。畫面分割的數量與視頻輸入Serdes的數量有直接關係,視頻放大需佔用DDR3內存的帶寬,縮小不佔DDR3的帶寬。

D. 多畫面拼接卡,比如3X3的9塊屏組成大大屏,需要9個拼接單元,這每個拼接單元能實現多個視頻在一個顯示器上分割顯示,這就實現了多路視屏在同一個3x3的大屏上任意位置,任意層次,漫遊疊加遮擋等多畫面拼接顯示。

E. 多畫面融合卡,主要用在多投影機拼接融合,在球體、錐體、立體建築物、立體舞臺上投影,將多個視頻融合顯示組成一個立體的動態視頻場景。融合單元在實現分割單元、拼接單元的同時要實現視頻的各種梯形、枕形、球面、錐面、不規則圖形的拉伸、旋轉等算法。要消除多投影機投影邊緣亮帶。

F. FPGA視頻接口 RGB888/YUV422/YUV444/LVDS 可選,8-48位並行,SDR/DDR 165MHz。支持 1.2Gbps LVDS 可支持4K_24@60Hz。

G. FPGA DDR3 SDRAM接口 800MHz 32BIT 512M 字節。

H. FPGA Serdes 實現音頻視頻同步傳輸。實現USB的鼠標鍵盤、RS232等數據傳輸。

DDR3 數據帶寬,Serdes收發速率的計算推導

A. DDR3 數據吞吐量,理論上800M DDR3的數據吞吐量爲 800x32=25.6Gbps。考慮多路視頻讀寫(CPU讀寫很慢,忽略CPU讀寫),DDR3自動刷新,實際使用不能超過80%,超過這個視頻會有抖動等不穩定現象。我們按2K_24位視頻計算,2K視頻的點時鐘位148.5MHz 按150M算,忽略行場逆程時間,考慮視頻在內存中實現分割,按32對齊 150x32=4.8Gbps,(25.6/4.8)x0.8=4.3。在我們實際應用中800M 32位DDR3 一般只實現2路2K@60視頻的輸入+2路2K@60視頻的輸出。

B. DDR3帶寬問題,多畫面拼接和多畫面融合面臨同一問題。在視頻裁剪後再大比例放大,由於FPGA內部FIFO/RAM資源不可能兜住哪怕非常小的一幀畫面,需要在放大時得用DDR3 SDRAM 來兜,這就需要佔用DDR3的讀寫帶寬。在這類單元卡中要擴展視頻輸入的路數,要考慮板卡Serdes 的數量,FPGA Serdes的數量,還要考慮DDR3 SDRAM的帶寬。在做視頻拉伸、旋轉的算法也需要佔用DDR3 SDRAM的帶寬。

C. Serdes 數據吞吐量,這是我們矩陣最關鍵的數據,越大越好。在實際中使用有多約束,背板的 Crosspoint Switches ,FPGA 的Serdes 的速率,價格因素等都在干擾我們的選擇。

	常見的視頻的數據帶寬,忽略音頻數據。     				原始流            8B10B      64B66B
	a:1920x1080_24bit@60Hz  1920x1080x24x60=   2.99Gbps     3.74Gbps       3.08Gbps
	b:1920x1200_24bit@60Hz  1920x1200x24x60=   3.32Gbps     4.15Gbps       3.42Gbps
	c:3840x2160_24bit@30Hz   3840x2160x24x30=  5.97Gbps     7.46Gbps       6.16Gbps
	d:3840x2160_24bit@60Hz  3840x2160x24x60=   11.94Gbps    14.93Gbps      12.31Gbps

D. Serdes 常見的協議。我們在Serdes中要傳輸很多數據,有視頻,音頻,控制數據也可能有USB,232,以太網等。考慮Serdes交流特性,不能長0和長1,我們一般會選擇一個協議來用。

  • 8B10B協議,以太網,PCI-E採用該協議,非常成熟,應用非常廣泛。但是有個致命的缺點,編碼效率太低 8/10 = 0.8
    ,損失20%的帶寬。
  • 3G-SDI協議,採用成熟的3G-SDI直接傳輸音視頻,是個非常不錯的建議,該協議本身就是廣電系統中音視頻傳輸用的,有很多廠家的矩陣都是採用該協議。缺點也很明顯,視頻只能支持1080P60 422/10bit。在要求1920x1200@60或要求24位真彩、YUV444的及苛刻挑剔的用戶就不好用了。
  • 64B66B協議,萬兆以太網採用該協議,非常成熟,編碼效率恨高 64/66=0.97,編碼實現比較複雜,一般需要FPGA芯片廠家支持。
  • NRZ擾碼,封裝自己的協議。可以借鑑SDI採用的NRZ擾碼協議爲底層,自己再定義關鍵字去封裝自己的協議。對編程人員要求比較高,需要長時間大量的數據交換去驗證自己定義的協議的穩定性。

Crosspoint Switches 高速數字差分交換芯片的選擇

從上面的Serdes速率分析,我們的差分交換芯片的速率最小也要選3.125Gbps的,支持2K@60P視頻無損無堵塞交換。考慮目前4K@30的視頻發展很快,家用電視、顯示器甚至手機的分辨率也達到4K,我們在設計初期就應該考慮兼容4K@30/4K@60的無損切換。長遠考慮建議選6.25Gbps的Crosspoint Switches。這樣採用單個差分對就能傳輸一路4K@30視頻信號,附屬產品的4K@30的光纖收發器也能直接進出背板。在未來的4K@60的視頻採用2個差分對來傳輸。

廠家連接

https://www.macom.com/crosspoint

https://www.semtech.com/products/broadcast-video/crosspoints

https://www.microsemi.com/product-directory/signal-integrity/3579-digital-crosspoint-switches

https://www.analog.com/cn/products/switches-multiplexers/digital-crosspoint-switches.html

FPGA選擇

FPGA選擇要看設計者手上現有的代碼資源,Serdes速率選擇,DDR3 SDRAM 速率,FPGA 內部FIFO/RAM塊的數量,FPGA 內部DSP數量(視頻縮放、拉伸等算法需要大量的DSP單元支持)。一般3.125Gbps 2K@60的視頻矩陣方案中,選Lattice ECP3 的廠家較多。選用6.25Gbps的支持4K@30的視頻矩陣方案目前Xilinx ARTIX-7 是我建議的選擇。

系統控制卡

考慮目前矩陣需要有輸入輸出端口的視頻預覽功能,系統控制卡一定需要有視頻的h.264/Jpeg 編碼能力。建議選用華爲海思的CPU,操作系統選用Linux/Android。

FPGA 視頻縮放模塊

支持鄰近、線性、三次插值算法,單個縮放模塊最大支持166M時鐘(支持1080P60),可以2個或多個模塊並聯實現4K@30/4K@60的縮放。支持任意比列的縮放。視頻放大需佔用DDR3內存的帶寬,縮小不佔DDR3的帶寬。

關鍵點:

A. 3種插值的FPGA視頻縮放算法的實現。(鄰近插值,雙線性插值,雙立方次卷積分插值)

B. 多路視頻讀寫及CPU讀寫同一組DDR3 SDRAM的仲裁實現。

C. Serdes 實現音視頻的數據編解碼發送和接收。

D. 視頻融合卡的視頻拉伸算法的實現。

E. 視頻任意角度的旋轉算法實現。

F. 多板卡間的CAN總線通訊協議的擬定和實現。

小結:

A.在用戶要求不苛刻的2K視頻矩陣,採用3.125Gbps Serdes的FPGA + 3.125Gbps Crosspoint Switches 就能實現性價比非常高的矩陣產品(LATTICE ECP3 FPGA就有很好)。(集中招標採購競爭激烈,對矩陣技術參數要求比較苛刻,不建議採用該方案)

B.支持1920x1200@60的2K視頻矩陣,採用 LATTICE ECP5 FPGA 或 XILINX ARTIX-7 FPGA + 3.5Gbps Crosspoint Switches。

C.單路Serdes 支持4K@30 的視頻矩陣,採用 XILINX ARTIX-7 FPGA + 6.25Gbps Crosspoint Switches。

D.單路Serdes 支持4K@60 的視頻矩陣,採用 XILINX KINTEX-7 FPGA + 12.5Gbps Crosspoint Switches。

E. 採用多路Serdes 傳4K方案可以降低 Crosspoint Switches 的速率要求。

成功案例:

A. 矩陣基本輸入卡 2K@60 設計的,採用 2片 XILINX ARTIX-7 XC7A75T-2 FPGFA GTP(6.25Gbps) + 2組 DDR3_800MHz@32BIT + 4片 ADV7611 + 1片 ARM_CPU ,實現4路HDMI輸入卡。實現去隔行功能,視頻縮放(任意比列、支持4K)、每路視頻支持3個OSD與視頻透明半透明疊加,OSD 任意尺寸(不大於原視頻輸入的尺寸)的靜態真彩位圖、動態OSD視頻、動態中英文字母。

B. 矩陣基本輸出卡 2K@60 設計的,採用 2片 XILINX ARTIX-7 XC7A75T-2 FPGFA GTP(6.25Gbps) + 2組 DDR3_800MHz@32BIT + 4片 ADV7513 + 1片 ARM_CPU ,實現4路HDMI輸出卡。漸變切換無縫,畫面凍結,單畫面拼接等功能去隔行功能。支持4K Serdes 信號縮小爲2K或局部裁剪成2K輸入顯示。

C. 矩陣基本輸出卡 4K@30 設計的,採用 2片 XILINX ARTIX-7 XC7A75T-2 FPGFA GTP(6.25Gbps) + 2組 DDR3_800MHz@32BIT + 2片 SiI9136-3 + 1片 ARM_CPU ,實現2路4K@30 HDMI輸出卡。漸變切換無縫,畫面凍結,單畫面拼接等功能去隔行功能。支持2K/4K Serdes 信號輸入顯示。

D. 矩陣基本輸入卡 4K@30 設計的,採用 2片 XILINX ARTIX-7 XC7A75T-2 FPGFA GTP(6.25Gbps) + 2組 DDR3_800MHz@32BIT + 2片 ADV7619 + 1片 ARM_CPU ,實現2路4K@30 HDMI輸入卡。實現去隔行功能,視頻縮放(任意比列、支持4K)、每路視頻支持3個OSD與視頻透明半透明疊加,OSD 任意尺寸(不大於原視頻輸入的尺寸)的靜態真彩位圖、動態OSD視頻、動態中英文字母。

E. 矩陣多功能卡 4K@30 設計的,採用 2片 XILINX ARTIX-7 XC7A200T-2 FPGFA GTP(6.25Gbps) + 8組 DDR3_800MHz@32BIT + 2片 SiI9136-3 + 1片 ARM_CPU ,實現2路4K@30 HDMI輸出。

  • a) 2路,4K@30/2K@60 HDMI輸出。每個輸出實現8-16路2K輸入分割或4-8路4K輸入分割卡(一個顯示屏能顯示任意位置、尺寸、層次疊加8-24路2K視頻顯示)。

  • b) 2路,4K@30/2K@60 HDMI輸出。每個輸出實現8-16路2K輸入分割或4-8路4K輸入拼接卡(一個NxN的大屏能任意位置、尺寸、層次疊加漫遊8-24路2K視頻顯示)。

  • c) 2路,4K@30/2K@60 HDMI輸出。每個輸出實現4-8路2K輸入分割或4路4K輸入融合卡(多個投影在球面、錐面、不規則曲面融合組成一個動態立體造型)。

  • d) 可更換輸出視頻接口芯片實現單路4K@60的多功能輸出。

F. Serdes 採用64B66B協議,6.25Gbps的速率。

G. Crosspoint Switches 採用 ADN4612、M21148、M21167。

H. 系統控制卡選用普通的ARM,只做管理,沒做視頻預覽功能。

I. 計劃做,但是目前沒有開始實行。採用海思CPU+FPGA做2K/4K編碼卡、解碼卡、矩陣視頻預覽卡。

有興趣的可以聯繫我做進一步的技術討論,沒有音視頻技術基礎的勿擾。

郵箱:[email protected]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章