本博客为跟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”,通过这本书你可以对状态机有进一步的认识。之所以提到状态机,是因为就控制逻辑而言,采用它很方便(当然未必最为高效)。
对软件工程师而言,比如完成两个数组相乘(这里指的是数组中的元素对应相乘),可分为如下几个步骤:
- 分别从两个数组中取数
- 对两个数执行乘法操作
- 将结果写入目标数组
实际上,这三个步骤就对应了三个状态。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
标签:FPGA,vivado,RTL,工程师,Flow,Vivado,HLS,单元 From: https://blog.51cto.com/feishujun/5947812