摘要:介紹一種基于FPGA的 Down Scaler視頻系統(tǒng)設(shè)計。系統(tǒng)的核心部件采用Xilinx Kintex-7的板載XC7K325T 芯片,系統(tǒng)設(shè)計使用Vivado工具,包括使用Vivado HLS進(jìn)行Down Scaler模塊設(shè)計。首先按照Vivado HLS的代碼規(guī)范進(jìn)行Down Scaler模塊的C/C++代碼編寫,然后利用編譯工具生成RTL級代碼和綜合結(jié)果Down Scaler IP核,最后將Down Scaler IP核與TPG、VDMA等Xilinx視頻IP核互連,構(gòu)建實時視頻系統(tǒng)。在滿足實時性要求和FPGA資源消耗要求的條件下,該設(shè)計實現(xiàn)了對Down Scaler視頻算法從PC端軟件處理方式向FPGA平臺硬件處理方式的移植。
引言
在電子設(shè)計自動化領(lǐng)域,高層次綜合工具變得越來越受歡迎,其能夠?qū)ⅲ?C++、SystemC 、Matlab等高級語言的函數(shù)轉(zhuǎn)譯成RTL級的代碼,這一功能將數(shù)字電路設(shè)計的抽象層進(jìn)一步提升。隨著嵌入式系統(tǒng)復(fù)雜程度的增加,高層次綜合工具開始深入電子系統(tǒng)尤其是嵌入式系統(tǒng)的設(shè)計流程。本文介紹一種基于Xilinx公司的高層次綜合工具Vivado HLS的Down Scaler視頻系統(tǒng)設(shè)計。
1高層次綜合概述
在過去20年,占主導(dǎo)地位的電子設(shè)計流程中,硬件設(shè)計人員需要手工完成從系統(tǒng)功能指標(biāo)到RTL級代碼的所有工作。如今,這樣的設(shè)計流程開始變得困難,因為越來越多的功能可以被集成在一個芯片上,按照傳統(tǒng)的設(shè)計流程,開發(fā)人員獨(dú)自一人完成所有的功能變得越發(fā)困難,但因為設(shè)計功能的增多而增加設(shè)計團(tuán)隊的人員數(shù)量,從經(jīng)濟(jì)角度上看是不可行的,這意味著設(shè)計生產(chǎn)率必須有所提高。高層次綜合能夠通過從算法層到RTL層的自動化來提高設(shè)計生產(chǎn)率,從圖1(b)中可以看到,應(yīng)用高層次綜合,系統(tǒng)設(shè)計從功能指標(biāo)到自動化設(shè)計流程開端的距離縮短了。
在設(shè)計流程中,應(yīng)用高層次綜合工具能夠給設(shè)計工作帶來以下便利:首先,需要設(shè)計人員編寫的代碼量顯著減少,在縮短開發(fā)周期的同時降低了錯誤率。其次,在如今的產(chǎn)品開發(fā)過程中,驗證所需的時間往往超過設(shè)計的時間,使用高層次綜合工具能夠縮短驗證時間,在高層次綜合工具生成設(shè)計代碼的同時,還能夠同時生成測試平臺代碼,可以直接通過測試數(shù)據(jù)來驗證設(shè)計代碼是否正確。
2Down Scaler模塊設(shè)計
傳統(tǒng)的Down Scaler運(yùn)算是在PC架構(gòu)下進(jìn)行的,以湯姆遜視頻網(wǎng)絡(luò)公司的產(chǎn)品 THVN VS7000為例,其中的 Down Scaler模塊是PC服務(wù)器中的一個C++應(yīng)用程序,在進(jìn)行運(yùn)算處理前,視頻流的獲取通過一塊 Black Magic板卡來實現(xiàn),其接收到的每一幀圖像的像素信息通過PCIe傳輸?shù)絇C服務(wù)器。服務(wù)器首先將像素信息存儲在3個不用的內(nèi)存空間Y、U、V,之后應(yīng)用程序Down Scaler對這3個空間的像素信息進(jìn)行運(yùn)算處理。本文描述的設(shè)計目標(biāo)是使用FPGA中的一個Down Scaler IP核實現(xiàn)對視頻流的“硬件處理”,代替?zhèn)鹘y(tǒng)PC端的Down Scaler C++程序?qū)D像進(jìn)行“軟件處理”的方案,從而取消完整幀像素信息Y、U、V成分的預(yù)儲存步驟。
2.1 模塊參數(shù)要求
視頻的縮小比例為2/3,像素的相位數(shù)為2,根據(jù)相位數(shù)、亮度色度、水平豎直的不同情況,共計有8個濾波窗,每個濾波窗包含11個參數(shù),由 Lanczos算法提前計算確定,“鏡像”處理針對圖像邊緣的5個像素點進(jìn)行。
2.2 模塊設(shè)計關(guān)鍵點
2.2.1 計算單元
根據(jù)參數(shù)要求,Down Scaler模塊包括兩種BRAM計算單元,分別是Window和Linebuffer。 Window是一個一維存儲空間,用來存儲11個像素點,Linebuffer是一個二維存儲空間,用來存儲11行像素點。Linebuffer在每一個工作頻率上接收新的輸入像素,之前的像素在每一個工作頻率上向存儲空間的下方移動一個位置,即最新接收的像素點總是存儲在Linebuffer中的初始位置。當(dāng)Linebuffer填滿后,Downscaling運(yùn)算開始,即通過Window 存儲11個采樣像素,并對像素信息進(jìn)行濾波運(yùn)算。相比存儲一幀完整圖像后再進(jìn)行運(yùn)算的“軟件處理”方式,通過使用Linebuffer和Window作為“硬件處理”方式的存儲單元大幅降低了模塊對存儲空間的需求?!败浖幚怼焙汀坝布幚怼盌own Scaler模塊的計算單元大小對比如表1所列。
2.2.2 像素信息計算和鏡像運(yùn)算整合
與傳統(tǒng)Down Scaler算法對像素分量Y、U、V進(jìn)行區(qū)分后再做鏡像、濾波運(yùn)算不同,本文中的Down Scaler對輸入的像素點信息直接進(jìn)行鏡像和濾波運(yùn)算,這樣做是為了簡化IP結(jié)構(gòu),更好地適應(yīng) AXI4-Stream協(xié)議[2]。另外,傳統(tǒng)Down Scaler算法包含4個串行過程,分別是水平鏡像、水平縮小、豎直鏡像和豎直縮小,使用Vivado HLS工具的 Dataflow模式將串行過程并行執(zhí)行后,在不改變模塊工作頻率的條件下,只能夠滿足對 1920x1080P/25fps的視頻進(jìn)行實時運(yùn)算。為了進(jìn)一步提高運(yùn)算性能,需要進(jìn)一步降低運(yùn)算過程之間的數(shù)據(jù)依賴性。新的算法只包含兩個縮小過程,即水平縮小和豎直縮小,鏡像運(yùn)算被整合在縮小運(yùn)算中,并且只在需要的時刻進(jìn)行。對鏡像運(yùn)算的整合雖然增加了算法編寫的復(fù)雜程度,但是縮短了過程間的數(shù)據(jù)傳輸鏈路,使設(shè)計最終能夠達(dá)到性能參數(shù)要求,滿足對1920x1080P/60fps的視頻進(jìn)行實時運(yùn)算。
3 視頻系統(tǒng)設(shè)計
3.1 系統(tǒng)參數(shù)要求
輸入視頻流為全高清視頻、1920x1080P/60fps、YUV4:4:4 格式,輸出視頻流為高清視頻、1080x720P/60fps、YUV4:4:4格式,要求Down Scaler模塊的工作頻率等于輸入視頻像素頻率,即 148.5MHz。
3.2 Down Scaler視頻系統(tǒng)搭建
實時視頻系統(tǒng)架構(gòu)可以分為兩大類,一類是不含幀緩存模塊的系統(tǒng),另一類是包含幀緩存模塊的系統(tǒng),本文中的Down Scaler視頻系統(tǒng)屬于第二類架構(gòu)。
根據(jù)圖2所示的系統(tǒng)架構(gòu),使用 IP integrator 搭建的Down Scaler視頻系統(tǒng),該系統(tǒng)用到以下IP核:
①Test Pattern Generator [3]——Xilinx IP核,用來產(chǎn)生不同格式的輸入視頻流;
② Down Scaler——Vivado HLS生成的IP核
③ AXI Video Direct Memory Access [4]、AXI Interconnect [5]、MIG 7Series [6]——Xilinx IP核用來在DDR內(nèi)存中構(gòu)建幀緩存器;
④ Clocking Wizard [7] Xilinx IP核,用來生成系統(tǒng)時鐘信號;
⑤ Proc Sys Reset——Xilinx IP核,用來生成系統(tǒng)重置信號;
⑥ Video In to AXI4-S [8]、AXI4-S to Video Out [9]———Xilinx IP核,用來進(jìn)行 AXI4-Stream和視頻協(xié)議轉(zhuǎn)換;
⑦ VTC (Video Timing Coneroller [10]——Xilinx IP核,用來檢測輸入視頻時鐘周期和產(chǎn)生輸出視頻時鐘周期。
?
至此,一個基于Vivado HLS的Down Scaler視頻系統(tǒng)設(shè)計完成。
結(jié) 語
本設(shè)計選取Xilinx Kintex-7評估板作為開發(fā)平臺,使用高層次綜合工具Vivado HLS進(jìn)行Down Scaler模塊的設(shè)計、仿真和驗證,使用Vivado進(jìn)行實時視頻系統(tǒng)構(gòu)建,在滿足實時性要求和FPGA資源消耗要求下,實現(xiàn)了對Down Scaler視頻算法從PC端軟件處理向FPGA平臺硬件處理的移植。經(jīng)測試,由TPG生成的1080P視頻流經(jīng)過本文設(shè)計的Down Scaler系統(tǒng),成功輸出了720P視頻流,Down Scaler的性能滿足了設(shè)計要求。
隨著系統(tǒng)設(shè)計和算法日益復(fù)雜,新的設(shè)計方法———高層次綜合開始出現(xiàn)并將逐漸取代傳統(tǒng)的硬件系統(tǒng)設(shè)計方法,成為系統(tǒng)設(shè)計的主流方式。未來的設(shè)計者可以從算法的角度直接下降到硬件平臺來完成硬件開發(fā),對于復(fù)雜的算法,這一方法將大幅縮短開發(fā)周期,顯著降低代碼量,同時也為算法工程師和軟件工程師打開了硬件設(shè)計的大門。
評論