Congestion意思為擁塞,一般是在后端PR階段發(fā)現(xiàn)布局布線比較擁擠,可能會(huì)導(dǎo)致布線布不過去,出問題也無法做ECO。
Congestion也分為幾種情況,和前端密切相關(guān)的是Logic Congestion(更多關(guān)于后端Congetsion問題,查看文末參考文章),主要原因是RTL設(shè)計(jì)問題導(dǎo)致,這種問題的現(xiàn)象從后端看上去就是Cell數(shù)沒多少,就是線密。
產(chǎn)生Congestion的主要原因
有限的面積下,電路面積過大。從一開始預(yù)估的面積與最后實(shí)際的面積有一定差距,導(dǎo)致該模塊面積被限定的情況下,邏輯較多,繞線嚴(yán)重。
大位寬信號(hào)做選擇邏輯。假如有一個(gè)信號(hào)定義為3萬bit,然后它還需要送到幾個(gè)模塊去做選擇器,從里面挑數(shù),這樣就是3萬根線,連來連去,這樣的設(shè)計(jì)必然有問題。這樣驚人的設(shè)計(jì)最后怎么能用呢。只能說,工藝牛逼!
選擇器太大。選擇器的選擇項(xiàng)多,設(shè)計(jì)復(fù)雜的情況下,難免會(huì)有選擇器的選擇項(xiàng)有大幾十上百個(gè)的情況。
信號(hào)負(fù)載大。一個(gè)參數(shù)信號(hào)可能用到了很多地方,驅(qū)動(dòng)數(shù)個(gè)像上面那樣的大mux,這樣的信號(hào)的負(fù)載會(huì)非常大。
組合邏輯路徑長(zhǎng)。組合邏輯路徑長(zhǎng),時(shí)序比較緊的地方,工具會(huì)做一些優(yōu)化增加繞線,這樣的結(jié)果會(huì)加重后端擁塞。
以上問題會(huì)出現(xiàn)歸根結(jié)底就是設(shè)計(jì)方案和方法的問題。
幾個(gè)無效的嘗試
怎么解決,假設(shè)一個(gè)前提,時(shí)間緊迫,如果對(duì)時(shí)序邏輯進(jìn)行大的改動(dòng),需要調(diào)試的時(shí)間較長(zhǎng),嚴(yán)重時(shí)造成項(xiàng)目delay。所以只能在不改變時(shí)序的情況下,只對(duì)組合邏輯進(jìn)行優(yōu)化。
模塊劃分重構(gòu),目的是想減少模塊之間的耦合度,重新劃分,把耦合度強(qiáng)的模塊放到接近,模塊的層級(jí)調(diào)整,比如三級(jí)模塊變二級(jí)模塊。但是,從后端布線上看,其實(shí)看不出模塊邊界,關(guān)聯(lián)度高的模塊甚至?xí)嘣谝黄鸬?,工具自?dòng)按元器件關(guān)聯(lián)較近的方式布局布線,甚至?xí)涯阋粋€(gè)模塊分成距離很遠(yuǎn)的兩部分。這樣修改可以減少耦合度,有效果但不明顯。
大mux拆分成小mux。將單一的大mux拆分成多級(jí)小選擇器,每一級(jí)之間用寄存器打斷。但是,如果不用寄存器打斷拆分,可能沒啥用,因?yàn)楣ぞ咭彩沁@么做的。歸納可能會(huì)省去很多多余的分支。但在不改變時(shí)序的情況下做拆分基本無收益,因?yàn)橹皇窃赗TL級(jí)別上看的大mux寫法的不同,實(shí)際上還是由眾多小mux組成的。
降低信號(hào)的負(fù)載,參數(shù)寄存器復(fù)制多份,送給不同的模塊。數(shù)據(jù)通路的寄存器也可以進(jìn)行復(fù)制,減少信號(hào)的負(fù)載。但是綜合加max_fanout約束后,工具會(huì)自動(dòng)插buffer和復(fù)制寄存器的操作,而且因?yàn)槊娣e本身有限,時(shí)序的優(yōu)化帶來的收益還會(huì)被寄存器的增加所抵消。
總結(jié)一下,就是忙碌了半個(gè)月的硅農(nóng)師傅,白忙活了。
有效的修改優(yōu)化總結(jié)
運(yùn)算邏輯復(fù)用,節(jié)省面積給邏輯走線。先選后比/加/乘/模塊。
乘法器復(fù)用打拍位置調(diào)整,乘法器模塊的復(fù)用把打拍放在復(fù)用模塊的輸出,而不是傳輸?shù)礁鱾€(gè)模塊中才打拍,節(jié)省寄存器開銷,負(fù)載的問題,前面也說了,工具會(huì)自動(dòng)插buffer和復(fù)制寄存器。
重定時(shí)(retiming)技術(shù),改變寄存器的打拍位置,節(jié)省寄存器。
打斷較復(fù)雜的組合邏輯,中間插入寄存器,時(shí)序變好,即使寄存器增多,面積(可能)反而會(huì)變小。
大于1k的寄存器組考慮用RAM替代,但用RAM讀取數(shù)據(jù)需要進(jìn)行時(shí)序控制邏輯,并行度會(huì)降低。要求并行度高,可使用多個(gè)RAM。面積和速度永遠(yuǎn)是兩個(gè)背道相馳的努力目標(biāo)。所以要Trade Off(折中)
后端喜歡,深度深,位寬小的RAM,這樣最后的bit/面積的值會(huì)更大。舉例說明就是Depth128xWidth16和,Depth16xWidth128相比最后的面積大小,前者會(huì)比后者小很多。簡(jiǎn)單來說,后端喜歡細(xì)長(zhǎng)的,不喜歡粗短的。
RAM也可以復(fù)用,前面計(jì)算用完空閑下來的RAM,可以復(fù)用起來。
交給后端同事吧(逃)。
審核編輯 :李倩
-
模塊
+關(guān)注
關(guān)注
7文章
2788瀏覽量
50346 -
寄存器
+關(guān)注
關(guān)注
31文章
5433瀏覽量
124427 -
Verilog
+關(guān)注
關(guān)注
29文章
1367瀏覽量
112253
原文標(biāo)題:Verilog設(shè)計(jì)遇到了Congestion問題怎么辦?
文章出處:【微信號(hào):IP與SoC設(shè)計(jì),微信公眾號(hào):IP與SoC設(shè)計(jì)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
sys_sem_free()傳入的參數(shù)變成了NULL,引起這個(gè)現(xiàn)象的主要原因有哪些?
變頻器對(duì)PLC和步進(jìn)電機(jī)干擾的主要原因和解決辦法

探究傳感器故障的主要原因
線路板PCB工藝中的翹曲問題產(chǎn)生的原因
壓接式N頭使用金屬外殼的主要原因

放大器零點(diǎn)漂移主要原因_放大器零點(diǎn)漂移怎么調(diào)
說明增強(qiáng)現(xiàn)實(shí)技術(shù)的產(chǎn)生原因
華納云:企業(yè)遷移到云端的主要原因是什么?
水電站高壓電抗器故障的主要原因

評(píng)論