在 FPGA 設(shè)計(jì)進(jìn)程中,時(shí)序收斂無疑是一項(xiàng)艱巨的任務(wù)。低估這項(xiàng)任務(wù)的復(fù)雜性常常導(dǎo)致工作規(guī)劃面臨無休止的壓力。賽靈思提供了諸多工具,用于幫助縮短時(shí)序收斂所需時(shí)間,從而加速產(chǎn)品上市。本篇博文描述了一種方法,能夠有效減少時(shí)序路徑問題分析所需工作量。
時(shí)序路徑問題分析定義為通過調(diào)查一條或多條具有負(fù)裕量的時(shí)序路徑來判斷達(dá)成時(shí)序收斂的方法。當(dāng)設(shè)計(jì)無法達(dá)成時(shí)序收斂時(shí),作為分析步驟的第一步,不應(yīng)對(duì)個(gè)別時(shí)序路徑進(jìn)行詳細(xì)時(shí)序分析。應(yīng)首先從系統(tǒng)角度來分析設(shè)計(jì),以判定是否有任何因素會(huì)對(duì)設(shè)計(jì)中較大區(qū)域產(chǎn)生影響,而不只是判定有哪些因素會(huì)影響存在最嚴(yán)重違例的個(gè)別路徑。
如需獲取有關(guān)此過程的實(shí)用指南,請(qǐng)參閱《UltraFast 設(shè)計(jì)方法時(shí)序收斂快捷參考指南》(UG1292)。
本篇博文旨在描述此文檔中所述的時(shí)序基線檢查流程,尤其是當(dāng) WNS 《 0ns 或 WHS 《 -.5ns 時(shí)的布局后操作以及當(dāng) WNS 《 0ns 或 WHS 《 0ns 時(shí)的布線后操作(紅圈部分)。
為了解決這些時(shí)序收斂失敗問題,用戶可以采用時(shí)序路徑分析方法來對(duì)布局步驟、phys_opt 步驟和布線實(shí)現(xiàn)步驟之后發(fā)生的時(shí)序收斂失敗問題進(jìn)行優(yōu)先級(jí)排序。
第一步是使用下列命令生成一組報(bào)告。
在 Vivado 非工程模式下,可將這些命令添加到用于運(yùn)行此流程的 Tcl 腳本中。在 Vivado 工程模式下,則可將這些命令添加到 Tcl 掛鉤腳本中(請(qǐng)參閱 (UG894) 的 “定義 Tcl 掛鉤腳本” 部分)。
report_design_analysis -timing -routes -logic_level_distribution -of_timing_paths [get_timing_paths -routable_nets -max_paths 10000 -slack_lesser_than 0] -file timing_vios.rpt
report_timing -of [get_timing_paths -routable_nets -max_paths 1000 -slack_lesser_than 0] -file timing_paths.rpt -rpx timing_paths.rpx
這些命令會(huì)生成文本報(bào)告 timing_vios.rpt 和 timing_paths.rpt,這些報(bào)告可通過任意文本編輯器來查看。這些命令還可生成交互報(bào)告 timing_paths.rpx,此報(bào)告可用于在 Vivado GUI 中進(jìn)行交叉探測。這些報(bào)告可顯示有關(guān)設(shè)計(jì)中時(shí)序收斂失敗的主要路徑的信息。通過將這些報(bào)告結(jié)合在一起,即可快速達(dá)成時(shí)序收斂。
timing_vios.rpt
此報(bào)告可顯示時(shí)序收斂失敗的主要路徑的屬性(根據(jù) Tcl 參數(shù)設(shè)置,最多可報(bào)告 10,000 條路徑)。報(bào)告底部顯示的直方圖可顯示每個(gè)端點(diǎn)時(shí)鐘對(duì)應(yīng)的時(shí)序失敗的路徑數(shù)量,按邏輯級(jí)別分組。此直方圖作為非常實(shí)用的高級(jí)視圖,可幫助縮小造成最嚴(yán)重的時(shí)序收斂失敗的時(shí)鐘域的范圍。
用戶應(yīng)首先從造成最嚴(yán)重違例的時(shí)鐘域開始分析這些失敗問題。在多 SLR 器件中,許多違例所含的邏輯級(jí)數(shù)為 0,這表示導(dǎo)致時(shí)序違例的根本原因可能是沒有足夠的流水打拍,或者 SLR 分區(qū)效果不良。
這些都只是時(shí)序失敗的線索,而并非真正原因。重要的是首先縮小問題最嚴(yán)重的區(qū)域的范圍,然后再尋找解決方案。了解最差負(fù)時(shí)序裕量時(shí)序違例的本質(zhì)有助于用戶確定應(yīng)執(zhí)行的補(bǔ)救步驟的優(yōu)先順序。以下顯示了一個(gè)簡單的直方圖示例(僅有 1 個(gè)時(shí)鐘存在時(shí)序收斂失敗路徑)。
報(bào)告其余部分可通過文本編輯器來讀取,但由于換行,可能導(dǎo)致難以閱讀。更簡單的數(shù)據(jù)分析方法是將其導(dǎo)入 Microsoft Excel。 以下過程用于將文本編輯器報(bào)告轉(zhuǎn)換為逗號(hào)分隔式報(bào)告。
1. 創(chuàng)建 timing_vios.rpt 的副本,并將其重命名為 timing_vios.csv。
2. 使用文本編輯器,移除報(bào)告中的頁眉、頁眉分隔符行和頁腳(如下紅框所示):
3. 如果已將 -show_all 選項(xiàng)與 report_design_analysis Tcl 命令配合使用,請(qǐng)將文件中的逗號(hào) (,) 替換為冒號(hào) (:)。
4. 將所有管道字符 (|) 都替換為逗號(hào) (,),然后保存此文件。
5. 關(guān)閉文件。
timing_vios.rpt 頂部
timing_vios.rpt 底部
6. 在 Microsoft Excel 中打開此 csv 文件。
7. 移除 A 列,因?yàn)榇肆袨榭铡?/p>
8. 在頂部插入空白行。
9. 添加以下等式,以在報(bào)告中生成未經(jīng)篩選的裕量百分比。此百分比將有助于指導(dǎo)完成分析操作。此百分比值越大,則失敗特征對(duì)時(shí)序的影響越大。
=SUBTOTAL(109,G:G)/SUM(G:G)*100
10. 高亮 excel 文檔的第 2 行,該行應(yīng)為各列的標(biāo)題行,然后選擇“數(shù)據(jù) (Data) -》 篩選 (Filter)”。
對(duì)此報(bào)告使用篩選,以查找對(duì)設(shè)計(jì)影響最大的失敗類型。
此報(bào)告通常本身無法提供時(shí)序失敗的準(zhǔn)確原因,但可幫助指導(dǎo)用戶發(fā)現(xiàn)需進(jìn)一步調(diào)查的路徑,并使用交互時(shí)序報(bào)告(timing_paths.rpx;稍后將提供此報(bào)告的實(shí)用技巧)進(jìn)行調(diào)查。
通過篩選,用戶即可看到具有相似屬性(邏輯級(jí)數(shù)、起點(diǎn)管腳等)的相似失敗路徑(例如,同一條總線的路徑)。用戶可以使用未篩選的裕量百分比來指導(dǎo)他們。并且,用戶還可通過篩選來使用發(fā)現(xiàn)的記錄行(如下所示),并留意篩選后顯示的行號(hào)(電子表格中行號(hào)越小,表示顯示的時(shí)序收斂失敗的路徑越差)。
以下是一些有關(guān)篩選的實(shí)用技巧。
“文本篩選器 (Text Filters) -》 包含 (Contains)”對(duì)于篩選“起點(diǎn)管腳 (Start Point Pin)”、“終點(diǎn)管腳 (End Point Pin)”和“邏輯路徑 (Logical Path)”很有用。在 timing_vios.csv 中包含以下列(定義源自 (UG835) v2020.1 第 1324-1325 頁)。
首次生成電子表格時(shí),可根據(jù)以下入門指南來嘗試執(zhí)行下列檢查。這些檢查主要聚焦于講解設(shè)計(jì)后的時(shí)序收斂失敗原因和修復(fù)方法。設(shè)計(jì)師還可以選擇更改硬件描述語言 (HDL) 以縮短路徑長度或者降低時(shí)鐘速率,以及運(yùn)用下文未列出的其它修復(fù)方法:
1. 在時(shí)鐘關(guān)系 (CLOCK RELATIONSHIP) 列中,是否所有時(shí)序收斂失敗的路徑都已安全完成時(shí)序約束?如果沒有,那么時(shí)序約束對(duì)于其它路徑是否合適?
2. 是否有任何時(shí)序收斂失敗的路徑的時(shí)鐘偏差 》 .5ns?如果存在此類路徑,請(qǐng)參閱 (UG1292) v2020.1 第 8 頁,以獲取相關(guān)偏差建議。
3. 對(duì)于 SSI 器件,跨 SLR 的路徑的未篩選的裕量百分比為多少?如果此比值過高,請(qǐng)參閱(UG1292) v2020.1 第 7 頁。
4. 有多少時(shí)序收斂失敗的路徑具有與之關(guān)聯(lián) Pblock?如果此比值較高,請(qǐng)參閱 (UG1292) v2020.1 第 7 頁。
5. 是否有大量時(shí)序收斂失敗的路徑的扇出都偏高 (》=512)?在 (UG1292) v2020.1 第 6 頁中,如果工具存在較大的信號(hào)線延遲,則建議對(duì)具有 512 個(gè)端點(diǎn)的高扇出信號(hào)線進(jìn)行最優(yōu)化。
6. 是否有任何時(shí)序收斂失敗的路徑具有 DONT_TOUCH 或 MARK_DEBUG?包含這些時(shí)序路徑的邏輯是否屬于非第三方邏輯或非賽靈思 IP?
這些屬性會(huì)阻礙工具執(zhí)行有助于改善時(shí)序的最優(yōu)化操作。
7. 有多少比例的路徑所含的起點(diǎn)管腳原語或端點(diǎn)管腳原語不屬于寄存器類型(非 FDPE、FDCE、FDRE 或 FDSE)?是否存在類似的失敗特征?
8. 對(duì)于布線后操作,包含非零保持時(shí)間繞行 (HOLD FIX DETOUR) 的時(shí)序路徑所占比例為多少?
timing_paths.rpt
這是基于文本的時(shí)序分析報(bào)告,包含對(duì)應(yīng)設(shè)計(jì)中的主要時(shí)序收斂失敗路徑(根據(jù) Tcl 命令參數(shù),最多可包含 1000 條路徑)的時(shí)序分析。它可通過使用簡單的 Linux grep 來幫助生成前 1000 條路徑的失敗源和目標(biāo)列表。 例如,用戶可以按如下方式來識(shí)別排名前 100 的時(shí)序起點(diǎn)和端點(diǎn)。
grep -m 10 “Source:” place_paths.rpt 》 top_100_startpoints.rpt
grep -m 10 “Destination:” place_paths.rpt 》 top_100_endpoints.rpt
timing_paths.rpx
這是 timing_paths.rpt 的交互式報(bào)告版本。最實(shí)用的 3 個(gè)窗口分別是“器件 (Device)”窗口、“層級(jí) (Hierarchy)”窗口和“原理圖 (schematic)”窗口。
一旦確定某個(gè)失敗特征對(duì)于設(shè)計(jì)的時(shí)序影響較大,即可使用 timing_paths.rpx 報(bào)告來對(duì)其進(jìn)行深入挖掘。用戶通過在 Vivado 中使用 timing_paths.rpx 報(bào)告即可借助具有失敗特征的主要失敗路徑來判定出現(xiàn)時(shí)序收斂失敗特征的原因。
要查看 timing_path.rpt 中包含的每條路徑的信息,請(qǐng)?jiān)?Vivado 交互式報(bào)告中雙擊相應(yīng)的時(shí)序路徑。這樣即可顯示路徑報(bào)告匯總信息窗口,其中包含時(shí)鐘和數(shù)據(jù)路徑等路徑信息。查看原理圖中的路徑是很有用的。通過使用原理圖,即可查看有哪些時(shí)鐘被用作為數(shù)據(jù)路徑中的時(shí)序元件的時(shí)鐘源。在原理圖中還能同時(shí)展開此時(shí)序收斂失敗路徑的前后級(jí)路徑,這些信息有助于更準(zhǔn)確了解數(shù)據(jù)路徑。
此外,還可查看原理圖中的單元屬性、信號(hào)線屬性和管腳屬性,因?yàn)樵韴D可顯示時(shí)序收斂失敗的路徑附近的固定布局單元(例如,收發(fā)器)或受限布局單元(例如,塊存儲(chǔ)器)。
用戶還可高亮?xí)r序報(bào)告中的路徑,這樣即可在“Hierarchy”窗口中高亮相應(yīng)的模塊。如果用戶選擇前 10、100 或 1000 條路徑,則可查看收斂失敗的時(shí)序路徑是否集中于層級(jí)內(nèi)某一部分。已知路徑在層級(jí)中所在位置有助于將時(shí)序收斂工作重心集中于明確設(shè)計(jì)的某一區(qū)域內(nèi)包含較多違例的原因。
最后,用戶可以在時(shí)序報(bào)告中將路徑高亮,這些路徑也會(huì)顯示在“Device”窗口中,以顯示物理器件中邏輯的布局位置(如下所示)。
通過使用“Schematic”窗口,即可在時(shí)序路徑內(nèi)標(biāo)記單元以幫助用戶在“Schematic”窗口、“Hierarchy” 窗口和 “Device”窗口之間進(jìn)行瀏覽(如下所示)。
將構(gòu)建模塊放置在一起
本篇博文提供了一種時(shí)序路徑分析優(yōu)先排序方法,此方法可在 (UG1292) 的時(shí)序基線檢查流程中使用。
本篇博文中涵蓋了下列話題:
1. 如何為此時(shí)序分析生成重要報(bào)告(timing_vios.rpt 和 timing_paths.rpx)。
2. timing_vios.rpt 的分析過程包括將其轉(zhuǎn)換為便于分析的 Excel 格式 (timing_vios.csv)。
3. 使用timing_paths.rpx 來幫助確定時(shí)序收斂失敗的原因。
在發(fā)生時(shí)序收斂失敗的大型設(shè)計(jì)中,用戶將在 2 份報(bào)告之間進(jìn)行迭代(timing_vios.csv 和 timing_paths.rpx)。timing_vios.csv 報(bào)告提供了失敗的高級(jí)別視圖(例如,森林級(jí)視圖)。timing_paths.rpx 報(bào)告包含 “Schematic” 窗口、“Device” 窗口和路徑報(bào)告,可提供各條路徑的具體信息(例如,單獨(dú)的樹視圖)。
您可反復(fù)切換回 timing_vios.csv 以查看共有的失敗特征。即使大偵探面對(duì)千頭萬緒也可能一籌莫展,負(fù)裕量最高的路徑也可能無法輕易解釋其時(shí)序收斂失敗原因。如果發(fā)生這種情況,那么應(yīng)分析負(fù)裕量僅次于它的另一組時(shí)序路徑,查看其失敗原因。
這樣做的目的是通過明確最常見的時(shí)序收斂失敗的原因來盡可能快速使工作取得進(jìn)展。希望能夠藉此加快達(dá)成時(shí)序收斂,少受殫精竭慮之苦。
祝狩獵愉快!
文中提到的 User Guide 可復(fù)制如下網(wǎng)址進(jìn)行查閱:
UG894: https://china.xilinx.com/support/documentation/sw_manuals/xilinx2020_1/ug894-vivado-tcl-scripting.pdf
UG835: https://china.xilinx.com/support/documentation/sw_manuals/xilinx2020_1/ug835-vivado-tcl-commands.pdf
UG1292: https://china.xilinx.com/support/documentation/sw_manuals/xilinx2020_1/c_ug1292-ultrafast-timing-closure-quick-reference.pdf
編輯:jq
-
FPGA
+關(guān)注
關(guān)注
1625文章
21620瀏覽量
601238 -
TCL
+關(guān)注
關(guān)注
10文章
1712瀏覽量
88405 -
編輯器
+關(guān)注
關(guān)注
1文章
800瀏覽量
31055 -
SSI
+關(guān)注
關(guān)注
0文章
38瀏覽量
19195
原文標(biāo)題:開發(fā)者分享 | 時(shí)序路徑分析提速
文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論