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