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

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

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

五點(diǎn)技巧助你DC應(yīng)用進(jìn)階

芯司機(jī) ? 來源:芯司機(jī) ? 2023-06-25 16:46 ? 次閱讀

引言

之前在《一文讓你理解DC綜合全過程!》中,和大家分享了DC映射和優(yōu)化流程,接下來本文針對如何寫DC綜合腳本提出五點(diǎn)建議。如果您是DC新手,那么您會發(fā)現(xiàn)這幾點(diǎn)建議很是實(shí)用;如果您是DC老手,由于工具版本的更新,可能增加了您未曾注意的功能,希望本文的分享能對您有所幫助。

一 、使用set_auto_disable_drc_nets命令使時鐘網(wǎng)絡(luò)免于設(shè)計規(guī)則檢查

DC會自動通過插入 buffer或者 resizing單元的方式進(jìn)行設(shè)計規(guī)則違例修正,不過時鐘常值和scan是比較特殊的net,綜合人員可以使用set_auto_disable_drc_nets命令來聲明不對這些特殊nets進(jìn)行設(shè)計規(guī)則違例修正。-default為默認(rèn)選項,默認(rèn)情況下時鐘和常值是被disable的,不過scan并未disable,可以使用該命令帶-all選項,將三者都 disable,或者分別帶-on_clock_network、-constant和-scan來分別設(shè)置。需要說明的是-clock和-on_clock_network 有些差別,建議使用-on_clock_network,具體差別如圖1所示,虛線是被disable的時鐘線,-clock保證了對連接到觸發(fā)器的時鐘線,不會進(jìn)行DRC檢查,-on_clock_network是對時鐘網(wǎng)絡(luò)disable DRC,經(jīng)過組合邏輯再供給到觸發(fā)的時鐘也不會被DRC檢查

52e971ee-117b-11ee-962d-dac502259ad0.jpg

圖 1

二 、使用set_clock_groups命令來約束多時鐘設(shè)計

基本所有的多時鐘設(shè)計中都有時鐘切換電路,兩個或者多個時鐘輸入到時鐘切換模塊,輸出被選擇的一個時鐘。時鐘切換電路的電路結(jié)構(gòu)在《你不可不知的——時鐘切換電路》中做了詳細(xì)介紹,需知DC中時鐘屬性是可以穿過任何組合邏輯的,假設(shè)在時鐘切換模塊前已經(jīng)用create_clock聲明了兩個時鐘,這兩個時鐘經(jīng)過時鐘切換模塊時穿過的都是組合單元,那么該模塊的輸出端口也是有兩個時鐘穿過的。面對這種情況,傳統(tǒng)的做法是使用set_case_analysis來做功能選擇,比如用于測試的掃描時鐘和功能時鐘間的切換,這一命令就很有效。但是面對如圖2所示的情況,使用set_case_analysis命令,便人為的選定了自認(rèn)為時序最緊的情況,比如在CLK1和CLK2中選擇了頻率更高的CLK1,在CLK3和CLK4中選擇了頻率更高的CLK3,但是可能實(shí)際上CLK1到CLK4比CLK1到CLK3時序更緊張。這時,使用如下命令,只告訴DC時鐘間的關(guān)系,讓DC自己分析更穩(wěn)妥。

方式一:

create_clock -name CLK1 -period 5[get_ports CLK1]

create_clock-name CLK2 -period 10 [get_ports CLK2]

create_clock-name CLK3 -period 15 [get_ports CLK3]

create_clock -nameCLK4 -period 20 [get_ports CLK4]

set_false_path –from [get_clocksCLK1] –to [get_clocks CLK2]

set_false_path–from [get_clocks CLK2] –to [get_clocks CLK1]

set_false_path–from [get_clocks CLK3] –to [get_clocks CLK4]

set_false_path–from [get_clocks CLK4] –to [get_clocks CLK3]

方式二:

create_clock -name CLK1-period 5 [get_ports CLK1]

create_clock-name CLK2 -period 10 [get_ports CLK2]

create_clock-name CLK3 -period 15 [get_ports CLK3]

create_clock -nameCLK4 -period 20 [get_ports CLK4]

set_clock_groups –logically_exclusive–group CLK1 –group CLK2

set_clock_groups–logically_exclusive –group CLK3 –group CLK4

方式一和方式二的作用等價,但顯然,使用set_clock_groups命令來描述時鐘關(guān)系的方式二更簡便。其實(shí),除了選項–logically_exclusive,該命令還可以帶-phsically_exclusive和-asynchronous選項,這三個選項都可以表述聲明的時鐘組間的時序路徑間是沒有約束檢查的。不同點(diǎn)在于: 1)-asynchronous選項表示聲明的時鐘組的組間關(guān)系是異步的,異步關(guān)系的時鐘在芯片正常工作時物理上是可以同時存在的; 2)–logically_exclusive和-phsically_exclusive選項在DC中作用是相同的,–logically_exclusive選項表示的是聲明的時鐘組的組間關(guān)系是邏輯獨(dú)立、物理可共存的,而-phsically_exclusive選項表示的是聲明的時鐘組的組間關(guān)系是物理獨(dú)立的,如圖2所示,沒有信號是跨CLK1傳遞到CLK2域的,但是CLK1和CLK2是在電路中共存的。這點(diǎn)不同在PT做信號完整性分析時是有影響的,-phsically_exclusive較–logically_exclusive樂觀,而-asynchronous最悲觀。

52faa3ec-117b-11ee-962d-dac502259ad0.jpg

圖2


另外,set_clock_groups只帶一個-group選項的用法也很常見,比如:set_clock_groups–phsically_exclusive –group scan_clk,這表示DFT掃描測試時鐘scan_clk與其他所有時鐘物理上不共存。其實(shí)掃描時鐘和功能時鐘的關(guān)系也是異步的,而使用-asynchronous選項對PT的影響要比實(shí)際悲觀,故而對于既是物理互斥也是異步的情況,應(yīng)使用選項-phsically_exclusive。事實(shí)上,圖2示例的時鐘數(shù)目少、電路結(jié)構(gòu)簡單,而實(shí)際電路中時鐘選擇和電路結(jié)構(gòu)復(fù)雜的多,這時候使用命令set_clock_groups描述時鐘關(guān)系,優(yōu)勢更為明顯。事實(shí)上,掃描模式與功能模式不同時存在,且時鐘頻率差距甚大,掃描時鐘與功能時鐘的切換使用命令 set case analysis足以。
對圖2進(jìn)一步分析,時鐘切換電路U1前有兩個時鐘CLK1和CLK2,圖中沒有信號跨越這兩個時鐘域,那么這兩個時鐘是邏輯獨(dú)立、物理共存的。那如果有信號跨越這兩個時鐘域傳輸?shù)脑挘珻LK1和CLK2便不再是邏輯獨(dú)立的了,可是U1的輸出端口Z后的時鐘,仍然是物理獨(dú)立的,事實(shí)上,這種情況更為普遍。下面的約束也更為合適:


create_clock -name CLK1 -period 5[get_ports CLK1]

create_clock-name CLK2 -period 10 [get_ports CLK2]

create_clock-name CLK3 -period 15 [get_ports CLK3]

create_clock -nameCLK4 -period 20 [get_ports CLK4]

create_generated_clock–name G_CLK1 divide_by 1 –source [get_pins U1/A] [get_pins U1/Z] –combinational

create_generated_clock–name G_CLK2 divide_by 1 –source [get_pins U1/B] [get_pins U1/Z] –combinational–add

set_clock_groups –phisically_exclusive –group G_CLK1 –group G_CLK2

create_generated_clock–name G_CLK3] divide_by 1 –source [get_pins U2/A] [get_pins U2/Z]-combinational

create_generated_clock–name G_CLK4] divide_by 1 –source [get_pins U1/B] [get_pins U2/Z] –combinational–add

set_clock_groups –phisically_exclusive –group G_CLK3 –group G_CLK4

還有一種常見的情況是,時鐘經(jīng)過分頻模塊分出多個分頻時鐘,然后多個分頻時鐘經(jīng)過時鐘切換電路選擇輸出,而且分頻電路中常有小數(shù)分頻,比如1.5分頻,且如果有信號從1.5分頻時鐘域傳到未分頻的時鐘域,這時候最緊的時鐘約束應(yīng)是半個時鐘周期,那么綜合人員需要跟設(shè)計人員確認(rèn)電路中絕無這種工作情況的可能,才能使用set_case_analysis來選擇未分頻時鐘對后續(xù)電路約束。而電路是多個設(shè)計人員分別對各自模塊設(shè)計的,假設(shè)和溝通常常容易出錯,這時候如果在分頻模塊的輸出端口產(chǎn)生兩個物理獨(dú)立的generated時鐘,那么DC工具會給出分析結(jié)果。善用命令 set_clock_groups描述時鐘關(guān)系,優(yōu)勢確實(shí)很明顯。

三 、面對pad-limitted設(shè)計,可調(diào)節(jié)變量placer_max_cell_density_threshold進(jìn)行迭代

現(xiàn)在 synopsys建議使用SPG流程,該流程和后端有更好的匹配和關(guān)聯(lián)。如果綜合人員所面臨的設(shè)計是 pad-limitted,那么在第二次綜合流程中可以聲明一個最小單元密度,這讓 core有更好的利用率百分比,也就是讓DC圍繞著核更密集的排布單元和連線。 set_app_var placer_max_cell_density_threshold0. 7; # In DC/ICC set_app_options -nameplace.coarse. max _density -value 0.7; # In ICC ll 注意:如果在non-spg流程中,DC使用了上訴命令需要在ICC中也使用,在spg流程中ICC 會略過這一步驟,可以不在ICC中做同樣的命令設(shè)置。如果不對placer_ max_cell_density_threshold設(shè)置,DC默認(rèn)其為50%,在執(zhí)行了compile_ultra命令后,DC會對這個值重新計算,并將重新計算的值覆蓋默認(rèn)值。綜合人員可以查看這個值,并可以將這個值設(shè)置為重新計算值和1之間的中間值,進(jìn)而指導(dǎo)DC下一次綜合。

四、盡量使用高閾值電壓庫綜合,時序?qū)嵲跓o法收斂時,使用多閾值電壓庫來綜合

泄露功耗與工藝和閾值電壓有關(guān),閾值電壓越大,泄露功耗越低,但是器件速度越慢。DC EXPERT 需要通過命令set_leakage_optimization true 聲明,而DC Ultra會自動進(jìn)行泄露功耗優(yōu)化,為了不影響時序性能,DC會默認(rèn)對非關(guān)鍵路徑進(jìn)行功耗優(yōu)化。若采用了多閾值電壓庫,DC 會自動對非關(guān)鍵時序路徑,用高閾值電壓單元替換低閾值電壓單元;綜合人員可以使用set_multi_vth_constraint 命令來聲明設(shè)計所允許使用的低閾值電壓單元的百分比,并通過從5%到10%,開始逐步提升低閾值電壓單元所占百分比,直到時序符合要求為止。在使用命令set_multi_vth_constraint時,帶-type soft選項,DC會在保證時序的前提下,進(jìn)行功行功耗優(yōu)化;另外,在計算低閾值電壓單元所占百分比的時候,并沒有算進(jìn)黑盒子,如果欲將黑盒子也算進(jìn)來,使用-include_blackboxes選項。 一般工藝廠提供的工藝庫都是已經(jīng)根據(jù)閾值電壓的不同對庫單元進(jìn)行了分組的,如果沒有分組的話,多閾值電壓庫可以使用set_attribute命令對庫屬性進(jìn)行設(shè)置,從而將多閾值電壓庫中的不同單元根據(jù)閾值電壓的不同進(jìn)行分組。

Library-level attribute: defaultthreshold voltage_group:string; Library-cell-level attributestring; 綜合人員可以使用analyze_library–multi_vth 命令來獲得各個閾值電壓組的時序和泄露功耗信息。綜合完成后,可以使用report_threshhold_voltage_group 命令,報告設(shè)計中低閾值電壓單元占比情況。

五、使用set_app_var compile_timing_high_effort true 命令獲得更好的時序QoR

在第二次綜合時使用compile_ultra –timing_high_effort_script 是大家很熟悉的方式了,不過其中的開關(guān)選項-timing_high_effort_script目前在DC 優(yōu)化過程中已經(jīng)不起作用了,若希望DC 花費(fèi)更多資源在時序優(yōu)化上,那么可使用命令set_app_var compile_timing_high_effort true來獲得更好的時序QoR。需要說明的是,該變量的設(shè)置只在Design compiler topographical模式下有效,即需要用compile_ultra -spg 命令進(jìn)行綜合優(yōu)化。

以上幾點(diǎn)純是個人建議,寫DC腳本的最終目的是設(shè)置合理的約束來指導(dǎo)DC更好的優(yōu)化電路,每個人都有自己的習(xí)慣和綜合策略,歡迎大家多多交流心得體會。

審核編輯:湯梓紅

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

    關(guān)注

    11

    文章

    1742

    瀏覽量

    131641
  • DC
    DC
    +關(guān)注

    關(guān)注

    9

    文章

    3654

    瀏覽量

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

    關(guān)注

    14

    文章

    2000

    瀏覽量

    61261
  • 切換電路
    +關(guān)注

    關(guān)注

    0

    文章

    30

    瀏覽量

    9428

原文標(biāo)題:五點(diǎn)Tips助你DC應(yīng)用進(jìn)階

文章出處:【微信號:芯司機(jī),微信公眾號:芯司機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    【shell腳本進(jìn)階】幾個常用的shell進(jìn)階腳本

    【shell腳本進(jìn)階】幾個常用的shell進(jìn)階腳本
    的頭像 發(fā)表于 09-19 08:59 ?1926次閱讀
    【shell腳本<b class='flag-5'>進(jìn)階</b>】幾個常用的shell<b class='flag-5'>進(jìn)階</b>腳本

    負(fù)載點(diǎn)DC-DC轉(zhuǎn)換器解決電壓精度、效率和延遲問題

    為什么使用DC-DC轉(zhuǎn)換器應(yīng)盡可能靠近負(fù)載的負(fù)載點(diǎn)(POL)電源?
    發(fā)表于 11-26 14:14 ?7103次閱讀
    負(fù)載<b class='flag-5'>點(diǎn)</b><b class='flag-5'>DC-DC</b>轉(zhuǎn)換器解決電壓精度、效率和延遲問題

    選擇最佳的DC/DC轉(zhuǎn)換器的大秘訣

    為1.5V或更高,因此適合于至少有兩節(jié)電池的應(yīng)用。最佳選擇是:電感式DC/DC變換器。、產(chǎn)生的噪聲①電感式DC/DC轉(zhuǎn)換器:電感式
    發(fā)表于 03-25 16:31

    負(fù)載點(diǎn)DC/DC電源模塊

    一個新的選擇:負(fù)載點(diǎn)DC/DC電源模塊。這些模塊結(jié)合了實(shí)現(xiàn)即插即用(plug-and-play)解決方案所需的大部分或全部組件,可以取代多達(dá)40個不同的組件。這樣就簡化了集成并加速了設(shè)計,同時可減少
    發(fā)表于 05-13 14:11

    編程實(shí)戰(zhàn)!C++快遞入門與進(jìn)階!

    論壇VIP(5個)、課程優(yōu)惠卷(8張)幫助你更快進(jìn)階!更有實(shí)物獎勵十周年文化衫(3件)和相關(guān)書籍(5本 )!現(xiàn)在凡是報名本次直播課程,掃下方二維碼進(jìn)群,在朋友圈轉(zhuǎn)發(fā)本次直播的海報,保留四小時以上,便可
    發(fā)表于 08-09 16:21

    電源發(fā)展的點(diǎn)概念介紹

    電源發(fā)展的點(diǎn)概念
    發(fā)表于 02-25 08:08

    關(guān)于單片機(jī)串口編程進(jìn)階的知識點(diǎn)不看肯定后悔

    關(guān)于單片機(jī)串口編程進(jìn)階的知識點(diǎn)不看肯定后悔
    發(fā)表于 06-16 09:00

    【直播回顧】Hello HarmonyOS進(jìn)階課程第課——原子化服務(wù)

    由HDE李洋老師主講的Hello HarmonyOS進(jìn)階系列應(yīng)用篇第課《原子化服務(wù)》, 已于6月1日晚上 19 點(diǎn)在HarmonyOS社群內(nèi)成功舉行。本節(jié)課李洋老師帶領(lǐng)大家了解HarmonyOS
    發(fā)表于 06-02 11:42

    黑客攻防入門與進(jìn)階ddd

    黑客攻防入門與進(jìn)階ddd黑客攻防入門與進(jìn)階ddd
    發(fā)表于 02-23 15:45 ?9次下載

    vi/vim使用進(jìn)階

    vi/vim使用進(jìn)階
    發(fā)表于 10-29 11:00 ?28次下載
    vi/vim使用<b class='flag-5'>進(jìn)階</b>

    FPGA進(jìn)階教程:DDS的設(shè)計與實(shí)現(xiàn)

    小梅哥:FPGA進(jìn)階教程
    的頭像 發(fā)表于 08-30 06:01 ?3027次閱讀
    FPGA<b class='flag-5'>進(jìn)階</b>教程:DDS的設(shè)計與實(shí)現(xiàn)

    Verilog語法進(jìn)階

    Verilog語法進(jìn)階說明。
    發(fā)表于 05-06 16:14 ?30次下載

    10大法則助你輕松搞定DC/DC電源轉(zhuǎn)換方案

    10大法則助你輕松搞定DC/DC電源轉(zhuǎn)換方案。
    發(fā)表于 06-03 16:33 ?7次下載

    點(diǎn)云濾波與匹配進(jìn)階干貨收藏

    之前作者專門為點(diǎn)云匹配寫了幾篇博客,但是我們發(fā)現(xiàn)最近幾年有更多的新方法已經(jīng)在不斷地被使用。 同時之前有些內(nèi)容也沒有很好的概括,所以這里我們將作為一篇進(jìn)階文章來介紹這些方法的使用。
    的頭像 發(fā)表于 11-06 11:03 ?849次閱讀

    RK3568驅(qū)動指南|驅(qū)動基礎(chǔ)進(jìn)階篇-進(jìn)階8 內(nèi)核運(yùn)行ko文件總結(jié)

    RK3568驅(qū)動指南|驅(qū)動基礎(chǔ)進(jìn)階篇-進(jìn)階8 內(nèi)核運(yùn)行ko文件總結(jié)
    的頭像 發(fā)表于 01-31 14:58 ?1189次閱讀
    RK3568驅(qū)動指南|驅(qū)動基礎(chǔ)<b class='flag-5'>進(jìn)階</b>篇-<b class='flag-5'>進(jìn)階</b>8 內(nèi)核運(yùn)行ko文件總結(jié)