——————————————————————————————
版權(quán)聲明:
本文作者:烓圍瑋未。主要從事ISP/MIPI/SOC/車規(guī)芯片設計/SOC架構(gòu)設計
首發(fā)于知乎專欄:芯片設計進階之路
微信公眾號:芯片設計進階之路(x_chip)
轉(zhuǎn)發(fā)必須授權(quán),同時保留這段聲明,盜版必究!
——————————————————————————————
為了詳細了解,outstanding,out-of-order,interleaving對傳輸?shù)挠绊,繼續(xù)進行場景分析。
在分析了各種場景下outstanding,out-of-order,interleaving的好處后,對更復雜的場景,比如soc中多master訪問多個slave的情況,這些可以分解為基本場景,只是在總線部分有些差異,這些主要是總線設計的內(nèi)容。
下面主要討論一下,在支持outstanding,out-of-order,interleaving的情況下,對ID的處理。
1. 一個master訪問兩個salve
先分析一下一個master訪問兩個slave的ID使用。
假設Master OST=4, Master先給Slave0發(fā)了一個ID=0的命令,那么Master能否繼續(xù)以ID=0給Slave1發(fā)送命令呢?
結(jié)論是不行:
BUS區(qū)分訪問slave0還是slave1是按照地址來區(qū)分的,但是slave返回response給master的時候只有ID信息,沒有address信息。所以BUS和master是沒有辦法來區(qū)分返回response是來自slave0還是slave1的,BUS會等到第一個ID0的response返回了,再發(fā)送第二個ID0的transaction。實際使用的系統(tǒng)總線比如NOC,NIC都不能支持相同ID的outstanding發(fā)給不同的slave。傳輸如下圖所示:
可以看到,如果master只能發(fā)送一個ID的outstanding,在發(fā)送給不同slave的時候outstanding機制失效了!但是如果master是發(fā)送給同一個master,那么還是能繼續(xù)發(fā)送多個transaction:
另外,提醒一下,outstanding是master在沒收到response的時候,最多能發(fā)送到命令個數(shù),實際發(fā)送多少命令還是看master的需求。
對于一個master訪問兩個(或者多個)slave的情況,通過以上分析我們可以得到以下結(jié)論:
Master通過outstanding訪問不同slave的時候,必須采用不同的ID,有多少slave就需要使用多少個ID;
Master通過outstanding訪問相同slave的時候,可以采用相同的ID,也可以采用不同ID;
[/ol]實際在進行總線設計的時候,即需要匹配ID和outstanding個數(shù)。
2. 兩個master訪問兩個salve
現(xiàn)在增加到兩個master,那么兩個master如果都通ID=0訪問Slave0,會發(fā)生什么事情呢?BUS和Slave0無法區(qū)分傳輸來自master0還是master1。解決方式就是通過修改ID,給每個master增加一個唯一的master ID,如下圖所示:
這樣BUS傳輸?shù)膖ransaction的ID就是MID+AXI ID的組合,因為MID對整個SOC系統(tǒng)來說是唯一的,所以slave能精確區(qū)分命令的來源,BUS也能精確把response送給對應masters。這個方案也是大部分實際SOC采用的方案,即:給SOC中所有的master增加唯一的master ID。
至于MID+AXI ID怎么組合,可以直接把MID作為AXI ID的高位,也可以通過hash再編碼,一般這個在系統(tǒng)BUS里處理。
這個多master訪問就和單master訪問多slave也是類似的,只是多master需要在bus做仲裁,可以簡化為延時增大了。
3. 一個AXI傳輸訪問兩個salve
有沒有可能,一個master發(fā)送一筆transaction,同時訪問兩個slave呢?正常情況是沒有,非常特殊情況下,確實存在,比較常見的是DDR interleaving訪問。除了這個外,基本上不允許一個master發(fā)送一筆transaction,同時訪問兩個slave的。AXI的跨4K限制就是為了限制這種情況。
但是SOC為了訪問帶寬,并且把帶寬均分到多個DDR,一般會支持DDR的interleaving訪問。也就是系統(tǒng)總線會主動的把一筆transaction拆分到兩個DDR或者多個DDR,如下圖所示:
訪問每個DDR的burst大小變小了,具體大小和interleaving的分拆大小有關(guān),這也是系統(tǒng)總線的核心參數(shù)。
Burst拆分會帶來很多問題,比如如果順序是A00,A01, 但是DDR0/1的響應是B01,B00返回怎么處理呢?這里BUS就需要先排序再合并后返回到master,所以這里需要增加reorder buffer。
reorder buffer基本上必備的,因為你不能保證DDR0/1響應返回的順序,所以為了傳輸正確性,一定要進行重排。同樣,進行讀的時候也需要重排,由于讀返回的是數(shù)據(jù)和response,所以reorder buffer開銷還是非常大的。
關(guān)于多master訪問DDR,這個是SOC設計的核心和重點,后面會專門分析,這里就先不展開了。
后記
技術(shù)很重要,技術(shù)背后的思想更重要!
技術(shù)背后的某些思想就是你解決以后問題的鑰匙。我的文章可能一篇中知識點不太多,但是力求讓你能深入理解,為你進階打下基礎。如果有一點點收獲,也算是我對中國芯片行業(yè)的一點點貢獻吧。
贈人玫瑰,手有余香。如果你有所收獲,麻煩花一秒時間幫我點個贊吧,謝謝!
知乎專欄:芯片設計進階之路
微信公眾號:芯片設計進階之路 x_chip
—————————————————————————————— |