一、背景概述
本实验在之前两篇文章的基础上设计的MATLAB与FPGA联合仿真平台设计,主要用于在MATLAB于FPGA之前提供收发数据的通道。该实验的应用背景为极化码的编译码流程,极化码的编译码的仿真流程如下:
本实验将把极化码的编译码器放在FPGA上进行实现,其余仿真步骤都将在MATLAB上进行。其中编码器采用Xilinx官方提供的ip核,可在其官网进行申请,连接如下,由于本实验所用开发板资源有限,因此译码器采用FIFO IP核进行替代
根据上文所述,本实验所设计的联合仿真平台如下图所示:
实际上,在上一篇讲述DMA的文章中的SG DMA环通实验便是基于一个完整的数据收发通道,但重点放在了DMA的学习及应用上。本次实验在上文的基础上增加了一条数据链路,对其所涉及的PL、PS及MATLAB端的更改将在下文分别叙述
二、MATLAB与FPGA联合仿真
硬件环境搭建
在之前实验的基础上进行扩展,其中FPGA硬件实现的结构图如下所示:
该图仅为译码器的数据链路,关于编码器(FIFO)的数据链路基本相同包括其各个控制、数据通路因此仅利用编码器的链路进行说明。AXI互联模块(AXI Interconnect) 是一种用于连接和管理AXI总线设备的IP核。在FPGA和SoC设计中,AXI Interconnect常用于构建多个AXI总线设备之间的连接,实现数据的传输和交换。DMA部分在上一篇文章中有过详细介绍。图中FPGA端硬件结构可以 大致分为以下几个部分:
- ARM对DMA及FPGA编、译码器的控制链路
紫色连线所示,ZYNQ处理器通过AXI_GP接口连接到DMA与FPGA编、译码器的AXI_LITE接口,读写DMA和FPGA编、译码器内部寄存器。
- DMA对DDR的数据通路
红色虚线所示,DMA通过M_AXI接口(MM2S与S2MM)连接到AXI互联模块的S_AXI接口,再通过互联模块的M00_AXI接口连接到ZYNQ的AXI_HP接口,从而实现DMA对DDR中数据的读写
- DMA对FPGA编译码器的数据通路
蓝色实线所示,DMA通过MM2S与S2MM端口与FPGA编译码器直连来实现对其的数据读写
软件设计
本次实验 对于主函数及涉及DMA部分的代码与之前的并无二致,因此本节仅记录关于ARM端LwIP开发所不同之处及针对该实验的应用背景做出的适应性调整。
首先,该实验是基于LwIP协议进行UDP服务器的开发。Xilinx支持两种操作模式的LwIP API:(1)底层的基于回调(callback)的RAW API;(2)高层顺序模型的SOCKET API。本设计采用的是RAW API,它的最大特点是较低的资源开销以及较低的延迟与更高的吞吐量,适用于对实时性和性能要求较高的应用场景。本文设置板级操作系统(Board Support Package OS)为standalone。LwIP库的主要参数配置如下表所示:
参数名 |
说明 |
推荐值 |
api_mode |
LwIP库的操作模式 |
RAW_API |
mem _size |
可用堆内存的总大小(字节) |
131072 |
memp_n_pbuf |
memp结构的pbuf数量 |
16 |
pbuf_pool_size |
pbuf池中的缓冲区数目 |
2048 |
pbuf_pool_bufsize |
Pbuf每个缓冲区的大小 |
2000 |
ARM端UDP服务器的代码流程如下所示: