axi協議裏面burst的4k越界問題,及cross 4k master IP的RTL代碼

AXI的burst操作不能跨越4K邊界

  • 因爲AXI系統中,slave地址空間一般爲4KB的整數倍,一個page大小也是4K。

如:32'ha100_1000, 32'ha100_2000,32'ha100_3000

  • AXI協議會在讀/寫地址通道的開頭髮出addr/len/size等信息,若一筆burst跨越了A和B兩個slave,則會只有A收到開頭的addr/len/size等信息,B則收不到上述信息,從而造成burst無法完成。

AHB的burst操作不能跨越1K邊界

  • 因爲AHB系統中,slave的最小的地址空間爲1KB,即slave至少地址空間是1K,或者2K等。

如:32'ha100_1000,32'ha100_1400,32'ha100_1800,32'ha100_1c00

  • ABH協議addr/len等信息是隨着data一起發給slave的,若一筆burst跨越了A和B兩個slave,可能造成對B的誤寫入引發錯誤。

處理越界的RTL代碼

總線的master(如:DMA、CPU等)需要支持4K越界處理,基本思路就是把越界的transfer拆分成兩筆非越界transfer

實現邏輯很簡單,一共兩步:越界檢測、拆分傳輸。下面代碼僅用於描述基本實現思路,具體問題需要具體的設計修改。

 

這個模塊位於DMA和總線之前,接管對總線的請求,並根據情況做傳輸拆分。

 

 

計算首、末地址,末地址=首地址+len*數據位寬。上圖中數據位寬爲64bit(8byte),因此對len左移3位,即乘8

僅需判斷首、末地址的第12bit是否相等,即可判斷當前傳輸是否越界。

 

非越界傳輸,狀態機一直處於IDLE;

越界傳輸,則拆分成BURST_FIRST和BURST_LAST

注:圖中的burst_running信號是處理異常中斷的,一般DMA中沒有此信號,不用考慮

 

當4K越界發生時,DMA側不需要知道實際對總線發起了兩筆傳輸,僅給DMA側返回一筆傳輸accept即可

 

接管總線,發起兩筆傳輸即可

 


對於寫傳輸,還要額外對burst做計數,需要在發完第一個拆分的burst後,再發第二筆拆分的busrt,如下所示:

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