本系列我想深入探尋 AXI4 匯流排。不過事情總是這樣,不能我說想深入就深入。當前我對 AXI匯流排的理解尚談不上深入。但我希望通過一系列文章,讓讀者能和我一起深入探尋 AXI4。

本篇文章我們將討論有關 AXI 匯流排的突發傳輸機制( burst ),在 AXI 匯流排中的突發傳輸是指,在地址匯流排上進行一次地址傳輸後,進行多次數據傳輸( transfer,這個有點搞,突發傳輸 and 傳輸?)。第一次地址傳輸中的地址作為起始地址,根據突發傳輸類型的不同,後續數據的存儲地址在起始地址的基礎上遞增(INCR 模式);或者首先遞增,到達上限地址後回到起始地址,繼續遞增(WRAP 模式);又或者後續數據都將不斷寫入起始地址,刷新起始地址上的數據。(FIXED 模式)

AXI4 突發傳輸控制信號

突發傳輸的控制信息在地址通道上,隨著第一次地址傳輸時寫入,控制信息包括:

突發傳輸類型,在前文中提及,共有 3 種,分別為 FIXED,INCR 以及 WRAP。使用 2 位二進位表示。

FIXED 類型適合對某個固定地址進行數據更新,比如向一個 almost full 的 fifo 更新數據。

INCR 類型最為常用,後續的數據的存儲地址在初始地址的基礎上,以突發傳輸寬度進行遞增,適合對於 RAM 等 mapped memory 存儲介質進行讀寫操作。

WRAP 模式比較特殊,除了初始地址外,還有最高地址的界限。在最大地址以下,WRAP 與 INCR 類型完全相同,地址遞增,但達到最高地址後,地址直接回到起始地址,再進行遞增,就這樣循環往複。數據手冊上表示,WRAP 適合對 cache 的訪問,我這方面經驗還不多,不是很能理解這種模式的精妙之處。

突發傳輸長度 (burst length),突發傳輸長度是指在一次突發傳輸中所進行的傳輸(transfer)次數,在傳輸完初始地址後,進行的數據傳輸次數就是突發傳輸長度,假設數據位寬是 32 位,即進行 32 * N bit 的數據傳輸。在 AXI4 中,INCR 類型最大支持長度為 256,其他類型最大長度為 16。當然你的突髮長度最少為 1,不然也就沒有傳輸發生了。協議中的 burst length 從零開始,實際的長度值為長度欄位加1。傳輸長度使用 8 位二進位表示。

突發傳輸長度有一些限制,包括:

  • 對於 WRAP 模式,突發傳輸長度僅能為2,4,8,16
  • 在一次突發傳輸中,地址不能跨越一個 4KB 分區
  • 一次突發傳輸不能在未達到傳輸長度的情況下提前結束。

突發傳輸寬度(burst size),突發傳輸寬度是每指一次傳輸(transfer)中的最大數據寬度,突發傳輸數據寬度不能超過數據線本身的寬度。當數據線本身寬度大於突發傳輸寬度時,將根據協議的相關規定製定數據在部分數據線上傳輸。突發傳輸寬度共 3 個二進位位,表示為:

實例

接下來分別舉一個突發寫操作和讀操作的例子來更好地講解 AXI4 突發傳輸機制。主機為 DataMover IP,從機為 AXI4 形式介面的 RAM,數據匯流排寬度為 32 位。

從圖片中可以看到,(黃色為寫地址通道,綠色為寫通道,灰色為寫回復通道)我們首先在寫地址匯流排上傳輸了一個地址,地址為 0x4 ,並在傳輸地址的同時傳輸了此次突發傳輸的控制信息:突發傳輸長度數值為 7,即每次突發傳輸寫入 8 次數據,可以從圖中看到,確實進行了 8 次數據傳輸。突發傳輸類型為 2 ,類型為 INCR,地址在初始地址 0x4 的基礎上遞增,第一次數據寫入 0x4 ,第二次地址寫入 0x5,因為我們的傳輸寬度為 0,即每次傳輸一個位元組,共 8 位。

細心的朋友可能會問,每次傳輸 8 位,但為什麼每次寫入數據的寬度實際為 32 位,比如其中一個數據:0x07070707。實際上這是 AXI 突發傳輸的一個特性:當傳輸數據的寬度小於數據匯流排的寬度時,AXI 匯流排將不會拼接數據,而是直接使用部分數據線傳輸數據,多餘的數據線將會屏蔽。表現為 WSTRB 參數以 0x01,0x02,0x04,0x08 的規律變化,相當於在32位匯流排上有效的位元組分別是第1,2,3,4個位元組。這類突發傳輸寬度小於數據匯流排的寬度被稱為 Narrow transfer ,具體可以參考下面手冊上的圖片:

在進行此次突發傳輸的最後一次傳輸有效期間,置起 WLAST 信號,表示此次突發傳輸結束。

讀操作和寫操作有一些不同,但注意到下圖中讀操作的突發傳輸寬度為 8位,突發傳輸長度為 8,共讀取 64 位元組,但實際上數據是以32位的位寬,傳輸了兩次,分為為0x05040302與0x09080706。這兩個 32 位字被分別傳輸了 4 次。我們藉此可以分析一下當突發傳輸位寬小於數據線寬度時 AXI 匯流排的特性,這方面手冊著墨不多。

從從機的角度考慮,從起始地址 0x4 開始讀取,因為數據匯流排為 32 位,讀取到數據的為 4 個位元組,分別是0x4,0x5,0x6,0x7 四個地址上的位元組。從機會讀取並傳輸 4 次,因為突發傳輸的寬度為 8 位,可見在突發傳輸寬度小於數據線寬度時,AXI 協議的實現會使用讀取 32 位數據,重複發送的機制進行,需要主機根據突發傳輸寬度,自行讀取對應的位元組。相對應的,從機則不需要擁有自行篩選數據位元組的能力,因為主機在進行寫操作的同時,會送出WSTROBE 信號告知從機有效的位元組。

灰色為讀地址通道,綠色為讀數據通道

目前,我還沒有試過其他突發傳輸寬度和不對齊地址的情況,這點將在之後的文章中持續關注。

結語

AXI 作為一種匯流排,本身會有比較多的規定,這些規定可能本身也不過是規定,這裡就不仔細展開了。本文主要介紹了突發傳輸的概念以及 AXI4 匯流排中與突發傳輸有關的信號,並舉了一個 DataMover 與 AXI4 介面的 RAM 的通信過程作為例子,希望能幫助大家更好地理解 AXI4 匯流排。


推薦閱讀:
查看原文 >>
相關文章