深入理解AXI協(xié)議中的outstanding/out-of-order/interleaving(二)
——————————————————————————————
版權(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),同時保留這段聲明,盜版必究!
——————————————————————————————
為了詳細(xì)了解,outstanding,out-of-order,interleaving對傳輸?shù)挠绊,下面用枚舉法,把各種情況進(jìn)行分析。
1. 一個master訪問一個salve
規(guī)則:同一個ID:可以發(fā)送多個outstanding(OST),但是必須按照順序回來;不同ID: 可以發(fā)送多個OST,不同ID的transaction可以亂序返回;如果不支持outstanding,那么必須等到response返回才能發(fā)下一筆命令。
如果支持outstanding,那么master可以不必等到response返回,連續(xù)發(fā)送命令。
添加圖片注釋,不超過 140 字(可選)
2.一個master訪問兩個salve
一個master訪問多個slave,必須有中間的BUS/NOC/仲裁器來進(jìn)行仲裁,SOC中一般使用NOC, 通過不同地址區(qū)分訪問的是slave0還是slave1。這里slave0和slave1的地址不能重疊,否則會導(dǎo)致系統(tǒng)出錯。
添加圖片注釋,不超過 140 字(可選)
2.1 Master寫
規(guī)則:
同一個ID:可以發(fā)送多個OST,但是必須按照順序回來;
不同ID:可以發(fā)送多個OST, 返回可以亂序;
讀和寫是獨(dú)立通道,沒有關(guān)系;
[/ol]2.1.1 Master不支持outstanding
如果master不支持outstanding,那么master必須等待response回來后才能繼續(xù)發(fā)下一個transaction,如下圖所示:
添加圖片注釋,不超過 140 字(可選)
發(fā)給slave0和slave1的transaction通過綠色和藍(lán)色來區(qū)分;
由于命令和響應(yīng)通道(ADDR 和RESP)占的帶寬和時間都非常小,總線主要關(guān)心數(shù)據(jù)通路的效率,目標(biāo)是讓數(shù)據(jù)通道效率能到達(dá)最大。如上圖可以看到,在master不支持outstanding情況下,DATA通路會產(chǎn)生很多空的“氣泡”,使得總線的效率降低。
2.1.2 Master支持outstanding
如果master支持outstanding,這里假設(shè)OST=4, 那么master可以在第一個response返回前,連續(xù)發(fā)送4個命令(ADDR), 如下圖所示:
添加圖片注釋,不超過 140 字(可選)
master發(fā)給slave0和slave1總共的OST=4,所以必須在master發(fā)了ADDR2到slave0后,必須等待BRESP0返回后,才能繼續(xù)發(fā)送下一個地址(ADDR1),如圖中紅色所示;
由于master能支持OST,可以看到數(shù)據(jù)通路的“氣泡”消失了,總線利用率大大提高,而且對每個命令來說,從發(fā)送到收到BRESP的總時間也減少了。所以至少有以下三個優(yōu)點(diǎn):
提高了總線利用率;
減少了單個命令的延時;(前提是master能及時發(fā)送命令)
減少了對系統(tǒng)總線的占用時間;
[/ol]2.1.3 Master不支持out-of-order
如果master不支持outstanding,那么必須等待當(dāng)前命令的response返回,才能發(fā)送下一個命令,所以不存在多個response的out-of-order返回的情況。
所以支持out-of-order的前提是支持outstanding。如果master不支持out-of-order,假設(shè)一種情況如下所示:
添加圖片注釋,不超過 140 字(可選)
這里雖然發(fā)給slave1的ADDR0(藍(lán)色)命令比master發(fā)給slave0的ADDR1(綠色)命令晚,但是由于slave1相應(yīng)比較快,所以藍(lán)色的BRESP0比綠色的BRESP1早返回。如圖中兩個箭頭所示。
由于master不支持接受response的out-of-order返回,master只能按照發(fā)送命令的順序來處理
所以slave1的BRESP0返回后,master其實(shí)在等待slave0的BRESP1,在沒有處理完slave0的BRESP1前,master是無法處理slave1的BRESP0,所以只能丟掉slave1的BRESP0,或者根據(jù)設(shè)計(jì)不同,可能會卡死m(xù)aster。
所以,如果master支持寫outstanding,但是不支持寫response的out-of-order返回,其實(shí)是有問題的,要么數(shù)據(jù)丟失,要么master卡死。其實(shí)對照AXI協(xié)議我們知道,寫response通道的位寬比較小,只有2~3bit的數(shù)據(jù),支持寫response的out-of-order的代價(jià)其實(shí)非常小。
所以,如果AXI master支持寫outstanding,那么必須支持寫response的out-of-order。如果你碰到的master不支持寫response的out-of-order,那這就是一個很差的設(shè)計(jì),你有足夠的理由要求設(shè)計(jì)人員重新修改設(shè)計(jì)。
順便提一句,有很多設(shè)計(jì)人員,甚至是十幾年二十年工作經(jīng)驗(yàn)的設(shè)計(jì)人員,在設(shè)計(jì)AXI的master的時候,往往忽略寫response的處理,也就是只要發(fā)送了命令和數(shù)據(jù),不等寫response返回就認(rèn)為這筆傳輸已經(jīng)完成了。這是一個非常嚴(yán)重的設(shè)計(jì)bug,會導(dǎo)致整個系統(tǒng)不能確實(shí)寫數(shù)據(jù)是不是真的寫到了最后的目的地,比如DDR。對軟件使用造成了很多困擾,這里重點(diǎn)提醒一下。寫response的處理是一個代價(jià)非常小的邏輯,在設(shè)計(jì)的時候,請務(wù)必考慮到。
2.1.4 Master支持out-of-order
Master支持outstanding和out-of-order情況下,上面的傳輸變成如下圖所示:
添加圖片注釋,不超過 140 字(可選)
正常傳輸沒有任何影響,只是master需要增加一個BRESP的緩存,把亂序返回的BRESP暫存。
注意:由于AXI4去掉了寫交織,而且寫交織基本沒有設(shè)計(jì)會使用,所以這里不討論寫交織的支持情況。
2.2 Master讀
2.2.1 Master不支持outstanding
如果master不支持outstanding,那么master必須等待rdata和response回來后才能繼續(xù)發(fā)下一個transaction,如下圖所示:
添加圖片注釋,不超過 140 字(可選)
2.2.2 Master支持outstanding
如果master支持outstanding,這里假設(shè)OST=4, 那么master可以在第一個response返回前,連續(xù)發(fā)送4個命令(ADDR), 如下圖所示:
添加圖片注釋,不超過 140 字(可選)
由于第一個transaction的數(shù)據(jù)在D03處已經(jīng)完成,這時就可以直接發(fā)下一個命令A(yù)DDR1(藍(lán)色)了。
2.2.3 Master不支持out-of-order
如果master不支持outstanding,那么必須等待當(dāng)前命令的rdata和response返回,才能發(fā)送下一個命令,所以不存在多個response的out-of-order返回的情況。
所以支持out-of-order的前提是支持outstanding。如果master讀不支持out-of-order,假設(shè)一種情況如下所示:
添加圖片注釋,不超過 140 字(可選)
由于master不支持out-of-order,所以必須先處理slave0的D10~D13, master無法處理先從slave1返回的D00~D03數(shù)據(jù),master要么丟掉這些數(shù)據(jù),要么master被卡死。
所以master AXI read如果支持outstanding,一般都需要支持讀數(shù)據(jù)返回out-of-order;如果實(shí)在碰到master只支持讀outstanding而不支持讀out-of-order,那就需要系統(tǒng)總線或者額外設(shè)計(jì),把送回給master的數(shù)據(jù)進(jìn)行排序,實(shí)現(xiàn)復(fù)雜性比較大,實(shí)際中確實(shí)也會碰到這種情況。對這種有問題的IP最好的方式還是修改IP。
2.2.4 Master支持out-of-order
Master支持outstanding和out-of-order情況下,上面的傳輸變成如下圖所示:
添加圖片注釋,不超過 140 字(可選)
對傳輸和帶寬都沒有影響,代價(jià)是需要master對返回的數(shù)據(jù)進(jìn)行重排序或者重新分發(fā)。由于這里有可能需要對rdata進(jìn)行重排,所以會增加master的開銷。但是相對于系統(tǒng)性能,這個代價(jià)是值得的。
2.2.5 Master不支持interleaving
interleaving是一個burst內(nèi)的概念,AXI的rdata可以選擇支持rdata的interleaving,進(jìn)一步提高性能。如果不支持interleaving,那么一個burst的數(shù)據(jù)必須按照第一個到最后一個為一個整體來返回,如下所示:
添加圖片注釋,不超過 140 字(可選)
一個burst之內(nèi)的數(shù)據(jù),必須按照0,1,2,3這樣的順序返回。interleaving主要看slave的返回順序,是否支持主要是slave的能力,但是也需要master支持。
2.2.6 Master支持interleaving
如果在進(jìn)行AXI Read的時候支持interleaving,那么slave可以把一個burst打亂,只要其他burst的一筆數(shù)據(jù)ready了就可以返回,如下:
添加圖片注釋,不超過 140 字(可選)
可以看到,burst間插入了其他burst的數(shù)據(jù),這樣transfer粒度的數(shù)據(jù)就被利用起來了,進(jìn)一步提高了總線利用率。
但是需要slave和master都要能支持,會增加slave和master的復(fù)雜性,而且會拉長傳輸對系統(tǒng)總線的占用時間。所以個人認(rèn)為AXI read支持interleaving的優(yōu)勢并不明顯,更好的方式是slave能緩存一個burst的數(shù)據(jù),一旦開始響應(yīng)master的讀,就連續(xù)的返回一個burst的數(shù)據(jù)。這樣既能提高總線利用率,又能減少對系統(tǒng)總線的占用時間。實(shí)際中是否支持AXI read interleaving主要和IP設(shè)計(jì)相關(guān)。
到這里,我們并沒有分析中間的BUS,其實(shí)實(shí)際中,連接master和slave的bus才是關(guān)鍵,下一篇文章會通過分析兩個master訪問兩個slave的情況來進(jìn)行詳細(xì)分析。
后記
技術(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
—————————————————————————————————————————————— |