Xilinx MPSoC調試經驗二--datamovev地址非4字節對齊時的用法

  1. Datamover的使用

1)傳輸時如果需要支持地址非對齊,s2mm側:

 

地址非對齊時的命令設定

assign s_axis_s2mm_cmd_tdata[22:0] = length;

assign s_axis_s2mm_cmd_tdata[23] = 1;     //type: 1-enable INCR  0- enable FIXED;

assign s_axis_s2mm_cmd_tdata[29:24] = 6'b0;

assign s_axis_s2mm_cmd_tdata[31:30] = 2'b00;

assign s_axis_s2mm_cmd_tdata[63:32] = addr; 

assign s_axis_s2mm_cmd_tdata[67:64] = tag;

assign s_axis_s2mm_cmd_tdata[71:68] = 0;

 

簡單總結:s2mm方向,流接口方向是地址無關的,數據總是從低位開始有效,字節總數決定傳幾拍。Tkeep在tlast位置指示非C-width對齊時,低位開始哪些字節有效。

Axi總線上:axi總線都會從axi-s總線的0地址取數據,然後放到axi的低位地址指示的byte lane上面。

比如寫地址0x5, 1個字節,會從axi-s的0-lane上取數據,放到axi的byte5上,axi-s的tkeep是0x1,axi上的tkeep是0x20.

Axi總線上的數據對齊是根據命令中的saddr產生的,tkeep根據地址和傳輸長度決定。

 

 

 

2)mm2s方向:

  

 

地址非對齊時的命令設定

assign s_axis_s2mm_cmd_tdata[22:0] = length;

assign s_axis_s2mm_cmd_tdata[23] = 1;     //type: 1-enable INCR  0- enable FIXED;

assign s_axis_s2mm_cmd_tdata[29:24] = DSA(地址低位);

assign s_axis_s2mm_cmd_tdata[31:30] = 2'b11;

// EOF爲了在axi-s產生tlast

assign s_axis_s2mm_cmd_tdata[63:32] = addr; 

assign s_axis_s2mm_cmd_tdata[67:64] = tag;

assign s_axis_s2mm_cmd_tdata[71:68] = 0;

 

簡要說明:

AXI側:

非對齊時,AXI側根據DSA和DRR設定,在特定byte-lane數據對齊到AXI-S側的byte0-lane上。

DRR設定是爲了告訴AXI進行非對齊處理,DSA提供了有效數據在byte lane上的位置。

EOF爲了在axi-s產生tlast,將讀的最後一個數據放在axi-s總線上。

 

總結:流接口方向上的傳輸是跟地址無關的,所以有效數據總是從byte0開始的。

Axi接口上是地址相關的,s2mm方向,saddr同步了地址信息,以及數據在總線上的對齊位置。Mm2s方向,DRR/DSA同步了地址信息,以及從axi總線上哪個位置開始取數據放到axi-s。 EOF用於產生tlast信號。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章