主要内容

使用基于以太网的MATLAB AXI Master在FPGA外部DDR内存上执行大矩阵乘法

本示例展示如何使用基于以太网的MATLAB®AXI master访问连接到FPGA的外部内存。这个例子还展示了如何:

  1. 生成带有接口的HDL IP核。

  2. 使用基于以太网的MATLAB AXI主接口从Xilinx®Kintex®-7 KC705板上的外部DDR3存储器访问大型矩阵。

  3. 在HDL IP核中执行矩阵向量乘法,并使用基于以太网的MATLAB AXI4主接口将输出结果写回DDR3内存。

需求

要运行此示例,必须安装并设置此软件和硬件。

  • Xilinx Vivado®设计套件,支持的版本列在金宝app金宝app支持EDA工具和硬件

  • Xilinx Kintex-7 KC705评估试剂盒

  • 连接KC705 FPGA的JTAG线缆和以太网线

  • Xilinx FPGA金宝app板的HDL Coder™支持包

  • 用于Xilinx FPGA板金宝app的HDL验证器™支持包

简介

本示例模拟了矩阵向量乘法算法,并在Xilinx Kintex-7 KC705板上实现了该算法。大型矩阵可能无法有效地映射到FPGA结构上的块ram。将矩阵存储在FPGA板上的外部DDR3存储器中。基于以太网的MATLAB AXI主接口可以通过与供应商提供的与DDR3存储器接口的内存接口IP核通信来访问数据。此功能使您能够对涉及大型数据处理并需要高吞吐量DDR访问的算法建模,例如矩阵运算和计算机视觉算法。

矩阵向量乘法模块支持定点矩阵向量乘法,可配置矩阵大小从2到4000。金宝app矩阵的大小可以通过AXI4可访问寄存器在运行时配置。

在MATLAB命令提示符中输入以下命令打开模型。

modelname =“hdlcoder_external_memory_axi_master”;open_system (modelname);

模型算法

这个例子模型包括一个FPGA可实现设计测试(DUT)块,一个DDR功能行为块,以及驱动输入和验证预期输出的测试环境。

DUT子系统包含一个AXI4主读写控制器和一个矩阵向量乘法模块。使用AXI4 Master接口,DUT子系统从外部DDR3存储器中读取数据,并将数据送入Matrix_Vector_Multiplication模块,然后使用基于以太网的MATLAB AXI主接口将输出数据写入外部DDR3存储器。的DUT模块有几个参数端口。这些端口被映射到AXI4可访问寄存器,因此即使在FPGA上实现设计之后,也可以从MATLAB调整这些参数。

matrix_mul_on端口控制是否运行Matrix_Vector_Multiplication模块。当输入为matrix_mul_on是真的,DUT子系统执行矩阵向量乘法,如本例前面所述。当输入为matrix_mul_on是假的,DUT子系统执行数据回环模式。在此模式下,DUT子系统从外部DDR3存储器中读取数据,并将其写入Internal_Memory模块,然后将相同的数据写回外部DDR3内存。数据回环模式是验证AXI4 Master外部DDR3内存访问功能的一种方法。

同样在DUT子系统,Matrix_Vector_Multiplication模块使用一个乘法-加法块来实现矩阵向量乘法的内积的流点积计算。

如果A是一个大小为n × n的矩阵,B是一个大小为n × 1的向量,那么矩阵向量乘法的输出是Z = A x B,大小为n × 1

DDR的前N个值被视为N × 1大小的向量,然后是N × N大小的矩阵数据。前N个值(矢量数据)存储到RAM中。从N+1个值开始,数据直接流化为矩阵数据。向量数据从Vector_RAM并行执行。矩阵和矢量输入都输入到Matrix_mul_top子系统。第一个矩阵输出在N个时钟周期后可用,并存储在输出RAM中。同样,向量RAM读取地址被重新初始化为0,并开始读取与新矩阵流对应的相同向量数据。对矩阵的所有行重复此操作。

这个图表显示了Matrix_Vector_Multiplication模块。

用基于以太网的MATLAB AXI Master生成HDL IP核

启动HDL Workflow Advisor并使用IP Core Generation工作流将此设计部署到Xilinx Kintex-7硬件上。

1.通过在MATLAB命令提示符中输入这个命令来设置Xilinx Vivado合成工具路径。运行该命令时,请使用自己的Vivado安装路径。

hdlsetuptoolpath (“ToolName”“Xilinx Vivado”“路径”“C: \ Xilinx \ Vivado \ 2020.1 \ bin \ vivado.bat '

2.从DUT子系统启动HDL Workflow Advisorhdlcoder_external_memory_axi_master / DUT.目标接口设置保存在模型上。在步骤1.1中,目标工作流为IP Core Generation工作流,目标平台为Xilinx Kintex-7 KC705开发板。

3.在步骤1.2中选择参考设计作为外部DDR3内存访问与以太网基于MATLAB作为AXI Master

4.检查目标平台接口表设置。

在本例中,输入参数端口,如matrix_mul_onmatrix_sizeburst_lenburst_from_ddr,突然开始,都映射到AXI4接口。HDL Coder产品为这些端口生成AXI4接口可访问寄存器。当设计在FPGA板上运行时,可以使用MATLAB在运行时调优这些参数。

基于以太网的MATLAB AXI主接口具有独立的读写通道。读取通道端口,如axim_rd_dataaxim_rd_s2m,axim_rd_m2s,都映射到AXI4主读接口。写通道端口,如axim_wr_dataaxim_wr_s2m,axim_wr_m2s,都映射到AXI4主写接口。

5.右键单击步骤3.2,生成RTL代码和IP核,并选择运行到选定任务来生成IP核。您可以在生成的IP核报告中找到IP核的寄存器地址映射和其他文档。

6.右键单击步骤4.1,创建项目,并选择运行此任务来生成Vivado项目。在项目创建过程中,将生成的DUT IP核集成到基于MATLAB的基于以太网的DDR3外部内存访问中作为AXI Master参考设计。该参考设计包括一个Xilinx内存接口生成器(MIG) IP,用于与KC705平台上的板载外部DDR3存储器通信。还添加了MATLAB作为AXI主IP,使MATLAB能够控制DUT IP并初始化和验证DDR内存内容。

你可以通过点击结果窗口中的项目链接来查看生成的Vivado项目,并检查设计。

基于以太网的MATLAB AXI主IP的默认目标IP地址为192.168.0.2,默认UDP端口值为50101。控件可以更改这些值ethernet_mac_hubIP在Vivado块设计。

7.右键单击步骤4.3,程序目标设备,并选择运行到选定任务生成比特流并对设备进行编程。

在Kintex-7硬件上运行FPGA实现

运行FPGA实现,并在MATLAB中运行该脚本验证硬件结果。

hdlcoder_external_memory_axi_master_hw_run

该脚本首先初始化Matrix_Size到500,也就是500 × 500矩阵。你可以调整Matrix_Size高达4000。

然后,脚本配置AXI4 Master读写通道基址。这些地址定义了DUT从外部DDR内存读取和写入的基址。在这个脚本中,DUT从基地地址'40000000'读取并写入基地地址'50000000'。

利用MATLAB AXI master特性,用输入矢量和矩阵数据初始化外部DDR3存储器,并清除输出DDR存储器位置。

DUT计算通过控制AXI4可访问寄存器开始。DUT IP核从DDR内存读取输入数据,执行矩阵向量乘法,然后将结果写回DDR内存。

最后将输出结果读回MATLAB,并与预测值进行比较。在MATLAB中对硬件结果进行了验证。

相关的话题