首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

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流的不同字节里)


记录学习中的点点滴滴,让每一天过的更加有意义!
返回列表