axi ps读写pl_PL读写DDR:Datamover能干什么
最近發現工程項目中一直在用AXI-DMA。這玩意兒搬數據倒是沒問題,就是用axi-lite配置起來非常反人類。。。簡單的辦法其實是用datamover ip核。
這個ip核能干嘛呢。準備寫個文章解析一下。由于好多feature沒用過,所以僅僅看文檔可能理解有誤,歡迎指出錯誤。
首先掃個盲:MM2S指的是Memory map to stream. 讀DDR. S2MM指的是steam to memory map. 寫DDR.
Datamover能干嘛
- 能把數據以axi_stream的格式從DDR里搬入搬出
- 支持4KB的邊界保護以及自動拆解太長的burst
- 可以排隊處理多次讀寫請求
- 支持字節為單位的非對齊傳輸
- 支持store-and-forward模式。也就是MM2S的時候先把數據緩存下來,再分發出去
- 支持indeterminate BTT mode。也就是說。。S2MM的時候你甚至不需要知道你要寫多少數。
簡單的使用方法
上圖是一個讀操作的。寫的類似。接口只有4個。
- 把你要搬數據的信息例如起始地址,數據長度等以axi-stream的形式捅到command端口。
- AXI4 Master接到DDR上(實際是接到MIG上)。
- AXI4 Stream Master就是讀出來的數。
- AXI-Stream status是狀態。拿出來容易debug.
你應該往AXI4-STREAM SLAVE(command)端口里捅什么
這個東西的重中之重顯然就是command指令。
指令格式如上面的樣子。讀寫都是一樣的。一個一個來講。
xCACHE: 這個一共4bit. 用于配置axi總線一些cache性質的。感興趣參考AXI的文檔。不關心全給成0. 主要是一個cache相關的東西。
xUSER: 4bit.這個是你自己定義的信號。。也就是說你想用axi總線穿點兒私貨。。那就要把數據寫到這個地方。到時候axi傳輸的時候會出現在user端口。
RSVD: Reserved... 干什么的顯然。。。
TAG: 這個是給該條指令個一個標簽。有這個TAG在出了錯debug的時候可以報是哪條指令出錯了。當然你要是頭鐵覺得不用DEBUG. TAG全給0.
SADDR: 讀寫DDR里的初始地址。要注意的是如果你想非對齊傳輸,配置Datamover的時候要把非對齊傳輸點開。(例如ddr指定的是32bit, 對齊傳輸是指你從0,4,8這些地址開始讀,非對齊傳輸是指你想從1開始讀)
DRR: 這個數據就比較繞了。。。這個數據是后面DSA的開關。主要是為了調整Stream端(而不是memory端,memory端直接由SADDR地址就能確定)非對齊操作的位置,也就是說,這個值表示該條指令對應的傳輸需要對stream端數據做調整。具體怎么調整看后面的DSA. 用在MM2S.
EOF: 這個數據一樣比較繞。先說簡單的。
在S2MM的過程中,如果INDETERMINATE BTT模式關閉,你想用tlast信號表示你寫完了,那么EOF要置高。
在MM2S的過程中,同時存在多條指令。你想讓最后一條讀出來后再來tlast. 那就只在最后一條置高這個EOF. 如果你開啟來非對齊傳輸。。。最好每條都置高。否則你得注意兩條指令之間不會不有廢數據。
DSA: 這個是為了調節stream側的數據非對齊的。。。舉個栗子。假如DDR是32bit的。那么它應該有4個byte. (從高到低 m3 m2 m1 m0)。這個DSA如果等于1。表明你會把數據m1放到stream的第一個數據。m0被丟掉了。。。所以如果需要這種操作,就打開DRR, 配置DSA. 否則DRR也不需要打開。
Type: 這個表示你的地址要不要累加。。如果不累加你就是在起始地址瘋狂寫。所以一般傳輸要是一整塊的話這個要置1.
BTT: 這個簡單。你要傳輸多少個數。。。注意單位是byte. 不是你axi_stream的寬度。
配置IP CORE需要注意的點
Stream端的數據位寬要小于或者等于AXI4端的數據位寬。配置IP核的時候就會提示。
配置界面上Maximum Burst Size這個參數比較繞。指的是AXI總線的burst size. 一般來說設個16什么的就好。你給出的BTT會自動切成這種小的傳輸。
其他都很簡單。。。看上面操作就能實現。
總結
這篇文章解讀了一下讀DDR的接個IP核。如果不想直接用AXI-FULL來讀寫DDR,要操作AXI_STREAM數據讀寫DDR的話,最常用的IP核是DMA和這個datamover。其中DMA更適合用PS來操作。更復雜功能更強大,但是實際使用起來比較復雜,尤其你想從PL寫個AXILITE控制DMA的時候。。。所以。
從PL調用DDR直接用datamover才是比較合理的操作。就這這樣。。。
總結
以上是生活随笔為你收集整理的axi ps读写pl_PL读写DDR:Datamover能干什么的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 妄想山海角色考察期怎么解除
- 下一篇: 移动端实现元素拖拽效果插件_基于自然流布