FPGA实践教程之:在Xilinx zynq-7z035上运行LeNet(一)背景知识 FPGA入门教程:赛灵思文档解析UG998 FPGA设计与vivado高层次综合介绍(一)

本文档是我在实践将简单的神经网络LeNet-5实现到Xilinx 的zynq-7z035的FPGA上遇到的问题和解决方法。

本文档为实现相应操作所需掌握的背景知识,有了这些基础之后才能进行后面相应的软件操作。需要反复阅读相关概念,这样在运行相应软件时才能明白每个步骤的意义。

FPGA基础知识参阅我之前的文章:

FPGA入门教程:赛灵思文档解析UG998 FPGA设计与vivado高层次综合介绍(一)


完成LeNet-5的FPGA实现可能需要用到和查阅的文档有:

UG902:Vivado Design Suite User Guide: High-Level Synthesis:

该文档主要涉及vivado HLS的理解,vivado HLS软件的初步使用,以及相应的HLS相关的c语言库等,我们主要关注该文档的第一章:用vivado HLS软件实现HLS(高层综合High-level Synthesis)

UG871:Vivado Desigh Suite Tutoril:High-level Synthesis

该文档主要涉及vivado HLS软件的具体操作过程,包括HLS的介绍、c的验证、管脚综合、任意精度数、设计分析、优化分析、RTL验证、用HLS生成集成IP、在Zynq的AP Soc设计中用HLS生成的IP、这个文档是操作的重点。


HLS相关概念(UG902 v2016.4第一章中的内容)

我们需要明白在HLS过程中发生了什么,HLS是高层综合(High level Synthesis),是将C或者c++语言编译为FPGA能够读懂和运行的RTL级别的语言。通过HLS这个过程可以显著加快FPGA的设计进程,而不用从底层的FPGA语言编起。

扫描二维码关注公众号,回复: 1532342 查看本文章

HLS包含下面这些阶段

  • scheduling:确定每个时钟周期中执行哪些步骤
  • Binding:确定哪些硬件资源会被用到
  • 控制逻辑提取:提取控制逻辑,创建一个有限状态机(FSM:Finite state machine)来进行RTL的设计。

HLS需要对相应的c代码进行下面的综合:

  • 函数层面的c语言参数综合为相应的RTL 的输入输出管脚
  • c函数综合为RTL块架构
  • c中的循环初始状态下还是循环执行:通过优化方案可以将循环展开
  • c中的数组会被综合为FPGA中的块RAM或者UltraRAM

HLS创建一个优化的方案,评价标准有下面这些:

  • Area:用到的LUT,寄存器,BRAM和DSP48的数量
  • 时延:函数算出所有输出用的时钟周期
  • II(Initiation interval):函数可以接受新的输入数据需要的时钟周期
  • 循环迭代时延:运行一次循环需要的时钟周期
  • 循环间隔时延:新运行一次循环需要的时钟周期
  • 循环时延:运行循环需要的所有时钟周期

UG902文档v2016.4中9-13页具体举了两个具体的例子来了帮助理解HLS的schedule、binding和控制逻辑提取工作,这里我们跳过暂不讨论,如果以后用到可以回来看加深理解。

vivado HLS需要进行的步骤:

  1. 编译、执行(仿真)、调试相应的c语言代码
  2. 把c算法综合为RTL实现,在这个过程中可以使用优化指令
  3. 生成综合分析报告并分析设计
  4. 验证RTL的实现
  5. 打包RTL进入IP块

vivado HLS软件需要的输入信息

  • c函数用c/c++、SystemC、OpenCL API或者C kernel写成
  • Constrains:资源限制,例如时钟周期、时钟不确定性、与FPGA目标板
  • Directives:可选的过程,来实现特定的优化
  • c测试台(c test bench)与相关文档
  • HLS用c测试台来仿真c代码并且验证相应用c/RTL联合仿真得到的RTL输出

vivado HLS软件输出的信息

  • RTL实现文件,用HDL(hardware description language)语言写成,这是最重要的输出,有两种模式,VHDL语言和Verilog语言。这种实现文件会被作为IP块,并且可以被其他xilinx的设计工具所使用。
  • 报告文档:综合、c/RTL协同仿真、IP封装的输出结果。
下图1-4为vivado HLS所需要的输入输出。


Synthesis,optimization,analysis

  1. 创建工程,初始solution
  2. 验证相应的c没有错误
  3. 运行synthesis获得一系列结果
  4. 分析结果

在HLS中有下面这些优化方法

  • pipeline,在上个进程运行结束前开始下个进程
  • 给函数、循环、区域指定时延
  • 针对具体的操作指令同时运行
  • 选择相应的I/O协议确保硬件可以与其他的设施相连接

了解这些知识之后,我们就可以开始运用vivado HLS进行相应的IP生成了。


猜你喜欢

转载自blog.csdn.net/weixin_36474809/article/details/80594481