本文首發(fā)于個(gè)人博客
1.AXI總線結(jié)構(gòu)
AXI總線由5個(gè)通道構(gòu)成:
通道名稱 | 通道功能 | 數(shù)據(jù)流向 |
---|---|---|
read address | 讀地址通道 | 主機(jī)->從機(jī) |
read data | 讀數(shù)據(jù)通道(包括數(shù)據(jù)通道和讀響應(yīng)通道) | 從機(jī)->主機(jī) |
write address | 寫地址通道 | 主機(jī)->從機(jī) |
write data | 寫數(shù)據(jù)通道(包括數(shù)據(jù)通道和每8bit一個(gè)byte的寫數(shù)據(jù)有效信號(hào)) | 主機(jī)->從機(jī) |
write response | 寫響應(yīng)通道 | 從機(jī)->主機(jī) |
1.1.AXI通道
讀操作的通道如下圖所示
寫操作的通道如下圖所示
1.2.AXI系統(tǒng)
常見的標(biāo)準(zhǔn)AXI系統(tǒng)如下圖所示绳姨,通常包括:
- AXI master:AXI通信主機(jī)
- AXI slave:AXI通信從機(jī)
- AXI interconnect:AXI通信通路
AXI接口協(xié)議可用于:
- AXI master - AXI interconnect的連接
- AXI slave - AXI interconnect的連接
- AXI master - AXI slave的連接
1.3.AXI接口
1.3.1.全局信號(hào)
信號(hào)名 | 來源 | 描述 |
---|---|---|
ACLK | system clock | 全局時(shí)鐘信號(hào) |
ARESTn | system reset | 全局復(fù)位信號(hào)替蛉,低有效 |
1.3.2.寫地址通道
信號(hào)名 | 來源 | 描述 |
---|---|---|
AWID | master | 寫地址ID(用于區(qū)分該地址屬于哪個(gè)寫地址組) |
AWADDR | master | 寫地址 |
AWLEN | master | 突發(fā)長度 |
AWSIZE | master | 突發(fā)尺寸(每次突發(fā)傳輸?shù)淖铋Lbyte數(shù)) |
AWBURST | master | 突發(fā)方式(FIXED檐迟,INCR,WRAP) |
AWCACHE | master | 存儲(chǔ)類型(標(biāo)記系統(tǒng)需要的傳輸類型) |
AWPROT | master | 保護(hù)模式 |
AWQOS | master | QoS標(biāo)識(shí)符 |
AWREGION | master | region標(biāo)識(shí)符(當(dāng)slave有多種邏輯接口時(shí)標(biāo)識(shí)使用的邏輯接口) |
AWUSER | master | 用戶自定義信號(hào) |
AWVALID | master | 寫地址有效信號(hào)(有效時(shí)表示AWADDR上地址有效) |
AWREADY | master | 寫從機(jī)就緒信號(hào)(有效時(shí)表示從機(jī)準(zhǔn)備好接收地址) |
1.3.3.寫數(shù)據(jù)通道
信號(hào)名 | 來源 | 描述 |
---|---|---|
WDATA | master | 寫數(shù)據(jù) |
WSTRB | master | 數(shù)據(jù)段有效(標(biāo)記寫數(shù)據(jù)中哪幾個(gè)8位字段有效) |
WLAST | master | last信號(hào)(有效時(shí)表示當(dāng)前為突發(fā)傳輸最后一個(gè)數(shù)據(jù)) |
WUSER | master | 用戶自定義信號(hào) |
WVALID | master | 寫有效信號(hào)(有效時(shí)表示W(wǎng)DATA上數(shù)據(jù)有效) |
WREADY | slave | 寫ready信號(hào)(有效時(shí)表示從機(jī)準(zhǔn)備好接收數(shù)據(jù)) |
1.3.4.寫響應(yīng)通道
信號(hào)名 | 來源 | 描述 |
---|---|---|
BID | slave | 響應(yīng)ID |
BRESP | slave | 寫響應(yīng) |
BUSER | slave | 用戶自定義信號(hào) |
BVALID | slave | 寫響應(yīng)信號(hào)有效 |
BREADY | master | 寫響應(yīng)ready(主機(jī)準(zhǔn)備好接受寫響應(yīng)信號(hào)) |
1.3.5.讀地址通道
信號(hào)名 | 來源 | 描述 |
---|---|---|
ARID | master | 讀地址ID |
ARADDR | master | 讀地址 |
ARLEN | master | 突發(fā)長度 |
ARSIZE | master | 突發(fā)尺寸(每次突發(fā)傳輸?shù)腷yte數(shù)) |
ARBURST | master | 突發(fā)類型(FIXED,INCR,WRAP) |
ARCACHE | master | 存儲(chǔ)類型 |
ARPROT | master | 保護(hù)類型 |
ARQOS | master | QoS標(biāo)識(shí)符 |
ARREGION | master | 區(qū)域標(biāo)識(shí)符 |
ARUSER | master | 用戶自定義 |
ARVALID | master | 讀地址有效(有效時(shí)表示ARADDR上地址有效) |
ARREADY | slave | 寫有效信號(hào)(有效時(shí)表示從機(jī)準(zhǔn)備好接收讀地址) |
1.3.6.讀數(shù)據(jù)通道
信號(hào)名 | 來源 | 描述 |
---|---|---|
RID | slave | 讀ID標(biāo)簽 |
RDATA | slave | 讀數(shù)據(jù) |
RRESP | slave | 讀響應(yīng) |
RLAST | slave | 有效時(shí)表示為突發(fā)傳輸?shù)淖詈笠粋€(gè) |
RUSER | slave | 用戶自定義 |
RVALID | slave | 讀數(shù)據(jù)有效信號(hào) |
RREADY | master | 主機(jī)就緒信號(hào)(有效時(shí)表示) |
1.3.7.低功耗接口信號(hào)
信號(hào)名 | 來源 | 描述 |
---|---|---|
CSYSREQ | Clock controller | 該信號(hào)有效時(shí)揖庄,系統(tǒng)退出低功耗模式 |
CSYSACK | Peripheral device | 退出低功耗模式應(yīng)答信號(hào) |
CACTIVE | Peripheral device | 外設(shè)申請(qǐng)時(shí)鐘信號(hào) |
2.AXI接口時(shí)序
2.1.復(fù)位
復(fù)位信號(hào)可以異步復(fù)位,但必須同步釋放欠雌,復(fù)位時(shí)抠艾,信號(hào)要求如下:
- 主機(jī)驅(qū)動(dòng)的所有VALID信號(hào)(ARVALID, AWVALID和WVALID)必須被拉低
- 從機(jī)驅(qū)動(dòng)的所有VALID信號(hào)(RVALID和BVALID)必須被拉低
- 其他信號(hào)無要求
2.2.基本傳輸
2.2.1.握手信號(hào)
握手信號(hào)包括VALID和READY信號(hào),傳輸行為僅在VALID和READY同時(shí)有效時(shí)發(fā)生桨昙。其中:
- VALID信號(hào)表示地址/數(shù)據(jù)/應(yīng)答信號(hào)總線上的信號(hào)是有效的检号,由傳輸發(fā)起方控制
- READY信號(hào)表示傳輸接收方已經(jīng)準(zhǔn)備好接收腌歉,由傳輸接收方控制
VALID和READY的先后關(guān)系具有三種情況:
- VALID先有效,等待READY有效后完成傳輸(VALID一旦有效后在傳輸完成前不可取消)
- READY先有效齐苛,等待VALID有效后完成傳輸(READY可以在VALID有效前撤銷)
- VALID和READY同時(shí)有效翘盖,立刻完成傳輸
此外,需要注意的是允許READY信號(hào)等待VALID信號(hào)再有效凹蜂,即即使從機(jī)準(zhǔn)備好馍驯,也可以不提供READY信號(hào),等到主機(jī)發(fā)送VALID信號(hào)再提供READY信號(hào)玛痊。對(duì)應(yīng)的VALID信號(hào)不允許等待READY信號(hào)汰瘫,即不允許VALID等待READY信號(hào)拉高后再拉高,否則容易產(chǎn)生死鎖現(xiàn)象擂煞。
2.2.1.1.命令通道握手(讀地址混弥,寫地址,寫響應(yīng))
- 僅當(dāng)?shù)刂返刃畔⒂行r(shí)对省,才拉高VALID蝗拿,該VALID必須保持直到傳輸完成(READY置位)
- READY默認(rèn)狀態(tài)不關(guān)心,僅當(dāng)準(zhǔn)備好接收時(shí)拉高READY
2.2.1.2數(shù)據(jù)通道握手(寫數(shù)據(jù)和讀地址)
- 突發(fā)讀寫模式下,僅數(shù)據(jù)信息有效時(shí)才拉高VALID,該VALID必須保持直到傳輸完成上真。當(dāng)突發(fā)傳輸最后一個(gè)數(shù)據(jù)發(fā)送時(shí)拉高LAST信號(hào)
- READY默認(rèn)狀態(tài)不關(guān)心,僅當(dāng)準(zhǔn)備好接收時(shí)拉高READY
2.2.2.通道順序
傳輸中仓手,通道傳輸?shù)南群笥幸韵乱?guī)定
- 寫響應(yīng)通道傳輸必須在寫操作完成以后進(jìn)行
- 讀數(shù)據(jù)通道傳輸必須在讀地址通道傳輸后進(jìn)行
- 必須遵循一系列的狀態(tài)依賴關(guān)系
下文中會(huì)使用一些圖描述依賴關(guān)系。圖表中玻淑,單箭頭表示可以等待有效再置位嗽冒,雙重箭頭表示必須等待有效再置位
2.2.2.1.讀操作順序
上圖為讀操作的依賴關(guān)系,ARREADY可以等待ARVALID信號(hào)岁忘,RVALID必須等待ARVALID和ARREADY同時(shí)有效后(一次地址傳輸發(fā)生)才能能有效
2.2.2.2.寫操作順序
AXI3中寫操作中唯一的強(qiáng)依賴關(guān)系是寫響應(yīng)通道BVALID辛慰,僅當(dāng)WVALID和WREADY信號(hào)同時(shí)有效(數(shù)據(jù)傳輸完成)且WLAST信號(hào)有效(突發(fā)傳輸?shù)淖詈笠粋€(gè)數(shù)據(jù)傳輸完成)后才會(huì)被置位区匠。
在AXI4中干像,定義了額外的依賴關(guān)系,即BVALID必須依賴AWVALID驰弄、AWREADY麻汰、WVALID和WREADY信號(hào)。
3.數(shù)據(jù)結(jié)構(gòu)
3.1.地址通道數(shù)據(jù)結(jié)構(gòu)
AXI總線是基于突發(fā)傳輸?shù)目偩€戚篙,若主機(jī)要開始一次突發(fā)傳輸五鲫,需要傳輸一次地址和相關(guān)控制信號(hào),之后從機(jī)自動(dòng)計(jì)算地址岔擂,但一次突發(fā)傳輸?shù)牡刂贩秶荒芸缭?KB位喂。
3.1.1.突發(fā)傳輸信息
3.1.1.1.突發(fā)長度(AxLEN)
突發(fā)長度為每次突發(fā)傳輸?shù)膫鬏敶螖?shù)浪耘,范圍限制1~16(AXI4增量模式1~256)且不能跨越4kb的地址空間,每次突發(fā)傳輸不允許提前終止(可以通過關(guān)閉所有數(shù)據(jù)字段的方式使一段傳輸數(shù)據(jù)無效塑崖,但傳輸行為必須完成)七冲。每次傳輸?shù)耐话l(fā)長度為AxLEN[3:0] + 1(AXI增量模式AxLEN[7:0] + 1)
- ARLEN[7:0]:讀地址通道的突發(fā)長度接口
- AWLEN[7:0]:寫地址通道的突發(fā)長度接口
對(duì)于回卷模式突發(fā)傳輸,突發(fā)長度僅能是2,4,8或16规婆。
3.1.1.2.突發(fā)尺寸(AxSIZE)
突發(fā)尺寸為每次傳輸?shù)腷yte數(shù)量澜躺,與突發(fā)傳輸?shù)牡刂奉A(yù)測(cè)相關(guān)性很強(qiáng)。每次的突發(fā)尺寸不能超過數(shù)據(jù)通道的寬度抒蚜;若突發(fā)尺寸小于數(shù)據(jù)通道寬度掘鄙,需要指定哪些位數(shù)是有效的。突發(fā)尺寸為2AxSIZE[2:0]嗡髓。
- ARSIZE[2:0]:讀地址通道突發(fā)尺寸
- AWSIZE[2:0]:寫地址通道突發(fā)尺寸
3.1.1.3.突發(fā)類型(AxBURST)
AXI支持三種突發(fā)類型:
- FIXED(AxBURST[1:0]=0b00):固定突發(fā)模式操漠,每次突發(fā)傳輸?shù)牡刂废嗤?/li>
- INCR(AxBURST[1:0]=0b01):增量突發(fā)模式,突發(fā)傳輸?shù)刂愤f增器贩,遞增量與突發(fā)尺寸相關(guān)
- WRAP(AxBURST[1:0]=0b10):回卷突發(fā)模式颅夺,突發(fā)傳輸?shù)刂房梢绯鲂赃f增,突發(fā)長度僅支持2,4,8,16蛹稍。地址空間被劃分為長度【突發(fā)尺寸*突發(fā)長度】的塊吧黄,傳輸?shù)刂凡粫?huì)超出起始地址所在的塊,一旦遞增超出唆姐,則回到該塊的起始地址拗慨。
3.1.2.存儲(chǔ)類型(AxCACHE)
AXI4可支持不同的存儲(chǔ)類型,AxCACHE[3:0]用于描述不同的存儲(chǔ)類型奉芦,如下圖所示
ARCACHE[3:0] | AWCACHE[3:0] | Memory type |
---|---|---|
0000 | 0000 | Device Non-bufferable |
0001 | 0001 | Device Bufferable |
0010 | 0010 | Normal Non-cacheable Non-bufferable |
0011 | 0011 | Normal Non-cacheable Bufferable |
1010 | 0110 | Write-through No-allocate |
1110 (0110) | 0110 | Write-through Read-allocate |
1010 | 1110 (1010) | Write-through Write-allocate |
1110 | 1110 | Write-through Read and Write-allocate |
1011 | 0111 | Write-back No-allocate |
1111 | (0111) 0111 | Write-back Read-allocate |
1011 | 1111 (1011) | Write-back Write-allocate |
1111 | 1111 | Write-back Read and Write-allocate |
3.1.3.Qos標(biāo)識(shí)符(AxQOS)
AXI4總線支持QoS赵抢,該標(biāo)識(shí)符AxQOS[3:0]表示服務(wù)的優(yōu)先級(jí)
3.1.4.REGION標(biāo)識(shí)符(AxREGION)
region標(biāo)識(shí)符用于指定選用的高級(jí)邏輯接口類型,當(dāng)使用該標(biāo)識(shí)符AxREGION[3:0]時(shí)声功,表示有多個(gè)邏輯接口共享該物理接口
3.1.5.權(quán)限標(biāo)識(shí)符(AxPROT)
權(quán)限標(biāo)識(shí)符AxPROT[2:0]用于防止非法傳輸
3.1.6.用戶自定義(AxUSER)
用戶自定義數(shù)據(jù)
3.2.數(shù)據(jù)通道數(shù)據(jù)結(jié)構(gòu)
3.2.1.數(shù)據(jù)選通(WSTRB)
WSTRB的每一位對(duì)應(yīng)數(shù)據(jù)中的8位(1字節(jié))烦却,用于標(biāo)志數(shù)據(jù)中的對(duì)應(yīng)字節(jié)是否有效。即當(dāng)WSTRB[n] = 1時(shí)先巴,標(biāo)志數(shù)據(jù)中WDATA[(8n)+7: (8n)]部分有效其爵。
3.2.2.數(shù)據(jù)(xDATA)
3.2.2.1.窄帶傳輸(Narrow transfers)
當(dāng)傳輸?shù)臄?shù)據(jù)位寬小于xDATA總線帶寬時(shí),為窄帶傳輸伸蚯,每次使用的數(shù)據(jù)位數(shù)不同:
- 固定地址的突發(fā)下摩渺,使用同一段數(shù)據(jù)信號(hào)線
- 在遞增地址和包裝地址的突發(fā)下,使用不同段信號(hào)線
上圖為地址遞增突發(fā)下剂邮,在32位數(shù)據(jù)信號(hào)下使用8bit傳輸?shù)恼瓗鬏斒褂玫奈粩?shù)圖摇幻。第一次傳輸使用0~7位,第二次使用8~15位,依次遞增绰姻;在第五次傳輸時(shí)回到開頭使用0~7位
3.2.2.2.不對(duì)齊傳輸(Unaligned transfers)
當(dāng)傳輸位寬超過1byte枉侧,起始地址不為數(shù)據(jù)總線硬件帶寬(byte單位)整數(shù)倍時(shí),為不對(duì)齊傳輸狂芋。不對(duì)齊傳輸?shù)臅r(shí)候需要配合數(shù)據(jù)選通在第一次傳輸時(shí)將某幾個(gè)byte置為無效棵逊,使第二次突發(fā)傳輸?shù)钠鹗嫉刂罚◤臋C(jī)自動(dòng)計(jì)算)為突發(fā)尺寸的整數(shù)倍。
如圖银酗,突發(fā)尺寸為4byte辆影,若要對(duì)齊傳輸,起始地址要為4的整數(shù)倍黍特。圖中起始地址為0x07蛙讥,因此為非對(duì)齊傳輸。第一次傳輸時(shí)灭衷,前3個(gè)數(shù)據(jù)為無效字段次慢,可以使用數(shù)據(jù)選通WSTRB將前3個(gè)byte置為無效。
上圖是在窄帶傳輸下的非對(duì)齊傳輸啟動(dòng)翔曲。傳輸帶寬為64bit迫像,每次傳輸使用32bit,由于是窄帶傳輸瞳遍,因此每次交替使用低字節(jié)和高字節(jié)∥偶耍現(xiàn)在關(guān)注啟動(dòng)狀態(tài),由于啟動(dòng)地址為7掠械,而硬件帶寬為8bit由缆,則必須由地址0啟動(dòng),設(shè)置前7個(gè)字段為無效猾蒂,那么下次傳輸從地址8開始均唉,滿足不對(duì)齊傳輸。
3.2.3.用戶自定義(*USER)
用戶自定義數(shù)據(jù)
3.3.應(yīng)答通道數(shù)據(jù)結(jié)構(gòu)
3.3.1.響應(yīng)信號(hào)(*RESP)
針對(duì)讀和寫均有響應(yīng)的響應(yīng)信號(hào):
- BRESP[1:0]寫響應(yīng)信號(hào)肚菠,每次突發(fā)傳輸完成后
- RRESP[1:0]讀響應(yīng)信號(hào)(位于讀數(shù)據(jù)通道)
響應(yīng)信號(hào)含義如下:
- OKAY(00):正常訪問正確/特權(quán)訪問失敗/不支持特權(quán)訪問
- EXOKAY(01):特權(quán)訪問成功
- SLVERR(10):從機(jī)錯(cuò)誤舔箭,傳輸失敗
- DECERR(11):互連解碼錯(cuò)誤,傳輸失敗
3.3.2.用戶自定義
用戶自定義數(shù)據(jù)
4.傳輸特性
AXI從機(jī)分為兩種:
- 存儲(chǔ)器從機(jī)(Memory Slave):需要支持所有傳輸特性
- 外設(shè)從機(jī)(Peripheral Slave):僅需要支持指定的操作蚊逢,但是可以保證所有類型的傳輸完成(不要求非指定的操作響應(yīng)正確)
AxCACHE用于指定傳輸特性层扶,傳輸特性用于標(biāo)定傳輸如何在系統(tǒng)中進(jìn)行和系統(tǒng)級(jí)緩存如何處理傳輸。
4.1.存儲(chǔ)器特性
存儲(chǔ)器特性包括4個(gè)位时捌,如下所示:
AxCACHE[0](Bufferable):AxCACHE[0]表示傳輸過程中是否有緩存怒医,當(dāng)該位置為1時(shí)炉抒,表示表示傳輸路徑上具有buffer(可延遲transaction到達(dá)最終點(diǎn)的時(shí)間)
-
AxCACHE[1](Modifiable):標(biāo)記傳輸是否可以被修改/優(yōu)化奢讨,當(dāng)其置0時(shí),每個(gè)傳輸將不會(huì)被更改,具體來說拿诸,AxADDR扒袖、AxSIZE、AxLEN亩码、AxBURST季率、AxLOCK和AxPROT信號(hào)不會(huì)被修改(地址,突發(fā)傳輸信息描沟,傳輸隱私信息不被修改)飒泻。但是AxCACHE[0]、ID和QoS可能被修改吏廉,同時(shí)泞遗,一個(gè)突發(fā)長度長于16的突發(fā)傳輸可能被切開,但是保證傳輸效果相同席覆。當(dāng)該位置1時(shí)史辙,除了以上可能發(fā)生的改變,另外:
- 多個(gè)傳輸可能被合并為一個(gè)傳輸佩伤,一個(gè)傳輸可能被切分為多個(gè)傳輸
- 讀傳輸在從機(jī)端讀出的數(shù)據(jù)可能多于主機(jī)的請(qǐng)求(多的數(shù)據(jù)被保存在cache中用于優(yōu)化數(shù)據(jù)訪問)
- 寫傳輸可能訪問到超過主機(jī)請(qǐng)求的地址范圍聊倔,妥善使用WSTRB保證僅有需要的地址被覆蓋
另外,AxLOCK和AxPROT信號(hào)仍然不能被改變生巡,同時(shí)需要注意的是:AxCACHE[0]=0耙蔑,具有相同的AXI ID和指向相同的從機(jī)的一系列傳輸?shù)捻樞虿荒芨淖儭?/p>
AxCACHE[2](Read-allocate)和AxCACHE[3](Write-allocate):讀寫操作前是否檢查緩存以優(yōu)化傳輸
4.2.存儲(chǔ)器類型
通過ARCACHE和AWCACHE的不同定義不同的存儲(chǔ)器類型