本文档是我在实践将简单的神经网络LeNet-5实现到Xilinx 的zynq的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过程中发生了什么,HLS是高层综合(High level Synthesis),是将C或者c++语言编译为FPGA能够读懂和运行的RTL级别的语言。通过HLS这个过程可以显著加快FPGA的设计进程,而不用从底层的FPGA语言编起。
HLS包含下面这些阶段
HLS需要对相应的c代码进行下面的综合:
HLS创建一个优化的方案,评价标准有下面这些:
UG902文档v2016.4中9-13页具体举了两个具体的例子来了帮助理解HLS的schedule、binding和控制逻辑提取工作,这里我们跳过暂不讨论,如果以后用到可以回来看加深理解。
vivado HLS需要进行的步骤:
vivado HLS软件需要的输入信息
vivado HLS软件输出的信息
下图1-4为vivado HLS所需要的输入输出。
Synthesis,optimization,analysis
在HLS中有下面这些优化方法
了解这些知识之后,我们就可以开始运用vivado HLS进行相应的IP生成了。
深鉴科技FPGA2017最佳论文ESE Efficient speech recognition engine with sparse LSTM on FPGA论文详解
PipeCNN论文详解:用OpenCL实现FPGA上的大型卷积网络加速
韩松EIE:Efficient Inference Engine on Compressed Deep Neural Network论文详解
韩松博士毕业论文Efficient methods and hardware for deep learning论文详解
FPGA基础知识(一)UG998相关硬件知识
FPGA基础知识(二)HLS相关知识
FPGA基础知识(三)UG902 接口综合
FPGA基础知识(四)UG902 RTL simulation and export
FPGA基础知识(五)系统集成知识
FPGA基础知识(六)UG586 Mermoy Interface Solutions
FPGA基础知识(七)片上单片机
FPGA基础知识(八)vivado设计流程中的知识
FPGA基础知识(九)SDK相关知识
FPGA基础知识(十)DMA与AXI4总线
尝试用IPcore调用DDR3及相关知识
vivado HLS硬件化指令(一)HLS针对循环的硬件优化
vivado HLS硬件化指令(二)HLS针对数组的硬件优化
vivado HLS硬件化指令(三)HLS增大运算吞吐量的硬件优化
vivado HLS硬件化指令(四)卷积相关的指令优化
卷积操作的HLS优化
FPGA实践教程(一)用HLS将c程序生成IPcore
FPGA实践教程(二)连接片上ARM
FPGA实践教程(三)系统搭建与烧录
FPGA实践教程(四)片上ARM运行程序
FPGA实践教程(五)PS用MIG调用DDR
FPGA实践教程(六)AXI-Lite实现PS与PL通信
FPGA实践教程(八)PS与PL共享DDR
FPGA vivado系统集成操作
DMA在linux下PS端c语言相关内容
数据流输入输出IPcore时c语言相关内容
调通DMA系统集成中遇到的问题
ARM用MIG调用DDR3的c程序解析
MIZ7035上的AXI接口的MIG测试
MIZ7035交叉编译单片机程序运行