測試方法采用了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流的不同字節里)