HLS Project
文章平均质量分 83
HLS Project
xiongyuqing
看见我请叫我学英语
展开
-
FPGA HLS 卷积神经网络软硬件映射
当卷积核与输入特征相同,stride和padding为0时,卷积核的个数是输出的维度,也就是全连接的输出维度。调用driver里的Load_Weight_From_File函数,加载权重放入fpga里,等待fpag读。将之前的卷积和数据流风格的池化单元IP加到工程里,生成bit流文件对FPGA进行配置。根据输入的数据,对特征的浮点数量化为定点数,需要获取特征的精度范围。把权重的浮点数量化为定点数,需要获取权重的精度范围。将测试图片的文件、生成的权重文件,复制到pynq中。一个负责卷积与Relu。原创 2022-11-06 22:18:15 · 1497 阅读 · 1 评论 -
FPGA HLS 基于stream的池化单元 Vivado电路综合&zynq主机程序
axi-streamdmadma添加HP0AXI_MM2S和AXI_S2MM都连上HP0原因,位宽不匹配,dma的位宽32,但是pool接受的是128更改位宽位128。原创 2022-11-06 22:17:55 · 362 阅读 · 0 评论 -
FPGA HLS 基于stream的池化单元 hls优化&约束
一个高效的DMA作为stream的source,而HLS生成的电路作为stream的sink。此方法与之前的方法相比,优势在于电路外部的DMA工作时可以使用axi-hp的burst与outstanding的特性,总线利用效率比使用HLS工具生成的axi-hp接口的效率高出很多。其次,memcpy函数依旧无法使用AXI-HP中outstanding的特性,对于DDR这类需要预充电的外部存储器而言,其总线利用效率依旧不高。可以用16K的BRAM来实现,从对寄存器的读和写,变为对地址的读和写。原创 2022-11-06 17:01:25 · 1288 阅读 · 0 评论 -
FPGA HLS stream与dataflow
这是因为没有深度约束,深度默认为1,但是这是数据流风格的,所以可以写一个数据,取一个数据,模块依然可以正常工作。这里的模块是等两个送一个,所以把之前的10000深度,设置为4也可以,不耗费啥资源。也就是说我们stream_tmp的长度不够,因为我们需要写两个数据,取一个数据。但是这是不合理的,中间的流很长,但是我们只需要每取两个数据,计算一次写一次数据。那么中间流的16的深度就不够用,需要设置为10000。part1的波形图,确实是读一个写一 个。就算去掉深度的约束,C综合结果也可以过。原创 2022-11-06 11:25:40 · 1735 阅读 · 0 评论 -
FPGA HLS 卷积单元 vivado电路综合与zynq主机测试
给函数参数添加axilite控制端口 Export RTL 生成IP核 新建Vivado工程,导入IP核 开两个HP口用于控制和数据的传输:控制端口AXILite AXI_F和AXI_W用HP口相连,注意要选new AXI Inerconnect:包装,生成product,然后生成bit流文件 zynq 主机程序原创 2022-11-05 22:43:06 · 646 阅读 · 1 评论 -
FPGA HLS 卷积单元 数据类型&hls优化&约束设置
自定义精度整形:为了替换float,double类型的数,加快运算,节约资源根据输入的数据,找到卷积层的数据范围自定义卷积特征的内存排布方式权重的内存排布方式卷积的大小不固定,需要根据在内存中的排布方式算出地址新建conv_core项目conv_core.cppmain.cpp运行C仿真结果:C综合:出错了,需要加约束。报错信息:输入特征feature_in是没有固定长度的但是我们只是把input_feature当作基地址,而不是数组,所以需要告诉工具,数据来自外部存储器再次C综合:?原创 2022-11-05 20:59:34 · 1607 阅读 · 0 评论 -
FPGA HLS Matrix_MUL 矩阵乘法 AXI-lite接口&Vivado电路综合&zynq主机程序
FPGA的板子上,例如zynq或者pynq上有一块ARM硬核,这个板子就称为SOC(system on chip,片上系统);我们想让ARM控制我们的模块,控制数据的传输和控制信号等等。就需要将数据的接口和模块IP的接口设置乘AXI接口。原创 2022-11-04 19:36:05 · 1292 阅读 · 0 评论 -
FPGA HLS Matrix_MUL 矩阵乘法的计算与优化
端口信息,ABC数组默认存在存储器ap_memory中,以下ap_clk、ap_rst、ap_start、ap_done、ap_idle、ap_ready都是控制信号。使用C++完成testbench,同样地,C语言可以编译为对应的激励,驱动上一步骤完成的电路模块。vivado工具比较保守,计算需要的延迟是14,实际优化可以在10,设置大一点,优化的计算更多,一般约束设置大一点在30-50。C++代码综合成RTL逻辑,生成综合报告,包括时序,延时,资源占用,端口信息等。重定义数组在存储器中的排列方式。原创 2022-11-01 21:33:09 · 3454 阅读 · 1 评论