AXI MCDMA 模擬與工作流程分析

2022-09-08 21:01:08

說明

關於背景知識,可以先看 https://www.cnblogs.com/xingce/p/16386108.html

參照一段官方的說明,AXI MCDMA存在的主要目的是為了節約資源,我們想要使用這個模組的主要目的也是為了降低資源消耗,從而可以將系統部署在更小面積的FPGA晶片上,當然,具體的效果還需要進一步的測試,先對該IP做一些模擬和線上測試吧。

FPGAs have been providing DMA engines in the Programmable Logic for many years. To add to the existing DMA offering, Xilinx added a Multichannel DMA IP into the Xilinx IP Catalog to provide additional channels. Additional DMA channels provide a hardware segregation of data that ultimately provides more efficient management of data streams. This leads to an overall savings of Programmable Logic, while maintaining data movement throughput.

下圖是IP的介面和設定介面,更詳細的描述請移步官方手冊 https://docs.xilinx.com/v/u/en-US/pg288-axi-mcdma

初步目標

在開始之前,先確定一個目標,我們希望通過該模擬的學習,搞清楚IP的基本設定、工作流程,然後去建立自己的模擬工程

官方模擬範例

選擇開啟IP的example design,檢視其模擬工程

先來看看頂層的*tb.v 模擬檔案,裡面生成了1個200M的基準時鐘,然後傳送了start開始訊號,並檢測結束done訊號與status訊號,根據status的狀態輸出測試結論,核心的測試程式碼不在這個檔案裡面

再來直接看DUT的頂層檔案,先搞清楚對應的額層級關係

下圖表明axi_traffic_gen_0 用作mcdma的axi lite master模組,完成對mcdma 暫存器的設定

AXI MCDMA會讀出BRAM_CTL_0 中的資料,那麼BRAM 0中的資料怎麼才知道是不是對的,又需要一個模組寫入測試資料,這個測試資料由axi4_write_master.vhd模組完成,在系統復位解除後,就開始寫入測試資料

與讀出通道對應,AXI MCDMA會向BRAM_CTL_1寫入測試資料,檢查資料正確性的時候,測試邏輯是直接檢查的寫入訊號,並不是將BRAM 1中寫入的資料讀出做校驗,這一點需要檢視模擬波形,有可能設計人員偷懶,所以這樣寫的

descriptor資訊預先儲存在BRAM_CTL_3中,由AXI MCDMA的AXI SG介面將對應的資訊讀出,對應的descripto資訊儲存在"sg_mem.mem" 檔案中

從以上資訊基本可以看清整個模擬邏輯了,接下來再結合模擬訊號看看真實的工作流程。

模擬訊號檢視

首先,根據IP手冊,AXI MCDMA開始工作之前,需要設定對應暫存器

先看S2MM 寫操作對應的流程,MM2S也是對應的流程,這裡不介紹了,可以看模擬的時序和IP手冊的說明

這是IP手冊建議的流程

首先,需要先將MCDMA的S2MM 對應channels Run起來

向0x500 暫存器寫入控制資料

對應模擬時序圖如下,其中基地址為0x500 ,寫入資料為0x000202f1

使能對應通道

向0x508暫存器寫入對應引數,當disable的時候,並非真的stop了,而是當descriptor 連結串列對應也執行到含EOF標誌的連結串列時才真正停止。
(這裡有個問題就需要注意,如果是讀出操作,我們丟棄不需要的資料,如果是寫入操作,如何結束呢?)

應該向0x008寫入0x1 使能MM2S的channel 0,模擬實際寫入的是0x3,這個是由於模擬程式碼是設定的2個通道,2個通道是合理的,因為只有這樣才能體現出Multichannel DMA的意義

設定descriptor 對應的地址

IP根據設定的descriptor地址去memory中fetch對應的descriptor連結串列,然後執行對應的axi讀寫操作

下面描述了對應channel 0 1的descriptor地址,由於我們是32bit 地址區間,所以只需要對應設定LSB 32bit地址即可,MSB 是在超過32bit地址空間的空間才有效

設定通道控制暫存器

每個通道都有自己的設定暫存器,這些暫存器第0個bit是開啟descriptor的featch,其它bit基本都是和中斷的產生相關的,模擬範例對S2MM和MM2S 通道進行了不同的設定,這個可以從模擬波形觀察得到

BD descriptor的讀取

通過觀察暫存器寫入的值,可以看出S2MM 的channel 0 對應寫入的current BD 地址為0x100 , nexr BD 地址為0x140

下圖是對應的時序,圖中不能看出具體的地址,如果想看的話可以自己模擬,然後放大觀察

BD descriptor 描述,下圖描述了MM2S對應的descriptor描述,S2MM也是類似的內容,AXI MCDMA對應的通道會根據這個descriptor完成對應的dma操作

在這個模擬範例中,我們看一下

SG從0x100地址讀指定 8*32bit的descriptor資料,然後根據descriptor去讀取資料

整體看下來,這個模擬demo是非常簡易的,不能覆蓋真實的工況,下一步需要上機測試才能更好的模擬真實工作場景