【E445】用VerilogHDL在Virtex-7 FPGA上实现CNN加速

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

TAGCNN加速
  • 10 次
  • 1 分