精华内容
下载资源
问答
  • ZYNQ_DMA访问DDRPL资源

    千次阅读 2019-04-05 22:00:32
    ZYNQ_DMA访问DDR和PL资源前言需求PLPS结果总结 前言 之前一篇是PS通过AXI总线读写PL的寄存器,对于大数据的传输,这显然不是一个高效的方法,zynq的解决方案是给予PL直接访问DDR的通路,网上资料很多,但建议读UG873...

    ZYNQ_DMA访问DDR和PL资源

    前言

    之前一篇是PS通过AXI总线读写PL的寄存器,对于大数据的传输,这显然不是一个高效的方法,zynq的解决方案是给予PL直接访问DDR的通路,网上资料很多,但建议读UG873 chapter6。
    这里的基本原理是:PL中DMA IP对于DDR和PL存储资源来说是Master(主机),DMA对于PS来说是Slave(从机),PS通过AXI Lite配置DMA的寄存器去操控DMA从原地址向目的地址转移多少数据,DMA通过AHP读写DDR、通过AXI读写PL的资源。(我也看到一种跳过DMA的方式,通过改写AXI总线直接完成PL模块对DDR的读写的方式)

    需求

    和网上的例子不太一样,我这里采用的BRAM,
    1、先由PS定义一个矩阵(数组),并赋值给源地址
    2、将其写入BRAM
    3、再将数据从BRAM读到PS中的目的地址
    4、打印对比

    PL

    紫色是PS对DMA的控制通路
    黄色是DMA对DDR的数据通路
    蓝色是DMA对RAM的数据通路
    在这里插入图片描述

    PS

    在这里插入图片描述

    #include <stdio.h>
    #include "platform.h"
    #include "xil_printf.h"
    
    #include "xparameters.h"
    #include "xaxicdma.h"
    #include "xil_cache.h"
    #include "xil_io.h"
    
    #define PL_BRAM_Addr 0xC0000000 // 需要单独定义
    #define BUFF_LEN  3136  //28*28
    
    XAxiCdma_Config *axi_cdma_cfg;
    XAxiCdma axi_cdma;
    
    
    static u32 SourceAddr  = 0x11000000;
    static u32 DestAddr    = 0x12000000;
    
    
    
    int main()
    {
        init_platform();
    
        print("Hello World\n\r");
    
        /
    
        int Status;
    
        u32 *SrcPtr;
        u32 *DestPtr;
    
        SrcPtr = (u32*)SourceAddr;
        DestPtr = (u32 *)DestAddr;
    
        //u32 *rx_buffer = (u32 *) PS_OCM_Addr;
        //u32 *tx_buffer = (u32 *) PL_BRAM_Addr;
    
        //
        static int Array_0[28][28];
        //static int Array_1[28][28];
        int i,j;
        for (i=0;i<28;i++){
        	for (j=0;j<28;j++){
        		Array_0[i][j] = (int)(28*i+j);
        		//Array_1[i][j] = 0;
        	}
        }
    
        for (i=0;i<28;i++){
        	for (j=0;j<28;j++){
        		SrcPtr[28*i+j] = Array_0[i][j];
        		DestPtr[i+j] = 0;
        	}
        }
    
    
        u32 *tx_buffer = (u32 *) SrcPtr;
        u32 *rx_buffer = (u32 *) PL_BRAM_Addr;
    
        // Set up the AXI CDMA
        printf("--Set up the AXI CDMA\n\r");
        axi_cdma_cfg = XAxiCdma_LookupConfig(XPAR_AXICDMA_0_DEVICE_ID);
        if (!axi_cdma_cfg) {
            printf("AXAxiCdma_LookupConfig failed\n\r");
        }
    
        Status = XAxiCdma_CfgInitialize(&axi_cdma, axi_cdma_cfg, axi_cdma_cfg->BaseAddress);
        if (Status == XST_SUCCESS ){
            printf("XAxiCdma_CfgInitialize succeed\n\r");
        }
        printf("--Disable Interrupt of AXI CDMA\n\r");
        XAxiCdma_IntrDisable(&axi_cdma, XAXICDMA_XR_IRQ_ALL_MASK);
    
        if (XAxiCdma_IsBusy(&axi_cdma)) {
        printf("AXI CDMA is busy...\n\r");
        while (XAxiCdma_IsBusy(&axi_cdma));
        }
    
    
        Xil_DCacheFlush();
    
        Status = XAxiCdma_SimpleTransfer(
                                         &axi_cdma,
                                         (u32) tx_buffer,
                                         (u32) rx_buffer,
                                         BUFF_LEN,
                                         NULL,
                                         NULL);
    
        Xil_DCacheFlush();
    
        printf("transaction from ps2pl is done\n\r");
    
        u32 *tx_buffer1 = (u32 *) PL_BRAM_Addr;
        u32 *rx_buffer1 = (u32 *) DestAddr;
    
        // Set up the AXI CDMA
           printf("--Set up the AXI CDMA\n\r");
           axi_cdma_cfg = XAxiCdma_LookupConfig(XPAR_AXICDMA_0_DEVICE_ID);
           if (!axi_cdma_cfg) {
               printf("AXAxiCdma_LookupConfig failed\n\r");
           }
    
           Status = XAxiCdma_CfgInitialize(&axi_cdma, axi_cdma_cfg, axi_cdma_cfg->BaseAddress);
           if (Status == XST_SUCCESS ){
               printf("XAxiCdma_CfgInitialize succeed\n\r");
           }
           printf("--Disable Interrupt of AXI CDMA\n\r");
           XAxiCdma_IntrDisable(&axi_cdma, XAXICDMA_XR_IRQ_ALL_MASK);
    
           if (XAxiCdma_IsBusy(&axi_cdma)) {
           printf("AXI CDMA is busy...\n\r");
           while (XAxiCdma_IsBusy(&axi_cdma));
           }
    
    
           Xil_DCacheFlush();
    
           Status = XAxiCdma_SimpleTransfer(
                                            &axi_cdma,
                                            (u32) tx_buffer1,
                                            (u32) rx_buffer1,
                                            BUFF_LEN,
                                            NULL,
                                            NULL);
    
           Xil_DCacheFlush();
    
           printf("transaction from pl2ps is done\n\r");
    
    
          for(i=0;i<28;i++){
        	  printf("%x\n\r",rx_buffer1[i]);
          }
    
    
        //cleanup_platform();
        return 0;
    }
    

    结果

    在这里插入图片描述

    总结

    软件这边需要熟悉使用一些接口函数。

    展开全文
  • 使用VDMA在PLPS之间传输视频流数据

    千次阅读 2018-02-28 16:17:40
    理论部分VDMA可以把AXI4-Stream 类型的视频流通过S2MM,写入到DDR3中,反之也可以通过MM2S读入到VDMA接口的外设中。通过内嵌FPGA逻辑分析仪进行观察数据。本文所使用的开发板是Miz702(兼容zedboard) PC 开发环境...
    理论部分

    VDMA可以把AXI4-Stream 类型的视频流通过S2MM,写入到DDR3中,反之也可以通过MM2S读入到VDMA接口的外设中。通过内嵌FPGA逻辑分析仪进行观察数据。

    本文所使用的开发板是Miz702(兼容zedboard) 
    PC 开发环境版本:Vivado Design Suite 2015.2

    硬件系统工程新建一个zedboard工程建好工程后,再新建一个Block Design点击ADD IP,添加ZYNQ PS

    点击Run Block Automation,在弹出的对话框点击OK

    双击ZYNQ图标,去掉不用的外设

    使能一个HP接口,PL和PS通过VDMA传输数据做准备

    设置好后,点击OK添加VDMA IP Core

    点击Run Connection Automation在弹出的对话框的左上角选择All…,点击OK
    再次点击Run Connection Automation在弹出的对话框的左上角选择All…,点击OK,
    然后重新生成布局添加TPG IP Core

    双击刚刚生成的TPG图标,作如下设置

    按照如图所示连接

    按照如图所示连接时钟线

    同上把VDMA的m_axis_mm2s_aclk以及s_axis_s2mm_aclk和上述时钟线连在一起
    把TPG的aresrtn按照如图所示连接

    重新生成布局后,如图所示(右击可以查看高清大图)

    添加ILA IP Core(方法很多,这里未必是最好的)

    把ila_0的SLOT_0_AXI和VDMA的M_AXI_MM2SS连接在一起

    把ila_0的clk和VDMA的aclk连在一起在添加一个ILA IP Core把ila_1的SLOT_0_AXI和VDMA的M_AXI_S2MM连接在一起
    把ila_1的clk和VDMA的aclk连在一起
    完整的硬件结构框图如下(右击可查看高清大图)

    右击Bolock design,选择Create HDL Wrapper
    再次右击Bolock design,选择Generate output Prouducts
    完成后,点击Generate bitstream(耐心等待下吧,可以去吃个饭,睡会觉或者浏览下论坛的帖子,发几个评论……)
    最后,File->Export->Export Hardware —-File ->Launch SDK
    搭建软件工程
    SDK启动后,
    新建一个Hello World工程
    把helloworld.c里的代码修改如下:
    1. #include <stdio.h>
    2. #include "platform.h"
    3. #include "xil_io.h"

    4. int main()
    5.    {
    6.            init_platform();

    7.            xil_printf("----------The test is start......----------\n\r");

    8.            Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x30, 0x4); //reset   S2MM VDMA Control Register
    9.            Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x30, 0x8); //genlock
    10.            //Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x30, 0x0b);//fs
    11.            Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0xAC, 0x08000000);//S2MM Start Addresses
    12.            Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0xAC+4, 0x0A000000);
    13.            Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0xAC+8, 0x09000000);
    14.            Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0xA4, 1920*3);//S2MM Horizontal Size
    15.            Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0xA8, 0x01002000);//S2MM Frame Delay and Stride
    16.            Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x30, 0x3);//S2MM VDMA Control Register
    17.            Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0xA0, 1080);//S2MM Vertical Size  start an S2MM transfer

    18.            //AXI VDMA1
    19.            Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x0, 0x4); //reset   MM2S VDMA Control Register
    20.            Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x0, 0x8); //gen-lock

    21.            //Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x0, 0x0B);   //fs+

    22.            Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x5C,   0x08000000);   //MM2S Start Addresses
    23.            Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x5C+4, 0x0A000000);
    24.            Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x5C+8, 0x09000000);
    25.            Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x54, 1920*3);//MM2S HSIZE Register
    26.            Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x58, 0x01002000);//S2MM FRMDELAY_STRIDE Register 1920*3=5760 对齐之后为8192=0x2000
    27.            Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x0, 0x03);//MM2S VDMA Control Register
    28.            Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x50, 1080);//MM2S_VSIZE    启动传输

    29.            cleanup_platform();
    30.            return 0;
    31.     }
    复制代码


    按照如下配置配置软件Debug



    设置好之后,开发板上电,点击Debug
    打开vivado->open hardware->program device
    成功后,vivado会自动打开硬件调试界面,如图所示

    添加触发信号在hw_ila_1里添加axi_vdma_0_M_AXI_MM2S_ARVALID信号,如图所示:

    同上在hw_ila_2里添加axi_vdma_0_M_AXI_S2MM_AWVALID信号把waveform里不感兴趣的信号去掉
    可以单步调试运行或者直接运行
    VDMA启动两个通道启动后,wavefom里的波形如下所示:S2MM

    MM2S

    这里大家可能会注意到有个问题,就是MM2S只传输了一次就停止了,这是问什么呢?大家可以思考下!总结,在本篇文章我们实现了用VDMA的洗数据,把stream类型的数据转为Memory Map类型的存到内存中,然后用VDMA的读数据把MM的数据转为Stream型。最后还留了个小问题(PS:其实有一步我忘了做了),大家可以思考下!
    展开全文
  • 【vivado】PL通过axi_hp接口控制PSDDR

    千次阅读 2018-01-15 17:45:00
    1、搭建vivado工程。  用户自建一个AXI接口,配置成AXI4、Full、Master类型。输入信号m00_axi_int_axi_txn控制内部... PS核部分配置出HP0接口,以及一个GPIO(PL扩展EMIO)来控制_axi_txn信号。  读写的起始地...

    1、搭建vivado工程。 

      用户自建一个AXI接口,配置成AXI4、Full、Master类型。输入信号m00_axi_int_axi_txn控制内部开始数据传输。

      通过axi_smc或者axi_interconnect跟PS_HP接口对接,可以实现N-1或1-N。

      PS核部分配置出HP0接口,以及一个GPIO(PL扩展EMIO)来控制_axi_txn信号。

      读写的起始地址设置在DDR的0x3000_0000

     

    2、C代码主要是控制上面的GPIO信号。

      扩展到PL侧的EMIO信号位于bank2,pin排序54。先高后低出个pulse触发信号。

     

    3、在SDK上读到的DDR内容。

     

     4、关于DDR地址分配

    OCM-RAM0: 0x0000_0000 <-> 0x0002_FFFF

    DDR (1GB): 0x0010_0000 <-> 0x3FFF_FFFF

    OCM-RAM1: 0xFFFF_0000 <-> 0xFFFF_FDFF

     

    转载于:https://www.cnblogs.com/kevinchase/p/8289131.html

    展开全文
  • 【ZYNQ-7000开发之九】使用VDMA在PLPS之间传输视频流数据 原创2016年01月14日 11:35:02 标签: VDMA/ zynq/ zedbaord/ AXI 10384 理论部分 VDMA可以把AXI4-Stream 类型的视频流通过S2MM,写入到DDR3中,...

    【ZYNQ-7000开发之九】使用VDMA在PL和PS之间传输视频流数据

    原创 2016年01月14日 11:35:02

    • 10384

    理论部分

    VDMA可以把AXI4-Stream 类型的视频流通过S2MM,写入到DDR3中,反之也可以通过MM2S读入到VDMA接口的外设中。通过内嵌FPGA逻辑分析仪进行观察数据。

    本文所使用的开发板是Miz702(兼容zedboard) 
    PC 开发环境版本:Vivado Design Suite 2015.2

    硬件系统工程

    新建一个zedboard工程

    建好工程后,再新建一个Block Design

    点击ADD IP,添加ZYNQ PS

    这里写图片描述

    点击Run Block Automation,在弹出的对话框点击OK

    这里写图片描述

    双击ZYNQ图标,去掉不用的外设

    这里写图片描述

    使能一个HP接口,PL和PS通过VDMA传输数据做准备

    这里写图片描述

    设置好后,点击OK

    添加VDMA IP Core

    这里写图片描述

    点击Run Connection Automation

    在弹出的对话框的左上角选择All…,点击OK

    再次点击Run Connection Automation

    在弹出的对话框的左上角选择All…,点击OK,然后重新生成布局

    添加TPG IP Core

    这里写图片描述

    双击刚刚生成的TPG图标,作如下设置

    这里写图片描述

    按照如图所示连接

    这里写图片描述

    按照如图所示连接时钟线

    这里写图片描述

    同上把VDMA的m_axis_mm2s_aclk以及s_axis_s2mm_aclk和上述时钟线连在一起

    把TPG的aresrtn按照如图所示连接

    这里写图片描述

    重新生成布局后,如图所示(右击可以查看高清大图)

    这里写图片描述

    添加ILA IP Core(方法很多,这里未必是最好的)

    这里写图片描述

    把ila_0的SLOT_0_AXI和VDMA的M_AXI_MM2SS连接在一起

    这里写图片描述

    把ila_0的clk和VDMA的aclk连在一起

    在添加一个ILA IP Core

    把ila_1的SLOT_0_AXI和VDMA的M_AXI_S2MM连接在一起

    把ila_1的clk和VDMA的aclk连在一起

    完整的硬件结构框图如下(右击可查看高清大图)

    这里写图片描述

    右击Bolock design,选择Create HDL Wrapper

    再次右击Bolock design,选择Generate output Prouducts

    完成点击Run Synthesisi

    完成后,点击Generate bitstream(耐心等待下吧,可以去吃个饭,睡会觉或者浏览下论坛的帖子,发几个评论……)

    然后再选择,Tools -> set Up Debug

    最后,File->Export->Export Hardware —-File ->Launch SDK

    软件工程

    SDK启动后,新建一个Hello World工程

    把helloworld.c里的代码修改如下:

    
     
    1. #include <stdio.h>

    2. #include "platform.h"

    3. #include "xil_io.h"

    4.  
    5. int main()

    6. {

    7. init_platform();

    8.  
    9. xil_printf("----------The test is start......----------\n\r");

    10.  
    11. Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x30, 0x4); //reset S2MM VDMA Control Register

    12. Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x30, 0x8); //genlock

    13. Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0xAC, 0x08000000);//S2MM Start Addresses

    14. Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0xAC+4, 0x0A000000);

    15. Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0xAC+8, 0x09000000);

    16. Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0xA4, 1920*3);//S2MM Horizontal Size

    17. Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0xA8, 0x01002000);//S2MM Frame Delay and Stride

    18. Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x30, 0x3);//S2MM VDMA Control Register

    19. Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0xA0, 1080);//S2MM Vertical Size start an S2MM transfer

    20.  
    21. //AXI VDMA1

    22. Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x0, 0x4); //reset MM2S VDMA Control Register

    23. Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x0, 0x8); //gen-lock

    24.  
    25. Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x5C, 0x08000000); //MM2S Start Addresses

    26. Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x5C+4, 0x0A000000);

    27. Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x5C+8, 0x09000000);

    28. Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x54, 1920*3);//MM2S HSIZE Register

    29. Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x58, 0x01002000);//S2MM FRMDELAY_STRIDE Register 1920*3=5760 对齐之后为8192=0x2000

    30. Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x0, 0x03);//MM2S VDMA Control Register

    31. Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x50, 1080);//MM2S_VSIZE 启动传输

    32.  
    33. cleanup_platform();

    34. return 0;

    35. }

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    按照如下配置配置软件Debug

    这里写图片描述 
    这里写图片描述
    这里写图片描述

    设置好之后,开发板上电,点击Debug

    打开vivado->open hardware->program device

    成功后,vivado会自动打开硬件调试界面,如图所示

    这里写图片描述

    添加触发信号

    在hw_ila_1里添加axi_vdma_0_M_AXI_MM2S_ARVALID信号,如图所示:

    这里写图片描述

    同上在hw_ila_2里添加axi_vdma_0_M_AXI_S2MM_AWVALID信号

    把waveform里不相关的信号去掉

    可以单步调试运行或者直接运行

    VDMA启动两个通道启动后,wavefom里的波形如下所示:

    S2MM

    这里写图片描述

    MM2S

    这里写图片描述

    这里大家可能会注意到有个问题,就是MM2S只传输了一次就停止了,这是问什么呢?大家可以思考下!

    总结,在本篇文章我们实现了用VDMA的洗数据,把stream类型的数据转为Memory Map类型的存到内存中,然后用VDMA的读数据把MM的数据转为Stream型。最后还留了个小问题(PS:其实有一步我忘了做了),大家可以思考下!

    转载:http://blog.csdn.net/rzjmpb/article/details/50516181

    展开全文
  • 1,PS 通过 AXI GPIO IP核启动 PL 不间断循环构造64bit 位宽的 0~1023 的数据,通过 AXI DMA IP 核,PS的 Slave AXI GP 接口传输PS DDR3 的乒乓缓存中。PL 每发完一次 0~1023,AXI DMA IP 核便会产生一个中断...
  • 在 ZYNQ SOC 开发过程中, PLPS 之间经常需要做数据交互。对于传输速度要求较高、数据量大、地址连续的场合,可以通过AXI DMA 来...首先添加ps处理器,只需添加UART串口并设置相应的DDR型号即可,虽然我们用不到
  • 其实就是pspl之间的通信方式啦, 总共有9个接口, 4个axi_gp,其中,ps作为主设备2个,从设备两个。...Pl说什么,照着做就好了,axi_hp连接到DDR控制器。是为了方便pl与内存的数据交流,当然也连接
  • ZYNQ PL采集AD7606数据 用做FFT变换

    千次阅读 2020-09-19 00:52:37
    1,传输设计:将AD7606模块的8个数据通道,通过DMA存入PS DDR,再通FFT对8个通道的数据进行FFT傅里叶变换,并将FFT后的数据保存到DDR;通过ILA显示第一个通道的原始波形和FFT波形,然后将DDR的数据使用LWIP传输到PC...
  • 一,传输配置:只使用一个 DMA 传输 8 个通道的 ADC 数据,在应用层将 8 个通道的数据分离。DMA 将 ADC 模块 AN706 的数据采集到 ddr 中然后显示出波形,然后写了一个 ADC驱动,添加到系统里面。 二,系统工程: ...
  • Xilinx zynq7000

    2019-06-25 17:36:56
    PS: 处理系统(Processing System),与FPGA无关的ARM的SOC的部分。 PL: 可编程逻辑(Progarmmable ...PLPS数据传输的高效接口有两个:AXI(PS主动)和ACP(PL主动)。PL访问DDR可通过AXI接口,可配置成32-bit或者64-...
  • XC7Z020 应用框架设计

    千次阅读 2016-09-08 15:17:19
    基本确定使用Ethernet为PC和board之间的通讯方式,DDR3作为PL端的大数据存储单元,并且划出一些寄存器用于PSPL间的指令下达和状态返回用途。PL大数据传输例化DMA_IP core,连接DDR3。编写带AXI_lite接口的自定义IP_...
  • ZYNQ之DMA基本用法

    2020-07-21 10:54:17
    涉及到高速数据传输时,DMA就显得非常重要了,本文的DMA主要是对PL侧的AXI DMA核进行介绍(不涉及PS侧的DMA控制器)。AXI DMA的用法基本是:PS通过AXI-lite向AXI DMA发送指令,AXI DMA通过HP通路和DDR交换数据,PL...
  • Zynq Cache问题的解决方法

    千次阅读 2019-03-31 13:21:02
    在进行PS-PL之间的DMA传输时,不可避免会遇到Cache问题。今天在这里讲一下Cache的解决方法。其中参考了forums.xilinx.com的处理方法。 首先解释为什么DMA会引入Cache问题(专业名称为Cache一致性问题)。 PSPL都在...
  • 【ZYNQ】 cache解决问题

    2019-09-27 16:22:12
    在进行PS-PL之间的DMA传输时,不可避免会遇到Cache问题。今天在这里讲一下Cache的解决方法。其中参考了forums.xilinx.com的处理方法。 首先解释为什么DMA会引入Cache问题(专业名称为Cache一致性问题)。 PSPL都在...
  • ZYNQ-DMA控制器

    千次阅读 2018-01-31 17:18:23
    掌握DMA,才能掌握PS内高性能数据传输,以及PL内实现DMA传输。 DMA控制器为DMAC。在不需要CPU的基础上, DMAC可以移动大量数据,数据源和目的源存储器可以是PSPL上的任何存储器资源,包括DDR、OCM、SPIflash、SMC...
  • ZYNQ基础系列(六) DMA基本用法

    万次阅读 多人点赞 2018-03-30 11:00:42
    涉及到高速数据传输时,DMA就显得非常重要了,本文的DMA主要是对PL侧的AXI DMA核进行介绍(不涉及PS侧的DMA控制器)。AXI DMA的用法基本是:PS通过AXI-lite向AXI DMA发送指令,AXI DMA通过HP通路和DDR交换数据,PL...
  • DMA环路测试

    2021-02-02 13:19:15
    利用HP接口实现DDR—DMA—FIFO—DMA—DDR 的数据传输过程(DMA是simple模式,中断实现) DMA IP核三种模式:更多实例可参考项目system.mss中的demo。 simple模式:支持轮询和中断两种方式。 SG模式:支持多通道同时...
  • 涉及到高速数据传输时,DMA就显得非常重要了,本文的DMA主要是对PL侧的AXI DMA核进行介绍(不涉及PS侧的DMA控制器)。AXI DMA的用法基本是:PS通过AXI-lite向AXI DMA发送指令,AXI DMA通过HP通路和DDR交换数据,PL...
  • 涉及到高速数据传输时,DMA就显得非常重要了,本文的DMA主要是对PL侧的AXI DMA核进行介绍(不涉及PS侧的DMA控制器)。AXI DMA的用法基本是:PS通过AXI-lite向AXI DMA发送指令,AXI DMA通过HP通路和DDR交换数据,PL...
  • ZED Board AXI-HP通信例子

    2015-08-08 19:48:54
    用Vivado IPI搭建的Zynq-7000 PSPL通信过程,使用了AXI-HP接口,利用AXI-DMA IP实现直接读写DDR的过程,软件可以配置传输尺寸,并实现Cache一致性协议。
  • 基于ZYNQ的图像采集系统的学习总结

    千次阅读 2018-11-05 15:55:44
    该实验的大体流程就是,首先在PS端驱动配置好摄像头信息,然后再在pl端利用AXI总线对摄像头采集的数据与PS端进行通信,通过PS端的DDR3sdram缓存,再从PL端的AXI总线读取PS端的图像数据,然后再在屏幕上面进行显示。...
  • 调试AXI DMA

    2019-12-24 13:51:18
    AXI stream 是pl端与ps端大型数据接收发送。此接口可以无限制的突发传输,意思是只用一次握手协议,此后传输的全部都是有效数据。并把有效数据写入DDR中。写接口为 S2MM,读接口为MM2S。 由此联想到AXI GP接口此接口...
  • 用Vivado IPI搭建的Zynq-7000 PSPL通信过程,使用了AXI-ACP接口,利用AXI-DMA IP实现直接读写DDR的过程,软件可以配置传输尺寸,与AXI-HP不同的是,这个工程由硬件(PS的SCU单元)实现Cache一致性协议,因此软件...
  • 前面说到Zynq采集到视频数据,通过AXI4总线传输DDR,这样PS就可以对视频数据进行操作了。Zynq内部集成Cortex-A9 ARM 双核,PL部分的硬件模块可以作为ARM的外设,这样对于产品的开发提供了很大的灵活性。有这么强大...
  • Cortex:trade_mark:-A9(处理器系统PS)和赛灵思的可编程逻辑(可编程逻辑PL)集成到一个单独芯片上。从而将ARM:registered:处理系统和与Xilinx 7系列可编程逻辑完美地结合在一起,使用户可以创建独特而强大的设计...

空空如也

空空如也

1 2
收藏数 28
精华内容 11
关键字:

ddr传输plps