日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > > 艾思后端實現(xiàn)
在所有的后端工具里邊,有三個重要的引擎:auto-place,CTS,auto-route三個。這里邊的auto-place是決斷了整個設計時序的基點。由于,auto-place的動作是在設計的preCTS階段,所以這里的設計時序就是廣義上說的:數(shù)據(jù)路徑(datapath)時序(timing )。當然,就算是到了CTS/route階段后,也可以繼續(xù)利用auto-place數(shù)據(jù)優(yōu)化的功能,在數(shù)據(jù)庫上做數(shù)據(jù)路徑增量優(yōu)化(optDesign -increment)。可以說,數(shù)據(jù)路徑的優(yōu)化手段,實際上是貫穿在整個后端流程上的。這里結(jié)合過往的經(jīng)驗,以及invs特有的先進策略,一起來看看,數(shù)據(jù)路徑優(yōu)化里邊的重要知識點:路徑分組(path group)。看看這其中的奧妙和有趣的事情。ICer GO!眾所周知,無論是綜合工具(DC、genus或者precision等)抑或是APR工具(icc、icc2或者invs等),數(shù)據(jù)路徑優(yōu)化(data path optimization)一直是影響時序質(zhì)量的重要因素。由于綜合使用了ideal clock,可以說,data path的優(yōu)化就是綜合階段的主要工作,這個和后續(xù)的APR工具的第一個主動作:auto-place,形成了前后連貫,相輔相成。盡管這兩個引擎和所處工具的位置不同,但是目標是高度一致:優(yōu)化數(shù)據(jù)路徑的時序。這也是最近兩年聚合型R2G工具大行其道的一個重要原因。
  • S家的Fusion Compiler:DCG + ICC2

  • C家的iSpatial:genus + innovus

無論什么工具,數(shù)據(jù)路徑優(yōu)化(data path optimization)一直是基于路徑分組(path group)進行的,想要提高數(shù)據(jù)路徑優(yōu)化就需要了解路徑分組(path group)的理論。

經(jīng)典路徑分組(path group)理論

在經(jīng)典的數(shù)據(jù)路徑優(yōu)化理論(主要是基于S家,因為DC是綜合界的長期主導),對于數(shù)據(jù)路徑優(yōu)化,DC采用了基于**時鐘域(clock domain)**的方式進行處理:每一個時鐘域都會被工具判定為一個路徑分組(path group)。

路徑分組(path group)的基礎知識

PS:雖然最新的DC也提供了基于違例(violation)和設計層次(hierarchy)的自動路徑分組(path group)創(chuàng)建命令;create_auto_path_groups,但是這個命令只是一個補充性的,并沒有動搖S家傳統(tǒng)的路徑分組方式。S家的這種分組方式對用戶是很友好的,基本就是將SDC的create_clockcreate_generate_clock命令直接翻譯成了group_path 命令,映射關(guān)系見下表:

這個簡單的映射方法,有兩個潛在的問題:
  • 如果有g(shù)en-clock的存在,按照時鐘傳播理論,那么主clock和gen-clock會同時送達同一個FF

  • 如果有多個主clock存在,跨時鐘域路徑(cross domain data path)處理方式

利用下圖,來解釋一下這兩個問題:
  • 基于SDC層疊(cascade clock)理論,所有的FF都是使用離它最近的clock或者gen-clock,所以上述的FF1~FF4都是使用了gen-clock,所以這些FF都只會被歸為gen-clock的domain

  • 默認情形,SDC里邊所有的clock都是做同步(synchronous)關(guān)系處理,除非用戶單獨指定,命令是:set_clock_groups -group $PCLK_1_GRP -group $PCLK_2_GRP [-physically_exclusive| -logically_exclusive| -asynchronous

所以,使用下面的SDC命令,DC/SDC 就可以明確每個FF所歸屬的時鐘域和同步時序關(guān)系了:
create_clock/clock_generate_clock
set_clock_groups ...... 

基于路徑分組的優(yōu)化策略

前邊說過,這種方式最大的優(yōu)勢就是方便,除過聲明clock domain之間的同步、異步等關(guān)系,用戶不用再做其他設定,工具就可以處理后續(xù)的事宜。基于上,整個S家的R2G流程都是使用上述的path group 理論進行時序優(yōu)化的?;玖鞒倘缦拢?/span>
  • 基于path group進行WNS優(yōu)化,同時兼顧TNS。(工具總是基于WNS來進行優(yōu)化,這樣才能有效的提高整體設計質(zhì)量。相反只要TNS的重要新并非那么高了)

  • 默認的path group具有同樣的優(yōu)先級(weight),除非用戶指定。對于具有優(yōu)先級區(qū)別的路徑分組,工具會在出現(xiàn)修復沖突的時候,使用優(yōu)先級進行解沖突(conflict)

所以這里會衍生出一個新的問題,譬如下圖:對于上述路徑,F(xiàn)F2會在同一個clock domain下有兩個路徑,F(xiàn)F1->FF2和SRAM1->FF2,如果此時有下列情景:
  • FF1-> FF2 violation -1ns

  • SRAM1-> FF2 violation -0.5ns

基于WNS理論,由于-1ns的存在,這個時候工具就不會去做SRAM1->FF2的timing修復。但是用戶可能更為關(guān)注的是SRAM1->FF2的violation,所以通常的做法就是使用group_path進行再次分組,譬如:
group_path -name GRP1 -from FF1 -to FF2
group_path -name GRP2 -from SRAM1 -to FF2 
這樣就會產(chǎn)生兩個平行的組,工具都可以看到他們的TNS,所以大概率的結(jié)果會是下面的結(jié)果:

這個做法很常用,并且對S家的流程也很有好用,但是這里提高SRAM->FF2的代價是跳過了FF1->FF2優(yōu)化,也就是說整個數(shù)據(jù)庫的WNS(-1ns)并沒有發(fā)生變化。
但是最近使用了invs后,對invs的分組理論進行了學習和理解,發(fā)現(xiàn)了一個新思路,很有趣。

invs 路徑分組(path group)的新思路

C家的R2G流程,基本還是沿用了S家的時序分析基本理論,基于SDC是標準的時序約束交付數(shù)據(jù),C家嚴格遵循,除過一些貓叫咪的名詞差異(leading/tailing等),核心的理論是完全一樣的。PS:這里要給C家點贊,確實S家在前端和中端的統(tǒng)治地位不容撼動,打不過我就加入,這個也是順應當下的商業(yè)策略的。近似的,C家的時序路徑的優(yōu)化也是基于path group的WNS的,WNS優(yōu)先級大于TNS。

傳統(tǒng)路徑分組(path group)的挑戰(zhàn)

在讀入SDC后,某些FF會繼承一個或者多個clock domain的屬性,這種比較常見,相應的描述可以參見S家的這個變量這個變量默認是true,也就是說無論是S家還是C家,對于這種一個FF上有多個clock的情形默認是可以直接支持的,這樣也對RTL/SDC的設計提供了盡量大的寬容度,一個圖例如下:譬如這里的FF1,就會有兩個clock到達:gen_clk1_pclk1和gen_clk2_pclk1,按照傳統(tǒng)S家的路徑分組理論,F(xiàn)F1會被分別歸入到gen_clk1_pclk1和gen_clk2_pclk1兩個分組,按照默認方式,下面的path就有可能形成一個沖突(conflict)
 FF0 -> FF1  vs FF2-> FF1 
S家的工具默認的行為就是對每一個組進行修復,組合組之間不做一致性合并(merge),如果在FF0->FF1和徑FF2->FF1的數(shù)據(jù)路徑優(yōu)化發(fā)生分歧(conflict),如果兩個path’ group優(yōu)先級恰巧又一樣,S家的工具只能確保一個結(jié)果會好一點,這是因為:數(shù)據(jù)路徑的修復在同一時間只能關(guān)注一個數(shù)據(jù)分組(path group)這個情形在設計中非常常見,如果使用了傳統(tǒng)分組,一個風險就是:**同樣重要的時序很有可能不會同時被工具優(yōu)化到最好。**所以,在借鑒了S家的分組方式,C家提出了自己的分組方式思想:基礎路徑分組(BPG:BasicPathGroup)

BasicPathGroup (BPG)的理論和特點

基于上述傳統(tǒng)路徑分組的優(yōu)劣勢,C家提出了一個新的思路:在傳統(tǒng)路徑分組的基礎上,疊加一層新馬甲(wrapper):BasicPathGroup (BPG)。通過BPG這個wrapper,可以較好的解決傳統(tǒng)路徑分組的短板。這里看一下S家的時序分析理論,任何工具對時序質(zhì)量的統(tǒng)計都是基于終點的(endpoint,EP),這個是所有STA工具評判時序質(zhì)量的統(tǒng)計基礎。但是由于時鐘交疊(clock domain overlap)的情景,會導致在一個EP,產(chǎn)生多個report_timing的結(jié)果(multi path group per FF),同時也會讓place_opt的引擎遇到類似的局面:一個單一FF,會同時出現(xiàn)多個path group的分組。與其繼續(xù)深耕,不如化繁從簡(PS:這個確實是C家長期堅持的一個策略:簡單就是美好),使用BPG,破除傳統(tǒng)的基于clock domain的路徑分組(path group),讓每個EP回歸到原本應該就應該有的形態(tài):獨一性(unique)。使用BGP的方式,在上述情境下,F(xiàn)F1只會歸為一個path group,這樣就可以緩解傳統(tǒng)路徑分組的沖突(conflict)困擾。默認invs流程,會使用BPG的方式進行分組,這里會有兩類明確的組:
  • reg2reg:沿觸發(fā)時序邏輯到沿觸發(fā)時序邏輯

  • reg2cgate:沿觸發(fā)時序邏輯到電平觸發(fā)的時序邏輯

除過上述兩個組,其余所有未被覆蓋的組都被工具稱作default。所以,一個數(shù)據(jù)庫,在invs里邊的默認BGP的加持下會有這樣的情形:
all = reg2reg + reg2cgate + default 
當然,這里邊并非說明:all 就等于設計里邊的reg + cgate的數(shù)量總和,這是因為:如果你的設計里邊有了IO 時序約束,那么大概率會有IN2REG或者REG2OUT的類型,這樣:all >= reg_count + cgate_count。默認,在同為Effort High的路徑分組下,invs給出了自己的權(quán)重配比:reg2reg > reg2cgtage > default采用的BGP分組:invs工具無論在何種情形下, 每一個reg,cgate都只有唯一的最高優(yōu)先級的主分組,這個會給基于TNS修復方式的place 引擎解放了手腳,大大提升了修復結(jié)果。當然,如果用戶自己明確知道數(shù)據(jù)庫里邊有IO的時序路徑,并且需要關(guān)注,也可以使用下列命令進行配置,
createBasicPathGroups -expanded 
設計里邊的組會有下面的加總公式:
all = default + reg2reg + reg2cgate + in2reg + reg2out + in2out 
invs也會配置一個合理的默認優(yōu)先級,具體如下:
reg2reg > reg2cgate > default > [in2out | reg2out | in2reg] 
C家這里的默認處理還是很合理的。這個也符合用戶的常規(guī)需求。使用BGP模式的時候,在optDesign的過程中,工具會根據(jù)系統(tǒng)情形,對 reg2reg、reg2cgate 等組進行逐個優(yōu)化,基于每個BGP分組,對于所有隸屬于High Effort path group的最差的TNS group進行優(yōu)化: optDesign always work on worst(TNS_grp_1 … TNS_grp_n)'s group每個組的WNS的EP進行優(yōu)化的原則是:無論這個EP屬于那個clock domain,invs只會去做到這個EP最差的路徑優(yōu)化這個方式,在multi-clock per FF情形,或者復雜fanin的timing path的情形,是可以得到更好的優(yōu)化結(jié)果,因為在同一時間的優(yōu)化是絕對專注的,不會有其他的同優(yōu)先級的path group的path出現(xiàn)。所以,在默認情況下,invs就會得到不差于傳統(tǒng)path group分組方式的結(jié)果。
C家通過BGP的wrapper,巧妙的處理了復雜數(shù)據(jù)路徑優(yōu)化種的沖突問題,讓工具可以更為專一的進行優(yōu)化,而不是把精力浪費在了仲裁(arbiter)和path group反復迭代(iteration)上。

usefulSkew + BGP:時序修復的雙殺

眾所周知,invs里邊有很強大的usefulSkew技能,此技能貫穿了auto-place,CTS和auto-route等階段(PS:這里要注意,usefulSkew只是追加,不能替代原有的三大引擎)。如果當使用BGP后,每個EP都有了獨一的最高優(yōu)先級的path group,這樣invs在調(diào)節(jié)usefulSkew上的計算量(compute consume)會大幅降低。因為每一個path的skew調(diào)節(jié),都需要工具去評估這個path原有的margin才能做出判斷,如果一個EP分屬于不同的組(但是是同優(yōu)先級的組),每個組在這個EP的slack形態(tài)大概率不一致,工具需要數(shù)倍的計算時間和依賴考量(dependency),互相牽制,工具只能選擇在那個修復瞬間的最優(yōu)解,但是,隨著path group被不斷被輪詢修復(repair iteration),上一次的usefule的修復方式,可能已經(jīng)過時(out-of-date),這樣數(shù)據(jù)就會形成相互牽制(lock),類似一個狀態(tài)機(SM),但是它無法自收斂,最終隨著data path optimization的圈數(shù)達到極限(iteration limit),數(shù)據(jù)的狀態(tài)就有點中間態(tài)的意味,不太會達到一個好的收斂度。擁有了BGP的usefulSkew,就像插上了翅膀的馬達,由于依賴度的大幅度降低,可以專注clock skew的調(diào)優(yōu)工作,這個時候才能把usefulSkew的性能徹底釋放出來。和所有的工具命令一樣,BGP也不是完全絲滑,譬如:由于可讀性和命令一致性的原因,針對BGP,invs也在report_timing的命令里邊做了一些變通處理,這個后續(xù)會講到。未完待續(xù) (To be continued ) …

【敲黑板劃重點】

path group是data path optimization的數(shù)據(jù)分類基石,理解其中的理論可以有助于優(yōu)化命令和設計流程。


本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
關(guān)閉