理论部分
再次点击Run Connection Automation在弹出的对话框的左上角选择All…,点击OK,
然后重新生成布局添加TPG IP Core
把TPG的aresrtn按照如图所示连接
把ila_1的clk和VDMA的aclk连在一起
完整的硬件结构框图如下(右击可查看高清大图)
再次右击Bolock design,选择Generate output Prouducts
完成后,点击Generate bitstream(耐心等待下吧,可以去吃个饭,睡会觉或者浏览下论坛的帖子,发几个评论……)
最后,File->Export->Export Hardware —-File ->Launch SDK
搭建软件工程
SDK启动后,
新建一个Hello World工程
把helloworld.c里的代码修改如下:
复制代码
按照如下配置配置软件Debug
打开vivado->open hardware->program device
成功后,vivado会自动打开硬件调试界面,如图所示
可以单步调试运行或者直接运行
VDMA启动两个通道启动后,wavefom里的波形如下所示:S2MM
VDMA可以把AXI4-Stream 类型的视频流通过S2MM,写入到DDR3中,反之也可以通过MM2S读入到VDMA接口的外设中。通过内嵌FPGA逻辑分析仪进行观察数据。
本文所使用的开发板是Miz702(兼容zedboard)
PC 开发环境版本:Vivado Design Suite 2015.2
再次点击Run Connection Automation在弹出的对话框的左上角选择All…,点击OK,
然后重新生成布局添加TPG IP Core
把TPG的aresrtn按照如图所示连接
把ila_1的clk和VDMA的aclk连在一起
完整的硬件结构框图如下(右击可查看高清大图)
再次右击Bolock design,选择Generate output Prouducts
完成后,点击Generate bitstream(耐心等待下吧,可以去吃个饭,睡会觉或者浏览下论坛的帖子,发几个评论……)
最后,File->Export->Export Hardware —-File ->Launch SDK
搭建软件工程
SDK启动后,
新建一个Hello World工程
把helloworld.c里的代码修改如下:
- #include <stdio.h>
- #include "platform.h"
- #include "xil_io.h"
- int main()
- {
- init_platform();
- xil_printf("----------The test is start......----------\n\r");
- Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x30, 0x4); //reset S2MM VDMA Control Register
- Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x30, 0x8); //genlock
- //Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x30, 0x0b);//fs
- Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0xAC, 0x08000000);//S2MM Start Addresses
- Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0xAC+4, 0x0A000000);
- Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0xAC+8, 0x09000000);
- Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0xA4, 1920*3);//S2MM Horizontal Size
- Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0xA8, 0x01002000);//S2MM Frame Delay and Stride
- Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x30, 0x3);//S2MM VDMA Control Register
- Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0xA0, 1080);//S2MM Vertical Size start an S2MM transfer
- //AXI VDMA1
- Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x0, 0x4); //reset MM2S VDMA Control Register
- Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x0, 0x8); //gen-lock
- //Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x0, 0x0B); //fs+
- Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x5C, 0x08000000); //MM2S Start Addresses
- Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x5C+4, 0x0A000000);
- Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x5C+8, 0x09000000);
- Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x54, 1920*3);//MM2S HSIZE Register
- Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x58, 0x01002000);//S2MM FRMDELAY_STRIDE Register 1920*3=5760 对齐之后为8192=0x2000
- Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x0, 0x03);//MM2S VDMA Control Register
- Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x50, 1080);//MM2S_VSIZE 启动传输
- cleanup_platform();
- return 0;
- }
按照如下配置配置软件Debug
打开vivado->open hardware->program device
成功后,vivado会自动打开硬件调试界面,如图所示
可以单步调试运行或者直接运行
VDMA启动两个通道启动后,wavefom里的波形如下所示:S2MM