首页 > 代码库 > Xilinx VDMA 24位流输出与32位AXI总线的内存 流数据关系

Xilinx VDMA 24位流输出与32位AXI总线的内存 流数据关系

测试方法采用了VDMA仅有MM2S通道, 内存中的图像帧是用MicroBlaze核写入的一个colorbar.

VDMA的mhs部分如下, 因为我的输出用了Digilent的HDMI核,而这个HDMI核是32位的,我自己写了个axis_24_32的位宽转换的ip,这个暂且按下不表.

BEGIN axi_vdma
 PARAMETER INSTANCE = axi_vdma_0
 PARAMETER HW_VER = 5.04.a
 PARAMETER C_USE_FSYNC = 0
 PARAMETER C_M_AXIS_MM2S_TDATA_WIDTH = 24
 PARAMETER C_MM2S_LINEBUFFER_DEPTH = 4096
 PARAMETER C_MM2S_LINEBUFFER_THRESH = 2048
 PARAMETER C_INCLUDE_S2MM = 0
 PARAMETER C_BASEADDR = 0x7e220000
 PARAMETER C_HIGHADDR = 0x7e22ffff
 BUS_INTERFACE S_AXI_LITE = axi4lite_0
 BUS_INTERFACE M_AXI_MM2S = axi4_0
 BUS_INTERFACE M_AXIS_MM2S = axi_vdma_0_M_AXIS_MM2S
 PORT s_axi_lite_aclk = clk_100_0000MHzPLL0
 PORT m_axi_mm2s_aclk = clk_100_0000MHzPLL0
 PORT m_axis_mm2s_aclk = axi_hdmi_0_S_AXIS_MM2S_ACLK
 PORT mm2s_fsync_out = axi_vdma_0_mm2s_fsync_out
 PORT mm2s_buffer_almost_empty = axi_vdma_0_mm2s_buffer_almost_empty
 PORT mm2s_buffer_empty = axi_vdma_0_mm2s_buffer_empty_to_chipscope_ila_0
END

 

结论:

我也不知道手册上究竟有没有讲这个AXI宽度是32bit,而AXIS宽度是24bit的问题,我反正似乎是没看到.

不过最终实验得到的结论是RAM被充分利用了,也就是比如两个像素A(aabbcc)和像素B(112233)存在RAM中,

最终存储的是(aabbcc112233)而不是(00aabbcc00112233)或(aabbcc0011223300)等之类数据.

 

实验数据:

1.VDMA设置

 

 

2.CPU写RAM

 

    for(offset = VERT * HORI * 1/2; offset < VERT * HORI ; )
    {
        Xil_Out32LE(Addr+4*offset, 0xefcdab89);
        offset++;
    }

用的是Xil_Out32LE写RAM,那么实际RAM中存储的顺序是89abcdef 89abcdef ..............

 

 

3.Chipscope对AXIS mm2s的监测

(其实我对S_AXI也监测了,不过忘记截图了,也没仔细分析.印象是内存对齐读取,也就是一次读取32bit的有效数据然后分别放到AXIS流的不同字节里)

 

 

 

工程文件与源代码下载