STA是由SDC驅動的,所以SDC的完整性、正確性和一致性直接決定著綜合、布局布線以及STA的有效性。
特別是對于接口時序約束,牽涉到標準協議和異步關系等,后仿真如果PASS可以讓SDC作者睡得更香甜些。
后仿真一般是驗證團隊的職能領域,需要后端提供網表和SDF,不過后仿真需要后端所提供數據的時序是有要求的,其中hold timing必須干凈,setup timing最好能干凈,實在不行可以通過降頻讓setup滿足。由此可見,后仿真往往是在項目后期才能夠被執行。那我們在項目前期怎么去驗收SDC呢?有了標準就不至于整天提心吊膽。下面以PT為例來進行講解,其它工具會有些許區別。
check_timing
check_timing這個命令是在對時序約束做一個深度的體檢,能檢查時序約束相關的各種問題,其默認檢查項是有下面的這個變量控制的:
pt_shell > printvar timing_check_defaults
這個變量的工具默認值:
-
generated_clocks
檢查generated_clocks的定義是否合理,有沒有源時鐘,是否存在相互循環定義的情況。
-
generic
檢查是否存在unmapped的cells,這類generic cell一般是零延時,影響時序檢查準確性。
-
latch_fanout
檢查電平觸發latch的扇出是不是自身,有沒有latch級聯的情況
-
loops
檢查組合邏輯有沒有反饋回路,STA對這種反饋回路是不會分析的,需要通過set_disable_timing來打斷這種反饋回路
-
no_clock
檢查是否有時序單元的clock pin不在任何時鐘網絡上,特別留意中途是不是通過“set_sense -stop_propagation”之類的命令強制切斷了時鐘的傳播。
-
no_input_delay
檢查Input Port是否有關聯的時鐘,否則相關IN2REG路徑是unconstrained的。
-
partial_input_delay
檢查在set_input_delay時,是否存在只指定-min或者-max其中之一的情況
-
unconstrained_endpoints
檢查時序單元數據Pins或者Output Ports是否沒有max delay約束
-
unexpandable_clocks
檢查相關的clocks之間是否可擴展,在跨兩個不同頻率的時鐘路徑上計算時序時,往往需要擴展時鐘以計算相應的setup timing
-
no_driving_cell
-
pulse_clock_non_pulse_clock_merge
檢查pulse clock和normal clock是否共用相同時鐘網絡
-
pll_configuration
檢查PLL的配置是否存在問題。
對于check_timing報告中的Warning和Error,要仔細地檢查,最好是一個Warning/Error都沒有,下面的結果也挺令人賞心悅目的(僅有2個Warning需要排查):
需要注意的是,在綜合階段需要先check_design保證設計本身沒有問題的情況下,再通過check_timing進行時序約束的檢查。
report_analysis_coverage
report_analysis_coverage命令可以統計出有design中需要STA進行的檢查有多少項,其中有多少滿足(Met),有多少違反(Violated),有多少缺失檢查(Untested),如下圖所示:
需要特別注意的是Untested一欄,造成的原因可以有以下幾類:
-
false_paths
set_false_path 或者asynchronous/exclusive clock groups
-
user_disabled
timing check被用戶禁用了,例如set_disable_timing
-
constant_disabled
set_case_analysis或者實際Signal已經接電源或地(Tie High/Low)
-
no_paths
路徑不存在或被切斷,造成原因也可能是set_disable_timing
-
mode_disabled
特定mode相關時序約束,在其他mode下不會檢查
-
no_endpoint_clock
endpoint沒有時鐘
-
no_startpoint_clock
startpoint沒有時鐘
-
no_constrained_clock
針對skew和clock separation檢查,沒有約束時鐘
-
no_ref_clok
針對skew和clock separation檢查,沒有參考時鐘
-
no_clock
針對min_pulse_width和min_period檢查,沒有時鐘定義
-
unknown
其它未知原因
具體可以通過以下命令來debug:
pt_shell > report_analysis_coverage -status_detail untested -check setup
需要特別強調 :對于異步路徑,比如false_path,case_analysis,set_disable_timing等等,每一條SDC語句都需要designer仔細review確認,簽字畫押。
一致性和CDC檢查
對于Top,往往還需要檢查Top和Block的約束的一致性,以及跨時鐘域檢查。這里常用兩個工具:一個是PT的GCA,適合門級網表的分析。另一個是SpyGlass,常用在RTL級別。
下圖是GCA一般流程:
如果要進行Top和Block約束的一致性檢查,可以參考以下命令:
ptc_shell > read_verilog ./top.v
ptc_shell > link_design top
ptc_shell > source top_constraints.tcl
ptc_shell > link_design -add block1
ptc_shell > source block1_constraints.tcl
ptc_shell > set out_dir /user/abc/compare_top
ptc_shell > compare_block_to_top -block_design block1
GCA中也可以打印出跨時鐘域信息,通過以下命令:
ptc_shell > report_clock_crossing
需要強調 ,在RTL交付前,跨時鐘域的檢查是非常關鍵的,利用SpyGlass等工具檢查其是否存在時鐘同步單元(synchronizer),并在需要時添加必要的約束控制跨時鐘路徑,避免功能錯誤。另外,SpyGlass也能夠進行約束一致性檢查,有興趣的可以查看其用戶手冊。
-
RTL
+關注
關注
1文章
385瀏覽量
59849 -
STA
+關注
關注
0文章
51瀏覽量
18982 -
SDC
+關注
關注
0文章
49瀏覽量
15559 -
PLL電路
+關注
關注
0文章
92瀏覽量
6431
發布評論請先 登錄
相關推薦
評論