PYNQ上手筆記 | ⑤採用Vivado HLS進行高層次綜合設計
1.實驗目的
通過例程探索Vivado HLS設計流
- 用圖形使用者介面和TCL指令碼兩種方式建立Vivado HLS專案
- 用各種HLS指令綜合介面
- 優化Vivado HLS設計來滿足各種約束
- 用不用的指令來探索多個HLS解決方案
2.實驗內容
實驗中檔案中包含一個矩陣乘法器的實現,實現兩個矩陣inA和inB相乘得出結果,並且提供了一個包含了計算結果的testbench檔案來與所得結果進行對比驗證。
3.實驗步驟
3.1.在Vivado HLS GUI介面中建立專案
3.1.1.啟動Vivado HLS 2018.1
3.1.2.建立一個新的工程
新增提前建立好的原始檔進來,因為我們探索的是設計流而不是程式設計:
新增提前建立好的測試檔案進來:
對於具體的FPGA進行解決方案配置,如圖所示:
工程建立完成,綜合介面如圖所示:
3.2.在Vivado HLS 命令列中快速建立專案
在3.1節中採用GUI介面完成了建立工程的工作,這個工程命名和新增檔案建立工程的工作可以由一個TCL指令碼完成,可以大幅提高我們的效率~
3.2.1.開啟Vivado HLS 命令列介面
3.2.2.編寫建立工程TCL指令碼
新建一個檔案run_hls_pynq.tcl,然後編寫以下工程配置:
# 建立工程 open_project -reset matrix_mult_prj # 新增原始檔和測試檔案 add_files matrix_mult.cpp add_files matrix_mult.h add_files -tb matrix_mult_test.cpp # 設定工程頂層 set_top matrix_mult # 建立解決方案 open_solution -reset solution1 # 選擇具體的FPGA晶片配置 set_part {xc7z010clg400-1} create_clock -period 5 # 模擬C程式碼 csim_design exit
3.2.3.在Vivado HLS命令列執行TCL指令碼
在剛剛開啟的Vivado HLS命令列介面中輸入cd <指令碼及原始檔所在絕對路徑>
,然後輸入目錄所在碟符,進入目錄後使用命令vivado_hls -f run_hls_pynq.tcl
即可執行指令碼,完整過程如圖所示:
這樣一個工程就建立好了;
3.2.4.在Vivado HLS命令列開啟建立的工程
使用命令vivado_hls -p matrix_mult_prj
即可在GUI介面開啟工程,如圖:
3.3.Vidavo HLS中的設計優化
3.3.1.檔案作用c
- matrix_mult.cpp 包含了迭代計算矩陣乘法的程式碼
- matrix_mult.h 包含了巨集定義和函式宣告
- matrix_mult_test.cpp 測試檔案,包含了使用HLS硬體解決方案計算和軟體計算的結果,並計算驗證
3.3.2.執行C模擬
點選Run C Simulation
按鈕,然後不用選擇,直接下一步,可以看到控制檯輸出:
3.3.2.使用HLS綜合C++程式碼
點選C Synthesis
按鈕,Vivado HLS會開始綜合C++程式碼,綜合完成後會自動開啟綜合報告,其中詳細的描述了設計的時序以及FPGA資源佔用估算等:
3.3.3.C/RTL共同協作
點選Run C/RTL Cosimulation
按鈕,選擇生成verilog語言檔案,設計完成後會自動彈出結果,如圖所示:
3.3.4.新建一個解決方案進行對比
點選New Solution
按鈕新建一個解決方案:
然後開啟matrix_mult.cpp
檔案,選擇右邊的directive
檢視,右擊Product
,選擇Inser Directive
,然後選擇PIPELINE
,確定之後執行C綜合來綜合出RTL設計,完成後同樣會彈出設計資訊:
然後可以將報告與之前solution1
的報告進行對比,
3.3.5.分析
進入Analysis
檢視:
3.3.6.新建一個流水線解決方案
3.3.7.解決方案對比
3.4.介面綜合
3.4.1.TCL指令碼新建工程
在F:\SOC\PYNQ-Z2\HLSproject\hls\tut3C
資料夾,使用命令:
vivado_hls -f run_hls_pynq.tcl
3.4.2.開啟工程
vivado_hls -p matrix_mult_prj