在數字IC設計流程中,Design Compiler (DC) 的 check_timing 命令主要用于檢查設計的時序約束(SDC)是否完備。如果約束存在漏洞,后續的時序分析結果將不可信。該報告包含多種檢查項(Check Items),主要涵蓋時鐘定義、輸入輸出約束、組合邏輯環路及特殊器件等方面。
1non-unate path warning
提示“Warning:A non-unate path in clock network for clock ‘CLK’ from pin MUX/S is detected”.
Design Compiler中check_timing報出的時鐘網絡Non-unate路徑警告,核心原因是時鐘傳輸路徑上存在MUX、XOR等非單邊組合邏輯單元,本次告警源于時鐘CLK經過MUX選擇端引腳,破壞了時鐘路徑的固定極性特征。在時序分析中,BUF、INV屬于單邊器件,輸入輸出信號變化極性固定,工具可精準跟蹤時鐘邊沿、延遲與偏斜;而MUX等器件的輸出電平由數據端和選擇端共同決定,無固定的信號變化單調性,被定義為非單邊路徑。
該警告會嚴重影響STA時序分析的準確性,存在較大設計風險。工具無法精準判定時鐘邊沿的傳播極性,導致時鐘延遲、時鐘偏斜、延遲參數計算出錯,進而造成寄存器建立、保持時間時序檢查結果失真。若放任該問題,會出現時序分析結果偏樂觀的情況,流片后易引發電路時序違規、功能異常,同時也會導致生成時鐘約束解析失效,時鐘網絡建模完全不可靠。
針對該問題有三種標準化解決方案。最優方案為RTL重構,嚴格規避時鐘路徑上的MUX、異或門等組合選擇邏輯,采用寄存器同步切換、專用ICG時鐘門控單元實現時鐘切換與啟停功能,保證時鐘樹僅由緩沖器、反相器等單邊器件構成。若功能必須保留時鐘路徑MUX,可通過set_clock_sense約束強制指定時鐘傳播極性,或屏蔽選擇端的時鐘傳播特性,讓工具完成精準時序建模;需要結合RTL功能判斷某些分支是否會被用到。兜底方案為調整電路架構,將選擇邏輯遷移至數據通路,徹底凈化時鐘傳輸路徑。該問題是數字后端與時序約束高頻問題,核心設計原則為保證時鐘網絡路徑唯一、極性固定、無組合邏輯分支。
2the master of the following generated clock is not connected to any clock source Error
“the master of the following generated clock is not connected to any clock source”是DC時序約束常見告警,核心原因是生成時鐘依賴的主時鐘溯源失敗,主時鐘未定義、時鐘傳播路徑中斷、約束攔截或引腳層級寫錯,導致工具無法建立有效的時鐘時序模型,造成時序分析失效。解決該告警需遵循規范時序約束流程:優先補全create_clock主時鐘定義,保證先有主時鐘再定義生成時鐘;核對create_generated_clock的-source引腳路徑準確無誤;移除誤配置的阻斷約束,復雜場景可通過-master_clock參數顯式綁定主時鐘,同時對時鐘分頻單元設置dont_touch,避免綜合優化刪除時鐘路徑。
set_clock_sense是控制時鐘傳播特性的核心約束命令,主要用于修正時鐘極性、阻斷無效時鐘傳播,解決時鐘樹中非單邊單元引發的時序異常。其核心包含兩類關鍵參數,可精準管控時鐘傳播特性。其一為極性控制參數,-positive強制指定路徑為上升沿觸發,-negative強制為下降沿觸發,可手動修正工具誤判的時鐘邊沿極性,保證建立、保持時間計算準確。其二為傳播控制參數,-stop_propagation用于阻斷無效引腳的時鐘傳播,常用于MUX選擇端、控制端等非時鐘通路,避免工具誤識別虛假時鐘路徑。
實際使用中,針對時鐘路徑MUX導致的non-unate告警,可對MUX選擇端施加阻斷約束,消除無效時鐘分支;針對極性識別錯誤的生成時鐘路徑,可手動指定時鐘邊沿極性,確保主時鐘可正常傳播至生成時鐘節點。該命令是修復時鐘路徑異常、規范時鐘傳播、保證STA時序分析精準性的重要兜底約束,需配合規范的時鐘定義使用,避免約束沖突導致時序建模錯誤。
有時候top調用宏(macro)lib時,宏單元內部生成時鐘輸出到頂層端口,報無主時鐘無驅動告警,核心原因是工具無法從頂層主時鐘完成跨宏單元溯源,時鐘傳播、約束或端口識別出現異常;這個需要合到頂層flat去看看核實。
3Missing 1 created_generated_clock at design object div_clk and clk warning
該告警表示 DC 檢測到clk與div_clk存在時鐘衍生關系,工具判定div_clk為分頻、倍頻類生成時鐘,但未使用create_generated_clock完成約束定義,屬于生成時鐘配置缺失問題。若不修復,工具無法識別主時鐘與衍生時鐘的頻率、相位關聯,時鐘延遲、偏斜、分頻關系建模出錯,直接導致時序計算失真。
告警主要有四類成因:一是div_clk由clk分頻 / 邏輯轉換得到,僅對主時鐘clk執行create_clock,遺漏生成時鐘約束;二是將同源衍生時鐘誤當作獨立時鐘,重復使用create_clock定義,違背時鐘約束規范;三是時鐘傳播路徑經過組合邏輯、宏單元,工具自動識別為生成時鐘,而設計者未配套對應約束;四是端口層級、命名不匹配,已寫的生成時鐘約束未能正常匹配目標端口。
排查可執行report_clocks查看時鐘列表與主從關聯,結合check_timing -verbose定位異常節點。標準修復方案為:先在頂層用create_clock定義原始主時鐘clk,再通過create_generated_clock,指定-source時鐘源引腳、分頻系數,完成div_clk約束綁定。
若兩路信號為相互獨立的原生時鐘,則說明工具識別有誤,需刪除多余衍生判定,統一使用create_clock分別定義。同時核對端口路徑與名稱,保證約束精準匹配。設計中需區分原生時鐘與生成時鐘,同源衍生信號必須按規則配置生成時鐘約束。修復后重新做時序預檢,確保時鐘鏈路建模完整,保障后續綜合與時序分析正常運行。
有時候top調用宏(macro)lib時,宏單元內部的主時鐘和生成時鐘輸出到頂層端口,報這個告警,核心原因是工具無法從頂層完成跨宏單元溯源,時鐘傳播、約束或端口識別出現異常;這個需要合到頂層flat去看看核實。
4check_no_input_delay
no_input_delay 是 DC 時序預檢常見告警,指芯片輸入端口未配置 set_input_delay 約束。該參數用于模擬外部電路在時鐘沿到來前,數據到達芯片輸入引腳的延時,是 IO 路徑時序計算的必要條件。缺失該約束后,工具會默認輸入延時為 0,時序計算結果偏樂觀,流片后極易出現建立時間違規。
告警主要成因:一是人為遺漏約束,未對輸入端口添加輸入延時;二是端口歸類錯誤,將外部輸入信號當成內部信號處理;三是約束層級不對,延時約束寫在子模塊而非頂層端口,無法生效;四是虛擬端口、測試端口未做特殊豁免,被工具正常檢查。
此外需區分 max/min 延時,完整覆蓋快慢工藝角,保證時序分析全面。設計規范要求,所有對外輸入端口必須配套輸入延時約束,模擬板級互連的實際延時。修復后重新運行時序預檢,確認告警清除,保證輸入路徑建立、保持時間計算真實可信,為綜合與時序收斂打下基礎。
input_delay約束必須綁定時鐘參考,但不強制使用虛擬時鐘。內部同步輸入信號可直接綁定設計真實時鐘;而外部異步接口、內外時鐘頻率相位不一致、純組合邏輯電路場景,建議采用虛擬時鐘作為參考,可規避內部時鐘偏斜、抖動帶來的約束誤差,保證IO時序建模精準,解決no_input_delay時序告警。
5check unconstrained endpoints
unconstrained endpoints是 DC 時序預檢告警,代表寄存器、輸出端口等時序終點缺少完整時序約束,工具無法開展建立、保持時間檢查。常見誘因包括頂層輸出端口未配置set_output_delay、終點寄存器無有效時鐘、跨時鐘域 / 組合路徑未做約束,或是端口與引腳路徑名稱錯誤導致約束失效。
該問題會讓工具跳過對應路徑的時序優化與校驗,時序分析結果失真,流片后易出現傳輸超時、功能異常。可通過check_timing -verbose、report_endpoints -unconstrained定位問題節點。常規輸出端口需結合真實或虛擬時鐘補充輸出延時;內部寄存器要補全時鐘約束;異步路徑可設置偽路徑豁免,時序寬松場景可配置多周期路徑,修復后重新完成時序預檢即可。
6check loop
check loop 代表設計存在邏輯閉環,分為純組合環路與時序環路,多由代碼連線錯誤或功能性反饋電路導致。組合環路會造成信號震蕩、邏輯出錯,同時讓工具無法完成時序計算與優化。可通過 report_loops 定位具體環路路徑。若是失誤產生的無效環路,需修改 RTL 并插入寄存器切斷閉環;鎖存器、狀態機等必要反饋環路,可添加偽路徑命令豁免時序檢查。振蕩器等特殊電路,搭配 dont_touch 保護設計,確保電路功能正常、時序預檢通過。
狀態機本質是時序反饋系統,依靠寄存器保存當前狀態,再通過組合邏輯譯碼產生下一狀態,最終反饋回寄存器輸入端,天然形成閉環路徑,因此check_timing會識別出環路。
7check pulse_clock_cell_type
checking pulse_clock_cell_type ,用于校驗脈沖時鐘單元約束與工藝庫類型是否匹配。告警多因舊版腳本殘留、約束與庫定義不一致,或誤用脈沖時鐘命令導致。該告警風險較低,不影響常規時序檢查,僅提示脈沖配置異常。修復優先直接移除無用的 set_pulse_clock_cell 約束;若需脈沖時鐘,確保指定單元與庫 pulse_type 匹配。
min_pulse_width 檢查不覆蓋所有時序器件,僅針對時鐘 / 控制引腳且工藝庫定義了 min_pulse_width_high/low 或 min_width 屬性的單元。主要包括觸發器 / 鎖存器時鐘引腳、異步置復位引腳、存儲器時鐘與控制引腳,以及脈沖時鐘單元輸出引腳。組合邏輯、普通數據引腳、無對應庫屬性的時序引腳均不檢查。普通觸發器時鐘引腳默認自動納入檢查;脈沖鎖存設計需用 set_pulse_clock_cell 標記發生器單元以強化檢查。
脈沖時鐘單元就是產生這種窄脈沖時鐘的標準單元,庫中會標注 pulse_type、min_pulse_width 等屬性。
8check no_driving_cell
no_driving_cell是Design Compiler時序檢查的常見項,主要針對頂層輸入端口、黑盒輸出等外部驅動信號。該告警表示信號線缺少set_driving_cell約束,工具未獲取到真實驅動單元模型,無法得到準確的驅動電阻、轉換斜率等電氣參數。
該檢查的核心目的是保障時序與串擾分析精度。線網串擾延遲、噪聲干擾的計算高度依賴驅動端輸出電阻與線網寄生參數,若采用默認理想驅動模型,會導致時序計算失真、串擾分析失效,無法真實反映芯片實際工況。需要區分set_drive與set_driving_cell,前者為理想電阻模型,后者綁定工藝庫真實單元,建模精度更高,是串擾分析的必備約束。
告警常出現在未配置驅動模型的頂層輸入、黑盒輸出端口。工程修復需根據信號類型,為端口匹配BUF、INV等標準驅動單元并添加約束,時鐘信號優先選用高驅動能力單元。該問題不可隨意忽略,否則會造成時序結果偏差,掩蓋流片后電路穩定性風險。
9check partial_input_delay
partial_input_delay是Design Compiler的默認時序檢查項,用于檢測輸入端口input_delay約束不完整的問題。區別于完全無約束的no_input_delay,該告警特指端口已配置部分延時約束,但參數缺失,常見為僅配置max/min延時、或僅設置rise/fall單邊邊沿延時,導致約束不完整。
該檢查核心是保障STA時序分析精準性。建立時間時序檢查依賴最大輸入延時,保持時間依賴最小輸入延時,同時電路上升、下降沿的實際延時存在差異,任意參數缺失都會導致對應時序分析失效。工具會自動補全默認參數,造成時序計算結果偏差,掩蓋潛在時序風險,引發芯片流片后接口時序失效。
工程中需為輸入端口配置完整約束,補齊max、min以及rise、fall四類延時參數,保證時序建模貼合真實工況。可通過指令單獨篩查該類告警,禁止隨意忽略該檢查,避免因約束不全導致時序分析結果失真,保障設計時序收斂與芯片工作穩定性。
文章來源于志芯,作者JackXu
![]()
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.