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