天天看點

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

PYNQ上手筆記 | ⑤采用Vivado HLS進行高層次綜合設計

3.1.2.建立一個新的工程

PYNQ上手筆記 | ⑤采用Vivado HLS進行高層次綜合設計
PYNQ上手筆記 | ⑤采用Vivado HLS進行高層次綜合設計

添加提前建立好的源檔案進來,因為我們探索的是設計流而不是程式設計:

PYNQ上手筆記 | ⑤采用Vivado HLS進行高層次綜合設計

添加提前建立好的測試檔案進來:

PYNQ上手筆記 | ⑤采用Vivado HLS進行高層次綜合設計

對于具體的FPGA進行解決方案配置,如圖所示:

PYNQ上手筆記 | ⑤采用Vivado HLS進行高層次綜合設計
PYNQ上手筆記 | ⑤采用Vivado HLS進行高層次綜合設計

工程建立完成,綜合界面如圖所示:

PYNQ上手筆記 | ⑤采用Vivado HLS進行高層次綜合設計

3.2.在Vivado HLS 指令行中快速建立項目

在3.1節中采用GUI界面完成了建立工程的工作,這個工程命名和添加檔案建立工程的工作可以由一個TCL腳本完成,可以大幅提高我們的效率~

3.2.1.打開Vivado HLS 指令行界面

PYNQ上手筆記 | ⑤采用Vivado HLS進行高層次綜合設計
PYNQ上手筆記 | ⑤采用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即可運作腳本,完整過程如圖所示:

PYNQ上手筆記 | ⑤采用Vivado HLS進行高層次綜合設計

這樣一個工程就建立好了;

3.2.4.在Vivado HLS指令行打開建立的工程

使用指令vivado_hls -p matrix_mult_prj即可在GUI界面打開工程,如圖:

PYNQ上手筆記 | ⑤采用Vivado HLS進行高層次綜合設計
PYNQ上手筆記 | ⑤采用Vivado HLS進行高層次綜合設計

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按鈕,然後不用選擇,直接下一步,可以看到控制台輸出:

PYNQ上手筆記 | ⑤采用Vivado HLS進行高層次綜合設計
PYNQ上手筆記 | ⑤采用Vivado HLS進行高層次綜合設計

3.3.2.使用HLS綜合C++代碼

點選C Synthesis按鈕,Vivado HLS會開始綜合C++代碼,綜合完成後會自動打開綜合報告,其中詳細的描述了設計的時序以及FPGA資源占用估算等:

PYNQ上手筆記 | ⑤采用Vivado HLS進行高層次綜合設計

3.3.3.C/RTL共同協作

點選Run C/RTL Cosimulation按鈕,選擇生成verilog語言檔案,設計完成後會自動彈出結果,如圖所示:

PYNQ上手筆記 | ⑤采用Vivado HLS進行高層次綜合設計
PYNQ上手筆記 | ⑤采用Vivado HLS進行高層次綜合設計

3.3.4.建立一個解決方案進行對比

點選New Solution按鈕建立一個解決方案:

PYNQ上手筆記 | ⑤采用Vivado HLS進行高層次綜合設計

然後打開matrix_mult.cpp檔案,選擇右邊的directive視圖,右擊Product,選擇Inser Directive,然後選擇PIPELINE,确定之後運作C綜合來綜合出RTL設計,完成後同樣會彈出設計資訊:

PYNQ上手筆記 | ⑤采用Vivado HLS進行高層次綜合設計

然後可以将報告與之前solution1的報告進行對比,

3.3.5.分析

進入Analysis視圖:

PYNQ上手筆記 | ⑤采用Vivado HLS進行高層次綜合設計

3.3.6.建立一個流水線解決方案

PYNQ上手筆記 | ⑤采用Vivado HLS進行高層次綜合設計

3.3.7.解決方案對比

PYNQ上手筆記 | ⑤采用Vivado HLS進行高層次綜合設計
PYNQ上手筆記 | ⑤采用Vivado HLS進行高層次綜合設計
PYNQ上手筆記 | ⑤采用Vivado HLS進行高層次綜合設計

3.4.接口綜合

3.4.1.TCL腳本建立工程

在F:\SOC\PYNQ-Z2\HLSproject\hls\tut3C檔案夾,使用指令:

vivado_hls -f run_hls_pynq.tcl

3.4.2.打開工程

3.4.3.C Synthesis

4.實驗總結

繼續閱讀