2021-08-22 18:09:47 索炜达电子 917
项目编号:E445
文件大小:1.8M
源码说明:带中文注释
开发环境:Verilog
简要概述:
重点是FPGA上的卷积网络推理加速。
该项目采用ISE 14.7软件和vertix-7 FPGA构建。它使用某些加速策略执行7层网络正向计算。首先,使用MatConvNet在MSTAR数据集上训练SAR目标分类网络,并使用早期停止。然后,使用Matlab生成的COE文件将权重和输入转换为FPGA。接下来,设计本地verilog编写的模型来实现正向计算。系统使用16位定点数据来保持精度。结果证明,它的成本低于每幅图像1ms,优于其他计算平台。
加快
为了在FPGA资源和速度之间进行权衡,第一转换层使用移位寄存器结构进行加速,考虑到第一转换层中的输入和权重的大小更大。其他转换层仅使用管线结构。请注意,有18个文件以m_conv_1命名,表示第一个conv.层中有18个移位寄存器。
由于带宽的限制,第二转换层采用信道分组并行化方案。我使用v7-415t和v7-485t FPGA进行比较,它们根据不同的资源量使用不同的组号(4对1)。您可能会注意到文件CNN_top.v中的方案,其中的信号“ram_ready”控制通道分组和合并。
目录│文件列表:
└ convolution_network_on_FPGA
├ v7-415t_0.5ms
│ │ clk_div.v
│ │ CNN_top.v
│ │ conv_adder18.v
│ │ conv_adder36.v
│ │ k2_out.v
│ │ k3_out.v
│ │ max_output.v
│ │ m_conv_1_1.v
│ │ m_conv_1_10.v
│ │ m_conv_1_11.v
│ │ m_conv_1_12.v
│ │ m_conv_1_13.v
│ │ m_conv_1_14.v
│ │ m_conv_1_15.v
│ │ m_conv_1_16.v
│ │ m_conv_1_17.v
│ │ m_conv_1_18.v
│ │ m_conv_1_2.v
│ │ m_conv_1_3.v
│ │ m_conv_1_4.v
│ │ m_conv_1_5.v
│ │ m_conv_1_6.v
│ │ m_conv_1_7.v
│ │ m_conv_1_8.v
│ │ m_conv_1_9.v
│ │ m_conv_3.v
│ │ m_conv_5.v
│ │ m_fc.v
│ │ m_layer_input_0.v
│ │ m_layer_input_1.v
│ │ m_layer_input_2.v
│ │ m_layer_input_3.v
│ │ m_layer_input_4.v
│ │ m_layer_input_5.v
│ │ m_max_relu_2.v
│ │ m_max_relu_4.v
│ └ tb.v
├ v7-485t_0.3ms
│ │ clk_div.v
│ │ CNN_top.v
│ │ conv_adder18.v
│ │ conv_adder36.v
│ │ k2_out.v
│ │ k3_out.v
│ │ max_output.v
│ │ m_conv_1_1.v
│ │ m_conv_1_10.v
│ │ m_conv_1_11.v
│ │ m_conv_1_12.v
│ │ m_conv_1_13.v
│ │ m_conv_1_14.v
│ │ m_conv_1_15.v
│ │ m_conv_1_16.v
│ │ m_conv_1_17.v
│ │ m_conv_1_18.v
│ │ m_conv_1_2.v
│ │ m_conv_1_3.v
│ │ m_conv_1_4.v
│ │ m_conv_1_5.v
│ │ m_conv_1_6.v
│ │ m_conv_1_7.v
│ │ m_conv_1_8.v
│ │ m_conv_1_9.v
│ │ m_conv_3.v
│ │ m_conv_5.v
│ │ m_fc.v
│ │ m_layer_input_0.v
│ │ m_layer_input_1.v
│ │ m_layer_input_2.v
│ │ m_layer_input_3.v
│ │ m_layer_input_4.v
│ │ m_layer_input_5.v
│ │ m_max_relu_2.v
│ │ m_max_relu_4.v
│ └ tb.v
└ validation_with_matlab
│ conv_ff.m
│ fc.coe
│ generate_fc.m
│ generate_k1.m
│ generate_k2.m
│ generate_k3.m
│ hb03417-2.jpeg
│ hb03440-5.jpeg
│ hb14939-7.jpeg
│ hb14969-1.jpeg
│ hb14975-9.jpeg
│ hb15043-7.jpeg
│ image.coe
│ image_coe.m
│ imrecog.m
│ ind_conv2_in.coe
│ ind_conv_in.coe
│ ind_layer2.coe
│ ind_out.m
│ lianghua_16.m
│ m_conv2.m
│ m_maxpool.m
│ m_relu.m
│ m_softmax.m
│ net-epoch-73.mat
│ testbench.m
│ vectorize.m
│ vectorize2.m
├ k2
│ │ kernel2_1.coe
│ │ kernel2_10.coe
│ │ kernel2_11.coe
│ │ kernel2_12.coe
│ │ kernel2_13.coe
│ │ kernel2_14.coe
│ │ kernel2_15.coe
│ │ kernel2_16.coe
│ │ kernel2_17.coe
│ │ kernel2_18.coe
│ │ kernel2_2.coe
│ │ kernel2_3.coe
│ │ kernel2_4.coe
│ │ kernel2_5.coe
│ │ kernel2_6.coe
│ │ kernel2_7.coe
│ │ kernel2_8.coe
│ └ kernel2_9.coe
└ k3
│ kernel3_1.coe
│ kernel3_10.coe
│ kernel3_11.coe
│ kernel3_12.coe
│ kernel3_13.coe
│ kernel3_14.coe
│ kernel3_15.coe
│ kernel3_16.coe
│ kernel3_17.coe
│ kernel3_18.coe
│ kernel3_19.coe
│ kernel3_2.coe
│ kernel3_20.coe
│ kernel3_21.coe
│ kernel3_22.coe
│ kernel3_23.coe
│ kernel3_24.coe
│ kernel3_25.coe
│ kernel3_26.coe
│ kernel3_27.coe
│ kernel3_28.coe
│ kernel3_29.coe
│ kernel3_3.coe
│ kernel3_30.coe
│ kernel3_31.coe
│ kernel3_32.coe
│ kernel3_33.coe
│ kernel3_34.coe
│ kernel3_35.coe
│ kernel3_36.coe
│ kernel3_4.coe
│ kernel3_5.coe
│ kernel3_6.coe
│ kernel3_7.coe
│ kernel3_8.coe
└ kernel3_9.coe