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