FPGA
文章平均质量分 94
祥瑞Coding
机器学习,计算机视觉
展开
-
2018.5-2019.1基于FPGA平台的目标检测网络实现
2018.5 - 2019.1 基于FPGA平台的目标检测网络实现,将目标检测模型实现为c++代码,成功通过HLS工具部署于FPGA平台上,实现公交摄像头画面中人头的检测。目录一、项目背景1.1 公司背景1.2 应用背景1.3 技术路线二、python端2.1 MTCNN与训练过程2.2 mAP的测试2.3 网络结构的更改2.4 输...原创 2019-08-05 19:36:47 · 6156 阅读 · 3 评论 -
卷积函数的FPGA实现(六)对IPcore进行HLS及RTL输出
背景:MTCNN的卷积被实现为IPcore目的:HLS通过IPcore,输出RTL目录一、删掉一些语句二、加回DATAFLOW与UNROLL2.1 N_PE=82.2 N_PE=4三、最终IPcore占用的资源7z0207z035ffg676-2 四、输出IPcore为RTL一、删掉一些语句因bug找不出,只能暂且去掉一些优化指令。225 删...原创 2018-12-13 10:25:06 · 3512 阅读 · 1 评论 -
ZynqNet解析(八)对IPcore的HLS
背景:zynqNet运用HLS来实现相应的IPcore。相关HLS过程的信息会打印到console之中。目的:读懂HLS对IPcore代码的HLS过程,具体硬件如何实现。将报告信息存下来用于参考。目录一、 全IPcore的HLS console二、 processInputChannel函数的HLSconsole三、synthesis结果IPcore调试成功,HLS打印信息...原创 2018-12-12 14:23:15 · 2180 阅读 · 0 评论 -
卷积函数的FPGA实现(五)对IPcore进行HLS及bug查找
背景:我们编辑了3x3卷积的IPcore,并完成了预编译。程序通过调用3*3卷积的IPcore实现运行。并通过HLS预编译指令实现为硬件结构,现在我们需要对IPcore程序进行HLS。目的:对卷积IPcore进行HLS目录一、testconvBench编写1.1 linux下用cmake编译运行程序1.2 隐患与BUG1.3 testBench编写 卷积尺寸 卷...原创 2018-12-05 14:47:33 · 5229 阅读 · 1 评论 -
vivado HLS硬件化指令(四)卷积相关的指令优化
目的:搞懂与卷积相关的HLS硬件指令。目录INLINE指令p316UNROLL指令P154 UNROLL停止的判断LATENCY指令 P164FUNCTION_INSTANTIATE P174RESOURCE P178DATAFLOW P157 DATAFLOW运用的限制 DATAFLOW不支持:不是single-producer-...原创 2018-11-28 17:30:51 · 3995 阅读 · 0 评论 -
卷积函数的FPGA实现(三)加入HLS预编译指令
背景:我们编写了卷积操作的IPcore,并且在c代码端模拟通过,现在我们需要实现加入HLS的预编译指令,然后将其实现为硬件结构。目的:加入HLS预编译指令。相关文章:HLS的预编译指令优化到硬件的知识: FPGA基础知识(十)HLS针对循环的操作 https://blog.csdn.net/weixin_36474809/article/details/81479551 FPGA基...原创 2018-11-28 10:45:17 · 2282 阅读 · 0 评论 -
卷积函数的FPGA实现(二)卷积的相乘累加单元的实现
背景:已经实现了卷积操作的权重与数据从DRAM到BRAM上软件的仿真。现在需要实现处理单元的实现。目的:编写卷积IPcore的处理单元。目录一、循环嵌套及子函数的顺序二、processAll_channelOut2.1 函数功能2.2 主程序之中的嵌套三、processInputChannel3.1 函数的实现3.2 程序之中嵌套的位置一、循环嵌套及子函数的...原创 2018-11-27 17:34:33 · 5339 阅读 · 1 评论 -
ZynqNet解析(七)实现于BRAM上的Cache
背景:我们需要仿照ZynqNet的模式构造卷积的IPcore用于FPGA的优化。目的:搞懂zynqNet的cache的实现。相关内容:ZynqNet解析(六)内存的实现 https://blog.csdn.net/weixin_36474809/article/details/83409853MTCNN(十)构建卷积IPcore https://blog.csdn.net/weix...原创 2018-11-08 14:59:27 · 2632 阅读 · 0 评论 -
卷积函数的FPGA实现(一)编写卷积IPcore的BRAM实现
背景:我们将MTCNN的卷积改为了zynqNet需要的嵌套的for循环形式,并且相对看懂了相应的zyqnNet的c代码,现在我们可以直接将卷积模块单独拆分出来构建一个IPcore。目的:构建卷积的IPcoreZynqNet解析(四)FPGA端程序解析 https://blog.csdn.net/weixin_36474809/article/details/82683399ZynqNe...原创 2018-11-05 09:14:33 · 2606 阅读 · 0 评论 -
FPGA实现MTCNN实现公交人头检测项目情况
目录一、原始zynqNet实现步骤二、MTCNN实现步骤2.1 项目进展2.2 软件端2.2.1 python程序更改2.2.2 c端程序的实现2.2.3 卷积的更改2.2.4 openCV库2.3 ARM上进行移植2.2.3 程序更改为FPGA程序2.2.4 虚拟机上运行程序 一、原始zynqNet实现步骤zynqNet项目情况,蓝线已...原创 2018-10-23 14:03:03 · 2333 阅读 · 6 评论 -
ZynqNet解析(六)内存的实现
背景:在zynqNet项目之中,程序到底如何分配DRAM上的地址作为global Memory。以及如何分配相应程序的内存。目录相关内容CPU端的函数与作用FPGA端函数的作用一、CPU端对DRAM的定义1.1 关于DRAM指针的全局变量1.2 定义DRAM指针的函数1.3 定义DRAM底层驱动1.4 具体驱动实现1.4.1 SHARED_DRAM_open...原创 2018-10-28 20:30:28 · 1985 阅读 · 0 评论 -
ZynqNet解析(五)具体硬件实现
背景:ZynqNet能在xilinx的FPGA上实现deep compression。目的:读懂zynqNet的代码中关于硬件实现的部分。目录1. 几个命名空间1.1 选用namespace的原因(4.4.2)1.1.1 软件整体进行HLS1.1.2 object-orinted1.1.3 Block-structured(ZynqNet采用的)1.2 四种cac...原创 2018-09-19 13:17:29 · 1461 阅读 · 0 评论 -
ZynqNet解析(四)FPGA端程序解析
背景:ZynqNet能在xilinx的FPGA上实现deep compression的网络,FPGA端程序运用传入每层数据运算后存在DRAM上。目的:读懂ZynqNet的FPGA端的代码。源码地址:https://github.com/dgschwend/zynqnet目录程序包括:1. 读取每层信息1.1 给所有block设置layer信息1.2 加载权重预加载图像...原创 2018-09-13 14:24:48 · 2021 阅读 · 0 评论 -
ZynqNet解析(三)CPU端程序解析
背景:ZynqNet能在xilinx的FPGA上实现deep compression的网络,目的:读懂ZynqNetCPU端的代码。源码地址:https://github.com/dgschwend/zynqnet目录cpu_top程序包括1 CPU端创建网络1.1 储存网络结构的结构体1.2 创建网络的函数1.3 输出每层信息1.4 构造函数2 FP...原创 2018-09-13 08:55:44 · 1453 阅读 · 3 评论 -
卷积函数的FPGA实现(七)vivado系统集成与烧录
背景:已经输出IPcore为RTL,现在需要将相应的IPcore集成为系统并生成相应驱动。目的:集成IPcore为系统,并生成驱动。参考相关文档:IPcore调用DDR https://blog.csdn.net/weixin_36474809/article/details/84942607ARM调用DDR https://blog.csdn.net/weixin_3647480...原创 2018-12-13 16:20:58 · 2113 阅读 · 0 评论 -
MTCNN的FPGA实现(一)SDK端程序的初步编写
背景:已经将IPcore集成为系统并且可以成功调用,现在我们需要在单片机端编写SDK程序并且调用IPcore进行测试。目的:编写SDK程序调用单片机端IPcore。在不保证正确率的情况下先测试一下大概的帧率。目录一、单次调用IPcore1.1 malloc方式实现内存1.2 关于DDR调用的相关 1.3 调用IPcore1.4 指针偏移值的问题1.5 依然存在的问...原创 2018-12-19 19:23:59 · 2015 阅读 · 1 评论 -
FPGA实践教程(八)PS与PL共享DDR
背景:很多时候需要PS与PL共享DDR作为global memory,例如卷积之中,PS将weight in与feature写入DDR,然后PL调用DDR进行运算,再将结果写入DDR进行下一次迭代。目的:1. PS与PL共享DDR,读和写。并且像卷积一样需要三个指针。2. IPcore设置变量,能通过PS能查看到IPcore运行位置。3. 运用BRAM实现一定的数据搬运。目录一、I...原创 2018-12-24 15:08:03 · 9691 阅读 · 13 评论 -
MIZ7035交叉编译单片机程序运行
背景:在使用SDK因为地址溢出的问题共享DDR受阻之后,我们需要运用SoC来编译相应的调用程序。目的:搭建MIZ7035交叉编译环境并且运行调用IPcore的程序。目录一、交叉编译工具1.1 安装虚拟机1.2 交叉编译工具1.3 使能交叉编译环境二、交叉编译2.1 makefile的更改2.1 root运行三、FPGA运行3.1 连接及挂载u盘3.2...原创 2019-01-17 08:54:53 · 847 阅读 · 0 评论 -
MIZ7035上的AXI接口的MIG测试
目的:运用axi协议从MIG接口调用DDRAXI接口的MIG测试【MIZ7035】目录新建Vivado工程AXI接口的MIG IPPSDDR配置Block DesignSDK 新建Vivado工程 新建工程,点击Next选型xc7z035ffg676-2点击Next,Finish新建BD,点击OK AXI接口的MIG IP...原创 2019-01-22 14:33:28 · 2630 阅读 · 1 评论 -
卷积函数的FPGA实现(九)WBRAM的重新实现
背景:实测IPcore在FPGA上运行时,错误语句集中于get_9_weights_to_buffer之中,极有可能是WBRAM尺寸的设定出现了问题。目的:找出WBRAM尺寸设定的问题,更改代码。前期工作:ZynqNet解析(七)实现于BRAM上的Cache https://blog.csdn.net/weixin_36474809/article/details/83860624...原创 2019-01-09 13:22:49 · 879 阅读 · 1 评论 -
c++编写神经网络(一)MTCNN内存空间的调用
背景:FPGA端程序需要确定的偏移地址,只能有一个指针。我们需要一次性的在DRAM上开辟内存空间然后传给IPcore来运算。所以我们必须从头编写MTCNN的代码。目的:查出原MTCNN代码的内存空间的开辟量。目录一、旧MTCNN的内存实现1.1 每个子网络的构建1.2 mtcnn的构造1.3 权重的内存实现1.4 feature的内存实现1.5 内存实现相关的子函数...原创 2019-01-07 17:16:27 · 1266 阅读 · 0 评论 -
FLOPS与GOPS:各平台及神经网络算力算量调研
目录一、GOPS与FLOPS1.1 FLOPSFLOPS定义FLOPS换算前标的十进制与二进制显卡FLOPS值1.2 GOPS1.3 FLOP与GOPS之间的换算二、常规神经网络算力2.1 AlexNet2.2 ResNet-1522.3 EIE算力2.4 一些层的算力三、FPGA平台上算力评估3.1 zynqNet算力评估3.2 ...原创 2019-01-03 11:43:47 · 37079 阅读 · 17 评论 -
卷积函数的FPGA实现(八)IPcore的BRAM尺寸及加入偏置和ReLU
背景:第一次编写的IPcore存在问题,没有加入偏置与ReLU目的:给IPcore加入偏置和ReLU。 一、最终BRAM尺寸的确定1.1 IBRAM //calculate parameters about IBRAM printf("inWidth = %d, in_ChannelNum = %d \n",inWidth, inChanNum); int input_p...原创 2019-01-07 10:51:24 · 1133 阅读 · 1 评论 -
基于zynq FPGA平台的目标检测网络实现项目汇报与交接
背景:着手深度学习的FPGA实现的项目半年以来,实现了大量工作,现在需要移交项目,所以总结项目所有的情况,以及移交。目录一、项目概览二、python端2.1 MTCNN与训练过程2.2 mAP的测试2.3 网络结构的更改2.4 输出python训练的权重到c代码端python之中的顺序c代码之中的顺序三、c代码端3.1 文件描述程序文件权重文件...原创 2019-01-17 10:16:36 · 4257 阅读 · 17 评论 -
深鉴科技FPGA2017最佳论文ESE Efficient speech recognition engine with sparse LSTM on FPGA论文详解
背景:FPGA2017的最佳论文为深鉴科技的ESE,把稀疏网络的FPGA实现给出了丰富的参考意义。目的:详细解析ESE Efficient speech recognition engine with sparse LSTM on FPGA论文。论文地址:https://arxiv.org/abs/1612.00694目录一、摘要1.1 motivation1.2 贡献点...原创 2019-01-10 14:25:30 · 4996 阅读 · 3 评论 -
韩松博士毕业论文Efficient methods and hardware for deep learning论文详解
论文由三部分构成,也是韩松在博士期间的工作,相关论文与解析见下面:Deep Compression: Compressing Deep Neural Networks with Pruning, Trained Quantization and Huffman coding: https://blog.csdn.net/weixin_36474809/article/details/80...原创 2019-01-03 16:29:21 · 5677 阅读 · 1 评论 -
韩松EIE:Efficient Inference Engine on Compressed Deep Neural Network论文详解
EIE为韩松博士在ISCA 2016上的论文。实现了压缩的稀疏神经网络的硬件加速。与其近似方法的ESE获得了FPGA2017的最佳论文。目录一、背景与介绍1.1 Motivation1.2 前期工作1.3 贡献点二、方法2.1 公式描述 神经网络的基本运算 对于神经元的运算 Deep compression后的公式 查表与值 2.2 矩阵表示(重要)...原创 2018-12-28 19:21:31 · 6980 阅读 · 1 评论 -
卷积IPcore详细报告及进展
目录一、IPcore代码概览1.1 接口1.2 功能1.3 时间与空间资源1.3.1 空间资源1.3.2 时间资源二、IPcore正确性及验证2.1 IPcore在MTCNN之中的调用2.2 IPcore的testBench与c-simulation2.3 synthesis与RTL输出2.4 系统搭建与烧录三、SDK端的调用3.1 初始化IPc...原创 2018-12-27 10:58:38 · 1684 阅读 · 0 评论 -
FPGA实践教程(七)运用IPcore调用DDR
目的:直接运用IPcore调用DDR参考资料:1. Using the DDR memory independently of the Processor:http://zedboard.org/content/using-ddr-memory-independently-processor2. UG873 Chaptet 6中,AXI CDMA core有可能调用DDR3,但实际...原创 2018-12-10 17:26:01 · 3043 阅读 · 3 评论 -
卷积函数的FPGA实现(四)函数接口的HLS
背景:编写好IPcore并且验证通过,但是接口需要进行HLS。目的:将卷积IPcore接口进行HLS,将权重输入输出同步为DRAM的地址,axi-stream协议进行传输数据。将神经网络参数通过axi-lite协议进行传输。参考:用IPcore调用DDR3相关知识 https://blog.csdn.net/weixin_36474809/article/details/810180...原创 2018-12-10 15:43:40 · 4397 阅读 · 4 评论 -
深鉴科技DNNDK概览
背景:深鉴科技的DNNDK,是一个基于xilinx FPGA的SDK端的深度学习开发工具包,能够快速的实现深度学习的硬件化。目的:了解深鉴科技DNNDK内容。参考内容:http://www.deephi.com/technology/dnndkdeephi_dnndk_1.10_beta\docs user Guide目录1.概览1.1 DNNDK基于什么?1.2...原创 2018-09-10 13:11:31 · 8798 阅读 · 9 评论 -
ZynqNet解析(二)运行与调试
背景:ZynqNet能在xilinx的FPGA上实现deep compression目的:运行zynqNet的代码。源码地址:https://github.com/dgschwend/zynqnet目录1. _TRAINED_MODEL2. _FIRMWARE2.1 运行打印结果3._HLS_CODE3.1 C simulation3.2 Synthesis...原创 2018-09-12 15:04:44 · 2063 阅读 · 1 评论 -
ZynqNet解析(一)概览
背景:ZynqNet能在xilinx的FPGA上实现deep compression。目的:读懂zynqNet的代码和论文。目录一、网络所需的运算与存储1.1 运算操作:1.2 Memory requirements:1.3 需求分析:1.4 FPGA based accelerator需要执行:二、网络结构针对网络结构进行了三种优化: FPGA-real...原创 2018-09-11 19:17:40 · 4841 阅读 · 0 评论 -
FPGA实践教程(三)系统搭建与烧录
本文档系列是我在实践将神经网络实现到Xilinx 的zynq的FPGA上遇到的问题和解决方法。背景:我们用vivado HLS对相关软件生成了相应的IP core,现在我们需要将IPcore集成为系统模式,集成为系统才能烧录到FPGA上。目的:用vivado软件搭建相应的系统,生成比特流并烧录入FPGA可以参考文档UG871中Chapter9.10.11中的部分。参考与相关内容:...原创 2018-06-28 14:36:13 · 7624 阅读 · 5 评论 -
Xilinx zynq系列FPGA实现神经网络中相关资源评估
相关内容:深鉴科技DNNDK概览 Xilinx zynq系列FPGA实现神经网络中相关资源评估 目录zynq7000系列概览1.内存占用1.1 FPGA程序中内存的实现方式1.2 zynq的BRAM内存大小1.3.一个卷积操作占用的内存2. PipeCNN可实现性PipeCNN论文解析:用OpenCL实现FPGA上的大型卷积网络加速2.1 已实现的Pi...原创 2018-07-03 11:48:17 · 8352 阅读 · 6 评论 -
调通DMA系统集成中遇到的问题
先写出整个流程,一环一环来找问题所在:整个流程:1.用c语言cnn源码用HLS生成相应的IP core2.在vivado中加入IP core,生成系统3.生成比特流,放入SD卡,烧录入FPGA中4.服务器编译对单片机的Bench程序,并用单片机运行目前最有可能出现问题:一、HLS生成的IP core有问题:方法:1.用HLS和骆工源码生成cnnL和simpleIO,放入系统实验是否出问题。2.直接...原创 2018-06-27 18:16:01 · 989 阅读 · 1 评论 -
FPGA实践教程(四)片上ARM运行程序
本文档系列是我在实践将神经网络实现到Xilinx 的zynq的FPGA上遇到的问题和解决方法。背景:我们用vivado HLS对相关软件生成了相应的IP core,并且对相应的IP core进行系统集成,验证并生成了比特流,并且将其烧录到板子上。目的:FPGA的运行需要片上ARM的控制,所以需要针对片上ARM编写的源码并且需要片上ARM执行源码。本部分介绍如何用服务器编译源码以及如何用FP...原创 2018-06-20 11:02:51 · 4273 阅读 · 2 评论 -
DMA在linux下PS端c语言相关内容
背景:片上单片机与PC通过UART相连并且可以通过PC对片上单片机进行相应的指令操作。片上单片机可以运行相应编译好的c程序,控制相应的IPcore从而用FPGA上的IPcore进行相应的运算。相关c源码通过编译可以变为可执行文件拷入u盘,然后片上单片机可以通过挂载u盘执行可执行文件。目的:读懂程序。程序的目的为:单片机运行简单的卷积操作,单片机控制的IPcore也运行卷积操作,...原创 2018-06-24 20:03:15 · 906 阅读 · 1 评论 -
数据流输入输出IPcore时c语言相关内容
背景:卷积的c程序用于FPGA生成IPcore,其中参数的传输用的stream格式。目的:读懂这个程序相应的单片机程序参考。文档UG902相关内容。DMA在linux下PS端c语言相关内容目录1. template 模板1.1函数模板1.2类模板1.3参数模板1.4模板专门化2.#ifndef,防止重复编译3. iostream4. C++中的&am...原创 2018-06-26 15:35:07 · 669 阅读 · 2 评论 -
FPGA基础知识(四)UG902 RTL仿真与输出
本文是我在学习FPGA时学到的相关知识与总结,希望可以帮助同行理解和掌握相关的FPGA知识。可以将本文档当作相应FPGA教程文档UG902的辅助文档学习。主要内容为文档中关于RTL simulation and export。转载请注明出处。Xilinx原版教程文档参见Xilinx Documentation navigator 中对应UG902:Vivado Design Suite Use...原创 2018-06-08 09:33:41 · 2456 阅读 · 1 评论