當您正在關閉設計的時間時,瞭解故障路徑中有多少等級的邏輯通常很有用。時序分析器會在您報告路徑的時間時顯示邏輯等級,但是沒有預設報告會列出一組路徑的邏輯等級。這個設計範例定義了一個自訂程式,您可以用來建立報告,顯示路徑集的邏輯等級。
自訂程式支援與report_timing指令相同的參數。您應該使用與report_timing指令相同的自訂程式選項。自訂程式還支援另外三種選項:greater_than <value>、-less_than <value>和-file <report 檔案>。您可以使用 -greater_than 和 -less_than 選項來限制回報大於或低於特定邏輯等級的路徑。您可以使用檔案選項將報告寫入檔案。
自訂程式會顯示路徑邏輯等級之數,而時間最差是鬆懈。它未必會以最多等級的邏輯,在設計中顯示路徑。時間最差鬆懈的路徑並非一向是邏輯等級最多的道路,儘管這通常確實如此。
程式運作
自訂程式使用下列步驟。
- 取得符合報告條件的路徑清單
- 取得每條路徑的邏輯等級
- 在圖表中顯示邏輯與路徑資訊的等級
步驟 1:取得路徑清單
自訂程式使用get_timing_paths指令,該命令支援與report_timing命令相同的參數。您可以使用任何report_timing選項來控制時間分析。舉例來說,您可以將邏輯等級的報告限制在特定註冊名的路徑上。下列 Tcl 代碼顯示程式定義,並將所有參數傳遞給get_timing_paths指令。
proc report_levels_of_logic { args { # 如果 { [捕捉 { eval get_timing_paths $args [ paths_col] { { post_message類型錯誤 $paths_col 退貨 [ , 將所有參數直接傳遞至 get_timing_paths。
步驟 2:取得每條路徑的邏輯等級
使用迴圈在paths_col變數中的路徑集合上反復進行,並播取每個路徑的邏輯等級。將用於列印結果的 Tcl 矩陣資料結構中儲存路徑相關資訊。節省的資訊包括邏輯等級、路徑鬆懈,以及來源和目的地節點名稱。
foreach_in_collection path_obj $paths_col { # 路徑中有多少等級的邏輯? 設定levels_of_logic [get_path_info -num_logic_levels $path_obj] # 將路徑資訊加入對照表中。 $logic_level_matrix 新增行 [list\ $levels_of_logic \ [get_path_info -slack $path_obj] \ [get_node_info -name [get_path_info -從 $path_obj]] \ [get_node_info-name [get_path_info-到 $path_obj]]]
步驟 3:顯示圖表中的顯示路徑資訊
最後,顯示儲存在矩陣變數中的所有路徑資訊。此範例使用 Tcl 報告套件格式化對照表以列印出來。下列代碼在矩陣中新增標題列、定義報告的視覺風格、設定單元鋪墊並顯示報告。
# 放入接頭行 $logic_level_矩陣插入行 0 \ [列出「邏輯層級」「Slack」「從」「到 」]#我們需要一種定義樣式來列印出結果 表的擷取 {: 報告:rmstyle basicrpt = ::report::d efstyle basicrpt {{cap_rows 1\\ \ 資料集 [分割」[字串重複」[ 列];"] 上 一組 [分頭」 [字串重複 」+ - " [列]]+」] 下 一組 [top get get] topcapsep set [top get] topdata set [資料取得] 頂端 啟用 topcapsep 啟用 底部 啟用 tcaption $cap_rows [ # 建立報告, 設定列有一個填充空間, 並且 # 列印出矩陣與指定格式 的摽取 { r destroy \ ::report::report:report r 4 風格基本 對於 { set col 0 { $col < [r 列]] { incr col ® { r pad $col 兩者「」 \ post_message「邏輯等級\n[r printmatrix $logic_level_矩陣]」
自訂程式
下列自訂程式的程式碼包含將報告寫入檔案的選項,並限制回報的路徑,除非邏輯等級大於或低於使用者指定值。
這些是您如何使用自訂程式的一些範例。
- report_levels_of_logic -setup -greater_than 10-to [get_registers資料*] -npaths 1000
- report_levels_of_logic -hold -from_clock core_50 -npaths 50 -file level.txt
若要使用自訂程式,請將以下 Tcl 代碼儲存在 report_levels_of_logic.tcl 的檔案中。然後在計時分析器 Tcl 提示 report_levels_of_logic.tcl 使用命令來源。從檔案採購定義自訂程式。然後,您可以使用新定義的命令report_levels_of_logic,直到您結束計時分析器。
套件需要 cmdline 套件需要結構::矩陣 式套件需要報告 proc report_levels_of_logic { args { 設定選項 { "less_than.arg" 「限制到低於此數位的路徑」\ "greater_than.arg" "" 「限制在路徑上大於這個數位」\ "file.arg""""輸出檔案名稱 "[ array set opts [:cmdline::getKnoptions args $options]] # 確保用一些參數 來呼叫程式如果 { [字串等於」$opts(less_than)]&&[字串等於""$opts(greater_than)]{ { post_message-類型警告「您必須指定一個數位值\ 代表-less_than或-greater_than」 退貨 。 字串為雙$opts(less_than)] { post_message-類型警告「您必須指定一個數位值 \for-less_than」 退貨 [ 如果 { !字串為雙$opts (greater_than)] { post_message類型警告「您必須指定一個數位值 \for-greater_than」 退貨 ] # 建立對照表,以掌握logic_levels_matrix所設定的故障路徑的相關資訊 [::struct」:矩陣] $logic_level_matrix 新增列 4 # 將所有未知的參數直接傳遞至get_timing_paths 如果 { [捕捉 { eval get_timing_paths $args [ paths_col] \ { { post_message -輸入錯誤 $paths_col 退貨 ] # 請流覽計時路徑清單,取得 有關 邏輯等級foreach_in_collection path_obj $paths_col { # 假設將報告該路徑的資訊,除非 #邏輯的等級超出指定範圍。 設定include_path 1 # 路徑中有多少等級的邏輯? 設定levels_of_logic [get_path_info-num_logic_levels $path_obj] # 如果我們指定下界值,如果 # 邏輯等級大於或等於如果 { 則不回報路徑 ![字串等於「」$opts(less_than))]{ 如果 { $levels_of_logic >= $opts (less_than) { 設定 include_path 0 = = # 如果我們指定了上界線,如果 # 邏輯層級低於或等於上界 ,如果 {![字串等於「」$opts(greater_than))]{ 如果 { $levels_of_logic <= $opts(greater_than) \ { 設定為 include_path 0 = = # 如果路徑的邏輯等級屬於我們的界線, 如果 { $include_path [ { $logic_level_matrix 新增行 [list \ $levels_of_logic \ [get_path_info -slack $path_obj] \ [get_node_info-name [get_path_info─$path[get_node_info-name [get_path_info-to $path_obj]] # 完成從get_timing_paths的所有路徑 #如果對照表中有任何行,路徑符合標準。 # 我們必須使用這些資訊列印表格。 如果 { 0 == [$logic_level_矩陣行] \ # 沒有路徑符合條件 # 列印出一條快速訊息 ,post_message「沒有路徑符合報告邏輯等級的標準 」#如果檔案開啟時出現錯誤,請列印一則訊息,表示 #否則,請說沒有符合條件的途徑, 如果 { ![字串等於「」$opts(檔案))]{ 如果 { [捕捉 { 開啟 $opts (檔案) w { fh] { { post_message類型錯誤「無法開啟檔案:$fh」[ 其他 \ 則 { 將$fh「沒有路徑符合報告邏輯等級的標準」的摽摴摴撫播(無法開啟檔案:$fh $fh」){則以「沒有路徑符合報告邏輯等級的標準」 來摧摴───$logic_ level_矩陣插入行 0 \ [列出「邏輯等級」「Slack」「從」「到 」]#我們需要一種定義樣式來列印結果 表的摽取 \:報告:rmstyle basicrpt = ::report::d efstyle basicrpt {{cap_rows 1\® { 資料 集 [分割」[字串重複」[ 列];"] 上 一組 [分頭」 [字串重複 」+ - " [列]]+」] 下 一組 [top get get] topcapsep set [top get] topdata set [資料取得] 頂端 啟用 topcapsep 啟用 底部 啟用 tcaption $cap_rows [ # 建立報告, 設定列有一個填充空間, 並且 # 列印出矩陣與指定格式 的摽取 { r destroy \ ::report::report:report r 4 風格基本 對於 { set col 0 \ { $col < [r columns]] { incr col ® { r pad $col 兩者「」 [ [ post_message 「邏輯層級\n[r printmatrix $logic_level_矩陣 ]」# 如果在 { 指定檔案名稱時,將報告儲存到檔案中 ![字串等於「」$opts(檔案))]{ 如果 { [捕捉 { 開啟 $opts (檔案) w [ fh] [ { post_message類型錯誤 「無法開啟檔案:$fh」[ 其他 { 將$fh「邏輯等級 」r printmatrix2 頻道 $logic_level_matrix $fh擷 [開啟邏輯等級」r printmatrix2 頻道 $logic_level_矩陣$fh擷開檔 :$fh $fh」。