今天來聊一聊時鐘樹悬垃。首先我先講一下我所理解的時鐘樹是什么,然后介紹兩種時鐘樹結(jié)構(gòu)甘苍。
時序器件傳遞信號的時候需要依賴時鐘尝蠕,而STA一項關(guān)鍵的檢查就是不能有setup/hold violation。如果對于同一時鐘域的兩個時序器件载庭,如果他們接收到的時鐘之間有相位差看彼,有可能會使setup/hold更難滿足,如果產(chǎn)生violation囚聚,芯片就會發(fā)生邏輯錯誤靖榕。而時鐘從時鐘源到sink是需要一定的傳播時間的,距離時鐘源越遠的器件傳播時間越長顽铸。有的時候data的傳播方向和clock的傳播方向相同茁计,如果不做任何時鐘樹處理,這種情況對setup有好處谓松;有的時候data傳播方向與clock傳播方向相反星压,這就對hold有好處;而如果電路中存在反饋回路毒返,那data傳播方向就不確定租幕。所以為了能使上述所有情況都有一個較好的時鐘性能舷手,我們會希望時鐘到達每個時序器件的時間一樣拧簸,也就是傳播時間的差(skew)越接近0越好。時鐘樹的目的正是如此男窟。因為時鐘樹實在太過重要盆赤,現(xiàn)在也是很多人研究的課題。
我想說的第一種結(jié)構(gòu)就是H-tree歉眷。它的結(jié)構(gòu)確實很形象的像一棵樹牺六,是應(yīng)用最廣的結(jié)構(gòu)了。對于一個四四方方完全對稱的芯片來說汗捡,H-tree會先從root長到整個芯片的中心淑际,再分出兩個trunk到芯片左右兩側(cè),分出的trunk與root相互垂直扇住,每個trunk再分兩個垂直枝干出來……不斷這樣分下去春缕,得到一個簡單的分形結(jié)構(gòu),最終的leaf連接到相應(yīng)的clock pin上艘蹋。這樣在物理上就可以保證每一個cell到root的走線長度一致锄贼,相應(yīng)的net上的delay就會一樣,再加上整個tree上的buffer也都相同女阀,就能保證傳播時間完全一致宅荤,從而實現(xiàn)skew為0. 當(dāng)然實際的芯片不會這么理想化屑迂,長出來的H-tree也不一定像一個個H,但它的邏輯結(jié)構(gòu)是一樣的冯键。并且另外一種升級版的H-tree就不保證走線長度一樣了惹盼,只要保證RC信息一致即可,好像可以稱為RC-tree(或者一般也就叫H-tree了)惫确。
第二種結(jié)構(gòu)是網(wǎng)格狀的(mesh)逻锐。就是把時鐘樹的每一級做成一個網(wǎng)格,級與級之間用多個buffer相連雕薪,最終把最后一級mesh接到clock pin上昧诱。可是這樣不就等于把多個driver的output接在一起了嗎所袁?這在我們ERC檢查的時候是違反的呀盏档?但是,制定output不能短接的依據(jù)是擔(dān)心一個output輸出1一個output輸出0燥爷,這樣會造成電源地之間的短路蜈亩。但是對于clock mesh來說,它的buffer全部都是同時變化前翎,永遠是一樣的狀態(tài)稚配,這也就使mesh成為可能。但是港华,畢竟每個buffer到達的時間還是會有一丟丟的差別道川,還是會存在很短的瞬間電源和地在mesh上發(fā)生短路,再加上mesh本身就需要更多繞線立宜,它的功耗是非常大的冒萄。另一個缺點就是會占用很多繞線資源。但是mesh的skew容易做的更小橙数,畢竟每一級它們的輸出都接在了一起尊流,只有最后一級接在不同pin上〉瓢铮可以說mesh是犧牲了功耗換取更小的skew崖技。
現(xiàn)在大多數(shù)的design還是在利用傳統(tǒng)的H-tree,只不過它的變式很多钟哥。mesh結(jié)構(gòu)更復(fù)雜迎献,EDA tool也不能很好地自動化完成,設(shè)計上相對更加困難瞪醋。
這是我的第26篇文章忿晕。微信公眾號:偉醬的芯片后端之路