本示例展示如何使用基于以太网的MATLAB®AXI master访问连接到FPGA的外部内存。这个例子还展示了如何:
生成带有接口的HDL IP核。
使用基于以太网的MATLAB AXI主接口从Xilinx®Kintex®-7 KC705板上的外部DDR3存储器访问大型矩阵。
在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
模块。
启动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_on,matrix_size,burst_len,burst_from_ddr,突然开始,都映射到AXI4
接口。HDL Coder产品为这些端口生成AXI4接口可访问寄存器。当设计在FPGA板上运行时,可以使用MATLAB在运行时调优这些参数。
基于以太网的MATLAB AXI主接口具有独立的读写通道。读取通道端口,如axim_rd_data,axim_rd_s2m,axim_rd_m2s,都映射到AXI4主读
接口。写通道端口,如axim_wr_data,axim_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_hub
IP在Vivado块设计。
7.右键单击步骤4.3,程序目标设备,并选择运行到选定任务生成比特流并对设备进行编程。
运行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中对硬件结果进行了验证。