zoukankan      html  css  js  c++  java
  • 使用axi_datamover完成ZYNQ片内PS与PL间的数据传输

    分享下PS与PL之间数据传输比较另类的实现方式,实现目标是:

    1、传输时数据不能滞留在一端,无论是1个字节还是1K字节都能立即发送;

    2、PL端接口为FIFO接口;

    PS到PL的数据传输流程:

    PS到PL的数据传输相对简单,使用vivado自带的axi_datamover即可完成,详细如下:

    A、向PL端查询剩余数据存储长度(以byte为单位);
    B、通过写寄存器设置PL端DMA数据传输开始地址;
    C、通过写寄存器设置PL端DMA数据传输长度(以byte为单位);
    D、通过写寄存器启动PL端DMA传输;
    E、通过读寄存器查询PL端DMA是否完成数据传输;
     
    PS(ARM)端驱动代码如下:
    #define WRITE_SPACE_REG 0x84000004
    #define ps2pl_SA 0x84000008
    #define ps2pl_LENGTH  0x8400000C
    #define ps2pl_START 0x84000010
    #define ps2pl_FINISHED 0x84000014
     
    data_space = Xil_In32(WRITE_SPACE_REG);
     
    void init_axi_dma_simple_write(u32 num)
    {
    Xil_Out32(ps2pl_SA,(unsigned int )recvram);
    Xil_Out32(ps2pl_LENGTH,(0x80000000+num));
    Xil_Out32(ps2pl_START,0x00000001);
    while(!(Xil_In32(ps2pl_FINISHED)&0x00000001));
    }
     
     
    PL到PS的数据传输流程:
    PL到PS的数据传输相对复杂点,vivado自带axi_datamover测试发现有时不太正常,所以按照vivado自带axi_datamover接口协议重新写了模块,详细如下:
     
    A、通过读寄存器查询待传输数据长度(以byte为单位);
    B、通过写寄存器设置PL端DMA数据传输开始地址;
    C、通过写寄存器设置数据传输长度(以byte为单位);
    D、通过写寄存器启动数据传输;
    E、通过读寄存器查询PL端DMA是否完成数据传输;
    注:数据传输长度有数值限制,假如待传输数据长度为8byte的整数倍,则每次的数据传输长度也必须为8byte的整数倍。假如待传输数据长度不是8byte的整数倍,以15byte为例,只能以下面两种方式读取:1、第一次读取8byte,第二次读取7byte;2、一次读取15byte。为了简化这种限制,可以使每次的待传输数据长度小于PS端的缓存,这样可以一次读取所有待传输的数据,也就是第二种读取方式。
     
    PS(ARM)端代码如下:
    #define READ_NUM_REG 0x84000044
    #define pl2ps_DA 0x84000048
    #define pl2ps_LENGTH 0x8400004C
    #define pl2ps_START 0x84000050
    #define pl2ps_FINISHED 0x84000054
     
    data_return = Xil_In32(READ_NUM_REG);
     
    void init_axi_dma_simple_read(u32 num)
    {
    Xil_Out32(pl2ps_DA,(unsigned int )recvram);
    Xil_Out32(pl2ps_LENGTH,(0x80000000+num));
    Xil_Out32(pl2ps_START,0x00000001);
    while(!(Xil_In32(pl2ps_FINISHED)&0x00000001));
    }
     
    附件为在vivado中打包好的用于pl2ps传输的ip
  • 相关阅读:
    A1066 Root of AVL Tree (25 分)
    A1099 Build A Binary Search Tree (30 分)
    A1043 Is It a Binary Search Tree (25 分) ——PA, 24/25, 先记录思路
    A1079; A1090; A1004:一般树遍历
    A1053 Path of Equal Weight (30 分)
    A1086 Tree Traversals Again (25 分)
    A1020 Tree Traversals (25 分)
    A1091 Acute Stroke (30 分)
    A1103 Integer Factorization (30 分)
    A1032 Sharing (25 分)
  • 原文地址:https://www.cnblogs.com/otod3r/p/5275697.html
Copyright © 2011-2022 走看看