使用AXI CDMA制作FPGA AI加速器通道

介绍
使用 amd-xilinx fpga设计一个全连接dnn核心现在比较容易(vitis ai),但是利用这个核心在 dnn 计算中使用它是另一回事。本项目主要是设计ai加速器,利用xilinx的cdma加载权重,输入到pl区的block ram。
原理框图
首先,我们创建了整个系统的示意图。有两个 block raw 分别用于存储输入特征和权重数据。每个block ram 都连接到一个 cdma ,允许 dram 访问 bram。每个 block ram 还连接到由 8 个 fcn 内核和 fsm 组成的主加速器,控制内核的操作。
完整的激活顺序如下:
在 ddr 内存中存储特征和权重。
使用cdma 将这些数据分别发送到block ram1 和block ram2。
向 fc core 发送 activate 信号,进行 fcn 计算。
将结果存储在 blcok ram 中。
重复此过程,直到完成第一层前向传播。
重复整个过程,将输入链接到存储在block ram 中的结果。
码分多址
为了直接访问内存,我们使用了 cdma。可以在xiinx 网站上参考 xilinx turoial(https://www.xilinx.com/support/university/vivado/vivado-workshops/vivado-adv-embedded-design-zynq.html)。
首先,配置处理器启用 s_axi_hp0 接口。
二、添加cdma和bram模块。vivado 通过 run connection automation 将 cdma 和 bram 连接到处理器。那么设计应该类似于下图。
加速器ip
加速器 ip 由 4 个源文件组成。
加速器:连接 axi4-lite 模块和 bram_to_fc 模块。
axi4-lite :它执行 axi4-lite 接口将结果值从 pl 传输到 ps。并将 fsm 信号传输到 bram_to_fc 模块。
bram_to_fc :它从 bram0、bram1 接收特征图和权重,并将它们发送到 sumproduct_core。
sumproduct_core :它使用 8 位输入执行 sumproduct 计算。并返回 32 位输出。
创建 axi4 外设来制作 axi4-lite 模板。接口类型是lite版,制作 10 个寄存器。然后修改模板来制作 axi4-lite 模块。
添加以上 4 个 verilog 文件来生成加速器 ip。
vivado block设计
然后我们使用 vivado block digram 工具构建整个设计。我们使用具有 64 位数据宽度的双端口 bram 来最大化系统的效率。
在地址编辑器中,将 axi_bram_ctrl 范围从 8k 更改为 64k。
测试
在 fpga 板卡上测试了我们的加速器,将硬件导出到 vitis,为了测试我们的加速器性能,我们比较了软件和硬件之间的相同任务运行时间。
hw运行时间:数据发送时间+hw计算时间+数据接收时间
sw runtime : sw计算时间
1. 使用 cdma 将特征图和权重从 ddr3 传输到 bram。
//transfer feauture map from ddr3 to bram0xaxicdma_intrenable(&xcdma, xaxicdma_xr_irq_all_mask);status = xaxicdma_simpletransfer(&xcdma, (u32)source_0, (u32) cdma_memory_destination_0, numofbytes, example_callback, (void *) &xcdma);//transfer weight from ddr3 to bram1xaxicdma_intrenable(&xcdma, xaxicdma_xr_irq_all_mask);status = xaxicdma_simpletransfer(&xcdma, (u32)source_1, (u32) cdma_memory_destination_1, numofbytes, example_callback, (void *) &xcdma);  
2. 发送 fsm 运行信号和要传输的输入数量。
xil_out32((xpar_accelerator_0_baseaddr) + (ctrl_reg*4), (u32)(numofbytes | 0x80000000));  
3. 检查硬件计算结果。
ot_rslt_hw[0] = xil_in64((xpar_accelerator_0_baseaddr) + (result_0_reg*axi_data_byte));ot_rslt_hw[1] = xil_in32((xpar_accelerator_0_baseaddr) + (result_1_reg*axi_data_byte));ot_rslt_hw[2] = xil_in32((xpar_accelerator_0_baseaddr) + (result_2_reg*axi_data_byte));ot_rslt_hw[3] = xil_in32((xpar_accelerator_0_baseaddr) + (result_3_reg*axi_data_byte));ot_rslt_hw[4] = xil_in32((xpar_accelerator_0_baseaddr) + (result_4_reg*axi_data_byte));ot_rslt_hw[5] = xil_in32((xpar_accelerator_0_baseaddr) + (result_5_reg*axi_data_byte));ot_rslt_hw[6] = xil_in32((xpar_accelerator_0_baseaddr) + (result_6_reg*axi_data_byte));ot_rslt_hw[7] = xil_in32((xpar_accelerator_0_baseaddr) + (result_7_reg*axi_data_byte));for (ii=0; ii<8; ii++){       printf(%d , ot_rslt_hw[ii]);          }  
4. 检查sw计算结果。
可以在下面看到测试结果。
正如在这个结果中看到的那样,我们加速器的使用时间(11.40+13.44+4.71 us)比在 ps 区域(104.99 us)上要少得多。
代码
https://github.com/hyunho-won/cdma_accelerator


联想Z5和小米6X哪个好
耐压绝缘测试仪如何避免误判
SD-WAN技术助力企业实现高效异地组网
身份验证新领域即是物联网安全硬件的基础
热释电红外传感器工作原理及结构说明
使用AXI CDMA制作FPGA AI加速器通道
城域网由什么组成
8月 2020宝安产业发展博览会(”宝博会“)来了
华为将重磅发布六大创新技术和产品
Cloudera新开源许可模式为CDP未来发展提供原动力
力芯微科创板IPO过会引争议?
电磁屏蔽体设计原则及原理分析
甲机通过串口来控制乙机发送的数字显示在数码管上
鸿海将与台大农学院合盖LED植物工厂
双面板制作流程及镀金、喷锡和FPC板流程图解
柔性制造的主要特征及技术优点
超声波端子金属焊接机焊接的优点是什么
针对线性回归模型和深度学习模型,介绍了确定训练数据集规模的方法
华为麦芒7发布,搭配麒麟710处理器
LG上架电竞显示器产品,支持144Hz刷新率,配备27英寸IPS面板