ZYNQ PS与PL通信之DMA

​ 在zynq开发中,PS与PL通信是非常关键的内容,掌握了PS与PL通信方法,就可以搭建各种常用的硬件平台。本文先介绍集中PL与PS的通信方法,然后重点介绍通过DMA实现PS与PL通信。

PL与PS通信方法

PL与PS通信通常有如下四种方法:

  • 使用AXI GPIO
  • 使用BRAM
  • 使用DMA
  • 使用VDMA

DMA硬件平台

DMA通常与axis stream data fifo一起使用,下图为使用DMA时的硬件平台,axis stream data fifo接口的S_AXIS、s_axis_aclk和s_axis_aresetn通过引脚,连接到PL。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jIITJ3dM-1660131734775)(./pic/1.png)]

axis stream data fifo信号如下:

.S_AXIS_tdata(S_AXIS_tdata),
.S_AXIS_tkeep(S_AXIS_tkeep),
.S_AXIS_tlast(S_AXIS_tlast),
.S_AXIS_tready(S_AXIS_tready),
.S_AXIS_tvalid(S_AXIS_tvalid),
.s_axis_aclk(s_axis_aclk),
.s_axis_aresetn(s_axis_aresetn)

控制axis stream data fifo

PL端编写逻辑代码,将测试数据写入axis stream data fifo,可以通过vio控制,每次写入特定数据,例如S_AXIS_tdata为64bit,每次写入128个64bit。

写入时序

往axis stream data fifo中写入64’h0807060504030201,写入128个数据后,将S_AXIS_tlast置1后,完成一次发送。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EgbmQKui-1660131734777)(./pic/2.png)]

axi总线时序

axis stream data fifo接收完成一帧数据后,将数据发送到DMA,观察DMA输出到PS的axi总线信号,先发送地址,后发送数据。

地址通道:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-es3vZOuV-1660131734778)(./pic/4.png)]

数据通道:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JTm5R828-1660131734779)(./pic/5.png)]

DMA

DMA可以在system memory和stream target之间进行数据交换。

MM2S channel

从PS DDR输出到DMA,DMA通过axi stream接口输出数据。

**S2MM channel **

从axi stream接口输入到DMA,PS读DMA数据存入DDR。本次设计使用S2MM。

DMA控制流程

PS软件控制DMA流程如下:

S2MM channel 通道:

1、设置S2MM通道,S2MM.DMACR.RS = 1,DMASR.Halted = 0;

2、使能中断,S2MM_DMACR.IOC_IrqEn = 1,S2MM_DMACR.Err_IrqEn = 1。

3、写入目的地址到S2MM_DA寄存器。假如地址空间大于32,需要配置S2MM_DA MSB寄存器。

4、配置Re-Alignment。

5、将要接收字节数,最后写入S2MM_LENGTH寄存器.。

DMA软件设计

使用XAxiDma_SimpleTransfer函数接收数据。

传输方向

else if(Direction == XAXIDMA_DEVICE_TO_DMA)  //S2MM进入这个判断中

主要寄存器配置

XAxiDma_WriteReg(InstancePtr->RxBdRing[RingIndex].ChanBase,
				XAXIDMA_DESTADDR_OFFSET, LOWER_32_BITS(BuffAddr));//写入将存储数据地址
XAxiDma_WriteReg(InstancePtr->RxBdRing[RingIndex].ChanBase,
                XAXIDMA_CR_OFFSET,
                XAxiDma_ReadReg(InstancePtr->RxBdRing[RingIndex].ChanBase,
                XAXIDMA_CR_OFFSET)| XAXIDMA_CR_RUNSTOP_MASK);	//设置控制寄存器	
XAxiDma_WriteReg(InstancePtr->RxBdRing[RingIndex].ChanBase,     //设置MM2S_LENGTH寄存器
					XAXIDMA_BUFFLEN_OFFSET, Length);                

将64‘0807060504030203写入内存后:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tRL3Mg0K-1660131734780)(./pic/3.png)]

写入多组数据

如果要进行多包数据传输时,每包发送1024bytes,每次调用XAxiDma_SimpleTransfer时,将RxBufferPtr地址加1024,直到传输完成所有包,DDR中的数据会按地址顺序排列。

Status = XAxiDma_SimpleTransfer(&AxiDma,(UINTPTR)RxBufferPtr,(u32)(MAX_PKT_LEN), XAXIDMA_DEVICE_TO_DMA);
  • 1
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
### 回答1: Zynq是一款Xilinx公司的片上系统(SoC),它将传统的处理系统(PS,即Processing System)和可编程逻辑(PL,即Programmable Logic)集成在一起。PSPL之间的通信是通过DMA(Direct Memory Access)实现的。 DMA是一种高效的数据传输方式,它可以在不经过处理器的情况下直接将数据从一个设备传输到另一个设备的内存中。在Zynq中,DMA控制器可以在PSPL之间进行数据传输,以实现高速的数据交换。 在使用ZynqPSPL之间进行通信时,首先需要在PL中实例化一个DMA控制器,并将其配置为与PS内存进行交互。然后,在PS中通过相应的软件驱动程序或API接口配置和控制DMA控制器。通过设置合适的寄存器和缓冲区,可以实现从PSPL的数据传输或从PLPS的数据传输,以及在传输过程中的中断处理。 PSPL之间的DMA通信可以实现快速的数据交换,因为数据可以直接在PL中进行处理,无需经过PS的干预。这对于需要高速数据处理的应用非常有用,比如图像处理、信号处理等。 需要注意的是,使用DMA进行PSPL之间的通信需要合理地配置和管理DMA控制器的缓冲区和寄存器,以及在PSPL之间的数据传输过程中进行正确的同步和互斥操作,以避免数据冲突和错误。 总之,Zynq PSPL之间的通信使用DMA可以实现高速的数据传输和处理,为嵌入式应用带来了更大的灵活性和高效性。 ### 回答2: Zynq系统中的PS(Processing System)与PL(Programmable Logic)之间的通信可以通过DMA(Direct Memory Access)实现。 DMA是一种特殊的数据传输机制,它可以在不需要CPU的干预下,在内存和外设之间直接传输数据。在Zynq系统中,PSPL之间的DMA通信可以通过AXI(Advanced eXtensible Interface)总线实现。 首先,在Zynq系统中,PS可以使用AXI DMA控制器来设置数据传输的源地址、目的地址、传输长度等参数。这些参数可以通过PS的程序来配置。 然后,在PL中,我们可以使用AXI接口来设计自定义的IP(Intellectual Property)核,该IP核可以与AXI DMA进行通信。这个IP核可以通过PL开发工具进行开发和配置。 接下来,通过适当的设计和配置,我们可以在PL中连接AXI DMA核和其他IP核,以实现PSPL之间的数据传输。例如,我们可以将一个读取数据的IP核连接到AXI DMA的输入端口,将一个写入数据的IP核连接到AXI DMA的输出端口。这样,当AXI DMA启动数据传输时,读取数据的IP核将从PL的某个存储器中读取数据,然后通过DMA传输到PS的某个存储器中,而写入数据的IP核将从PS的某个存储器中读取数据,然后通过DMA传输到PL的某个存储器中。 总之,通过使用AXI DMA和适当的设计和配置,Zynq系统中的PSPL之间可以进行高效的数据传输和通信。这种方式可以提高系统的性能和可扩展性,并且降低了CPU的负载,提供了更好的系统整合能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硬码农二毛哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值