HLS學習筆記——vivado HLS的Design Flow概念

本博客爲跟Xilinx SAE 學HLS系列視頻講座-高亞軍的學習筆記。

軟件工程師怎麼了解FPGA架構

Vivado HLS是將基於C/C++描述的算法轉化成相應的RTL代碼,最終在FPGA上實現。這就要求軟件工程師對FPGA的內部架構有一些基本的認識,目的在於保證生成的RTL代碼在性能和資源上能夠達到很好的平衡。實際上,C語言與FPGA是有一些對應關係的。比如:
C語言中的數組可對應於FPGA中的寄存器、分佈式RAM、Block RAM或者UltraRAM
C語言中的乘加運算可對應於FPGA中的乘加運算單元(DSP48)
但不同於硬件工程師,對於FPGA內部其他資源比如高速收發器等,軟件工程師可不必瞭解。
本講從軟件工程師的視角重點介紹FPGA內部常規邏輯單元,包括查找表(LUT)、乘加運算單元(DSP48)、存儲單元(Block RAM)。這三類資源在算法開發中或多或少都會用到,在Vivado HLS的綜合報告中也有所體現。
FPGA屬於硬件可編程器件,Xilinx的FPGA分爲兩類:傳統的FPGA和SOC
在這裏插入圖片描述
在這裏插入圖片描述

對於軟件工程師,我們更關注的是邏輯單元、內存單元和算術邏輯單元。
在這裏插入圖片描述
邏輯單元包括查找表、多路選擇器和超前進位鏈
在這裏插入圖片描述
算術運算單元指代的是DSP48,可以實現乘法、乘加法、乘累加、加法、累加和邏輯運算。
在這裏插入圖片描述
內存單元包括Block RAM和分佈式RAM(LUT in SLICEM)。在7系列的FPGA中,36kb的BlockRAM可以配置成36kb的FIFO、18Kb的FIFO和18kb的BlockRAM、BlockRAM和BlockRAM。
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

HLS工作機制

有一本書叫做”FSM based Digital Design UsingVerilog HDL”,通過這本書你可以對狀態機有進一步的認識。之所以提到狀態機,是因爲就控制邏輯而言,採用它很方便(當然未必最爲高效)。

對軟件工程師而言,比如完成兩個數組相乘(這裏指的是數組中的元素對應相乘),可分爲如下幾個步驟:

  1. 分別從兩個數組中取數
  2. 對兩個數執行乘法操作
  3. 將結果寫入目標數組
    實際上,這三個步驟就對應了三個狀態。Vivado HLS的一個重要工作機制就是提取控制邏輯,這些控制邏輯最終以狀態機的形式體現出來。

本講通過一個簡單的具體實例(數組的乘加運算),介紹Vivado HLS的工作原理,包括Scheduling、Binding、Control logic extraction等概念,使得無論是軟件工程師還是硬件工程師都可以放心、高效使用Vivado HLS。
在這裏插入圖片描述
在ESL階段有兩種典型方式對整個系統行爲進行建模:使用高層次語言-Vivado HLS和基於模型的設計工具-System Generator
在這裏插入圖片描述
HLS綜合的三個階段:Scheduling、Control Logic Extraction和Binding。
在這裏插入圖片描述
Scheduling抽取每個時鐘週期內需要執行的動作,Binding將執行的操作映射到FPGA物理資源上,Control Logic Extraction提取操作之間的關係形成控制邏輯,通常是狀態機。
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

HLS設計流程

傳統的RTL設計流程包括設計輸入、功能仿真、設計綜合、佈局佈線和系統調試這樣的幾個步驟,而且這個過程往往需要反覆迭代,畢竟通常很難保證功能仿真一次通過或者系統調試沒有任何bug。HLS設計流程是基於C的設計流程,因此要在C這個層面完成設計輸入和功能驗證,同時還要保證生成的RTL代碼的功能與對應的C代碼的功能完全一致,這就多了一個C/RTL協同仿真(C/RTL Co-simulation)。這樣,整個設計流程就包括採用C描述的設計輸入、算法功能驗證、C綜合(生成RTL代碼)、C/RTL協同仿真,後續就可以將生成的RTL代碼融入的設計中完成RTL的綜合與佈局佈線了。從這個流程中可以看到,HLS設計流程有兩個顯著特徵:在C層面描述算法;在C層面驗證算法。這是其相比於RTL更爲快捷的一個重要原因。
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
第一步做C的仿真 第二步做C的綜合 第三步做C和RTL的協同仿真 第四步做導出RTL
可以通過相應按鈕綜合報告和RTL仿真波形
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

Xilinx相關文檔:
ug574: UltraScale Architecture ConfigurableLogic Block
ug573: UltraScale Architecture MemoryResources
ug579: UltraScale Architecture DSP Slice UserGuide

ug902 (v2018.1) High-Level Synthesis : page 6 - page 11

ug902(v2018.1) High-Level Synthesis page 22 - page 63
ug871(v2018.1) High-level Synthesis Tutorial Ch3: C Validation Lab 1, Lab 2, Lab 3
ug871(v2018.1) High-level Synthesis Tutorial Ch8: RTL Verification Lab 1, Lab 2, Lab3

學習筆記相關鏈接:
Design Flow of Vivado HLS
Coding Style of C Synthesis
Optimization Methods of for-loop
Optimization Methods of Array
I/O Port Implementation

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章