電子產(chǎn)業(yè)一站式賦能平臺(tái)

PCB聯(lián)盟網(wǎng)

搜索
查看: 21|回復(fù): 0
收起左側(cè)

深入理解AXI協(xié)議中Narrow burst

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
匿名  發(fā)表于 昨天 11:59 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
——————————————————————————————
版權(quán)聲明:
本文作者:烓圍瑋未。主要從事ISP/MIPI/SOC/車規(guī)芯片設(shè)計(jì)/SOC架構(gòu)設(shè)計(jì)
首發(fā)于知乎專欄:芯片設(shè)計(jì)進(jìn)階之路
微信公眾號(hào):芯片設(shè)計(jì)進(jìn)階之路(x_chip)
轉(zhuǎn)發(fā)必須授權(quán),同時(shí)保留這段聲明,盜版必究!
——————————————————————————————
Narrow Burst (AXI 協(xié)議稱為Narrow Transfer)雖然在實(shí)際的設(shè)計(jì)中使用的比較少,但是它對(duì)系統(tǒng)總線的設(shè)計(jì)卻有比較大的影響,對(duì)應(yīng)支持Narrow Burst的Master IP,系統(tǒng)一定要妥善的支持,否則就會(huì)導(dǎo)致功能不正確。所以對(duì)這個(gè)概念還是必須有非常準(zhǔn)確的理解。下面我們總結(jié)一下Narrow Transfer。
AXI Burst[/ol]雖然ARM 把AMBA協(xié)議寫的很精簡(jiǎn),能不多說(shuō)一個(gè)字就不浪費(fèi)任何的單詞,而且能不畫圖說(shuō)明的一定不給你畫圖解釋,但是協(xié)議的定義還是比較嚴(yán)謹(jǐn)和準(zhǔn)確的。我們?cè)诶斫飧拍畹臅r(shí)候,還是以協(xié)議的原文為準(zhǔn),不懂就多讀幾次。
AXI通過(guò)AxBurst信號(hào)來(lái)區(qū)分,定義了三種burst類型,從AXI3~AXI5這個(gè)類型一直沒(méi)變過(guò):

FIXED:這種突發(fā)類型用于對(duì)同一位置的重復(fù)訪問(wèn),例如加載或清空FIFO時(shí)。
在整個(gè)突發(fā)傳輸中,每個(gè)傳輸?shù)牡刂范枷嗤?li>同一個(gè)burst內(nèi)的每一個(gè)beats的byte lanes數(shù)目保持一致,但可以通過(guò)WSTRB選擇每個(gè)beat的哪些byteLane是有效bytes。
Burst長(zhǎng)度最多可以等于16。
[/ol][/ol]注意:Fixed類型的burst基本只有一個(gè)應(yīng)用場(chǎng)景,那就是FIFO的讀寫。另外,雖然AXI4增加了burst length的最大值,但是Fiexed的最大burst length并沒(méi)有增加,仍然是16.
INCR: 這種突發(fā)類型中,每個(gè)傳輸?shù)牡刂范际乔耙粋(gè)傳輸?shù)刂返脑隽俊?br /> 增量值取決于事務(wù)的大小。例如,對(duì)于一個(gè)4字節(jié)大小的對(duì)齊起始地址,每次傳輸?shù)牡刂肥乔耙粋(gè)地址加4。
這種突發(fā)類型用于訪問(wèn)DDR等。
[/ol][/ol]INCR類型的burst是最常見(jiàn)的burst。由于現(xiàn)代大部分SOC都是以DDR為中心的,所以很多master主要支持INCR類型的burst,其他的兩種可能都不支持。
這里重點(diǎn)強(qiáng)調(diào)一下:AXI的transcation之間是獨(dú)立的!
比如下這個(gè)讀傳輸,burst=4,INCR類型:

請(qǐng)問(wèn),第一個(gè)綠色的transcation和第二個(gè)藍(lán)色的transcation之間是什么關(guān)系?答案是:沒(méi)有關(guān)系!
AXI的一個(gè)transcation就是一個(gè)獨(dú)立的,完整的傳輸。Slave在接受到命令的時(shí)候,是不用依賴前一個(gè)或者后一個(gè)transcation信息就能完整處理當(dāng)前transcation的所有操作。比如,你只發(fā)一個(gè)transcation,難道slave就不能接受嗎?
所以:burst類型以transcation為邊界的,也就是定義的是transcation內(nèi)部的規(guī)則。
那么這里為什么transcation1和transcation2看起來(lái)這么連續(xù),非常符合INCR連續(xù)遞增的特點(diǎn)呢?這是因?yàn)閷?shí)際使用中,單個(gè)transcation并不能傳輸完Master需要的數(shù)據(jù),而Master需要的數(shù)據(jù)往往是一大塊連續(xù)的地址,所以幾個(gè)連續(xù)的transcation看起來(lái)地址是連續(xù)的,這和協(xié)議沒(méi)有任何關(guān)系。
比如下面這種傳輸是不是INCR? 仍然是的,只是實(shí)際使用這么發(fā)的比較少而已。

WRAP:這種突發(fā)類型與INCR類似,但如果達(dá)到了一個(gè)上限地址,地址會(huì)回繞到一個(gè)較低的地址。
最低地址是對(duì)齊到要傳輸數(shù)據(jù)的總大小的,即大小 * 長(zhǎng)度。這個(gè)地址被稱為Wrap Boundary。
每次傳輸后,地址的增量與INCR突發(fā)相同。然而,如果這個(gè)增量后的地址是(包裝邊界 + (大小*長(zhǎng)度)),那么地址會(huì)回繞到Wrap Boundary。
事務(wù)中的第一個(gè)傳輸可以使用高于Wrap Boundary的地址,但受到WRAP事務(wù)限制條件的約束。當(dāng)?shù)谝粋(gè)地址高于Wrap Boundary時(shí),地址會(huì)回繞。
起始地址必須與每個(gè)transfer的大小對(duì)齊。
Burst的長(zhǎng)度必須是2、4、8或16個(gè)傳輸。
以下是一些限制條件:
WRAP事務(wù)的行為如下:
這種Burst類型用于緩存行訪問(wèn)。
[/ol][/ol]WARP類型屬于三種里面最難理解的,首先是限制:
  • 起始地址必須與每個(gè)transfer的大小對(duì)齊。transfer大小就是數(shù)據(jù)位寬,比如32bit就是4byte,地址都是按照byte為最小單位的。所以WRAP類型的起始地址和AXI位寬的對(duì)應(yīng)關(guān)系如下:
    [/ol]AXI 位寬32bit -------------------------WRAP 起始地址對(duì)齊到4:0x0,0x4,0x8,0xc, 不能出現(xiàn)0x2,0x6這些;
    AXI 位寬64bit -------------------------WRAP 起始地址對(duì)齊到8:0x0,0x8 不能出現(xiàn)0x2,0x4,0x6這些;
    AXI 位寬128bit -----------------------WRAP 起始地址對(duì)齊到16:0x00,0x10,最低位不能出現(xiàn)非0地址;
    AXI 位寬256bit -----------------------WRAP 起始地址對(duì)齊到32:0x00,0x20,0x20的倍數(shù);
  • Burst長(zhǎng)度不能是1, 只能是2,4,8,16其中一個(gè)。
    [/ol]而WRAP burst的應(yīng)用場(chǎng)景主要就是Cache line的訪問(wèn),所以一般都是帶cache的CPU和GPU等IP來(lái)使用,其他的IP很少用到。
    當(dāng)發(fā)生cache miss時(shí),從memory讀回來(lái)的是整個(gè)cache line。如果不支持WRAP Burst那么就必須從cache line的起始地址開(kāi)始讀數(shù)據(jù):

    如上圖,CPU需要的數(shù)據(jù)是D06,但是CPU不支持WRAP Burst,所以必須從D00開(kāi)始讀,那么如果CPU不支持亂序執(zhí)行,那么CPU就必須停止執(zhí)行,等D00~D05讀完,拿到D06后再繼續(xù)執(zhí)行。這樣對(duì)CPU的性能影響是非常大的。
    如果支持WRAP Burst,就可以第一個(gè)訪問(wèn)D06,CPU繼續(xù)執(zhí)行,不會(huì)影響CPU性能。
    WRAP地址的上下界的計(jì)算大家可以去看一下協(xié)議,很多文章說(shuō)明過(guò),這里就不展開(kāi)了。
    Narrow Transfer[/ol]AXI 協(xié)議定義的Narrow Transfer如下:

    也就是如果傳輸?shù)膖ransfer的實(shí)際有些的數(shù)據(jù)位寬小于實(shí)際的data channel的位寬,則為Narrow Transfer。在Narrow Transfer中,AXI總線的某些數(shù)據(jù)位寬不會(huì)被使用,因此需要通過(guò)寫使能信號(hào)(WSTRB)來(lái)指示哪些字節(jié)通道是有效的。

    注意,只有寫通道有STRB信號(hào),也就是Narrow Transfer只是會(huì)發(fā)生在寫通道。這也很好理解,讀數(shù)據(jù)是slave返回的, 使用STRB信號(hào)并不會(huì)帶來(lái)任何收益,需要的帶寬不會(huì)減少,而且還需要增加一個(gè)信號(hào),更好的方式是把數(shù)據(jù)都讀回來(lái),master需要用哪些自己來(lái)決定。
    注意:WSTRB并不是Narrow transfer的充分必要條件,也就是說(shuō)出現(xiàn)了WSTRB并不代表這個(gè)tranfer就是Narrow Transfer. 在非對(duì)齊的傳輸中,也會(huì)用到WSTRB,而且協(xié)議并沒(méi)有規(guī)定WSTRB是連續(xù)的。
    協(xié)議規(guī)定的Narrow Tansfer分為兩種不同情況:
    1.如果是INCR 或者 WRAP Burst,那么每個(gè)transfer(beat)使用不同的byteLane;
    2.如果是FIXED Burst,那么每個(gè)transfer(beat)使用相同的byteLane;
    如下圖中起始地址是0,INCR Burst Len=5, 總線寬度是32bit,transfer是8bit,傳輸情況如下:

    那么這種情況下,AWSIZE是多少呢?



    可以看到,SIZE表明的是每個(gè)傳輸中最大的byte數(shù),這里需要注意是最大。所以這里AWSIZE=0b00;
    那么對(duì)于下面的BURST=2, 數(shù)據(jù)位寬是32bit的傳輸屬于Narrow transfer嗎?

    顯然這里不符合每個(gè)transfer(beat)使用不同的byteLane的條件,所以不是Narrow Transfer。這種傳輸在實(shí)際的Master里面還是比較常見(jiàn)的。
    另外這里的AWSIZE=0b010 (4byte per transfer)
    所以協(xié)議雖然沒(méi)有明確說(shuō)明,但是從協(xié)議的規(guī)定可以看到:
    1.如果burst length =1,有WSTB就可以認(rèn)為是Narrow transfer,也可以認(rèn)為是非Narrow tranfer,對(duì)傳輸無(wú)影響,slave通過(guò)WSTB來(lái)解析數(shù)據(jù)就可以。
    2.如果burst length >1,那么Narrow Transfer的burst的AWSIZE必須小于數(shù)據(jù)位寬能傳輸?shù)淖畲骲yte數(shù),也就是每個(gè)tranfer的數(shù)據(jù)量都必須小于數(shù)據(jù)通道的位寬才行,而且必須滿足每個(gè)transfer(beat)使用不同的byteLane。
    后記技術(shù)很重要,技術(shù)背后的思想更重要!
    技術(shù)背后的某些思想就是你解決以后問(wèn)題的鑰匙。我的文章可能一篇中知識(shí)點(diǎn)不太多,但是力求讓你能深入理解,為你進(jìn)階打下基礎(chǔ)。如果有一點(diǎn)點(diǎn)收獲,也算是我對(duì)中國(guó)芯片行業(yè)的一點(diǎn)點(diǎn)貢獻(xiàn)吧。
    贈(zèng)人玫瑰,手有余香。如果你有所收獲,麻煩花一秒時(shí)間幫我點(diǎn)個(gè)贊和在看吧,謝謝!
    知乎專欄:芯片設(shè)計(jì)進(jìn)階之路
    微信公眾號(hào):芯片設(shè)計(jì)進(jìn)階之路 x_chip
    ——————————————————————————————
  • 本帖子中包含更多資源

    您需要 登錄 才可以下載或查看,沒(méi)有賬號(hào)?立即注冊(cè)

    x
    回復(fù)

    使用道具

    發(fā)表回復(fù)

    本版積分規(guī)則

    關(guān)閉

    站長(zhǎng)推薦上一條 /1 下一條


    聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表