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

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

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

【芯片設(shè)計(jì)】從RTL到GDS(九):布線

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
匿名  發(fā)表于 2024-10-28 11:58:00 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
在前面的文章中,我們已經(jīng)完成了布局和時(shí)鐘樹(shù)綜合了。既然該擺放的東西都擺好了,我們現(xiàn)在應(yīng)該是把它們連起來(lái)。連起來(lái)以后各個(gè)Cell、Macro Blcok等就可以建立彼此的通訊了。這就是本篇文章將要談?wù)摰闹黝},布線即Routing。

1、Introduction大家可能會(huì)覺(jué)得,把該連的接口都連好不就行了。實(shí)際中可能沒(méi)有這么簡(jiǎn)單粗暴,因?yàn)樾酒囊?guī)模很大,有非常多非常多的門(mén),因此也會(huì)有非常多非常多的連線,我們不光要連,還要連好。

我們來(lái)考慮兩個(gè)東西,首先是幾何復(fù)雜性,在布線過(guò)程中,通常使用網(wǎng)格表示法作為基本的出發(fā)點(diǎn)。但是在納米尺度上,幾何規(guī)則變得非常復(fù)雜。此外,集成電路中通常有多個(gè)布線層,每個(gè)層的“成本”(如制造難度、電阻、電容等)都不同,這增加了布線的復(fù)雜性。
然后是電氣復(fù)雜性:僅僅連接所有電線是不夠的。還必須確保電線中的延遲盡可能小,因?yàn)樾盘?hào)在傳輸過(guò)程中延遲過(guò)大會(huì)影響電路的性能。同時(shí),還需要確保電線之間的相互作用(如串?dāng)_)不會(huì)干擾電路的行為。串?dāng)_是指信號(hào)在一條電線中傳輸時(shí),無(wú)意中影響到另一條相鄰電線上的信號(hào)的現(xiàn)象,這可能導(dǎo)致信號(hào)失真或錯(cuò)誤。


我們把Routing這個(gè)問(wèn)題細(xì)化一下,其主要包含以下幾個(gè)要點(diǎn)。
問(wèn)題:在給定的芯片布局(placement)和固定的金屬布線層數(shù)的條件下,找到一個(gè)有效的水平線和垂直線的模式,以連接網(wǎng)的端點(diǎn)。
輸入:?jiǎn)卧恢,網(wǎng)表。單元位置指的是各個(gè)標(biāo)準(zhǔn)單元在芯片上的物理位置,網(wǎng)表則列出了所有需要連接的端點(diǎn)組合,即哪些端點(diǎn)屬于同一個(gè)網(wǎng)。
輸出:net的幾何布局,即每個(gè)net在芯片上的實(shí)際布線圖案,連接了各個(gè)標(biāo)準(zhǔn)單元。
兩步過(guò)程:全局布線(Global routing)和詳細(xì)布線(Detailed routing)。全局布線確定電線的大致路徑,而詳細(xì)布線則在這些路徑上精確地放置電線。
目標(biāo):系統(tǒng)的100%連通性,即所有網(wǎng)都必須正確連接;最小面積,即在滿(mǎn)足布線要求的前提下,占用最小的芯片面積;最短線長(zhǎng),即電線總長(zhǎng)度盡可能短,以減少延遲和串?dāng)_。
約束條件:布線層數(shù)的限制,設(shè)計(jì)規(guī)則(Design rules),時(shí)序(延遲),串?dāng)_(Crosstalk)和工藝變化(Process variations)。設(shè)計(jì)規(guī)則定義了布線時(shí)可以采用的路徑和間距等規(guī)則,時(shí)序約束要求電線的延遲必須滿(mǎn)足特定的性能要求,串?dāng)_約束要求布線時(shí)要減小電線之間的相互干擾,工藝變化則要求布線能夠適應(yīng)制造過(guò)程中的不確定性。

2、Routing Algorithms在了解了Routing的概念以后,我們來(lái)看以下Routing常用的算法,這里主要是從EDA工具的視角看,學(xué)習(xí)一下EDA工具背后的原理。下面的例子都是非常簡(jiǎn)化的版本,但對(duì)于我們的學(xué)習(xí)還是有幫助的。

在處理納米尺度的集成電路布線問(wèn)題時(shí),盡管實(shí)際布線可能非常復(fù)雜,但為了簡(jiǎn)化問(wèn)題,我們首先假設(shè)布線是在一個(gè)規(guī)則的網(wǎng)格上進(jìn)行的。
在這個(gè)假設(shè)下,導(dǎo)線只能在網(wǎng)格的垂直和水平方向上走線,形成直角路徑,這種布線方式被稱(chēng)為曼哈頓布線。網(wǎng)格中的某些單元可能被標(biāo)記為障礙物,導(dǎo)線必須繞過(guò)這些障礙物。這樣的簡(jiǎn)化假設(shè)有助于我們更容易地理解和計(jì)算布線問(wèn)題,隨著問(wèn)題的深入,我們可以逐步引入更多的復(fù)雜性以更接近實(shí)際情況。

我們首先看一個(gè)算法,Maze Routers,其策略如下:
  • 一次布線一個(gè)net。
  • 為當(dāng)前net找到最佳的布線路徑。

  • 存在的問(wèn)題是:
  • 早期布線的net可能會(huì)阻擋后來(lái)net的路徑。
  • 對(duì)一個(gè)net的最優(yōu)選擇可能會(huì)阻塞其他net。

  • 該算法基本思路包括三個(gè)步驟:
  • Expand(擴(kuò)展):從源點(diǎn)到目標(biāo)點(diǎn),以四個(gè)基本方向(上、下、左、右)擴(kuò)展,尋找可行路徑。這一過(guò)程通常使用廣度優(yōu)先搜索(BFS)或類(lèi)似的方法來(lái)實(shí)現(xiàn)。
  • Backtrace(回溯):一旦找到目標(biāo)點(diǎn),通過(guò)標(biāo)記的路徑回溯到源點(diǎn),確定最終的布線路徑。
  • Cleanup(清理):在確認(rèn)了布線路徑之后,移除所有為了尋找路徑而設(shè)置的臨時(shí)標(biāo)記,只保留最終的布線路徑。
    迷宮布線器的這種逐步擴(kuò)展和回溯的方法,可以有效地找到從源點(diǎn)到目標(biāo)點(diǎn)的路徑,但是它可能會(huì)遇到早期布線網(wǎng)絡(luò)對(duì)后續(xù)網(wǎng)絡(luò)布線的阻礙問(wèn)題。因此,在實(shí)際應(yīng)用中,可能需要結(jié)合其他布線策略和優(yōu)化算法來(lái)提高整體布線質(zhì)量和成功率。

    迷宮布線中的擴(kuò)展(Expansion)階段是布線過(guò)程的第一步,其目的是從源點(diǎn)開(kāi)始,逐漸擴(kuò)展到目標(biāo)點(diǎn),尋找所有可能的路徑。這個(gè)過(guò)程可以描述如下:
  • 從源點(diǎn)開(kāi)始,尋找所有與源點(diǎn)相鄰的、可達(dá)的單元格(即沒(méi)有被障礙物占據(jù)的單元格)。
  • 以這些單元格為新的起點(diǎn),繼續(xù)尋找它們相鄰的可達(dá)單元格,如此類(lèi)推,不斷擴(kuò)展。
  • 這個(gè)過(guò)程一直持續(xù),直到達(dá)到目標(biāo)點(diǎn)。

  • 在擴(kuò)展過(guò)程中,我們可以想象一個(gè)“波前”(wavefront)從源點(diǎn)向外擴(kuò)散,逐漸接近目標(biāo)點(diǎn)。這個(gè)波前代表了布線過(guò)程在網(wǎng)格中擴(kuò)散的邊界。當(dāng)我們到達(dá)目標(biāo)點(diǎn)時(shí),我們就可以確定從源點(diǎn)到目標(biāo)點(diǎn)的最短路徑。在這個(gè)例子中,我們找到了一條最短路徑,它包含6個(gè)單位步驟。這意味著從源點(diǎn)到目標(biāo)點(diǎn)的路徑長(zhǎng)度是6個(gè)網(wǎng)格單元。
    需要注意的是,迷宮布線算法在擴(kuò)展過(guò)程中可能會(huì)找到多條路徑到達(dá)目標(biāo)點(diǎn),但在回溯階段,我們通常會(huì)選擇其中一條最短的路徑作為最終的布線路徑。

    在迷宮布線過(guò)程中,一旦擴(kuò)展階段找到了從源點(diǎn)(S)到目標(biāo)點(diǎn)(T)的路徑,接下來(lái)就會(huì)進(jìn)行回溯和清理階段。
    回溯階段:
  • 回溯是指從目標(biāo)點(diǎn)開(kāi)始,沿著路徑長(zhǎng)度遞減的順序反向追蹤。
  • 這樣做可以標(biāo)記出一條到目標(biāo)點(diǎn)的最短路徑。
  • 通常情況下,可能存在多條同樣長(zhǎng)度的最短路徑,這時(shí)可以采用優(yōu)化策略來(lái)選擇最佳路徑。例如,可以根據(jù)路徑的直線性、拐角數(shù)量或與其他網(wǎng)絡(luò)的干擾程度來(lái)決定。

  • 清理階段:
  • 當(dāng)?shù)谝粭l網(wǎng)絡(luò)布線完成之后,為了確保未來(lái)的網(wǎng)絡(luò)不會(huì)嘗試使用同一條路徑,需要將這條從源點(diǎn)到目標(biāo)點(diǎn)的網(wǎng)絡(luò)路徑標(biāo)記為障礙物。
  • 這樣,當(dāng)其他網(wǎng)絡(luò)進(jìn)行布線時(shí),就不會(huì)考慮已經(jīng)占用過(guò)的路徑,從而避免了資源沖突。

  • 通過(guò)回溯和清理,迷宮布線器為每個(gè)網(wǎng)絡(luò)逐一找到并確定了最佳的布線路徑,并為后續(xù)網(wǎng)絡(luò)的布線做好了準(zhǔn)備。這個(gè)過(guò)程需要重復(fù)進(jìn)行,直到所有的網(wǎng)絡(luò)都完成了布線。

    在迷宮布線中,處理障礙物(blockages)的方法就是簡(jiǎn)單地“繞過(guò)”它們。具體來(lái)說(shuō),當(dāng)布線算法在擴(kuò)展(Expand)階段遇到障礙物時(shí),它會(huì)忽略障礙物占據(jù)的單元格,繼續(xù)在其余可用的單元格中尋找路徑。這樣做可以確保布線不會(huì)穿過(guò)障礙物,而是圍繞它們進(jìn)行。
    總結(jié)一下處理障礙物的方法:
    擴(kuò)展(Expand)階段:使用廣度優(yōu)先搜索(Breadth-First Search, BFS)來(lái)按路徑長(zhǎng)度順序找出從源點(diǎn)(S)到目標(biāo)點(diǎn)(T)的所有路徑。在這個(gè)過(guò)程中,障礙物被視為不可通過(guò)的單元格,布線算法會(huì)自動(dòng)避開(kāi)它們。
    回溯(Backtrace)階段:一旦找到目標(biāo)點(diǎn),算法會(huì)沿著最短路徑回溯到源點(diǎn)。這個(gè)過(guò)程會(huì)標(biāo)記出一條避開(kāi)所有障礙物的最佳路徑。
    清理(Cleanup)階段:在確認(rèn)了布線路徑之后,將這條路徑標(biāo)記為障礙物,以防止后續(xù)網(wǎng)絡(luò)使用相同的資源。同時(shí),擦除在擴(kuò)展階段留下的距離標(biāo)記,為下一次布線做準(zhǔn)備。
    通過(guò)這種方式,迷宮布線算法能夠有效地處理集成電路布線中的障礙物問(wèn)題,確保每個(gè)網(wǎng)絡(luò)都能找到一條合適的路徑,并且不會(huì)與其他網(wǎng)絡(luò)發(fā)生干擾。

    對(duì)于具有多個(gè)目標(biāo)點(diǎn)的網(wǎng)絡(luò)(Multi-Point Nets)進(jìn)行布線時(shí),處理方式相對(duì)直接。以下是解決多目標(biāo)點(diǎn)網(wǎng)絡(luò)布線的步驟:
    初始布線:使用常規(guī)的迷宮布線算法(maze routing algorithm)找到從源點(diǎn)到最近目標(biāo)點(diǎn)的路徑。在這個(gè)階段,我們只關(guān)注一個(gè)目標(biāo)點(diǎn),并找到到達(dá)它的最短路徑。
    重新標(biāo)記:一旦找到了到達(dá)第一個(gè)目標(biāo)點(diǎn)的路徑,我們將路徑上所有的單元格重新標(biāo)記為源點(diǎn)(sources)。為什么可以這么做呢?因?yàn)檫@時(shí)候這幾個(gè)單元格從電路上來(lái)講,是等電位的,我們認(rèn)為其電氣信息是一樣的。這樣做的目的是為了將已經(jīng)布線的路徑轉(zhuǎn)換為新的布線起點(diǎn),以便于為其他目標(biāo)點(diǎn)布線。
    重復(fù)布線過(guò)程:使用所有新的源點(diǎn)同時(shí)作為起點(diǎn),再次運(yùn)行迷宮布線器。這一次,布線器會(huì)嘗試找到從這些新的源點(diǎn)到剩余目標(biāo)點(diǎn)的路徑。這個(gè)過(guò)程可能會(huì)重復(fù)多次,直到所有的目標(biāo)點(diǎn)都通過(guò)路徑與源點(diǎn)相連。
    通過(guò)這種方式,多目標(biāo)點(diǎn)網(wǎng)絡(luò)的每個(gè)目標(biāo)點(diǎn)都會(huì)通過(guò)一條獨(dú)立的路徑與源點(diǎn)相連,而這些路徑之間不會(huì)相互干擾。這種方法確保了每個(gè)目標(biāo)點(diǎn)都能夠有效地連接到源點(diǎn),同時(shí)保持了布線的效率和合理性。

    下面是上述方法的一個(gè)具體流程,解釋的很清楚。






    上述方法找到的并不是最優(yōu)路徑,而是基于啟發(fā)式算法的一個(gè)局部最優(yōu)解,全局最優(yōu)路徑有一個(gè)名稱(chēng)叫做Steiner Tree。找到這個(gè)路徑是一個(gè)NP-hard問(wèn)題。


    我們已經(jīng)討論了單個(gè)Layer的布線問(wèn)題,對(duì)于Multi-layer呢?首先我們看幾個(gè)Multi-layer的圖片。



    怎么解決?此時(shí)我們要定義新的擴(kuò)展方向,up/down。通過(guò)通孔去連接。



    下圖是涉及到兩層的Source到Target。

    對(duì)于通孔而言,其電阻相對(duì)較高,按理說(shuō)我們應(yīng)該盡可能的在同一層布線。我們也傾向于使用曼哈頓布線,對(duì)于每一層的導(dǎo)線將只沿一個(gè)方向布置,比如某一層只進(jìn)行水平布線,而另一層只進(jìn)行垂直布線。這種方式有助于減少導(dǎo)線之間的交叉和干擾。在布線過(guò)程中,如果需要改變方向,通常需要通過(guò)通孔到另一層進(jìn)行,或者在同一層內(nèi)進(jìn)行曲折(jog)布線。由于這兩種情況都會(huì)增加布線的復(fù)雜性和電阻,因此算法會(huì)對(duì)此類(lèi)操作進(jìn)行懲罰,以鼓勵(lì)更直接的布線方式。
    基于non uniform grid costs懲罰機(jī)制,有助于實(shí)現(xiàn)上述的要求。

    比如下圖中,對(duì)于Metal1,我們只希望水平布線,如果豎直布線成本將是10。而Metal2與之相反,經(jīng)過(guò)Via,也會(huì)有額外的成本為10的開(kāi)銷(xiāo)。這樣我們可以基于Non uniform grid cost的方式找到想要的路徑。

    實(shí)現(xiàn)這樣的布線算法需要高效的算法和數(shù)據(jù)結(jié)構(gòu)。對(duì)于如此巨大的網(wǎng)格(例如一個(gè)1cm x 1cm的芯片,100納米的軌跡,10個(gè)布線層,總共1000億個(gè)網(wǎng)格單元),我們需要一種低成本的表現(xiàn)形式來(lái)處理這個(gè)問(wèn)題。以下是如何實(shí)現(xiàn)這個(gè)算法的步驟:
  • 低成本的表示法:由于網(wǎng)格巨大,我們不能存儲(chǔ)每一個(gè)網(wǎng)格單元的詳細(xì)信息。相反,我們只存儲(chǔ)波前,即當(dāng)前正在處理的邊界區(qū)域。這樣可以大大減少內(nèi)存的使用。
  • 記錄已到達(dá)的單元格:我們需要記錄哪些單元格已經(jīng)被訪問(wèn)過(guò),以及到達(dá)這些單元格的成本和來(lái)自哪個(gè)方向。這樣可以幫助算法避免重復(fù)訪問(wèn)單元格,并確保找到最便宜的路徑。
  • 使用Dijkstra算法:Dijkstra算法是一種圖搜索算法,用于找到從起點(diǎn)到其他所有點(diǎn)的最短路徑。在這個(gè)場(chǎng)景中,我們可以使用Dijkstra算法來(lái)找到成本最低的單元格。
  • 數(shù)據(jù)存儲(chǔ)在堆中:堆是一種特殊的數(shù)據(jù)結(jié)構(gòu),可以有效地找到最小元素。在這個(gè)算法中,我們可以使用最小堆來(lái)存儲(chǔ)和檢索到達(dá)每個(gè)單元格的成本,以便我們可以快速找到下一個(gè)成本最低的單元格。
    [/ol]

    具體實(shí)現(xiàn)步驟如下:
  • 初始化一個(gè)最小堆,用來(lái)存儲(chǔ)所有可訪問(wèn)的單元格及其對(duì)應(yīng)的成本。
  • 將起點(diǎn)添加到堆中,其成本為0。
  • 當(dāng)堆不為空時(shí),執(zhí)行以下步驟:
  • 從堆中移除成本最低的單元格。
  • 對(duì)于該單元格的每個(gè)鄰居,計(jì)算到達(dá)該鄰居的成本。
  • 如果鄰居未被訪問(wèn)過(guò),或者找到了一條更c(diǎn)heap的路徑,則更新該鄰居的成本和方向,并將其添加到堆中。
  • 當(dāng)算法到達(dá)終點(diǎn)時(shí),回溯已記錄的方向,以找到從起點(diǎn)到終點(diǎn)的最優(yōu)路徑。
    在實(shí)際的EDA布線中,還需要考慮其他因素,如布線層的方向性限制、通孔的成本、布線層的容量限制等。這些因素需要在算法的成本計(jì)算和決策過(guò)程中被考慮進(jìn)去。

    對(duì)于大芯片,常常采用分治策略,先Global Routing再Detailed Routing。我們將一個(gè)芯片分成一個(gè)個(gè)的大格子,這個(gè)大格子我們叫做GBOX。Global Routing基于大格子先粗略確定每個(gè)格子到每個(gè)格子的入口和出口。其內(nèi)部的細(xì)節(jié)先不管。

    完成以后再對(duì)格子內(nèi)部的連線確定細(xì)節(jié),這一步叫做Detailed Routing。

    就比如我們有了第一個(gè)Box內(nèi)部的source和target。我們的Detailed Routing就是確定這個(gè)一個(gè)個(gè)Box內(nèi)部的連線。

    3、Routing in Practice在上面的介紹中,我們用了很EDA的視角去看布線,接下來(lái)我們從更加電路的視角去看布線。

    我們可以看到隨著工藝節(jié)點(diǎn)的提升,Layer的層數(shù)也在增加。對(duì)于早期的工藝,我們可以看到其盡管有很多層,但是每一層都是一樣的,因此DRC規(guī)則中,最小間距和最小寬度將會(huì)保持一致。
    隨著工藝的推進(jìn),我們需要厚度更加厚的金屬層,從而減少RC值并提高更好的電源布線。較低的金屬層主要用于局部互連,中間層可能用于時(shí)鐘或者更長(zhǎng)的全局布線,頂層主要用于電源連接。
    右邊是兩個(gè)實(shí)際的例子,我們可以看到UMC的六層金屬堆疊和英特爾的8層金屬堆疊明顯不一樣?梢钥吹8層金屬堆疊明顯有幾種不同厚度的metal layer,不同厚度的metal layer用于做不同的事情。

    我們接著探討一下EDA工具內(nèi)部的實(shí)際路由過(guò)程是如何進(jìn)行的。正是由于上述的金屬層變化的問(wèn)題,會(huì)讓我們的布線問(wèn)題變得更加困難。文章上面講過(guò)的布線算法也會(huì)變得復(fù)雜起來(lái)。
    我們從全局布線開(kāi)始考慮,全局布線將整個(gè)芯片的布局劃分為多個(gè)GCell(Global Cell),每個(gè)GCell代表了芯片上的一塊區(qū)域。全局布線的目標(biāo)是為芯片上的各個(gè)連接提供初步的路徑,這些路徑將在后續(xù)的詳細(xì)布線(Detailed Routing)階段被細(xì)化。以下是全局布線的一些關(guān)鍵特點(diǎn):
    將floorplan劃分為GCells:全局布線首先將芯片的布局(floorplan)劃分為一系列的GCell。每個(gè)GCell包含了一定數(shù)量的布線資源,如導(dǎo)線軌道。在每個(gè)布線層上,每個(gè)GCell大約包含10個(gè)導(dǎo)線軌道。這些軌道用于連接芯片上的不同模塊。軌道有Minimum Width和Minimum Spacing屬性,具體的可以看圖。這個(gè)是用于滿(mǎn)足DRC約束的。
    全局布線的目的是執(zhí)行快速的網(wǎng)格布線:全局布線使用一種快速的網(wǎng)格布線方法,這種方法在GCell網(wǎng)格上為信號(hào)提供路徑。
  • 最小化線長(zhǎng):全局布線試圖找到連接各個(gè)模塊的最短線路,以減少信號(hào)的延遲和功耗。
  • 平衡擁堵:布線時(shí)需要考慮不同區(qū)域布線資源的利用率,避免某些區(qū)域過(guò)度擁堵,而其他區(qū)域則空閑。
  • 時(shí)序驅(qū)動(dòng):全局布線考慮信號(hào)的時(shí)序要求,確保信號(hào)能夠在規(guī)定的時(shí)間內(nèi)到達(dá)目的地。
  • 噪聲/信號(hào)完整性驅(qū)動(dòng):布線時(shí)還需要考慮信號(hào)完整性和噪聲的影響,避免由于布線不當(dāng)導(dǎo)致的信號(hào)退化。
  • 保持總線在一起:對(duì)于總線(一組并行信號(hào)線),全局布線會(huì)盡量將它們保持在一起,以便于后續(xù)的詳細(xì)布線和信號(hào)完整性分析。


    全局布線完成后,將生成一個(gè)布線圖,該圖顯示了芯片上各個(gè)連接的大致路徑。這些路徑將在詳細(xì)布線階段被進(jìn)一步優(yōu)化和實(shí)現(xiàn),以滿(mǎn)足電路的性能和制造要求。
    比如在下圖的右上角,我們?cè)谕瓿蒅lobal Routing以后,就可以知道哪些地方是Congested Area了。

    通常在完成全局布線的時(shí)候,我們將使用congestion map展示較高擁塞的區(qū)域。然后就要進(jìn)行布局規(guī)劃的迭代過(guò)程,針對(duì)這些區(qū)域進(jìn)行修正。如果存在這些大規(guī)模的擁塞區(qū)域,最好不要繼續(xù)進(jìn)行detailed routing,而是返回去修正布局規(guī)劃,否則對(duì)后續(xù)的布線非常困難。

    完成了全局布線的迭代以后,就可以進(jìn)行Detailed Routing。我們將逐個(gè)的處理Gbox。之前的Global Routing是非常粗略的GBOX和GBOX之間的連接。

    我們不是已經(jīng)對(duì)每個(gè)GBOX都設(shè)置好相應(yīng)的軌道了嗎?我們現(xiàn)在就是確定GBOX內(nèi)部之間,是怎么根據(jù)這個(gè)軌道連接的。這個(gè)內(nèi)部的Routing,我們也要考慮下面這幾個(gè)因素。

    我們?cè)賮?lái)看看時(shí)間驅(qū)動(dòng)布線,這是什么意思呢。其主要是嘗試對(duì)關(guān)鍵路徑進(jìn)行優(yōu)化,如果系統(tǒng)仍然存在時(shí)序問(wèn)題,通過(guò)布線的方式可以進(jìn)行一定的優(yōu)化,對(duì)關(guān)鍵路徑采用最短的路徑,以減少延遲。
    我們需要采用權(quán)重的方式,給不同的Net分配不同的權(quán)重,比如說(shuō)這個(gè)Net比其它Net更加重要,工具要有限對(duì)其進(jìn)行布線,盡可能不要經(jīng)過(guò)Via,不要拐彎。

    我們接著看看信號(hào)完整性問(wèn)題。布線之所以會(huì)導(dǎo)致信號(hào)完整性問(wèn)題,主要是串?dāng)_問(wèn)題。一個(gè)信號(hào)的切換可能會(huì)影響附近的net,導(dǎo)致其上出現(xiàn)毛刺或其它信號(hào)問(wèn)題。我們稱(chēng)切換信號(hào)的net為Aggressor,被影響的net為Victim。
    有兩個(gè)主要的影響,當(dāng)攻擊者上升的時(shí)候,Victim正在下降,這個(gè)串?dāng)_問(wèn)題導(dǎo)致其下降變緩慢了,我們看圖可以看出來(lái),它又重新升了一會(huì),才下降。這導(dǎo)致了信號(hào)變化的Slow Down,與之類(lèi)似的還有信號(hào)變化的Speed Up。
    這實(shí)際上是由互耦電容引起的,我們要保證電容值不會(huì)過(guò)大,以避免串?dāng)_引起的毛刺或其它問(wèn)題。

    在比較舊的工藝中,會(huì)采用無(wú)限噪聲窗的方式分析這個(gè)互耦電容產(chǎn)生的影響。但隨著工藝的提升,導(dǎo)線之間的間距日益縮小,交叉覆蓋面積增大,側(cè)壁電容增加,導(dǎo)致了極端情況的出現(xiàn)。比如Net B在考慮最大延遲的時(shí)候顯著減速,最小延遲的時(shí)候顯著加速。(其實(shí)到這里我就看不懂了,有懂的大佬可以詳細(xì)解釋一下)
    為此一種新型時(shí)序分析方法被提出并被整合進(jìn)了EDA工具,稱(chēng)為傳播噪聲分析。傳播噪聲分析是一種更為精確的方法,它考慮了實(shí)際信號(hào)波形的變化。在這種分析中,會(huì)使用設(shè)計(jì)中的最小和最大信號(hào)向量來(lái)模擬干擾源和受害線之間的相互作用。通過(guò)這些向量,可以為每個(gè)干擾源相對(duì)于受害線創(chuàng)建一個(gè)時(shí)間上的過(guò)渡窗口。這個(gè)窗口代表了干擾源可能對(duì)受害線產(chǎn)生影響的時(shí)刻。噪聲只在干擾源的過(guò)渡窗口和受害線的敏感窗口重疊時(shí)才被考慮,這樣可以更準(zhǔn)確地確定由多個(gè)干擾源引起的最壞情況下的噪聲尖峰。

    我們看一下怎么解決信號(hào)完整性問(wèn)題,防止串?dāng)_的首要措施是限制平行net的長(zhǎng)度,如果由兩條net平行,通常應(yīng)該增大它們之間的間距。還要考慮屏蔽特殊net,如果有特殊net,可以在中間放置一個(gè)屏蔽層,這樣可以大大減少net之間的交叉耦合。對(duì)于Victim,可以擴(kuò)大其Size,這樣平均下來(lái)交叉耦合效應(yīng)的影響就會(huì)降低。
    我們看幾個(gè)例子,下面的四個(gè)例子分別采用了增加空間,調(diào)換順序,添加屏蔽層,重新排序形成隔離屏障的方式優(yōu)化串?dāng)_問(wèn)題。

    另一個(gè)問(wèn)題就是所謂的可制造型涉及,即DFM問(wèn)題。我們通過(guò)添加額外的方法以提高良率,降低特定芯片出現(xiàn)缺陷的風(fēng)險(xiǎn)。方法包括但不限于:
    Via reduction:目的:減少過(guò)孔(Via)的數(shù)量可以降低制造復(fù)雜性,減少潛在的缺陷點(diǎn),提高良率。方法:通過(guò)優(yōu)化布線策略,比如使用更有效的層間連接方式,或者合并多個(gè)相鄰的過(guò)孔,來(lái)減少過(guò)孔的總數(shù)。
    Redundant via insertion:目的:插入冗余過(guò)孔可以提高電路的可靠性,因?yàn)樵谥圃爝^(guò)程中某些過(guò)孔可能會(huì)失敗。方法:在關(guān)鍵信號(hào)線上添加額外的過(guò)孔,確保即使某些過(guò)孔出現(xiàn)問(wèn)題,信號(hào)仍然可以通過(guò)其他過(guò)孔正常傳輸。
    Wire straightening:目的:直線的布線可以提高制造的準(zhǔn)確性,減少布線錯(cuò)誤,降低信號(hào)完整性問(wèn)題。方法:盡可能使用直線的布線方式,減少不必要的彎曲,這樣可以降低布線的電阻和電容,提高信號(hào)質(zhì)量。
    Wire spreading:目的:線展開(kāi)可以減少布線之間的相互干擾,降低串?dāng)_,提高信號(hào)完整性。方法:在布線時(shí),盡量增加線與線之間的距離,特別是在高速信號(hào)線上,這樣可以減少電磁干擾,提高電路的性能。
    我們看下面這個(gè)圖,Wire straightening把本來(lái)是拐彎了幾次的線給他拉直了。另外一個(gè)例子是,我們有一個(gè)晶體管,有兩個(gè)彼此對(duì)稱(chēng)的接觸點(diǎn),但不是完全對(duì)稱(chēng),這可能導(dǎo)致較高的制造缺陷風(fēng)險(xiǎn)。通過(guò)增加兩個(gè)額外的接觸點(diǎn),讓其變得更加對(duì)稱(chēng)。

    我們直接看兩個(gè)例子:


    我們看一下Innovus中Routing怎么做(Encounter就是之前的名字,現(xiàn)在已經(jīng)改名Innovus了)?梢钥吹绞褂霉ぞ弑戎拦ぞ呒(xì)節(jié)簡(jiǎn)單的多,這就是抽象的力量。



    系列文章入口——
    【芯片設(shè)計(jì)】SoC 101(一):緒論
    【芯片設(shè)計(jì)】FIFO漫談(零)從無(wú)處不在的FIFO開(kāi)始說(shuō)起
    【芯片設(shè)計(jì)】計(jì)算機(jī)體系結(jié)構(gòu)(一)虛擬內(nèi)存
    【芯片設(shè)計(jì)】深入理解AMBA總線(零)緒論
    【芯片設(shè)計(jì)】握手協(xié)議的介紹與時(shí)序說(shuō)明
    【芯片設(shè)計(jì)】復(fù)位那些小事 —— 復(fù)位消抖
    【芯片設(shè)計(jì)】快速入門(mén)數(shù)字芯片設(shè)計(jì)(一)Introduction
    【芯片驗(yàn)證】UVM源碼計(jì)劃(零)下定決心讀源碼前的自測(cè)環(huán)節(jié)
    【芯片設(shè)計(jì)】異步電路碎碎念(一) 到底什么是異步電路
    【芯片設(shè)計(jì)】從RTL到GDS(一):Introduction
    其他文章鏈接——
    【芯片驗(yàn)證】sva_assertion: 15道助力飛升的斷言練習(xí)
    【芯片驗(yàn)證】可能是RTL定向驗(yàn)證的巔峰之作
    【芯片驗(yàn)證】RTL仿真中X態(tài)行為的傳播 —— 從xprop說(shuō)起
    【芯片驗(yàn)證】年輕人的第一個(gè)systemVerilog驗(yàn)證環(huán)境全工程與解析
    【芯片設(shè)計(jì)】verilog中有符號(hào)數(shù)和無(wú)符號(hào)數(shù)的本質(zhì)探究
    【芯片設(shè)計(jì)】論RTL中always語(yǔ)法的消失術(shù)
    【芯片設(shè)計(jì)】代碼即注釋?zhuān)⑨尲创a
    【芯片設(shè)計(jì)】700行代碼的risc處理器你確實(shí)不能要求太多了
    入職芯片開(kāi)發(fā)部門(mén)后,每天摸魚(yú)之外的時(shí)間我們要做些什么呢
    如何計(jì)算系統(tǒng)的outstanding 和 burst length?
    芯片搬磚日常·逼死強(qiáng)迫癥的關(guān)鍵詞不對(duì)齊事件
    熟人社會(huì)里,一群沒(méi)有社會(huì)價(jià)值的局外人
  • 本帖子中包含更多資源

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

    x
    回復(fù)

    使用道具

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

    本版積分規(guī)則


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