第一次接觸AXI 4 總線是在使用xilinx zynq的時(shí)候,當(dāng)時(shí)用的時(shí)候一團(tuán)霧水,現(xiàn)在霧水少了些,但還是有很多地方?jīng)]有接觸到。本文作為自己的總結(jié),有任何問題,歡迎批評(píng)指正。
什么是AXI總線?
AXI 作為 ARM AMBA 微控制器總線的一部分,第一次出現(xiàn)在AMBA 3.0中。后面AMBA 4.0發(fā)布,AXI4出現(xiàn)了。
AXI 4總線和別的總線一樣,都用來傳輸bits信息(包含了數(shù)據(jù)或者地址)。AXI4總線有三種類型,分別是AXI4、AXI4-Lite、AXI4-Stream。
AXI4 是一種高性能memory-mapped總線,AXI4-Lite是一只簡(jiǎn)單的、低通量的memory-mapped 總線,而 AXI4-Stream 可以傳輸高速數(shù)據(jù)流。從字面意思去理解,AXI4-Lite是AXI4的輕量版。這里保留了memory-mapped的寫法,主要是為了與AXI4-Stream區(qū)分開。
memory-mapped 可以這樣去理解,假設(shè)有master A , 和 slave B, A與B通過AXI4或者AXI4-Lite連接通訊,A可以把B這個(gè)外設(shè)看作A上的某個(gè)地址。當(dāng)A向B傳輸數(shù)據(jù)時(shí),就等同于A向這個(gè)地址傳輸數(shù)據(jù)。
AXI4-Stream與AXI4、AXI4-Lite不同, 它不需要地址通道。
AXI4 、 AXI4-Lite 、AXI4-Stream接口
AXI4 和 AXI4-Lite接口包含5個(gè)不同的通道:兩個(gè)讀通道和三個(gè)寫通道。
兩個(gè)讀通道:讀地址通道(read address channel)、讀數(shù)據(jù)通道(read data channel);
三個(gè)寫通道:寫地址通道(write address channel)、寫數(shù)據(jù)通道(write data channel)、寫響應(yīng)通道(write response channel);
AXI4讀通道操作 圖片源自參考[1]
AXI4 寫通道操作 圖片源自參考[1]
讀通道和寫通道是分開的,因此可以完成數(shù)據(jù)的雙向傳輸。此外AXI4能夠?qū)崿F(xiàn)burst傳輸,換句說就是,可以在一個(gè)地址后傳輸多個(gè)數(shù)據(jù),最多可以達(dá)256 字節(jié)。AXI4-Lite不支持burst傳輸。
AXI4-Stream 只有一個(gè)通道,不需要地址,可以burst 傳輸無限的數(shù)據(jù)。
常見的輔助IP
AXI Interconnect IP 和AXI SmartConnect IP :
上文提到AXI4 和 AXI4-Lite采用了memory-mapped 的方式,無論是1個(gè)master和1個(gè)slave、1個(gè)master和N個(gè)slave、N個(gè)master和1個(gè)slave、N個(gè)master和M個(gè)slave,采用這兩個(gè)ip能幫助我們完成映射。
AXI FIFOs :
緩存數(shù)據(jù),或者跨時(shí)鐘域時(shí)有用。
AXI Direct Memory Access (DMA) engines
當(dāng)我們有一個(gè)AXI4-stream接口的IP想與AXI4接口的IP相連時(shí),可以通過AXI DMA完成轉(zhuǎn)換。
ZYNQ上的AXI接口
圖片源自 zynq 7 processing system ip
zynq的ps上共留了9個(gè)AXI接口,其中兩個(gè)GP AXI master、兩個(gè)GP AXI slave、四個(gè)HP AXI slave、以及一個(gè)ACP AXI slave。
這些接口都是AXI3類型的,但使用AXI4-Lite、AXI4 的IP仍然可以與這些接口通訊,因?yàn)樵趯?shí)際使用中,軟件會(huì)使用AXI Interconnect ip幫助我們完成接口的轉(zhuǎn)換。
主要參考
[1] ug1037-vivado-axi-reference-guide
[2] ug585-Zynq-7000-TRM
AXI4-Stream在AXI4家族中相對(duì)來說比較簡(jiǎn)單,接下來主要回答兩個(gè)問題:
(1)AXI4-Stream 傳輸?shù)臄?shù)據(jù)流都包含什么?
(2)AXI4-Stream 的接口信號(hào)有哪些?master和slave是如何握手的?
數(shù)據(jù)流
AXI4-Stream傳輸?shù)臄?shù)據(jù)流包含三種類型:data type、position type、null type。
data type是最有意義的數(shù)據(jù);position type 作為占位符使用,可以用來表征date type 的相對(duì)位置,null type不包含任何有用的信息。
數(shù)據(jù)流的結(jié)構(gòu)可以有很多種,例如:可以只傳數(shù)據(jù),也即都是data type,不包含position type和null type;也可以將data type 和 null type 混著傳輸;還可以將position type 和 data type混著傳輸。當(dāng)然,三者混著傳輸也沒有問題。
全都是data type
data type 和 position type 混搭
那么問題來了,數(shù)據(jù)流傳輸類型有三種,在傳輸?shù)倪^程中如何分辨這三種類型呢?AXI4-Stream的接口信號(hào)可以幫助我們進(jìn)行區(qū)分,接下來看看都有哪些接口信號(hào)。
接口信號(hào)
先來一圖盡覽:
ACLK和ARESETn信號(hào),不必多說,時(shí)鐘和復(fù)位信號(hào);
接下來是TVALID和TREADY信號(hào),這兩個(gè)信號(hào)作為握手信號(hào),分別從master 和 slave發(fā)出。如何握手呢?想想一下,你和別人握手的過程,大概分為三個(gè)階段:雙方心里進(jìn)行某種心理活動(dòng)、伸手、握手上下抖動(dòng);AXI4-Stream上握手也大體經(jīng)歷這三個(gè)過程。
(1)雙方心里進(jìn)行某種心理活動(dòng):相當(dāng)于 master 和 slave 在自己內(nèi)部搞事情,搞完自己的事情才能閑下來去握手,master搞完事情發(fā)出 TVALID high 信號(hào),slave 搞完事情發(fā)出TREADY high 信號(hào)。
(2)伸手的過程其實(shí)比較講究,現(xiàn)實(shí)生活中也是。你和別人握手,可能對(duì)方先伸手、也可能你先伸手、也可能你倆同時(shí)伸手。master和slave也是如此,可能 TVALID high 信號(hào)比TREADY high 早,可能TVALID比TREADY晚,也可能同時(shí)出現(xiàn)。
(3)握手上下抖動(dòng):當(dāng)你們兩個(gè)都抬起了手,接下來就是隆重的握手階段,在握手的時(shí)候,你可以感受到對(duì)方的手那么有力量......master和slave在TVALID 和 TREADY同為高時(shí)開始傳輸數(shù)據(jù)。
TVALID 先高為敬
TREADY 先高為敬
TVALID TREADY 同時(shí)變高
TDATA不多說了,它就是數(shù)據(jù)流。前文中提到在數(shù)據(jù)流中有三種類型,分別為data type、position type和null type,那么在傳輸?shù)臅r(shí)候如何區(qū)分呢?要靠TKEEP和TSTRB。
為了便于說明,假設(shè)n為數(shù)據(jù)總線的字節(jié)數(shù),即TDATA的字節(jié)數(shù),可以把TDATA表示為TDATA[(8*n-1):0],TKEEP和TSTRB有n位,和TDATA上的每個(gè)字節(jié)一一對(duì)應(yīng),二者共同表示TDATA上每個(gè)字節(jié)的類型。舉個(gè)例子,n = 2、TDATA = 0x0036、TKEEP = 2'b01、 TSTRB= 2'b01。由于TKEEP和TSTRB高位為0,那么TDATA的高階字節(jié)為null type;由于TKEEP和TSTRB地位為1,那么TDATA的低階字節(jié)為data type。
有一點(diǎn)需要注意,TKEEP為0、TSTRB為1的情況是不能使用的。
TKEEP 和 TSTRB 表示數(shù)據(jù)流中字節(jié)類型
TLAST信號(hào),用來表示一個(gè)包的結(jié)尾。例如發(fā)送大小為32字節(jié)的包,在發(fā)送第32個(gè)字節(jié)的時(shí)候,可以把TLAST信號(hào)拉高,來表示這個(gè)包發(fā)送完了。
TID和TDEST信號(hào):當(dāng)我們?cè)谕粋€(gè)接口傳輸不同數(shù)據(jù)流時(shí)有用,一般來講,AXIS4-Stream Interconnect Core IP可以幫助我們完成這個(gè)過程。TUSER信號(hào)用來傳輸一些額外的信息。
參考
[1] ug1037-vivado-axi-reference-guide.pdf
[2] IHI0051A_amba4_axi4_stream_v1_0_protocol_spec.pdf
審核編輯 :李倩
-
微控制器
+關(guān)注
關(guān)注
48文章
7552瀏覽量
151426 -
AXI總線
+關(guān)注
關(guān)注
0文章
66瀏覽量
14262
原文標(biāo)題:從零學(xué)習(xí)AXI4總線
文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論