AXI4總線(1)
(1)五個(gè)通道:寫地址通道,寫數(shù)據(jù)通道,寫響應(yīng)通道,讀地址通道,讀數(shù)據(jù)通道
每一個(gè)通道都有握手信號(hào)vaild,ready信號(hào)
必須檢測(cè)到vaild,ready信號(hào)同時(shí)都為高電平,即握手成功的時(shí)候,數(shù)據(jù)輸出

(2)通道信號(hào)列表
全局信號(hào):ACLK / ARESETn
寫地址通道:
M_AXI_AWID?[?3:?0],
M_AXI_AWADDR ?[ 31: 0]的最高四位表示的AXI主機(jī)的ID號(hào)碼
M_AXI_AWLEN? ?[ 7?:?0]表示突發(fā)長(zhǎng)度,0-255表示的1到256個(gè)數(shù)據(jù)的突發(fā)長(zhǎng)度
M_AXI_AWSIZE ?[ 3 : 0]表示寫數(shù)據(jù)通道的數(shù)據(jù)位寬,此數(shù)據(jù)為0011的,寫數(shù)據(jù)位寬8字節(jié)
M_AXI_AWSIZE ?[?3?:?0]數(shù)據(jù)在以前的版本最大128字節(jié),AXI版本有所拓寬

M_AXI_AWBURST [ 1 : 0] ?= ?2'b01表示自增突發(fā)模式
需要注意的是自增突發(fā)模式的突發(fā)長(zhǎng)度只能支持1-256的突發(fā)長(zhǎng)度
使用突發(fā)傳輸,必須要使用自增的地址突發(fā)模式,
即一次突發(fā)只需要給一個(gè)頭地址,后續(xù)操作,會(huì)默認(rèn)地址自增1

M_AXI_AWVAILD?
S_AXI_AWREADY
寫數(shù)據(jù)通道:
M_AXI_WID[3:0]
M_AXI_WSTRB數(shù)據(jù)掩碼信號(hào),其位寬和M_AXI_WDATA位寬有關(guān)
寫地址通道的M_AXI_AWSIZE決定的寫數(shù)據(jù)的字節(jié),多少字節(jié),M_AXI_WSTRB 就多少bit
M_AXI_WSTRB信號(hào)每一個(gè)bit控制M_AXI_WDATA每一個(gè)字節(jié)的數(shù)據(jù)掩碼。
M_AXI_WLAST信號(hào)在寫數(shù)據(jù)通道握手過(guò)程中的最后一個(gè)數(shù)據(jù)拉高一個(gè)周期。
M_AXI_WVAILD?
S_AXI_WREADY
寫響應(yīng)通道:
S_AXI_BID[3:0]是寫響應(yīng)通道的ID,屬于從機(jī)控制的信號(hào)
S_AXI_BRESP[1:0]是寫響應(yīng)通道的結(jié)果
S_AXI_BVAILD
M_AXI_BREADY

讀地址通道:
M_AXI_ARID[3:0]
M_AXI_ARADDR[31:0]
M_AXI_ARLEN [ 7 :0]
M_AXI_ARSIZE[ 3 :0]
M_AXI_ARBURST[1?:0] = 2'b01表示突發(fā)時(shí)候,地址自增模式
M_AXI_ARVAILD
S_AXI_ARREADY
讀數(shù)據(jù)通道:
S_AXI_RID[3:0]
S_AXI_RDATA[? :0]
S_AXI_RLAST
S_AXI_RVAILD
M_AXI_RREADY
(3)傳輸數(shù)據(jù)順序
對(duì)于寫數(shù)據(jù),握手的順序必須是
寫地址通道握手->寫數(shù)據(jù)通道握手->寫響應(yīng)通道握手
對(duì)于讀取數(shù)據(jù),握手的順序必須是
讀地址通道握手->讀數(shù)據(jù)通道握手
如果不按照順序傳輸數(shù)據(jù),極有可能造成AXI死鎖
(4)AXI傳輸重點(diǎn)問(wèn)題
1)AXI突發(fā)傳輸,自增模式,支持的突發(fā)傳輸長(zhǎng)度為1-256
2)AXI突發(fā)傳輸,F(xiàn)ixed模式,每一次突發(fā)傳輸?shù)哪J降牡刂范家粯?,類似FIFO
3)AXI突發(fā)傳輸,WRAP Type模式,突發(fā)地址經(jīng)過(guò)一個(gè)圈之后回到源地址
4)AXI必須滿足對(duì)應(yīng)的讀寫時(shí)序,否則會(huì)進(jìn)入死鎖
5)AXI4總線已經(jīng)將WID信號(hào)刪除,
(5)AXI的OutStanding
1)寫地址通道首先連續(xù)寫多個(gè)寫地址,然后寫數(shù)據(jù)通道再連續(xù)發(fā)送寫數(shù)據(jù)
2)讀地址通道首先連續(xù)寫多個(gè)讀地址,在讀數(shù)據(jù)通道再連續(xù)接收讀數(shù)據(jù)

3)? 假設(shè)沒(méi)有outstanding,必須要等到地址握手成功了才可以傳輸數(shù)據(jù) ,
4)難以實(shí)現(xiàn)真正的全流水和滿性能。
5)outstanding就是發(fā)出去的地址數(shù)量,未處理的地址可以先存放在AXI總線的緩存里。
6)等完成一次傳輸事物之后,無(wú)需再握手傳輸?shù)刂罚纯闪⒓催M(jìn)行下一次的數(shù)據(jù)傳輸
7)AXI協(xié)議真是因?yàn)榇嬖趏utstanding和burst傳輸才比AHB/APB的傳輸帶寬大很多。
8)有了outstanding的支持,master可以不用等待上一筆transaction結(jié)束,就直接連續(xù)發(fā)送多筆請(qǐng)求。
(6)AXI亂序
1)AXI的亂序是對(duì)應(yīng)的單主機(jī)對(duì)應(yīng)的單一從機(jī)的情況
2)AXI4將WID信號(hào)刪除,默認(rèn)數(shù)據(jù)在outstanding下,寫地址和寫數(shù)據(jù)是順序發(fā)送的
3)但是倫理上說(shuō)寫響應(yīng)通道,接收的BID數(shù)據(jù)可以是亂序的,對(duì)應(yīng)BID即可
4)但是寫地址通道的同一個(gè)ARID的不同數(shù)據(jù)包,BID必須要按照時(shí)間順序接收
3)AXI4讀地址通道ARID和讀數(shù)據(jù)通道RID對(duì)應(yīng),即ARID為0的地址,接收RID為0的數(shù)據(jù)
4)AXI的亂序表示同一個(gè)ARID序號(hào)需要按照發(fā)射順序返回讀取的值,不同的ARID序號(hào)可以以任意順序返回值

(6)AXI交織
1)AXI4沒(méi)有WID,所以不支持交織
2)AXI有WID,支持交織,意思就是每一個(gè)AWID和WID對(duì)應(yīng),即可以先連續(xù)發(fā)送兩個(gè)寫地址通道的數(shù)據(jù),再通過(guò)outstanding(帶突發(fā)模式),交織發(fā)送不同地址的數(shù)據(jù),讀數(shù)據(jù)的時(shí)候就是交織讀取不同通道的數(shù)據(jù)。類似下圖。

(7)AXI死鎖
單主機(jī)單從機(jī)死鎖
1)AXI4沒(méi)有WID,所以比較嚴(yán)格,即寫數(shù)據(jù)通道的數(shù)據(jù)必須嚴(yán)格的按照寫地址通道的數(shù)據(jù)順序傳送,比如AW通道發(fā)送ADDR0,ADDR1,ADDR2三筆寫操作,每個(gè)寫操作burst length=2,那么W通道的順序在AXI4協(xié)議的規(guī)定下必須為:WDATA0_0,WDATA0_1,WDATA1_0,WDATA1_1,WDATA2_0,WDATA2_1;
2)AXI3協(xié)議WID,所以可以交織發(fā)送,時(shí)序比較靈活,但是第一幀數(shù)據(jù)必須按照寫地址順序來(lái),即交織的第一幀數(shù)據(jù)必須按照寫地址數(shù)據(jù)順序來(lái)傳輸,同樣上述的例子,AXI3的寫數(shù)據(jù)通道就可以為WDATA0_0,WDATA1_0,WDATA2_0(前三個(gè)順序不可以換),WDATA0_1,WDATA1_1, WDATA2_1
如果違反了上述操作就會(huì)造成死鎖
多主機(jī)多從機(jī)典型的蝴蝶結(jié)死鎖
這一段參考CSDN大神文章



常碰到的死鎖
1)在寫地址-寫數(shù)據(jù)的時(shí)候,將bready信號(hào)直接全程拉高,方便操作,但是會(huì)造成死鎖
2)因?yàn)閄ilinx 的IP核在寫數(shù)據(jù)的時(shí)候就將bvaild拉高
3)這樣就造成了數(shù)據(jù)還沒(méi)有傳輸完,就造成寫響應(yīng)先握手了,死鎖。