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

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

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

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

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

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

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

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

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

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

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

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



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

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

    您需要 登錄 才可以下載或查看,沒有賬號?立即注冊

    x
    回復(fù)

    使用道具

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

    您需要登錄后才可以回帖 登錄 | 立即注冊

    本版積分規(guī)則

    關(guān)閉

    站長推薦上一條 /1 下一條


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