那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Vivado使用進階:讀懂用好Timing Report

FPGA算法工程師 ? 來源:FPGA算法工程師 ? 2023-05-04 11:20 ? 次閱讀

本篇是《Vivado使用誤區與進階》系列的最后一章,關于FPGA的時序分析。

《XDC 約束技巧》系列中討論了XDC 約束的設置方法、約束思路和一些容易混淆的地方。我們提到過約束是為了設計服務,寫入 Vivado中 的 XDC 實際上就是用戶設定的目標,Vivado對 FPGA 設計的實現過程必須以滿足 XDC 中的約束為目標進行。那我們如何驗證實現后的設計有沒有滿足時序要求?又如何在開始布局布線前判斷某些約束有沒有成功設置?或是驗證約束的優先級?這些都要用到 Vivado 中的靜態時序分析工具。

靜態時序分析

靜態時序分析(Static Timing Analysis)簡稱 STA,采用窮盡的分析 方法來提取出整個電路存在的所有時序路徑,計算信號在這些路徑上的傳播延時,檢查信號的建立和保持時間是否滿足時序要求,通過對最大路徑延時和最小路徑延時的分析,找出違背時序約束的錯誤并報告。 STA 不需要輸入向量就能窮盡所有的路徑,且運行速度很快、占用內存較少、覆蓋率極高,不僅可以對芯片設計進行全面的時序功能檢查,而且還可以利用時序分析的結果來優化設計。所以 STA 不僅是數字集成電路設計 Timing Sign-off 的必備手段,也越來越多地被用到設計的驗證調試工 作中。 STA 在 FPGA 設計中也一樣重要,但不同于一般數字集成電路的設計,FPGA 設計中的靜態時序分析工具一般都整合在芯片廠商提供的實現工具中。在 Vivado 中甚至沒有一個獨立的界面,而是通過幾個特定的時序 報告命令來實現。

OCV與PVT

即便是同一種FF,在同一個芯片上不同操作條件下的延時都不盡相同,我們稱這種現象為OCV(on-chip variation)。OCV 表示的是芯片內部的時序偏差,雖然很細小,但是也必須嚴格考慮到時序分析中去。

產生OCV 的原因主要有PVT(Process / Voltage / Temperature)三個方面,而STA 要做的就是針對不同工藝角(Process Corner)下特定的時序模型來分析時序路徑,從而保證設計在任何條件下都能滿足時序要求,可以正常工作。

通常PVT 對芯片性能的影響如下圖所示,

7996e904-e7da-11ed-ab56-dac502259ad0.png

不同的PVT 條件組成了不同的corner,另外在數字電路設計中還要考慮RC corner 的影響,排列組合后就可能有超過十種的corner 要分析。但是在FPGA 設計中的靜態時序分析一般僅考慮Best Case 和WorstCase,也稱作Fast Process Corner 和Slow Process Corner,分別對應極端的PVT 條件。

79a4c786-e7da-11ed-ab56-dac502259ad0.png

Multi-Corner

Vivado 中的 STA 支持多角時序分析(Multi-Corner Timing Analysis),會對以上兩種corner 下的時序同時進行分析,然后報告最差的情況。因為每個 corner 下的延時也會有一定的變化范圍,所以時序分析還會考慮每 種 corner 下的最大延時和最小延時。

79b753ec-e7da-11ed-ab56-dac502259ad0.png

如果一個設計在 Best Case 和 Worst Case 下都能滿足時序要求,則可以推算這個設計在其允許的任何操作條件下都能保持正常工作。

這里要提醒大家,不要被 corner 的名字誤導,實際上,同樣一條路徑可能在 Slow Corner 中滿足時序卻在 Fast Corner 中有時序違例。但是你在 Vivado 中看到的時序報告只會顯示其對兩種 corner 并行分析后選出的 最差情況。

79cc26fa-e7da-11ed-ab56-dac502259ad0.png

有特殊需要的情況下,可以在 Vivado 中通過 config_timing_corners -corner-delay_type來選擇將某種 corner 應用于 setup 和/或 hold 的分析。在 Report Timing Summary 和 ReportTiming 的圖形化界面也可以通過 Timer Setting 對 corner 做調整,具體界面詳見稍后描述。

這樣最大化考慮 OCV 的時序分析方法在處理同一條路徑的共同時鐘路徑時也會應用不同的延時數據,從而會得出更為悲觀的數據。為了真實反映路徑延時情況,這部分延時必須被糾正,這就是 CRPR(Clock Reconvergence Pessimism Removal)。

仔細觀察時序報告便可以發現在報告路徑的 Slack 之前有一行顯示 clock pessimism 已經被考慮在內,在進行 Setup Check 時會加上一定的 clock pessimism,而 Hold Check 時則會減去一定的 clock pessimism。

下圖顯示了 CRPR 的來源以及在 Vivado 時序報告中的具體體現。

79d60102-e7da-11ed-ab56-dac502259ad0.png

79e26c08-e7da-11ed-ab56-dac502259ad0.png

時序命令與報告

Vivado 中用于時序分析的命令主要有以下兩條,且都有對應的圖形化設置界面。

report_timing_summary 主要用于實現后的 timing sigh-off

report_timing 主要用于交互式的約束驗證以及更細致具體的時序報告與分析

report_timing_summary

我們先看看 report_timing_summary,實際上,不僅在布局布線后,在綜合后甚至是更具體的實現過程中 的每一小步之后都可以運行,從而得到一個全局的時序報告。

在 Vivado IDE 中點擊 Report Timing Summary 后可以改變報告的內容,例如每個時鐘域報告的路徑條數,是否 setup 和 hold 全都報告等等。每改變一個選項都可以看到窗口下方的 Command 一欄顯示出對應的 Tcl 命令。修改完設置后可以直接按 OK 鍵確認執行,也可以拷貝 Command 欄顯示的命令到 Tcl 腳本中稍后執行。

7a036016-e7da-11ed-ab56-dac502259ad0.png

這里有個小竅門,通過-name 指定一個名字,就可以在 Vivado IDE 中新開一個窗口顯示這條命令的執行 結果,這個窗口還可以用來跟其他諸如 Device View 或是 Schematic View 等窗口之間 cross probing。這一點也同樣適用于包括 report_timing 在內的絕大部分 Vivado 中的 report 命令。

在設置窗口中還有 Timer Settings 一欄(report_timing 中也有),可以用來改變報告時采用的具體 corner、速度等級以及計算布線延時的方式。很多時候我們可以借助 Timer 的設置來快速驗證和調試設計需求。

7a17cbf0-e7da-11ed-ab56-dac502259ad0.png

舉例來說,在實現后的報告中顯示時序違例比較嚴重,我們可以直接在 Timer 設置中改變速度等級后重新 報告時序,來驗證把當前這個已經布局布線完畢的設計切換到更快一檔的芯片中是否可以滿足時序要求。

另外,在布局布線后的設計上報告時序,往往不能更直觀地發現那些扇出較大或是邏輯級數較高的路徑。此時我們可以修改連線模型為 estimated,報告出布局后布線前的時序而無需另外打開對應階段的 DCP 并重 新運行時序報告命令來操作,這么做節約時間的同時,也更容易找到那些高扇出路徑以及由于布局不佳而導致的時序違例。我們也可以修改連線模型為 none,這樣可以快速報告出那些邏輯延時較大以及邏輯級數較高的路徑。以上這些改變 Timer 設置的方法可以幫助我們快速定位設計中可能存在的問題和缺陷。

report_timing_summary 實際上隱含了 report_timing、report_clocks 、check_timing 以及部分的 report_clock_interaction 命令,所以我們最終看到的報告中也包含了這幾部分的內容。另外自 2014.3 版起,打開實現后的結果時會直接打開一個預先產生好的報告。

7a202dfe-e7da-11ed-ab56-dac502259ad0.png

Timing Summary 報告把路徑按照時鐘域分類,每個組別下缺省會報告 Setup、Hold 以及 Pulse Width 檢 查最差的各 10 條路徑,還可以看到每條路徑的具體延時報告,并支持與 Device View、Schematic View 等窗 口之間的交互。

每條路徑具體的報告會分為 Summary、Source Clock Path、Data Path 和 Destination Clock Path 幾部分,詳細報告每部分的邏輯延時與連線延時。用戶首先要關注的就是 Summary 中的幾部分內容,發現問題后 再根據具體情況來檢查詳細的延時數據。其中,Slack 顯示路徑是否有時序違例,Source 和 Destination 顯示 源驅動時鐘和目的驅動時鐘及其時鐘頻率, Requirement 顯示這條路徑的時序要求是多少,Data Path 顯示數據路徑上的延時,Logic Level 顯示這條路徑的邏輯級數,而 Clock Path Skew 和 Clock Uncertainty 則顯示時鐘路徑上的不確定性。

7a2afffe-e7da-11ed-ab56-dac502259ad0.png

以上圖這條路徑來舉例,通過 Summary 我們可以得到這樣的信息:這是一條 clk 時鐘域內的路徑,時鐘周期為 3.125ns,這條路徑有 0.268ns 的時序違例。違例的主要原因是邏輯級數較高導致的數據鏈路延時較大,但連線延時的比例也較高,所以可以仔細看看這條路徑的數據路徑上有沒有可能改進布局、降低扇出或者是減少邏輯級數的優化方向。

report_timing

report_timing 是更具體的時序報告命令,經常用來報告某一條或是某些共享特定節點的路徑。用戶可以在設計的任何階段使用 report_timing,甚至是一邊設置 XDC,一邊用其來驗證約束的可行性與優先級。在 Vivado IDE 中可以由 Tools > Timing > ReportTiming 調出其圖形化設置窗口。

與 report_timing_summary 類似,調整選項后對應的Tcl 命令也會在 Command 欄生成,在 Targets 一欄 還可以設置需要報告路徑的起始點/途經點/結束點,可以三個都設置或是僅設置其中任何一項,每一項都支持通配符匹配甚至是正則表達式查找。report_timing 報告出的路徑延時與 report_timing_summary 中具體到每根 路徑上的報告一致,可以以此為依據幫助我們定位時序失敗的原因。

7a4cf6a4-e7da-11ed-ab56-dac502259ad0.png

用 report_timing 來報告時序其實還有一些更常見的應用場景,用來幫助我們設置和驗證約束,尤其是那些時 序例外約束。

舉例來說,在設計過程中我們約束了一條或數條多周期約束,不同于 UCF 必須讀入約束后重跑設計,我們可以直接在 Tcl Console 中輸入這條 XDC,無需重跑設計,直接用 report_timing 來驗證。在隨之顯示的時序報告 Summary 部分可以看到 Timing Exception 后列出這條路徑被設置了怎樣的時序例外約束(注意,不加額外 option 時,以下兩條命令都僅針對 setup check) 。

7a614906-e7da-11ed-ab56-dac502259ad0.png

單純的一條多周期約束沒有什么特別,但是如果使用了通配符后的時序例外有重疊的情況下,Vivado 會根據 優先級來決定對某條路徑應用怎樣的約束。當設計較大,XDC 較多時,一邊設置 XDC 一邊用 report_timing 來驗 證就變得尤其重要。

另外,僅僅輸入 report_timing 而不加任何 option,Vivado 便會報告出時序違例最嚴重的那條路徑,方便我們快速了解當前設計的 WNS,找到最差的那條路徑。在驗證 I/O 約束時也常常用到 report_timing,只要指定-from 某個輸入或是-to 某個輸出便可以快速驗證當前設計在接口上的時序。

get_timing_paths

7a702642-e7da-11ed-ab56-dac502259ad0.png

除了上述兩個大家比較熟悉的時序報告命令,Vivado 中還提供一個 get_timing_paths 的命令,可以根據指定 的條件找到一些特定的路徑。我們可以利用其返回值中的一些屬性來快速定位設計中的問題。

例如邏輯級數這個影響 FPGA 性能的一大因素,因為經常隱藏在時序報告后很難被發現。在 Vivado 中,除了借助綜合后的報告來找到那些可能因為邏輯級數較高而導致的時序難滿足的路徑外,還有一個更直接的辦法,可以一次性報告出設計中那些高邏輯級數的路徑,方便我們有針對性的深入分析和優化。

下圖這個例子報告了時序最差的 10 條路徑的邏輯級數。需要注意的是,在綜合后和在布局布線后用一樣的腳本報告出的結果會稍有不同,對邏輯級數較為關注的情況,還是建議以綜合后的結果為主要依據。

7a7c17ae-e7da-11ed-ab56-dac502259ad0.png

小結

本文可以視為對《XDC 約束技巧》系列文章的補充,希望可以幫助大家了解 FPGA 設計中的時序分析方法,學會使用 Vivado 中的靜態時序分析工具來驗證時序,定位問題,快速找到問題和解決方案。

《Vivado使用誤區與進階》系列,到此篇便結束了,更多關于Vivado設計集成環境的應用,可參考Xilinx官網的UG和在工程開發中體會。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • FPGA
    +關注

    關注

    1630

    文章

    21796

    瀏覽量

    605999
  • FPGA設計
    +關注

    關注

    9

    文章

    428

    瀏覽量

    26628
  • 時序分析
    +關注

    關注

    2

    文章

    127

    瀏覽量

    22616
  • 靜態時序
    +關注

    關注

    0

    文章

    20

    瀏覽量

    6962
  • Vivado
    +關注

    關注

    19

    文章

    815

    瀏覽量

    66888

原文標題:Vivado使用進階:讀懂用好Timing Report

文章出處:【微信號:FPGA算法工程師,微信公眾號:FPGA算法工程師】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    玩轉VivadoTiming Constraints

    玩轉VivadoTiming Constraints特權同學,版權所有最近在熟悉Xilinx已經推出好幾年的Vivado,雖然特權同學之前已經著手玩過這個新開發工具,但只是簡單的玩玩,沒有深入
    發表于 01-11 16:55

    ISE Timing Anlayzer report

    ISE Timing Anlayzer report 是看post-map 還是 post-place&route我現在有個工程 post-map 有錯post-place&route 通過這該以哪個為準
    發表于 08-24 14:15

    vivado:時序分析與約束優化

    report clock可以查看全局時鐘樹的情況 三:通過report timing summary可以看到出現了12個時序問題,總的時序問題達到9個ns多,說明時序問題已經比較糟糕了 四:在
    發表于 08-22 11:45

    無法通過Vivado GUI在OOC模式下運行實現

    report actual utilization and timing,write checkpoint design,run drc,write verilog和xdc out route_design
    發表于 10-23 10:30

    Vivado 2017.4和2018.2不同的Linux和Windows之間的實現結果

    not report congestion issues and was able to close timing.How can I replicate the Windows results
    發表于 11-14 10:04

    Vivado下顯示指定路徑時序報告的流程

      Vivado運行Report Timing Summary時,只顯示各個子項目最差的十條路徑,很可能并不包含你最關心的路近,這個時候顯示指定路徑的時序報告就顯得很重要了,下面就簡單介紹一下
    發表于 01-15 16:57

    Vivado使用誤區與進階

    Vivado使用誤區與進階》電子書匯集了賽靈思專家團隊在客戶支持時所碰見的諸多實際案例,以及相對應的解決方案;還有多年總結下來的設計技巧與代碼參數詳解。是您學習和掌握Vivado開發套件的一本不可多得的實戰指導資料。
    發表于 08-03 19:37 ?84次下載

    Vivado中的靜態時序分析工具Timing Report的使用與規范

    《XDC約束技巧》系列中討論了XDC約束的設置方法、約束思路和一些容易混淆的地方。我們提到過約束是為了設計服務,寫入Vivado中的XDC實際上就是用戶設定的目標 ,Vivado對FPGA設計的實現
    發表于 11-17 18:03 ?3.7w次閱讀
    <b class='flag-5'>Vivado</b>中的靜態時序分析工具<b class='flag-5'>Timing</b> <b class='flag-5'>Report</b>的使用與規范

    Report QoR Suggestions助力解決Vivado設計問題

    Report QoR Suggestions (RQS) 可識別設計問題,并提供工具開關和可影響工具行為的設計單元屬性的解決方案,即便在無法自動執行解決方案的情況下也可提供文本修改建議。
    的頭像 發表于 01-24 17:27 ?3076次閱讀
    <b class='flag-5'>Report</b> QoR Suggestions助力解決<b class='flag-5'>Vivado</b>設計問題

    時序分析的小工具——Global Timing Debugger

    然后會出現如下窗口, 使用GTD前, 需要有一個machine readable格式的timing report文件, 該文件可以通過report_timing -machine_readable
    的頭像 發表于 05-19 16:14 ?8267次閱讀
    時序分析的小工具——Global <b class='flag-5'>Timing</b> Debugger

    Vivado時序案例分析之解脈沖寬度違例

    脈沖寬度違例的詳情,請在 Vivado GUI 中打開脈沖寬度違例報告(單擊Reports - Timing - Report Pulse Width)或使用以下 Tcl 命令打開此報
    的頭像 發表于 11-19 13:48 ?5757次閱讀
    <b class='flag-5'>Vivado</b>時序案例分析之解脈沖寬度違例

    VIVADO中時序報告中WNS、WHS、TNS、THS有什么含義

    VIVADO中時序報告中WNS,WHS,TNS,THS含義運行“report_timing”或“report_timing_summary”命令后,會注意到 WNS、TNS、WHS 和 THS
    的頭像 發表于 10-21 14:32 ?2.5w次閱讀
    <b class='flag-5'>VIVADO</b>中時序報告中WNS、WHS、TNS、THS有什么含義

    report_timing報告格式如何個性化配置?

    默認report_timing中會出現換行的情況,如下圖所示,如何避免換行呢?
    的頭像 發表于 04-15 10:20 ?3689次閱讀

    用TCL定制Vivado設計實現流程

    今天推出Xilinx已發布的《Vivado使用誤區與進階》系列:用TCL定制Vivado設計實現流程。
    的頭像 發表于 05-05 09:44 ?1139次閱讀
    用TCL定制<b class='flag-5'>Vivado</b>設計實現流程

    Vivado時序問題分析

    有些時候在寫完代碼之后呢,Vivado時序報紅,Timing一欄有很多時序問題。
    的頭像 發表于 01-05 10:18 ?2339次閱讀
    找查百家乐玩法技巧| 百家乐官网正反投注| 太阳城百家乐| 申博娱乐城官网| 七乐国际| 现金赌博网| 明陞M88娱乐城| 网上现金游戏| 真人百家乐官网开户须知| 丰台区| 百家乐官网桌布小| 鲨鱼百家乐官网游戏平台| 百家乐官网赌博技巧网| 致胜百家乐官网软件| 百家乐如何写路| 三公百家乐玩法| 定制百家乐桌子| 大发888体育投注| 澳门玩大小| 伯爵百家乐官网娱乐城| 百家乐官网桌码合| 尊龙百家乐官网娱乐城| 百家乐棋牌交友| 太阳城宾馆| 真钱德州扑克| 网上百家乐官网有没有假| 澳门百家乐官网图形| 百家乐玩法有技巧| 百家乐官网的珠盘| 哪里有百家乐投注网| 免费百家乐预测工具| 2011棋牌游戏赢话费| 百家乐官网视频美女| 澳门赌博技巧| 百家乐官网庄闲和各| 百家乐赢钱密籍| 百家乐视| 青河县| 百家乐官网打揽法| 百家乐赢钱的技巧是什么| 德州扑克几副牌|