老白的白

tech blogs in Zhihu

View on GitHub

神经网络的FPGA实现之坑二: MATLAB HDL Coder

新版MATLAB有个隐藏关卡,可以使用HDL Coder生成Altera Arria 10 SoC Development Kit的DDR4接口,然后MATLAB可以作为AXI4的master来对DDR4 SDRAM进行读写操作。

所需Hardware Support Package:

  1. HDL Coder Support Package for Intel FPGA Boards
  2. HDL Verifier Support Package for Intel FPGA Boards

根据参考【1】,走流程(此处仅大致介绍)

这是因为此函数针对目标为Xilinx器件,需要我们手动改成针对Altera的,拷贝函数源文件至本地,将22行的Xilinx改为Altera,运行!然鹅我们会看到以下画面

不用慌张,我们可以自己验证DDR4的读写是否正确,先使用命令 h = aximaster(‘Altera’) 创建一个AXI master的对象,然后使用函数writememory和readmemory来写和读内存信息

例如往地址0写入值100,» writememory(h, 0, 100),再读地址0,» readmemory(h, 0,1)

备注:如果无法运行最后一步烧写FPGA的话,八成是sof文件没有生成,可用Quartus打开工程文件自己生成bit文件,并烧写。或者使用MATLAB的命令 filProgramFPGA(‘Altera Quartus II’,’quartus_prj\system.sof’,1) 来烧写

讨论:

  1. 关于为何需要设置Asynchronous reset,这是由于Altera家FPGA的结构与Xilinx的不同,后者的reset使用会占用设计资源,而async reset会消耗更多的设计资源,这也是为什么Xilinx推崇不要使用reset,万一需要使用local reset而不是global reset的原因,且最好使用sync reset,而Altera的FPGA则不同,async和sync并不会影响所消耗的资源,而其DSP的mapping需要async reset来map流水线寄存器。至于为什么会有这样的架构,欢迎大家一起来探讨。
  2. 关于MATLAB这个External Memory Access例程的好处,使用这样的架构可以快速生成可以使用的接口,加速验证框架和算法的正确性。此例展示了计算矩阵和向量的乘法的算法,可以很容易的替换成其他算法来仿真验证,缩短开发周期。

参考:

  1. Performing Large Matrix Operation on FPGA using External Memory
  2. Access FPGA External Memory using MATLAB as AXI Master

back