(1) clock
? ? Q1.1 什么是同步時鐘?
? ?? ?時鐘頻率是整倍數(shù),并且相互之間的相位是固定而且相差可預知的,才可以稱得上是同步時鐘。其他的都算異步時鐘。
? ?? ?比如,
? ?? ?5M,10M是同步
? ?? ?2M,3M一般算異步
? ?? ?一個時鐘,輸出到另一個芯片中,轉(zhuǎn)一圈后,以同樣的頻率返回到自己的芯片,因為無法確定時鐘在另一個芯片里面的latency,所以輸出的時鐘與輸入的時鐘算異步
? ?? ?一個時鐘進到2個PLL,就算那2個PLL的輸出頻率相同,一般也算是異步時鐘,除非你de-skew
? ? Q1.2 如何處理同步時鐘?
? ?? ?設計要求嚴格的公司,就算是同步時鐘,數(shù)據(jù)在同步時鐘間傳送時,依然要用meta-stability FF,可以set_false_path
? ?? ?如果放松要求,不用meta-stability FF,則同步時鐘之間是real path,做CTS時,同步時鐘要clock tree balance。
? ?? ?注意不同頻率的同步時鐘的最小時間間隔被用來檢查setup
? ?? ?如果上升下降沿混用的話,setup的時間間隔就只有半個時鐘周期了
? ? Q1.3 如何處理異步時鐘?
? ?? ? 很簡單,set_false_path
? ?? ???注意要from A to B,同時要from B to A
? ? Q1.4 如何定義時鐘?
? ?? ?create_clock 如果指定某個pin/port,就是實時鐘,如果沒有指定pin和port,就是虛擬時鐘
? ?? ?巧妙利用waveform選項可以做出不同波形的時鐘
? ?? ?被定義成時鐘的net,在綜合時,自動帶有ideal network和dont_touch的屬性。但是當它被用作data計算延遲時,ideal net的屬性會自動消失
? ?? ?時鐘會自動穿過邏輯單元,停在時序單元的時鐘端,所以用FF產(chǎn)生的分頻時鐘要再用create_generated_clock定義一次
? ? Q1.5 如何處理多選一時鐘?
? ?? ?在實際應用當中,如果這幾個時鐘不會同時出現(xiàn)的話,則在定義時鐘時,只選擇最快頻率的就可以了
? ?? ?如果是多個時鐘同時出現(xiàn),可以用set_case_analysis選一個,
? ?? ?也可以放它們?nèi)歼^去,但是在MUX后面把它們之間set_false_path
? ? Q1.6 巧妙定義時鐘
? ?? ?直接在分頻FF的Q端定義generated clock時,有時會把分頻FF的時序打掉,解決辦法是在分頻FF的Q端加一個時鐘buf,從那個buf的輸出端定義generated clock,從而保證分頻FF自身的時序完整
? ?? ?如果從source clock到generated clock之間有多條路徑,你希望PT用指定的一條路徑來計算時序的話,可以用set_case_analysis, set_disbale_timing 或者一級一級地定義generated clock來引導PT達到你的要求
? ?? ?分頻器時序約束問題
? ?? ?時序分析中同一時鐘的不同路徑問題
? ?? ?請教如下要求的clock在pt中應該怎么create
? ?? ?怎樣設set_case或者別的,才能讓pt選擇同一條clock path
? ? Q1.7 什么時候需要設置latency?
? ?? ?latency分為source latency 和 network latency 兩種。 source latency是源時鐘自帶的,network latency就是CTS后的clock tree insertion delay。
? ?? ?在綜合時,一般不需要latency,
? ?? ?除非,
? ?? ?已知不同clock帶有不同的source latency,并且它們之間有時序要求
? ?? ?預知不同clock會有不同的clock tree insertion delay,不想平衡它們,但是要滿足他們之間的時序要求
? ?? ?做完CTS后,要把network latency去掉
? ?? ?請問set_clock_latency 設太大會有什么不好
? ? Q1.8 如何設置uncertainty
? ?? ?clock uncertainty分為setup和hold,preCTS和postCTS幾種不同的情況
? ?? ?一般的處理原則是:
? ?? ?preCTS,setup: uncertainty = PLL jitter + 預估的clock skew
? ?? ?preCTS,hold: uncertainty = 預估的clock skew
? ?? ?postCTS,set_propagate_clock [all_clocks]
? ?? ?postCTS,setup: uncertainty = PLL jitter
? ?? ?postCTS,hold: uncertainty = 0
? ?? ?有時fundry要求hold uncertainty保留一定的量,這時就把那個保留量加到上面的公式中
? ?? ?sdc文件中對clk的uncertainty、transition、latency的設置
(2) IO端口的約束
? ? Q2.1 如何加IO端口的約束?
? ?? ?最普通的方法是
? ?? ?對輸入端,set_input_delay, set_driving_cell (也有用set_input_transition的,但是不多見)
? ?? ?對輸出端,set_output_delay,set_load
? ?? ?對時鐘端,set_clock_transition
? ?? ?dc綜合時的clock transition應該參考什么設定?
? ?? ?set_drive ,set_load
? ? Q2.2 哪些端口不需要約束?
? ?? ?靜態(tài)信號可以set_false_path,比如reset,test_mode,function_mode_select
? ?? ?不能真的什么約束都不加
? ? Q2.3 什么樣的reset信號可以set_false_path?
? ?? ?如果在工作時,reset信號有效時,時鐘信號不翻轉(zhuǎn),就可以set_false_path
? ?? ?如果reset信號動作時,時鐘也有動作的話,就不能set_false_path
? ? Q2.4 像reset那樣的high fanout信號需要設定為ideal net嗎?
? ?? ?如果是false path的話,可以設為ideal net
? ?? ?一般不需要設為ideal net,讓DC加入buffer tree后,有利于估算功耗和面積
? ? Q2.5 如果有一組輸出信號,需要他們之間對齊,但是不太在乎有多大的延遲,這時應該如何約束?
? ?? ?如果有輸出時鐘的話,在那個輸出時鐘端口定義一個generated_clock,其它信號的output_delay都相對于這個generated_clock而定。只要有max和min,就可以把所有信號卡在一個范圍之內(nèi)
? ?? ?如果沒有輸出時鐘的話,用set_output_delay -reference_pin
? ? Q2.6 如何計算input和output delay?
? ?? ?如果是block的input和output delay,可以預先分配,比如輸出端,輸入端各1/3,中間的連接1/3
? ?? ?block的端口最好都flop-in,flop-out
? ?? ?如果是chip IO,要度其他芯片的IO時序和電路板上面的延遲,比較麻煩
? ?? ?set_input_delay的時間設置
(3) DRV
? ?? ?DRV有時也加DRC,與物理檢測的DRC不是一個概念
? ?? ?DRV包括,
? ?? ?set_max_transition??與工藝相關,65nm的話,在0.6ns左右
? ?? ?set_max_fanout??與工藝相關,一般在12~20之間
? ?? ?set_max_capacitance
? ?? ?set_max_power
? ?? ?set_max_area
(4) false path,multicycle path
? ? Q4.1 什么情況下需要set_false_path?
? ?? ?異步時鐘之間,
? ?? ?到meta-stability 的第一個FF路徑,
? ?? ?靜態(tài)信號
? ? Q4.2 何時會用到multicycle_path?
? ?? ?太長的path,
? ?? ?不會每個周期都變的信號
? ?? ?注意:在RTL中,前端一定要多周期工作一次的功能
? ?? ?一般set_multicycle_path -setup <n周期>
? ?? ?要同時寫set_multicycle_path -hold <n-1周期>
(5) wire load model
? ?? ?wire load model是一種簡單地根據(jù)fanout來估算wire delay的方法,在綜合時,一般根據(jù)設計的大小選擇對應的WLM
? ?? ?有時也會用zero wire load model,這時的clock period要相應減小15~25%,或者clock uncertainty增加15~25%
? ?? ?set_wire_load_model 兩種模式top和enclosed到底有什么區(qū)別?
? ?? ?更加準確的計算wire delay的方法是DC topo和RC physical,
? ?? ?他們在綜合時會粗略地做個place,然后根據(jù)距離來計算延遲
(6) clock gating
? ? Q6.1 如何加clock gating?
? ?? ?局部的clock gating在綜合時,會自動加進去。加clock gating后,不但會減小功耗,還會改善時序,因為本來到D端的邏輯,一部分被移到CK端了,簡化了D端的邏輯
? ?? ?整個block的clock gating,一般直接在RTL里面加,因為DC沒有那么聰明
? ? Q6.2 需要對clock gating加什么特別的約束嗎?
? ?? ?如果使用標準庫里面的ICG單元,不需要附加任何特別的約束,前后端的工具都認得它
? ?? ?如果用latch+and自己搭的clock gating,你要對那個and單元set_disable_clock_gating_check,還要告訴后端,一定把latch和and擺在一起
? ?? ?一般只在沒有動態(tài)切換時鐘時,才可以用一個and/or做clock gating,這時也要set_disable_clock_gating_check
? ?? ?clock gating cell約束
? ?? ?某個domain的clk通過gating關斷重啟后,對這個domain做復位有沒有必要?
(7) case_analysis
? ? set_case_analysis可以強制某個node為0/1
? ? 這個0/1會沿著純邏輯組合單元向前傳送,如果沒有特別設定的話,會停在時序單元上
? ? 注意,只是是向前傳,不會向左右2邊和向后傳
? ? 舉例:
? ? 如果設在輸出端上,那么所有fanin端都會被強制為0/1
? ? 如果只設在某個輸入端上,與之相連的輸出端和其他輸入端都不受影響
(8) ideal net/network
? ? ideal_net只作用于這條net
? ? ideal_network會把這個屬性傳送下去
? ? clock net自動帶有ideal net屬性
? ? 其他net,何時需要設定ideal net?
原文鏈接:https://blog.csdn.net/u014703817/article/details/53705038