0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

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

3天內(nèi)不再提示

縮短Vivado編譯時間之審視時序約束描述

FPGA技術(shù)驛站 ? 來源:FPGA技術(shù)驛站 ? 2023-02-23 09:03 ? 次閱讀

在描述時序約束時,一個重要的原則是確保約束簡潔高效。簡潔高效意味著約束只針對指定的對象,即約束對應(yīng)的對象的個數(shù)(通常這些對象由命令get_pins、get_cells、get_nets、get_ports或get_clocks獲取)盡可能少,少的同時還要足夠的精確,能夠安全地覆蓋到期望的時序路徑。

既不會出現(xiàn)遺漏某些對象也不會出現(xiàn)包含了不期望的對象,兩者都會造成工具無法對相關(guān)路徑按照指定要求進行時序分析,從而造成設(shè)計“偽收斂”。這通常會出現(xiàn)在使用-from、-to或-through等選項的約束中,例如:

set_clock_groups,set_false_path

set_max_delay,set_multicycle_path

等時序例外約束。

Vivado提供了一些方法用于分析時序例外約束的有效性,其中之一就是用命令report_exceptions生成時序例外報告。這里我們首先介紹一下這個命令的使用方法。 report_exceptions -scope_override

選項-scope_override可用于查看是否存在作用于某個子模塊的約束(約束的作用域僅限于該子模塊)被頂層約束部分或者全部覆蓋。注意這里僅限于子模塊約束與頂層模塊約束之間的覆蓋情況,而不會報告不同子模塊之間的約束覆蓋情況。借助此選項查看IP的約束是否被用戶約束所覆蓋將變得非常容易。如下圖所示,我們可以在生成報告的Status列發(fā)現(xiàn)IP約束被用戶約束覆蓋。

99ebad40-b30d-11ed-bfe3-dac502259ad0.png9a02bd00-b30d-11ed-bfe3-dac502259ad0.png

report_exceptions -coverage

選項-coverage可查看約束的覆蓋率,其描述形式是時序例外約束所施加的路徑的起點或終點的pin個數(shù)與-from/-through/-to選項所獲得的pin的個數(shù)的百分比。我們看一個例子,如下圖所示報告。其中的紅色方框可以看到這里使用的是set_max_delay,-from是通過get_cells獲得的,因為只有1個cell且時序路徑的起點是觸發(fā)器的時鐘端口,所以From的覆蓋率就是100%(觸發(fā)器只有1個時鐘端口)。

-to也是通過get_cells獲取,獲取到1個cell,這個cell也是觸發(fā)器,其數(shù)據(jù)端口是該約束對應(yīng)的時序路徑的終點。但實際上,觸發(fā)器除了數(shù)據(jù)端口之外,還有時鐘使能端口/復(fù)位端口,所以To的覆蓋率就是1/3也就是這里的33.33%。顯然,覆蓋率越高表明我們描述得越精確。

9a2bd988-b30d-11ed-bfe3-dac502259ad0.png

report_exceptions -ignored

選項-ignored可報告出設(shè)計中被完全覆蓋的約束(Totallyoverridden),需要注意的是不會報告部分被覆蓋的約束(PartiallyOverridden)。下圖中可以看到set_multicycle_path被set_max_delay所覆蓋。 9a5a1a28-b30d-11ed-bfe3-dac502259ad0.png ? 9a795a00-b30d-11ed-bfe3-dac502259ad0.png

report_exceptions -ignored_objects

選項-ignored_objects可報告出被忽略的起點或終點。之所以被忽略是因為這些路徑不存在,例如下圖中觸發(fā)器的D端口恒接地,這樣在使用set_false_path -to時,-to的值如果是通過get_pins獲取到該觸發(fā)器的D端口, 那么這條路徑的終點就會被工具忽略,從而這條約束也就無效。

9a8e606c-b30d-11ed-bfe3-dac502259ad0.png

從編譯時間的角度看,描述約束時越精確越好。一個事實是在網(wǎng)表中pin的個數(shù)通常是cell個數(shù)的幾倍甚至幾十倍,因此直接搜索pins會比較耗時,Xilinx推薦的方法是利用cell和pin的關(guān)系,先找到cell再找到對應(yīng)的pin,例如:需要對下圖所示的兩個觸發(fā)器對應(yīng)的時序路徑進行FalsePath約束,采用了三種方式。顯然,方案1和方案2會覆蓋到不期望的路徑,方案3最為精確,耗時也較少。

9aaa02e0-b30d-11ed-bfe3-dac502259ad0.png9ac93480-b30d-11ed-bfe3-dac502259ad0.png

尤其是當(dāng)get_pins命令使用了通配符時,先get_cells再get_pins更為高效,如下圖所示方式。

9af1e6a0-b30d-11ed-bfe3-dac502259ad0.png

另外,在約束中避免使用all_registers,該命令會返回設(shè)計中的所有觸發(fā)器。如果確需用all_registers,那么可通過選項-clock限定作用域,或者用get_clocks取代,如下圖所示。 9b1faae0-b30d-11ed-bfe3-dac502259ad0.png

時序約束的描述順序?qū)幾g時間也有很大影響。當(dāng)時序約束被加載到內(nèi)存時,時序引擎會對每條約束進行驗證。對于可能存在問題的約束,時序引擎會打印出相關(guān)的信息。一些約束可能會導(dǎo)致部分時序數(shù)據(jù)庫無效,還有一些約束可能需要更新時序數(shù)據(jù)庫以便正常運行。

例如,MMCM自動生成的時鐘若頻率或相位發(fā)生了改變,那么用到這個時鐘的相關(guān)約束就需要更新。交織的時序約束以及影響到時序數(shù)據(jù)庫的約束會對編譯時間產(chǎn)生較大影響。如下表格顯示了會對時序數(shù)據(jù)庫產(chǎn)生影響的一些Tcl命令。

9b457914-b30d-11ed-bfe3-dac502259ad0.png

其中最為耗時的描述方式是同時使用了set_disable_timing和all_fanin或all_fanout,如下圖所示。

9b6c51ba-b30d-11ed-bfe3-dac502259ad0.png

根據(jù)上述表格,從編譯時間的角度來看,最優(yōu)的約束描述順序是:

(1)set_disable_timing,

set_case_analysis,

set_external_delay

(2)影響時序數(shù)據(jù)庫的約束如create_clock

(3)不需要更新時序數(shù)據(jù)庫的約束,例如

set_max_delay 我們看一個案例,如下圖所示:代碼第3至第10行為原始約束順序,這里將set_disable_timing和set_case_analysis放在了create_clock之后。

代碼第14行至第20行為推薦的約束順序,可以看到先描述set_disable_timing,之后是set_case_analysis,然后才是create_clock,同時將set_max_delay放在了最后。

9b853518-b30d-11ed-bfe3-dac502259ad0.png








審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • TCL
    TCL
    +關(guān)注

    關(guān)注

    10

    文章

    1738

    瀏覽量

    88772
  • 觸發(fā)器
    +關(guān)注

    關(guān)注

    14

    文章

    2002

    瀏覽量

    61284
  • PIN
    PIN
    +關(guān)注

    關(guān)注

    1

    文章

    305

    瀏覽量

    24367
  • Vivado
    +關(guān)注

    關(guān)注

    19

    文章

    815

    瀏覽量

    66772

原文標題:縮短Vivado編譯時間(6):審視時序約束

文章出處:【微信號:Lauren_FPGA,微信公眾號:FPGA技術(shù)驛站】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    如何縮短Vivado的運行時間

    Vivado Implementation階段,有時是有必要分析一下什么原因?qū)е逻\行時間(runtime)過長,從而找到一些方法來縮短運行時間。
    的頭像 發(fā)表于 05-29 14:37 ?1.4w次閱讀
    如何<b class='flag-5'>縮短</b><b class='flag-5'>Vivado</b>的運行<b class='flag-5'>時間</b>

    詳細解析vivado約束時序路徑分析問題

    時序不滿足約束,會導(dǎo)致以下問題: 編譯時間長的令人絕望 運行結(jié)果靠運氣時對時錯 導(dǎo)致時序問題的成因及其發(fā)生的概率如下表: 由上表可見,造成
    的頭像 發(fā)表于 11-29 10:34 ?8773次閱讀

    VIVADO時序約束及STA基礎(chǔ)

    時序約束的目的就是告訴工具當(dāng)前的時序狀態(tài),以讓工具盡量優(yōu)化時序并給出詳細的分析報告。一般在行為仿真后、綜合前即創(chuàng)建基本的時序
    的頭像 發(fā)表于 03-11 14:39 ?9845次閱讀

    FPGA主時鐘約束詳解 Vivado添加時序約束方法

    在FPGA設(shè)計中,時序約束的設(shè)置對于電路性能和可靠性都至關(guān)重要。在上一篇的文章中,已經(jīng)詳細介紹了FPGA時序約束的基礎(chǔ)知識。
    發(fā)表于 06-06 18:27 ?1.1w次閱讀
    FPGA主時鐘<b class='flag-5'>約束</b>詳解 <b class='flag-5'>Vivado</b>添加<b class='flag-5'>時序</b><b class='flag-5'>約束</b>方法

    FPGA時序約束衍生時鐘約束和時鐘分組約束

    在FPGA設(shè)計中,時序約束對于電路性能和可靠性非常重要。在上一篇的文章中,已經(jīng)詳細介紹了FPGA時序約束的主時鐘約束
    發(fā)表于 06-12 17:29 ?2861次閱讀

    FPGA時序約束建立時間和保持時間

    FPGA中時序約束是設(shè)計的關(guān)鍵點之一,準確的時鐘約束有利于代碼功能的完整呈現(xiàn)。進行時序約束,讓軟件布局布線后的電路能夠滿足使用的要求。
    發(fā)表于 08-14 17:49 ?1499次閱讀
    FPGA<b class='flag-5'>時序</b><b class='flag-5'>約束</b><b class='flag-5'>之</b>建立<b class='flag-5'>時間</b>和保持<b class='flag-5'>時間</b>

    時序約束資料包

    、Vivado基本操作流程2、時序基本概念3、時序基本約束和流程4、Baselining時序約束
    發(fā)表于 08-01 16:45

    時序約束資料包】培訓(xùn)課程Timing VIVADO

    維持嗎? 1、Vivado基本操作流程 2、時序基本概念 3、時序基本約束和流程 4、Baselining時序
    發(fā)表于 08-06 15:08 ?551次閱讀

    講述增量編譯方法,提高Vivado編譯效率

    當(dāng)RTL代碼修改較少時,使用增量編譯功能可以提高工程的編譯速度,Incremental Compile增量編譯Vivado提供的一項高階功能。目的旨在當(dāng)設(shè)計微小的改變時,重用綜合和布
    的頭像 發(fā)表于 01-22 17:27 ?1w次閱讀
    講述增量<b class='flag-5'>編譯</b>方法,提高<b class='flag-5'>Vivado</b><b class='flag-5'>編譯</b>效率

    FPGA時序約束的建立和保持時間方法

    首先來看什么是時序約束,泛泛來說,就是我們告訴軟件(Vivado、ISE等)從哪個pin輸入信號,輸入信號要延遲多長時間,時鐘周期是多少,讓軟件PAR(Place and Route)
    的頭像 發(fā)表于 01-28 17:34 ?3896次閱讀
    FPGA<b class='flag-5'>時序</b><b class='flag-5'>約束</b>的建立和保持<b class='flag-5'>時間</b>方法

    Vivado進行時序約束的兩種方式

    上面我們講的都是xdc文件的方式進行時序約束,Vivado中還提供了兩種圖形界面的方式,幫我們進行時序約束
    的頭像 發(fā)表于 03-08 17:17 ?2w次閱讀
    <b class='flag-5'>Vivado</b>進行<b class='flag-5'>時序</b><b class='flag-5'>約束</b>的兩種方式

    如何在Vivado中添加時序約束

    前面幾篇文章已經(jīng)詳細介紹了FPGA時序約束基礎(chǔ)知識以及常用的時序約束命令,相信大家已經(jīng)基本掌握了時序約束
    的頭像 發(fā)表于 06-23 17:44 ?2483次閱讀
    如何在<b class='flag-5'>Vivado</b>中添加<b class='flag-5'>時序</b><b class='flag-5'>約束</b>

    如何在Vivado中添加時序約束呢?

    今天介紹一下,如何在Vivado中添加時序約束Vivado添加約束的方法有3種:xdc文件、時序
    的頭像 發(fā)表于 06-26 15:21 ?4277次閱讀
    如何在<b class='flag-5'>Vivado</b>中添加<b class='flag-5'>時序</b><b class='flag-5'>約束</b>呢?

    Vivado綜合階段什么約束生效?

    Vivado綜合默認是timing driven模式,除了IO管腳等物理約束,建議添加必要的時序約束,有利于綜合邏輯的優(yōu)化,同時綜合后的design里面可以評估
    的頭像 發(fā)表于 07-03 09:03 ?734次閱讀

    淺談Vivado編譯時間

    隨著FPGA規(guī)模的增大,設(shè)計復(fù)雜度的增加,Vivado編譯時間成為一個不可回避的話題。尤其是一些基于SSI芯片的設(shè)計,如VU9P/VU13P/VU19P等,布局布線時間更是顯著增加。當(dāng)
    的頭像 發(fā)表于 09-18 10:43 ?1136次閱讀
    淺談<b class='flag-5'>Vivado</b><b class='flag-5'>編譯</b><b class='flag-5'>時間</b>