巢 瑋,徐 勇,楊 凡,吳浩澤
(1.哈爾濱工業(yè)大學(xué)(深圳),廣東 深圳 518055;2.深圳國微芯科技有限公司,廣東 深圳 518053)
靜態(tài)時(shí)序分析(Static Timing Analysis,STA)作為電路設(shè)計(jì)中重要的時(shí)序驗(yàn)證方法,用來確保電路的功能運(yùn)行在不同工作環(huán)境下都能符合設(shè)計(jì)的預(yù)期目標(biāo)。在STA 時(shí),一個(gè)完整的設(shè)計(jì)將被分解為數(shù)條不同的時(shí)序路徑,通過計(jì)算每條路徑上的信號傳播延遲來驗(yàn)證在設(shè)計(jì)內(nèi)部以及設(shè)計(jì)輸入輸出端口的時(shí)序情況是否符合給定的時(shí)序約束。時(shí)序約束是設(shè)計(jì)者根據(jù)不同設(shè)計(jì)的具體情況,設(shè)置一定的約束指標(biāo)來模擬所設(shè)計(jì)電路的實(shí)際工作環(huán)境。STA 通過分析設(shè)計(jì)中時(shí)序路徑的時(shí)序情況,確保所設(shè)計(jì)的電路能夠正常工作在對應(yīng)的工作頻率下而不產(chǎn)生時(shí)序違例。
隨著電路集成密度的提高以及電路結(jié)構(gòu)復(fù)雜程度的指數(shù)性增加,層次化架構(gòu)設(shè)計(jì)已成為重要的電路設(shè)計(jì)方法[1]。在層次化架構(gòu)的電路設(shè)計(jì)中,IC 頂層與下層模塊的時(shí)序約束分別獨(dú)立完成。時(shí)序約束的迭代與時(shí)序收斂的效率是芯片投片生產(chǎn)與產(chǎn)品上市時(shí)間的重要保證。隨著工藝的愈發(fā)先進(jìn)這一過程往往要設(shè)計(jì)者付出較多的時(shí)間和精力[2]。隨著設(shè)計(jì)和制造工藝的不斷進(jìn)步,時(shí)序約束與時(shí)序收斂也迎來了新的挑戰(zhàn)。如之前自主設(shè)計(jì)的芯片[3-4]盡管規(guī)模不算大,但時(shí)序約束及時(shí)序收斂依然經(jīng)歷了數(shù)次迭代,這部分較重復(fù)的手工迭代在一定程度上降低了芯片設(shè)計(jì)效率。
研究表明,精準(zhǔn)的時(shí)序約束能有效避免不真實(shí)的時(shí)序違例及不必要的時(shí)序修復(fù)所帶來的面積增加問題,從而減輕電路后端設(shè)計(jì)的工作量[5]。隨著制造工藝的進(jìn)步和電路設(shè)計(jì)復(fù)雜度的提高,時(shí)序收斂的難度及迭代周期都迎來了新的挑戰(zhàn)[6]。為了準(zhǔn)確地對電路進(jìn)行分析并去除部分特別悲觀和特別樂觀的場景,時(shí)序分析方法經(jīng)歷了從工藝偏差方法學(xué)到先進(jìn)的片上誤差方法學(xué),再到統(tǒng)計(jì)學(xué)片上誤差分析的演進(jìn)[7-9]。在超大規(guī)模集成電路中,單位面積中晶體管的數(shù)量呈指數(shù)性增長,基于時(shí)序約束的布局布線變得愈發(fā)復(fù)雜并有著龐大的計(jì)算量[10-12],實(shí)驗(yàn)表明,精準(zhǔn)的時(shí)序約束能有效減少迭代從而縮短芯片設(shè)計(jì)的周期。
時(shí)序約束按照約束類型通??煞譃槿悾謩e是時(shí)鐘約束、端口約束以及時(shí)序例外約束。其中時(shí)鐘約束是靜態(tài)時(shí)序分析的基礎(chǔ),如在時(shí)鐘MUX 的研究中[13],對常見的幾種電路結(jié)構(gòu)的時(shí)鐘約束進(jìn)行了分析與比較。此外,一種時(shí)鐘約束的傳播的方法被應(yīng)用在了低功耗的異步RISC-V 處理器上,通過傳播時(shí)鐘與生成時(shí)鐘對異步電路進(jìn)行時(shí)序分析[14]。文獻(xiàn)[15]介紹了一種靜態(tài)時(shí)序驗(yàn)證方法,可以較早、快速、精確定位FPGA 端口時(shí)序設(shè)計(jì)存在的問題,從而縮短了驗(yàn)證時(shí)間,提高了驗(yàn)證效率、準(zhǔn)確性和覆蓋率。對于特殊的時(shí)序路徑,需要通過時(shí)序例外約束進(jìn)行定義,從而使得工具在STA 時(shí)能夠使用正確的參數(shù)及指標(biāo)分析特殊的時(shí)序路徑[16]。
由于時(shí)序約束的多樣性,同一類型的時(shí)序約束彼此之間的參數(shù)與選項(xiàng)可能存在較大差異,為實(shí)現(xiàn)時(shí)序約束在頂層及模塊間的自動(dòng)化傳播,使用了業(yè)界標(biāo)準(zhǔn)Synopsys 設(shè)計(jì)約束(Synopsys Design Constraints,SDC)文件作為時(shí)序約束的標(biāo)準(zhǔn)。同時(shí)在時(shí)序約束分類的基礎(chǔ)上,根據(jù)SDC 文件中時(shí)序約束的參數(shù)與選項(xiàng)結(jié)構(gòu),對分類進(jìn)行了細(xì)化。根據(jù)SDC 中參數(shù)與選項(xiàng)結(jié)構(gòu)的差異,該自動(dòng)化流程將時(shí)序約束分為四大類,分別是通用約束、端口約束、時(shí)序例外以及時(shí)鐘約束,如圖1 所示。根據(jù)不同時(shí)序約束的類型,將除端口約束外的時(shí)序約束細(xì)分為六個(gè)分類,每個(gè)分類的時(shí)序約束都具有相似的結(jié)構(gòu)與選項(xiàng)。在流程圖中,白色框代表著輸入和輸出,灰色框表示自動(dòng)化傳播方法[17]。
圖1 時(shí)序約束的自動(dòng)化傳播流程圖
端口約束是用來描述端口外部延時(shí)、電容等信息以更準(zhǔn)確地貼近電路的實(shí)際工作情況。因此,端口約束與時(shí)序分析的場景息息相關(guān),不同時(shí)序分析的場景的端口可能存在較大差異。如圖2(a)所示,在頂層的端口為IN_1、IN_2、OUT_1 以及OUT_2。當(dāng)時(shí)序約束向下傳播時(shí),時(shí)序分析的場景從頂層變?yōu)槟K,此時(shí)模塊外的頂層電路將不再需要時(shí)序分析,且模塊的輸入輸出引腳變?yōu)槎丝凇榱藴?zhǔn)確分析模塊的時(shí)序,模塊時(shí)序約束需要對模塊端口in1、in2、out1 以及out2 進(jìn)行重新約束。
圖2 端口約束在頂層與模塊之間的差異
如圖2(a)所示,假設(shè)頂層端口IN_1 與OUT_1 端口的輸入延遲與輸出延遲約束如下:
其中,$IN_1_delay 和$OUT_1_delay 分別對應(yīng)端口IN_1 與OUT_1 的輸入延遲與輸出延遲,$IN_1_clock 和$OUT_1_clock 則分別對應(yīng)端口外時(shí)序路徑起點(diǎn)與終點(diǎn)的時(shí)鐘。當(dāng)時(shí)序約束向下傳播時(shí),由于模塊端口in1 與out1 與頂層端口的約束不存在直接關(guān)聯(lián),將通過與端口相連的時(shí)序路徑構(gòu)建模塊端口的等效延遲,因此可得到如下的輸入延遲與輸出延遲:
在不考慮線延遲的情況下,模塊端口in1 的輸入延遲等于寄存器REG_1 的時(shí)鐘到輸出延遲$REG_1_CQ_delay 加上組合邏輯COM1 的延遲$COM1_delay。輸入延遲的約束時(shí)鐘為在頂層與in1 相連的寄存器REG_1 的時(shí)鐘$REG_1_clock。模塊端口out1的輸出延遲等于組合邏輯COM5 的延遲$COM5_delay 加上寄存器REG_4 的建立時(shí)間$REG_4_setup。此時(shí)寄存器REG_4 的時(shí)鐘$REG_4_clock則用來約束端口out1 的輸出延遲。
在端口約束向上傳播時(shí),頂層時(shí)序約束文件中通常已經(jīng)存在端口約束,所以無需對端口進(jìn)行重復(fù)約束。
時(shí)鐘約束是時(shí)序分析的基礎(chǔ),精準(zhǔn)的時(shí)鐘定義是時(shí)序收斂的重要依據(jù)。時(shí)鐘約束包括了創(chuàng)建時(shí)鐘、創(chuàng)建生成時(shí)鐘等。在大型芯片設(shè)計(jì)中,由于工作場景與需求的不同,時(shí)鐘頻率與時(shí)鐘結(jié)構(gòu)往往多種多樣。
如圖3(a)所示,頂層時(shí)鐘由兩個(gè)端口時(shí)鐘CLK_1和CLK_2 以及兩個(gè)PLL 時(shí)鐘CLK_3 和CLK_4 組成。如果MUX1 的選擇端不加以約束,則時(shí)鐘CLK_1 和CLK_2 都能通過模塊引腳clk_a 影響寄存器REG_2的時(shí)序。同時(shí),模塊引腳clk_a 的一個(gè)分支連接到了緩沖器BUF_1 并產(chǎn)生了一個(gè)時(shí)鐘CLK_1 的生成時(shí)鐘。另一方面,PLL 輸出的時(shí)鐘CLK_3 與CLK_4 之間存在一條時(shí)序路徑從寄存器REG_1 到REG_3,而此時(shí)由于CLK_3 并沒有直接連接到模塊上。當(dāng)進(jìn)行模塊級的時(shí)序分析時(shí),需要?jiǎng)?chuàng)建CLK_3 的虛擬時(shí)鐘以補(bǔ)全該條時(shí)序路徑確保時(shí)序分析的正確性,如圖3(b)所示。
圖3 時(shí)鐘約束在頂層與模塊之間的差異
假設(shè)圖3(a)的頂層的時(shí)鐘有如下約束:
其中,每個(gè)時(shí)鐘都有對應(yīng)的時(shí)鐘周期$CLK_period 以及波形$CLK_WF。當(dāng)時(shí)鐘約束向下傳播時(shí),與模塊有直接連接關(guān)系的時(shí)鐘CLK2 將根據(jù)電路結(jié)構(gòu)等效傳播至模塊上。而CLK3 雖然沒有連接到模塊上,但其構(gòu)成的時(shí)序路徑與模塊存在交互,故需要?jiǎng)?chuàng)建虛擬時(shí)鐘,以此來對模塊端口reg1_q 進(jìn)行約束從而分析從寄存器REG_1 到REG_3 的時(shí)序路徑。端口約束中對輸入延遲的時(shí)鐘約束將與這里定義的虛擬時(shí)鐘名字自動(dòng)保持一致,無需人為調(diào)整。此時(shí),對應(yīng)的模塊時(shí)鐘約束如下:
在時(shí)鐘約束向上傳播時(shí),模塊端口所創(chuàng)建的時(shí)鐘以及模塊所設(shè)置的虛擬時(shí)鐘通常并不是頂層時(shí)鐘的起始點(diǎn),因此這些時(shí)鐘及其對應(yīng)的時(shí)鐘不確定性等屬性均不需要向上傳播。相反,模塊內(nèi)部的時(shí)鐘通常為時(shí)鐘真正的起始點(diǎn),如時(shí)鐘門后的生成時(shí)鐘、IP 內(nèi)部PLL 所產(chǎn)生的時(shí)鐘等。這些時(shí)鐘在向上傳播時(shí),需要根據(jù)電路層級結(jié)構(gòu)的改變進(jìn)行對應(yīng)的調(diào)整。
在時(shí)序分析中,有時(shí)一些特殊的時(shí)序路徑需要通過時(shí)序例外約束進(jìn)行差異化分析,從而使得工具在STA 時(shí)能夠使用正確的參數(shù)及指標(biāo)分析特殊的時(shí)序路徑。時(shí)序例外包括偽路徑、多周期路徑等。時(shí)序例外可設(shè)置在標(biāo)準(zhǔn)單元及其引腳上,也可設(shè)置在端口或時(shí)鐘上。因此時(shí)序例外在頂層與模塊間傳播時(shí),準(zhǔn)確地獲取標(biāo)準(zhǔn)單元的層級路徑,靈活轉(zhuǎn)換端口與引腳顯得尤為重要。
由圖4(a)可知,寄存器REG_1 與寄存器REG_2之間存在大量組合邏輯COM1 與COM2。假設(shè)時(shí)鐘CLK_1 與CLK_2 是同步時(shí)鐘且寄存器REG_1 與REG_2 之間需要數(shù)個(gè)時(shí)鐘周期才能完成,那么它們之間存在多周期路徑,可由如下時(shí)序約束描述:
圖4 時(shí)序例外在頂層與模塊之間的差異
這里的$setup_cycle 和$hold_cycle 分別對應(yīng)了在建立時(shí)間檢查時(shí)所對應(yīng)的周期數(shù)以及保持時(shí)間檢查時(shí)所對應(yīng)的周期數(shù)。當(dāng)時(shí)序例外向下傳播時(shí),完整的時(shí)序路徑被模塊的端口分為兩部分,頂層的電路結(jié)構(gòu)在模塊級將不再可見,此時(shí)根據(jù)該條時(shí)序路徑的電路結(jié)構(gòu),可以獲取其在模塊端口上的等效點(diǎn),重新定義模塊的時(shí)序例外,同時(shí)模塊內(nèi)標(biāo)準(zhǔn)單元的層級結(jié)構(gòu)也隨之改變。對應(yīng)的模塊時(shí)序例外如下所示:
當(dāng)時(shí)序例外向上傳播時(shí),由于時(shí)序路徑的補(bǔ)全,在時(shí)序分析時(shí)將多出一些額外的時(shí)序路徑。為了模塊的時(shí)序約束傳播至頂層時(shí)不影響到頂層其他時(shí)序路徑,此時(shí)序例外將仍舊停留在模塊及其內(nèi)部,并將從端口起始的路徑從起點(diǎn)改為經(jīng)過點(diǎn),并將端口重新改為引腳。模塊時(shí)序例外等效的新頂層時(shí)序約束如下所示:
該時(shí)序約束的自動(dòng)化傳播方法不論在測試用例還是工程項(xiàng)目中均能準(zhǔn)確而高效地生成對應(yīng)的時(shí)序約束。在實(shí)驗(yàn)的過程中,使用的測試電路一共有三個(gè),分別是一個(gè)兩百多標(biāo)準(zhǔn)單元的測試用例、一個(gè)約一萬標(biāo)準(zhǔn)單元的工程用小型數(shù)字電路以及一個(gè)約六十五萬標(biāo)準(zhǔn)單元的工程項(xiàng)目電路。每個(gè)測試電路都有一個(gè)頂層時(shí)序約束SDC 文件以及一個(gè)模塊級時(shí)序約束SDC 文件,分別對應(yīng)了時(shí)序約束向下傳播時(shí)所需要的頂層時(shí)序約束以及時(shí)序約束向上傳播時(shí)所需要的模塊級約束。為了更好地貼近時(shí)序約束在芯片設(shè)計(jì)中的實(shí)際情況,三個(gè)測試電路中使用了兩個(gè)已經(jīng)成功signoff 的工程項(xiàng)目的網(wǎng)表以及對應(yīng)的時(shí)序約束進(jìn)行測試。
實(shí)驗(yàn)結(jié)果如表1 所示,該時(shí)序約束的自動(dòng)化傳播方法在不同的IC 設(shè)計(jì)中均能準(zhǔn)確地將時(shí)序約束在頂層與模塊間進(jìn)行等效傳播,不論是實(shí)驗(yàn)用的測試用例還是實(shí)際工程中signoff 的IC 設(shè)計(jì)均能精確地實(shí)現(xiàn)時(shí)序約束的自動(dòng)化傳播。自動(dòng)化傳播所產(chǎn)生的時(shí)序約束經(jīng)過與傳統(tǒng)時(shí)序約束傳播方式進(jìn)行對比,結(jié)果表明,自動(dòng)化產(chǎn)生的時(shí)序約束在功能上100%匹配人為手動(dòng)所生成的時(shí)序約束。
表1 不同測試電路的測試數(shù)據(jù)
該文提出了一種時(shí)序約束的自動(dòng)化等效傳播方法,能夠根據(jù)頂層時(shí)序約束或模塊時(shí)序約束自動(dòng)生成另一層級對應(yīng)的等效時(shí)序約束。該自動(dòng)化方法減少了設(shè)計(jì)時(shí)序約束的人力成本,通過自動(dòng)化的方法替代了重復(fù)繁瑣的手工迭代,從而提高了時(shí)序分析與時(shí)序收斂的效率。從實(shí)驗(yàn)結(jié)果來看,該方法在測試用例與項(xiàng)目工程應(yīng)用中均能準(zhǔn)確地生成對應(yīng)的時(shí)序約束,顯著提高了時(shí)序約束設(shè)計(jì)的效率及自動(dòng)化程度。