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

 

 

 

工程文件與源代碼下載

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM