——————————————————————————————
版權(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í)保留這段聲明,盜版必究!
——————————————————————————————
為了詳細(xì)了解,outstanding,out-of-order,interleaving對(duì)傳輸?shù)挠绊,繼續(xù)進(jìn)行場(chǎng)景分析。
在分析了各種場(chǎng)景下outstanding,out-of-order,interleaving的好處后,對(duì)更復(fù)雜的場(chǎng)景,比如soc中多master訪問(wèn)多個(gè)slave的情況,這些可以分解為基本場(chǎng)景,只是在總線部分有些差異,這些主要是總線設(shè)計(jì)的內(nèi)容。
下面主要討論一下,在支持outstanding,out-of-order,interleaving的情況下,對(duì)ID的處理。
1. 一個(gè)master訪問(wèn)兩個(gè)salve
先分析一下一個(gè)master訪問(wèn)兩個(gè)slave的ID使用。
假設(shè)Master OST=4, Master先給Slave0發(fā)了一個(gè)ID=0的命令,那么Master能否繼續(xù)以ID=0給Slave1發(fā)送命令呢?
結(jié)論是不行:
BUS區(qū)分訪問(wèn)slave0還是slave1是按照地址來(lái)區(qū)分的,但是slave返回response給master的時(shí)候只有ID信息,沒(méi)有address信息。所以BUS和master是沒(méi)有辦法來(lái)區(qū)分返回response是來(lái)自slave0還是slave1的,BUS會(huì)等到第一個(gè)ID0的response返回了,再發(fā)送第二個(gè)ID0的transaction。實(shí)際使用的系統(tǒng)總線比如NOC,NIC都不能支持相同ID的outstanding發(fā)給不同的slave。傳輸如下圖所示:
可以看到,如果master只能發(fā)送一個(gè)ID的outstanding,在發(fā)送給不同slave的時(shí)候outstanding機(jī)制失效了!但是如果master是發(fā)送給同一個(gè)master,那么還是能繼續(xù)發(fā)送多個(gè)transaction:
另外,提醒一下,outstanding是master在沒(méi)收到response的時(shí)候,最多能發(fā)送到命令個(gè)數(shù),實(shí)際發(fā)送多少命令還是看master的需求。
對(duì)于一個(gè)master訪問(wèn)兩個(gè)(或者多個(gè))slave的情況,通過(guò)以上分析我們可以得到以下結(jié)論:
Master通過(guò)outstanding訪問(wèn)不同slave的時(shí)候,必須采用不同的ID,有多少slave就需要使用多少個(gè)ID;
Master通過(guò)outstanding訪問(wèn)相同slave的時(shí)候,可以采用相同的ID,也可以采用不同ID;
[/ol]實(shí)際在進(jìn)行總線設(shè)計(jì)的時(shí)候,即需要匹配ID和outstanding個(gè)數(shù)。
2. 兩個(gè)master訪問(wèn)兩個(gè)salve
現(xiàn)在增加到兩個(gè)master,那么兩個(gè)master如果都通ID=0訪問(wèn)Slave0,會(huì)發(fā)生什么事情呢?BUS和Slave0無(wú)法區(qū)分傳輸來(lái)自master0還是master1。解決方式就是通過(guò)修改ID,給每個(gè)master增加一個(gè)唯一的master ID,如下圖所示:
這樣BUS傳輸?shù)膖ransaction的ID就是MID+AXI ID的組合,因?yàn)镸ID對(duì)整個(gè)SOC系統(tǒng)來(lái)說(shuō)是唯一的,所以slave能精確區(qū)分命令的來(lái)源,BUS也能精確把response送給對(duì)應(yīng)masters。這個(gè)方案也是大部分實(shí)際SOC采用的方案,即:給SOC中所有的master增加唯一的master ID。
至于MID+AXI ID怎么組合,可以直接把MID作為AXI ID的高位,也可以通過(guò)hash再編碼,一般這個(gè)在系統(tǒng)BUS里處理。
這個(gè)多master訪問(wèn)就和單master訪問(wèn)多slave也是類似的,只是多master需要在bus做仲裁,可以簡(jiǎn)化為延時(shí)增大了。
3. 一個(gè)AXI傳輸訪問(wèn)兩個(gè)salve
有沒(méi)有可能,一個(gè)master發(fā)送一筆transaction,同時(shí)訪問(wèn)兩個(gè)slave呢?正常情況是沒(méi)有,非常特殊情況下,確實(shí)存在,比較常見(jiàn)的是DDR interleaving訪問(wèn)。除了這個(gè)外,基本上不允許一個(gè)master發(fā)送一筆transaction,同時(shí)訪問(wèn)兩個(gè)slave的。AXI的跨4K限制就是為了限制這種情況。
但是SOC為了訪問(wèn)帶寬,并且把帶寬均分到多個(gè)DDR,一般會(huì)支持DDR的interleaving訪問(wèn)。也就是系統(tǒng)總線會(huì)主動(dòng)的把一筆transaction拆分到兩個(gè)DDR或者多個(gè)DDR,如下圖所示:
訪問(wèn)每個(gè)DDR的burst大小變小了,具體大小和interleaving的分拆大小有關(guān),這也是系統(tǒng)總線的核心參數(shù)。
Burst拆分會(huì)帶來(lái)很多問(wèn)題,比如如果順序是A00,A01, 但是DDR0/1的響應(yīng)是B01,B00返回怎么處理呢?這里BUS就需要先排序再合并后返回到master,所以這里需要增加reorder buffer。
reorder buffer基本上必備的,因?yàn)槟悴荒鼙WCDDR0/1響應(yīng)返回的順序,所以為了傳輸正確性,一定要進(jìn)行重排。同樣,進(jìn)行讀的時(shí)候也需要重排,由于讀返回的是數(shù)據(jù)和response,所以reorder buffer開(kāi)銷還是非常大的。
關(guān)于多master訪問(wèn)DDR,這個(gè)是SOC設(shè)計(jì)的核心和重點(diǎn),后面會(huì)專門(mén)分析,這里就先不展開(kāi)了。
后記
技術(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
—————————————————————————————— |