Xilinx-HLS-学习笔记(8):高层次综合HLS简介

Xilinx-HLS-学习笔记(8):高层次综合HLS简介

在RTL里,设计师不需要考虑怎么构造一个寄存器或怎样安置这些寄存器,而只需要考虑这些寄存器在设计中起到怎样的作用。EDA工具可以先把RTL转化成数电模型,再由模型转换成一个设备上的具体电路实施方案。所谓"方案"其实就是编译出的文件,这些文件可以用于规定某个自定义设备,也可以用于编程一些现有的设备,比如FPGA。

HLS则是在这基础上更高层的一种方法,设计师们在HLS下需要更多的考虑大的架构而非某个单独部件或逐周期运行。设计师在HLS下需要注重的是系统的运行模式,HLS工具会负责产生具体的RTL微结构。最早大多数HLS工具是基于Verilog的,用户需要使用Verilog语言进行描述,工具也通过Verilog产生RTL。现如今很多HLS工具开始使用C/C++作为设计师端的语言。当然,选择HLS工具最重要的还是看它能否综合我们需要的程序,而不是它使用什么语言。

总体来说,HLS可以自动完成以下曾经需要手动完成的工作:
  • HLS自动分析并利用一个算法中潜在的并发性
  • HLS自动在需要的路径上插入寄存器,并自动选择最理想的时钟
  • HLS自动产生控制数据在一个路径上出入方向的逻辑
  • HLS自动完成设计的部分与系统中其他部分的接口
  • HLS自动映射数据到储存单位以平衡资源使用与带宽
  • HLS自动将程序中计算的部分对应到逻辑单位,在实现等效计算的前提下自动选取最有效的实施方式
大多数HLS工具需要用户提供功能的规范,交互的描述,一个对接的计算设备,和目标优化方向。而

对于Vivado HLS来说,用户需要:

  • 一个用C/C++/System C编写的函数
  • 一个测试平台用于验证结果(C testbench)
  • 一个FPGA开发版
  • 期望的时钟周期
  • 一个简单的实施指导
根据Vivado HLS的使用指南,我们将对我们的输入程序作出以下规范:
  • 不使用动态内存分配(不使用malloc(),free(),new和delete())
  • 减少使用指针对指针的操作
  • 不使用系统调用(例如abort(),exit(),printf()),我们可以在其他代码例如测试平台上使用这些指令,但
  • 是综合的时候这些指令会被无视(或直接删掉)
  • 减少使用其他标准库里的内容(支持math.h里常用的内容,但还是有一些不兼容)
  • 减少使用C++中的函数指针和虚拟函数
  • 不使用递归方程
  • 精准的表达我们的交互接口

当RTL级的设计可用时,大多数HLS工具会进行标准RTL设计流。而在赛灵思Xilinx Vivado设计套装里进行的是逻辑综合,将RTL级设计转换成一个FPGA逻辑部件的连线表,这份连线表不仅包含需要的逻辑部件还包含他们的连接方式。Vivado之后将连线表和目标设备中的可用资源相关联,这个过程被称作布局及布(PAR)。产出的FPGA配置被附在比特流(bitstream)上,用户可以将比特流上传到FPGA以实现想要的功能。比特流实质上是用二进制表示FPGA上每一个可用资源的配置,包括逻辑部件的使用,连线的方式,和片上的内存。大型FPGA例如赛灵思UltraScale FPGA拥有超过十亿个可配置比特,较小的FPGA上也至少有几亿个可配置比特。

你可能感兴趣的:(Xilinx-FPGA)