設計簡單算法體驗Vivado HLS的使用


前言

  本文主要講解了使用Vivado HLS設計簡單C語言的二選一選擇器算法的硬件HLS開發的全流程,包括工程創建-算法驗證和仿真-算法綜合-RTL仿真-IP封裝等步驟。

參考網站:

  http://blog.chinaaet.com/cuter521/p/36069

  http://blog.chinaaet.com/cuter521/p/36119

  公司想要將立體匹配的算法進行硬件實現,無奈本人硬件小白一枚,看了基於verilog硬件實現的相關文檔之后還是找不到感覺,其實FPGA進行硬件實現功能也挺強大的,手邊有zedboard開發板,正好看到可以使用Vivado可以將c/c++轉換為FPGA實現,最讓人驚喜的是還有HLS圖像庫,和opencv比較相似,果斷選擇了Vivado,只是還需要從頭開始!加油!

 

內容:

1. 熟悉Vivado HLS的使用以及開發流程;

2.使用Vivado HLS進行C/C++算法的仿真驗證;

3.對C語言的算法進行綜合,查看RTL方則很難結果,並將設計進行IP封裝;

 

操作步驟:

1.新建工程

2.添加設計資源文件

3.C代碼仿真驗證

4.算法綜合-自動生成verilog等其他文件

5.RTL仿真以及查看波形

6.IP封裝

 

操作過程:

1.新建工程

雙擊Vivado HLS打開HLS;

單擊“Create New Project”,打開新建工程向導,第一個界面如下圖所示。

 

謹慎起見,將工程名和設計的模塊名保持一致,設置完畢后,點擊Next,進入下面的界面。

建立空工程,先不添加,進入工程之后再自行添加設計文件,點擊Next,進入如下圖所示的測試文件添加界面。

直接跳過點擊Next,進入下一界面,如下圖所示。

這一步需要進行設置,否則Finish按鈕一直是灰化的,不能生成工程。紅色方框內的提示可以看出,這里是選擇所用芯片的型號的。點擊綠色橢圓內的按鈕,進入芯片選擇對話框,如下圖所示。

這里不用多說,兩種方式,一種好似逐一選擇Family, Package, Speed Grade等參數,直到定位到你想要的芯片,如下圖所示。

另一種方法是直接選擇開發板,如下圖所示。

 選擇完成后點擊OK,返回發現part部分已經選中Zedboard開發板,Finish按鈕可用。點擊Finish按鈕完成向導,進入HLS主界面,如下圖所示。

 2.添加設計資源文件

 2.1添加設計文件

   選中左側Explorer子窗體下的Source目錄,郵件,彈出Add/New Files菜單,點擊添加資源文件,如下圖所示(注:有些圖因為當時沒有保存,直接借用原作者的圖)。

  

  Top Function:mux21

  mux21源碼如下:

#include "mux21.h"

int1 mux21(int1 sig_a, int1 sig_b, int1 select)
{
    if(0==select)
       return sig_a;
    else
       return sig_b;
}
View Code

  mux21.h的內容是:

#include <ap_cint.h>
View Code

ap_cint.h這個頭文件的包含,是為了使用int1類型,int1表示1位整型數。

注意:.h文件是不用添加的,HLS會自動包含相應的頭文件,但是路徑要正確。

2.2添加測試文件和數據

單擊Test Bench目錄,添加測試文件和數據,添加文件夾時,需要選擇“Add Folder…”選項。如果把測試文件添加到Source目錄中,編譯會產生問題。

testbench mux21_tb.c源碼為:

#include <stdio.h>
#include "mux21.h"

int main(void)
{
    int1 res1 = 0;
    int1 res2 = 0;

    res1=mux21(1,0,0);
    res2=mux21(0,1,1);

    if(res1 && res2)
        printf("test passed, well done!\n");

    return 0;
}
View Code

 

2.3設置工程屬性

選中mux21文件夾,右擊,彈出如下圖所示的菜單。

點擊Project Setting,進入設置界面,如下圖所示。

點擊Synthesis,進入下圖所示的界面。

3.C代碼仿真驗證

在菜單欄中找到Project > Run C Simulation命令,或者直接單擊工具欄中的按鈕(如下圖所示),編譯和執行C程序。

 編譯過程以及執行結果會在主界面下方的Console自選項卡中打印顯示,如下圖所示。

 

注意:編寫代碼時,沒有正確包含 .h文件,不能進行C代碼的仿真和驗證。發現錯誤,修改了之后,IDE可能不會自動檢測,這里可以嘗試使用Index功能,IDE會檢測改動,消除錯誤提示。

使用了int1類型,但是沒有包含ap_cint.h文件,顯示效果如下圖所示。

這時,就算修改代碼,包含了ap_cint.h文件,錯誤提示依舊存在。需要手動Index C source,提示才會消除。操作如下圖所示:Project > Index C Source,或者點擊工具欄中的快捷按鈕,下圖所示紅色方框內的圖標。

 

4.算法綜合-自動生成verilog等其他文件

 如下圖所示,在菜單中尋找命令:Solution > Run C Synthesis > Active Solution,點擊Active Solution菜單,HLS會自動完成綜合工作。

此外,還可以直接點擊工具欄中的快捷按鈕(下圖紅色方框內),在下拉菜單中選擇“Active Solution”命令,也能夠啟動綜合進程。

接下來就可以進入工程文件夾,找到綜合文件夾,查看所綜合出的HDL代碼,文件結構如下圖所示。

rpt文件顯示“General Information(基本信息)”、“Performance Estimates(性能估算)”、“Utilization Estimates(資源利用估算)”、“(Interface接口)”等信息。

verilog文件夾下是綜合出來的.v文件,vhdl文件夾下綜合出來的是.vhd文件,打開mux21.v,代碼為:

`timescale 1 ns / 1 ps
(* CORE_GENERATION_INFO="mux21,hls_ip_2014_2,{HLS_INPUT_TYPE=c,HLS_INPUT_FLOAT=0,HLS_INPUT_FIXED=1,HLS_INPUT_PART=xc7z020clg484-1,HLS_INPUT_CLOCK=10.000000,HLS_INPUT_ARCH=others,HLS_SYN_CLOCK=1.370000,HLS_SYN_LAT=0,HLS_SYN_TPT=none,HLS_SYN_MEM=0,HLS_SYN_DSP=0,HLS_SYN_FF=0,HLS_SYN_LUT=0}" *)
module mux21 (
        ap_start,
        ap_done,
        ap_idle,
        ap_ready,
        sig_a,
        sig_b,
        select_r,
        ap_return
);
parameter    ap_const_logic_1 = 1'b1;
parameter    ap_const_logic_0 = 1'b0;
input   ap_start;
output   ap_done;
output   ap_idle;
output   ap_ready;
input  [0:0] sig_a;
input  [0:0] sig_b;
input  [0:0] select_r;
output  [0:0] ap_return;
assign ap_done = ap_start;
assign ap_idle = ap_const_logic_1;
assign ap_ready = ap_start;
assign ap_return = ((select_r)? sig_b: sig_a);
endmodule //mux21
View Code

主要功能語句:

assign ap_return = ((select_r) ? sig_b : sig_a);

由於這個設計過於簡單,ap_start、ap_ready、ap_done、ap_idle以及ap_return信號的作用不太能體現出來,從命名來看,主要是用於控制模塊工作的信號。

 

5.RTL仿真以及查看波形

Solution > Run C/RTL Cosimulation,仿真完成后,需要在Vivado下查看仿真結果。

注意:Dump Trace選項要選擇all,否則不會產生波形數據,位置如下圖所示。

  打開Vivado,在 tcl 控制台下鍵入以下指令
  (TCL控制台從哪里打開): 打開vivado編譯工具,在主頁面的下方有TCL控制台TCL console;

cd E:/hls/mux21/solution1/sim/verilog/

current_fileset

open_wave_database mux21.wdb

open_wave_config mux21.wcfg

 

注釋:

更改路徑

加載工程

加載仿真數據

打開波形窗口

生成的波形如下圖所示:

 

6.IP封裝

 Solution > Export RTL,或者點擊工具欄快捷按鈕,打開Export RTL對話框,如下圖所示。

命令行會打印提示整個IP封裝過程,如下圖所示。

IP封裝完成后,mux21文件夾下會出現impl文件夾,該文件夾下包含ip、verilog、vdhl三個子文件夾,在這些文件夾中,我們可以找到封裝過程中生成的文件。

 

7.結論

本渣只是根據cuter的博客練習使用Vivado,其實還沒有使用到HLS,所以本博客的大部分內容是重復的,只是本渣自己實現了整個過程,當然在這個過程中也遇到了一些其他的問題,所以總結一下,留作以后的參考。

做的過程中很多圖沒有截下來,直接拿過來使用了,望勿噴!可交流!

 當然,這離HLS的實現還有好遠!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM