本書為集成電路時序約束設計的指南,指導讀者通過指定的時序要求,充分發揮IC設計的性能。本書內容包括受時序約束的關鍵環節的設計流程、綜合時序分析、靜態時序分析和布局布線等。本書首先詳細講解時序要求的概念,然后詳細解釋如何將其應用于設計流程中的特定階段,后通過實踐介紹在Synopsys約束設計下(SDC)業界領先約束的格式。
在當今的深亞微米世界中,對于設計人員而言,時序已經成為開發專用集成電路(ASIC)或片上系統(SoC)的重要挑戰。設計工程師在設計流程的不同階段之間進行多次循環迭代,以滿足時序要求。時序不僅是芯片的響應時間,還是芯片功能的一個組成部分,可以確保其能夠與系統上其他元器件無縫地通信。這就提出了問題,什么是時序?如何指定它?本書是一本實踐指南,有助于讀者編寫和理解集成電路設計中的時序約束。通過本書讀者將學習到如何有效和正確地編寫約束,以便實現IC或FPGA設計的期望性能,包括關于約束重用的注意事項。其覆蓋范圍包括受時序約束影響的設計流程的關鍵方面,有綜合、靜態時序分析以及布局布線。本書詳細說明了指定時序要求所需要的概念,然后將其應用于設計流程中的特定階段,所有這些都包含在Synopsys設計約束(SDC)的上下文中,SDC是業界領先的用于指定約束的格式。
我們經常從許多設計工程師那里聽到有一些書中介紹了綜合和靜態時序分析等概念,這些概念涵蓋了時序約束,但從來沒有詳細描述過。根據我們多年在時序特性描述、延遲計算、時序分析以及創建和驗證約束等領域的工作,本書介紹了指定時序要求所需的概念。
本書結構下面是本書的結構安排。
第1~3章介紹時序分析的主題,包括其在設計周期背景下的需求。這些章節中的描述是與供應商、語言和格式無關的。
第4章提供Tcl語言的概述,因為SDC(Synopsys設計約束)是Tcl的擴展。本章還介紹SDC的概念。
可以將前4章看作入門部分。
第5~8章一同構成討論時鐘的部分,介紹如何應用與時鐘相關的約束。這些章介紹各種時鐘及其關系,以及如何在SDC中指定它們。
第9章和第10章介紹如何對其余的(非時鐘)端口應用約束。有了這部分內容,就覆蓋了所有的主要端口。
第11~13章介紹對時序異常的需求。這些章介紹如何在SDC中正確地指定異常。
第14章和第15章涉及更專業的話題,這些概念較少論及個別的約束。相反,它們深入了解設計團隊是如何管理大量的約束的,因為它們在跨流程時從前端到后端,將完整的設計劃分成電路單元,然后再整合各個電路單元。
第16章介紹一些其他的SDC命令,這些命令可能會對時序分析產生影響。
本書還有一些命令沒有涵蓋。但是,通過本書可以對時序分析和SDC有基本了解,用戶可以輕松理解其余的任何命令,包括SDC未來版本中可能出現的任何擴展。
支持SDC的大多數工具通常還允許對SDC進行一些擴展,以便使用特定工具實現更高的準確性或更好的易用性。第17章概述針對Xilinx Vivado擴展的SDC時序約束。
其他資源SDC是由Synopsys公司發布的開源版本。SDC文檔和解析器可從Synopsys網站免費下載。
意見反饋我們已盡最大努力來提供準確的概念描述。也得到了業內一些專家的幫助,以檢查素材的準確性。但是,如果你發現一些描述混亂或有錯誤的地方,請告知我們。
祝閱讀愉快!
Sanjay Churiwala Sridhar Gangadharan致謝一我要感謝Mark Aaldering,他首先告訴我需要一本關于SDC的書。他介紹說,越來越多的工具正在轉向SDC,卻沒有關于這個主題的書籍。隨著Xilinx接納了SDC,將有更多Xilinx FPGA的用戶需要學習SDC。
還要感謝我的朋友Sridhar Gangadharan,感謝他為編寫本書所做的努力。
感謝Springer的Charles Glaser,因為他很容易地接受了我們對這本書的提議。
我想把這本書獻給那些幫我理解SDC和時序約束的人,具體是我受益于他們在我職業生涯的不同階段對于時序分析主題的大量討論。這個列表并不詳盡,一些著名的人包括Fred Revenu(Xilinx)、Greg Daughtry(Xilinx)、Nupur Gupta(ST Microelectronics)、Pankaj Jain(ST Microelectronics)、Olivia Riewer(ST Microelectronics)、K A Rajagopalan(Texas Instruments)、Subrangshu(Shubro)Das(Texas Instruments)、Satish Soman(Atrenta)、Manish Goel(Atrenta)、Shaker Sharwary(Atrenta)Pratyush Prasoon(Cadence)、Sneh Saurabh(Cadence),Girjesh Soni(Synopsys),Rohan Gaddh(目前,回到學校),等等。
我要感謝我所有的老師,但特別要提到印度理工學院的Swapna Banerjee教授,他在我即將畢業之時帶領我進入了VLSI領域。在20世紀90年代初,Dhiraj Sogani(Red Pine)、Mithilesh Jha(Masamb)、Ashutosh Varma(Cadence)和Late Nalyder Jain博士帶領我進入了時序領域。然后,2000年初,Sushil Gupta(Atrenta)和Vivek Gupta首先帶領我進入了SDC領域。
感謝Girjesh Soni(Synopsys)、Subrangshu(Shubro)Das(Texas Instruments)、Satish Soman(Atrenta)、Shrinivasraj Muddey(Xilinx)、Olivier Florent、Ravi Balachandran和Russell Roan(Atrenta),因為他們幫助審閱了本書的部分內容,確保了素材的準確。也要感謝編寫本書第17章的Fred Revenu(Xilinx)。還要感謝Charu Puri,他提供了本書中的所有插圖。
我要感謝管理部門和Xilinx的法律團隊鼓勵我參與這項活動。這些人包括Mark Aaldering、Salil Raje、Vidya Rajagopalan、Scott Hover Smoot和Sue Lynn Neoh。Ramine Roane(Xilinx)也經常鼓勵我。他唯一的抱怨是:為什么是在2013年中期?為什么不早一點?特別要感謝Mike Gianfagna(Atrenta),他參與和聯系的此類任何活動幾乎都是確保所有障礙得到解決的保證。
編寫本書的信心來源于我以前出版的書得到的積極反響。我得到的最好的反響來自Ramesh Dewangan(Atrenta),他送給了他女兒一本,也來自Ahmed Hemani教授(瑞典皇家理工學院),他把這本書推薦給了學生。在印度,如果人們非常認可一本書,并且認為他的學生或孩子也應該學習這本書,這便是對這本書最佳的褒獎之一。感謝他們對我的這種信任。
最后很重要的一點是感謝我的家人和朋友。他們的通力配合和良好祝愿一直是我前進的的動力。而且,我的小女兒(Lubha Churiwala–Std.VI)還幫助我隨機檢查語法和一致性。
Sanjay Churiwala印度海德拉巴
譯者序
推薦序
前言
致謝一
致謝二
第1章緒論1
1.1 ASIC設計流程1
1.2 FPGA設計流程4
1.3 ASIC和FPGA設計流程中的時序約束6
1.4納米級設計中的時序約束問題6
1.5小結7
第2章綜合的基礎知識8
2.1綜合的解釋8
2.2時序約束在綜合中的作用8
2.2.1優化9
2.2.2輸入重排序9
2.2.3輸入緩沖10
2.2.4輸出緩沖11
2.3綜合中面臨的普遍問題11
2.3.1設計劃分11
2.3.2更新約束12
2.3.3多時鐘設計12
2.4小結12
第3章時序分析與約束14
3.1靜態時序分析14
3.2時序約束在STA中的作用15
3.2.1約束作為聲明16
3.2.2約束作為斷言16
3.2.3約束作為指令16
3.2.4約束作為異常17
3.2.5約束的角色變化17
3.3 STA中的常見問題18
3.3.1無功能檢查18
3.3.2無聲明檢查18
3.3.3要求正確18
3.3.4約束中的常見錯誤19
3.3.5好約束的特征20
3.4延遲計算與STA 21
3.5時序路徑21
3.5.1起點和終點22
3.5.2打斷路徑23
3.5.3功能路徑與時序路徑23
3.5.4時鐘路徑與數據路徑23
3.6建立與保持24
3.6.1建立分析24
3.6.2保持分析24
3.6.3其他分析25
3.7裕度25
3.8片上變化26
3.9小結27
第4章通過Tcl擴展SDC 28
4.1時序約束的歷史28
4.2 Tcl基礎知識29
4.2.1 Tcl變量29
4.2.2 Tcl列表30
4.2.3 Tcl表達式與運算符31
4.2.4 Tcl的控制流語句31
4.2.5其他Tcl命令33
4.3 SDC綜述33
4.3.1時序約束34
4.3.2面積與功率約束34
4.3.3設計規則約束34
4.3.4接口約束34
4.3.5特定模式和配置約束34
4.3.6設計約束異常35
4.3.7其他命令35
4.4 SDC中的設計查詢35
4.5 SDC作為標準36
4.6小結36
第5章時鐘37
5.1時鐘周期和頻率37
5.2時鐘沿和占空比38
5.3 creat_clock 39
5.3.1定義時鐘周期39
5.3.2標識時鐘源39
5.3.3命名時鐘40
5.3.4指定占空比40
5.3.5同源多時鐘41
5.3.6注釋時鐘42
5.4虛擬時鐘42
5.5其他時鐘特征43
5.6時鐘規格的重要性43
5.7小結44
第6章生成時鐘45
6.1時鐘分頻器45
6.2時鐘乘法器46
6.3時鐘門控46
6.4 create_generated_clock 47
6.4.1定義生成時鐘的對象47
6.4.2定義生成時鐘的源48
6.4.3時鐘命名48
6.4.4設定生成時鐘的特性48
6.4.5時鐘沿位移51
6.4.6多個同源時鐘52
6.4.7使能組合電路路徑53
6.5生成時鐘相關的注意事項54
6.6小結54
第7章時鐘組55
7.1建立和保持時序檢查55
7.1.1高速至低速時鐘56
7.1.2低速至高速時鐘57
7.1.3多個時鐘于不同周期內同步57
7.1.4異步時鐘58
7.2邏輯和物理獨立時鐘58
7.3串擾59
7.4 set_clock_group 60
7.5時鐘組相關的注意事項62
7.6小結62
第8章其他時鐘特性63
8.1過渡時間63
8.2 set_clock_transition 64
8.3偏斜和抖動65
8.4 set_clock_uncertainty 65
8.4.1內部時鐘不確定度66
8.4.2交互時鐘不確定度66
8.5時鐘延遲67
8.6 set_clock_latency 68
8.7時鐘路徑的單邊性70
8.8 set_clock_sense 71
8.9理想網絡72
8.10小結73
第9章端口延遲74
9.1輸入有效74
9.1.1最小和最大有效時間75
9.1.2多時鐘75
9.1.3理解輸入信號的到達時間76
9.2輸出要求77
9.2.1最小和最大要求時間78
9.2.2多個參考事件78
9.2.3理解輸出要求時間79
9.3 set_input_delay 79
9.3.1時鐘規格79
9.3.2-level_sensitive 80
9.3.3 rise/fall限定符80
9.3.4 min/max限定符81
9.3.5-add_delay 81
9.3.6時鐘延遲82
9.3.7完成輸入延遲約束83
9.4 set_output_delay 83
9.4.1時鐘規格83
9.4.2-level_sensitive 83
9.4.3 rise/fall限定符84
9.4.4 min/max限定符84
9.4.5-add_delay 84
9.4.6時鐘延遲84
9.4.7完成輸出延遲約束84
9.5輸入延遲和輸出延遲之間的關系84
9.6時序分析實例85
9.6.1輸入延遲:最大輸入延遲86
9.6.2輸入延遲:最小輸入延遲87
9.6.3輸出延遲:最大輸出延遲87
9.6.4輸出延遲:最小輸出延遲88
9.7負延遲89
9.8小結90
第10章完整的端口約束91
10.1驅動能力91
10.2驅動單元93
10.3輸入過渡97
10.4扇出數98
10.5扇出負載98
10.6負載99
10.6.1凈電容99
10.6.2調整引腳負載99
10.6.3負載類型100
10.6.4負載和扇出負載100
10.6.5輸入負載101
10.7小結101
第11章虛假路徑102
11.1簡介102
11.2 set_false_path 102
11.3路徑規格103
11.4過渡過程規格105
11.5建立/保持規格
......