深入AXI4匯流排 五 AXI4的兄弟協議

2022-02-15 23:12:30 字數 2769 閱讀 8996

知乎使用者ljgibbs授權**

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

宣告1:部分時序圖以及部分語句來自 arm amba 官方手冊

(有的時候感覺手冊寫得太好了,忍不住就直接翻譯了。。)

宣告2:axi 匯流排是 arm 公司的智財權

備註

說起來同樣是弟弟,axi4-lite (為了方便,以下簡稱 lite)應該算是親弟,axi4-stream (stream)那只能算表弟了,因為 axi4-s 和他們沒住在一本 specification 裡。

先介紹下 axi4-l ,用通俗的說法,lite 是標準 axi4 協議被砍了幾刀的結果。相比 axi4 ,lite 有以下不同:

那這樣砍了 4 刀之後的 lite 就很清爽了,訊號數量一下子變得很少:

群眾:嗯,砍起來很爽,你這刀怕不是從微軟借的,砍了之後也是很清爽,訊號少了之後確實省了不少事,但這個效能還能保證麼?

放心,這個效能自然是。。下降不少的,靈活性也失去大半。

但效能要根據使用場景來看。axi4-lite 的使用場景主要用於暫存器的配置,這也就是為什麼資料通道的寬度被設定為 32 位或者 64 位了。(小問題:請問是為什麼呢?)

配置暫存器這類操作的特點有:

相比資料讀寫,資料量很小並且固定;

一般對某個暫存器進行配置,一般不會對連續位址上的一串暫存器進行配置,也就沒有突發傳輸的必要了;

一般不會有多個邏輯同時對乙個暫存器進行配置,也就沒有必要對位址進行保護了;

所以說啊,arm 可謂刀刀砍得有來頭,這樣一來乙個精簡的,適用於暫存器讀寫配置的協議就誕生了。在很多 ip 核中都可以看到 lite 和標準 axi4 協議,以及我們接下來要說的 axi-stream 協議,一起工作的身影。

比如這個 mac 核,就可以同時看到二者

之前也說了 stream 住在另一本 specification 上:

獨門獨院,很舒服。

之前也說 axi4-lite 被砍的悲慘遭遇,其實 axi4-stream 被砍得尤其慘,不過與此同時也在另一方面得到了補強。

沒有了位址概念,自然也沒有突發傳輸的概念。所有的資料都是點對點(點對多點)傳輸,可以理解為始終不斷地對乙個位址讀寫(或者是多個接收端裝置各自的固定接收位址)。

在去除位址概念後,stream 協議主要面向高速的,大資料量的資料流傳輸,在今天的異構系統的資料傳輸中起著非常重要的作用,比如 xilinx 的嵌入式系統 zynq 中,stream 匯流排是一項基礎設施。

axi4-stream 的基本訊號機制與 axi4 相同,比如握手機制。但為了適應面向資料流的傳輸,做了很多改變。

首先,作為一種面向資料流的協議,不存在專門傳輸控制資訊的通道,但為了在資料流中傳輸部分控制資訊,需要在資料中插入一些控制資訊位元組。所以 stream 協議的位元組分為三種型別:資料,位置位元組以及空位元組

資料型別自然就純粹是傳輸的資料,位置位元組不包含有效的資料,只指出當前資料在資料流中的相對位置。空位元組不包含任何資訊。

在資料流傳輸中,通過兩個訊號:tkeep,tstrb 的高低電平表示當前傳輸的位元組型別。

同 axi4 中的 transfer 以及 burst 的組織形式不同,stream 協議定義了四類傳輸。

transfer 的概念與 axi4 中的同名概念完全相同,以一次 tready,tvalid 握手表示一次傳輸,每次 transfer 的資料傳輸量一般為資料匯流排的寬度。

packet 是 stream 中的新概念,類似 burst ,包含乙個或多個 transfer。

frame 是 stream 中最高層次的傳輸組織形式,包含整數個 packet。

很多訊號的概念同 axi4 完全相同或者大同小異,比如 tlast 表示一次 packet 的結束,模擬 r/wlast 訊號表示一次 burst 結束。值得注意的是 tstrb 訊號不再表示位元組是否有效,而是用於標識位元的型別,同 tkeep 配合。tkeep 訊號主要用於標識資料位元組是否有效。

stream 協議的讀寫通道也是單向的,但訊號是完全一致的,stream 協議中不再存在讀寫通道的區別,也不再有獨立的寫回覆通道。

AXI4匯流排實現PS PL的float型別資料傳輸

float資料傳輸時可能有些小誤差,屬於正常現象。include include platform.h include xparameters.h include xil printf.h include xil cache.h include xtest.h intmain printf init...

AXI4的IP的輸入配置

前面一篇驗證中驗證了axi中的data reg out是輸出快取器。這裡再引入乙個slv reg2作為slv reg1的輸入輸出配置暫存器。這裡先實現乙個簡單的功能 當slv reg2為16 hffff時,slv reg1作為輸入口,否則slv reg1作為輸出口 輸入輸出相對主機而言,方便區分 1...

AXI3和AXI4區別 埠篇

表 2 1 全域性訊號 訊號名 源 描述aclk 時鐘源 全域性時鐘訊號 aresetn 復位源全域性復位訊號,低有效 表2 2 寫位址通道訊號 訊號名 源 描述 awid 3 0 主機 寫位址id,用來標誌一組寫訊號 awaddr 31 0 主機 寫位址,給出一次寫突發傳輸的寫位址 awlen 3...