HLS工具
以個人的理解,xilinx將HLS(高層次綜合)定位於更方便的將複雜算法轉化為硬體語言,通過添加某些配置條件HLS工具可以把可並行化的C/C++的代碼轉化為vhdl或verilog,相比於純人工使用vhdl實現圖像算法,該工具綜合出的代碼的硬體資源佔用可能較多,但並沒有相差太大(見論文:基於HLS的 SURF特徵提取硬體加速單元設計與實現),而純人工用硬體描述語言實現一個複雜的圖像處理算法要求十分深厚的FPGA功底,下面簡單總結下好早之前做的一個在zybo開發板上的HLS圖像處理通路。
硬體工程概述
demo工程是在xilinx公司實習的同學給的,現在在github上也有zynq_example?
工程裡已經有了xdma的通路和一個hls矩陣運算的例子,但hls矩陣運算例子裡沒用axi-stream總線。圖像數據要通過axi-stream總線在各IP之間進行傳輸,而且這裡需要vdma進行數據搬運,相對於xdma的配置更為複雜。然後在參考了」zynq base TRD」各個版本的例子的基礎上修改了Block Design。vdma IP的配置和軟體驅動參考的這個xilinx-video-capture(可能要翻牆)。經過數次漫長的綜合最後完成了整個硬體的搭建和軟體測試。。。
FPGA部分
HLS IP生成
之前寫過的一篇HLS代碼分析的代碼用來生成IP核,設置器件xc7z010clg400-1,頻率設置為150M
下面是 C testbench部分函數 top function為」image_filter」
void hls_sobel(IplImage *_src, IplImage *_dst)
{
Mat src(_src);
Mat dst(_dst);
AXI_STREAM src_axi, dst_axi;
cvMat2AXIvideo(src, src_axi);
image_filter(src_axi, dst_axi, src.rows, src.cols,
1, 0, -1, 2, 0, -2, 1, 0, -1,
1, 2, 1, 0, 0, 0, -1, -2, -1,
HLS_SOBEL_HIGH_THRESH_VAL,
HLS_SOBEL_LOW_THRESH_VAL,
HLS_SOBEL_INVERT_VAL);
AXIvideo2cvMat(dst_axi, dst);
}
參見xapp1167的例子
int main (int argc, char** argv)
{
Mat src_rgb = imread(INPUT_IMAGE);
Mat src_yuv(src_rgb.rows, src_rgb.cols, CV_8UC2);
Mat dst_yuv(src_rgb.rows, src_rgb.cols, CV_8UC2);
Mat dst_rgb(src_rgb.rows, src_rgb.cols, CV_8UC3);
cvtcolor_rgb2yuv422(src_rgb, src_yuv);
IplImage src = src_yuv;
IplImage dst = dst_yuv;
hls_sobel(&src, &dst);
cvtColor(dst_yuv, dst_rgb, CV_YUV2BGR_YUYV);
imwrite(OUTPUT_IMAGE, dst_rgb);
opencv_sobel_init();
opencv_sobel(&src, &dst);
cvtColor(dst_yuv, dst_rgb, CV_YUV2BGR_YUYV);
imwrite(OUTPUT_IMAGE_GOLDEN, dst_rgb);
return image_compare(OUTPUT_IMAGE, OUTPUT_IMAGE_GOLDEN);
}
仿真沒問題,綜合後看Timing報告是滿足要求的,然後把IP導到vivado工程中
Block Design
整個工程
僅供參考,裡面有好多其他的外設。借鑑官方TRD工程,TRD硬體是zc702板子的+FMC。這個工程裡連linux上的Qt demo也給出了(如其名」Targeted Reference Design」),不過後來的版本ps跑的是petalinux。
PS低速接口GP0用來接各個外設,M_AXI接口從PS出來後接一個S-M轉化(這裡主要是把AXI3總線轉為AXI-Lite總線)接到AXI interconnect上,然後通過AXI-Lite總線接外設。
PS高速接口HP0接DDR和圖像通路的VDMA,也可以把VDMA接到ACP接口上。
圖像通路
時鐘
圖像通路的時鐘為150M,其他外設給的100M。這裡要注意HLS生成的IP核控制、VDMA的控制走的還是100M的axi-lite總線在設置reset信號的時候不要接錯。不同頻率的復位信號要單獨由一個reset核產生
vdma配置
數據位寬與hls設計相對應,具體的配置說明參考pg020文檔。
打開APP閱讀更多精彩內容聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容圖片侵權或者其他問題,請聯繫本站作侵刪。 侵權投訴