1. 程式人生 > >PYNQ上手筆記 | ⑤採用Vivado HLS進行高層次綜合設計

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

3.4.3.C Synthesis

4.實驗總結