用OpenCV和Vivado HLS加速基于Zynq SoC的嵌入式視覺應(yīng)用開發(fā)
用HLS加速OPENCV函數(shù)
本文引用地址:http://butianyuan.cn/article/234277.htm一旦完成了嵌入式視覺系統(tǒng)架構(gòu)的分區(qū),找到了計算強度最大的部分,HLS工具就能幫助您加速這些函數(shù),同時仍能繼續(xù)使用C++編寫。Vivado HLS用C、C++或SystemC代碼生成高效的RTL實現(xiàn)方案。
此外,以IP為中心的Vivado設(shè)計環(huán)境提供豐富的處理IP SmartCORE,能簡化到圖像傳感器、網(wǎng)絡(luò)及其它必要I/O接口的連接,簡化OpenCV庫中這些函數(shù)的實現(xiàn)。這相對于其它實現(xiàn)方案而言是一種明顯的優(yōu)勢,因為其它方案哪怕是最基本的OpenCV I/O功能都需要加速。
為什么需要高層次綜合?
賽靈思推出的Vivado HLS是一款軟件編譯器,旨在將C、C++或SystemC編寫的算法轉(zhuǎn)變?yōu)獒槍τ脩舳x時鐘頻率和賽靈思產(chǎn)品系列器件優(yōu)化的RTL。在C/C++程序解釋、分析和優(yōu)化方面,它與x86處理器的編譯器具有相同的核心技術(shù)基礎(chǔ)。這種相似性有助于從臺式機開發(fā)環(huán)境快速移植到FPGA實現(xiàn)。您選擇目標(biāo)時鐘頻率和器件后,無需用戶輸入,Vivado HLS會默認(rèn)生成RTL實現(xiàn)。此外,Vivado HLS與其它任何編譯器一樣,也分不同的優(yōu)化級別。由于算法最終執(zhí)行目標(biāo)是定制的微型架構(gòu),因此Vivado HLS可實現(xiàn)的優(yōu)化級別比傳統(tǒng)的編譯器具有更精細(xì)的粒度。傳統(tǒng)的針對處理器的軟件設(shè)計O1 – O3優(yōu)化理念被架構(gòu)探索要求所取代,這些要求與用戶技術(shù)相結(jié)合,指導(dǎo)Vivado HLS創(chuàng)建盡可能出色的實現(xiàn)方案,滿足特定算法的功耗、面積占用和性能要求。
圖4 Zynq SoC上采用ARM處理器的運動檢測
圖2給出了HLS編譯器的用戶設(shè)計流程。從理念上講,用戶提供C/C++/SystemC算法描述,編譯器就能生成RTL實現(xiàn)。程序代碼轉(zhuǎn)化為RTL的過程分為四大階段:算法規(guī)范、微型架構(gòu)探索、RTL實現(xiàn)和IP封裝。
算法規(guī)范階段是指將針對FPGA架構(gòu)的軟件應(yīng)用開發(fā)。該規(guī)范可在標(biāo)準(zhǔn)桌面軟件開發(fā)環(huán)境中,全面利用賽靈思提供的OpenCV等軟件庫進(jìn)行開發(fā)。除了支持以軟件為中心的開發(fā)流程外,Vivado HLS還提升了從RTL到C/C++的提取驗證速度。用戶能用原軟件進(jìn)行全面的算法功能驗證。通過Vivado HLS生成RTL后,生成的設(shè)計代碼類似于傳統(tǒng)軟件編譯器生成的處理器匯編代碼。用戶可在匯編代碼級進(jìn)行調(diào)試,但這一步并不是必需的。
雖然Vivado HLS能處理幾乎所有針對其它軟件編譯器的C/C++代碼,但代碼有一個限制。在用Vivado HLS編譯代碼到FPGA過程中,用戶代碼不能包含任何運行時動態(tài)存儲器分配。與算法綁定于單個存儲器架構(gòu)的處理器不同,FPGA實現(xiàn)采用特定算法的存儲器架構(gòu)。通過分析陣列和變量的使用模式,Vivado HLS能確定哪些物理存儲器布局和存儲器類型最適合算法的存儲和帶寬要求。這種分析工作的唯一要求就是在C/C++代碼中明確描述算法使用的所有存儲器陣列。
從C/C++轉(zhuǎn)為優(yōu)化的FPGA實現(xiàn)的第二步就是微型架構(gòu)探索。在這一階段,您可運用Vivado HLS編譯器優(yōu)化來測試不同的設(shè)計,以找到適當(dāng)?shù)拿娣e和性能組合。您可在不同性能點實現(xiàn)相同的C/C++代碼,無需修改源代碼。Vivado HLS編譯器優(yōu)化或要求規(guī)定了算法不同部分的性能如何描述。
c++相關(guān)文章:c++教程
評論