引言
之前在《一文讓你理解DC綜合全過(guò)程!》中,和大家分享了DC映射和優(yōu)化流程,接下來(lái)本文針對(duì)如何寫(xiě)DC綜合腳本提出五點(diǎn)建議。如果您是DC新手,那么您會(huì)發(fā)現(xiàn)這幾點(diǎn)建議很是實(shí)用;如果您是DC老手,由于工具版本的更新,可能增加了您未曾注意的功能,希望本文的分享能對(duì)您有所幫助。
一 、使用set_auto_disable_drc_nets命令使時(shí)鐘網(wǎng)絡(luò)免于設(shè)計(jì)規(guī)則檢查
DC會(huì)自動(dòng)通過(guò)插入 buffer或者 resizing單元的方式進(jìn)行設(shè)計(jì)規(guī)則違例修正,不過(guò)時(shí)鐘常值和scan是比較特殊的net,綜合人員可以使用set_auto_disable_drc_nets命令來(lái)聲明不對(duì)這些特殊nets進(jìn)行設(shè)計(jì)規(guī)則違例修正。-default為默認(rèn)選項(xiàng),默認(rèn)情況下時(shí)鐘和常值是被disable的,不過(guò)scan并未disable,可以使用該命令帶-all選項(xiàng),將三者都 disable,或者分別帶-on_clock_network、-constant和-scan來(lái)分別設(shè)置。需要說(shuō)明的是-clock和-on_clock_network 有些差別,建議使用-on_clock_network,具體差別如圖1所示,虛線是被disable的時(shí)鐘線,-clock保證了對(duì)連接到觸發(fā)器的時(shí)鐘線,不會(huì)進(jìn)行DRC檢查,-on_clock_network是對(duì)時(shí)鐘網(wǎng)絡(luò)disable DRC,經(jīng)過(guò)組合邏輯再供給到觸發(fā)的時(shí)鐘也不會(huì)被DRC檢查
圖 1
二 、使用set_clock_groups命令來(lái)約束多時(shí)鐘設(shè)計(jì)
基本所有的多時(shí)鐘設(shè)計(jì)中都有時(shí)鐘切換電路,兩個(gè)或者多個(gè)時(shí)鐘輸入到時(shí)鐘切換模塊,輸出被選擇的一個(gè)時(shí)鐘。時(shí)鐘切換電路的電路結(jié)構(gòu)在《你不可不知的——時(shí)鐘切換電路》中做了詳細(xì)介紹,需知DC中時(shí)鐘屬性是可以穿過(guò)任何組合邏輯的,假設(shè)在時(shí)鐘切換模塊前已經(jīng)用create_clock聲明了兩個(gè)時(shí)鐘,這兩個(gè)時(shí)鐘經(jīng)過(guò)時(shí)鐘切換模塊時(shí)穿過(guò)的都是組合單元,那么該模塊的輸出端口也是有兩個(gè)時(shí)鐘穿過(guò)的。面對(duì)這種情況,傳統(tǒng)的做法是使用set_case_analysis來(lái)做功能選擇,比如用于測(cè)試的掃描時(shí)鐘和功能時(shí)鐘間的切換,這一命令就很有效。但是面對(duì)如圖2所示的情況,使用set_case_analysis命令,便人為的選定了自認(rèn)為時(shí)序最緊的情況,比如在CLK1和CLK2中選擇了頻率更高的CLK1,在CLK3和CLK4中選擇了頻率更高的CLK3,但是可能實(shí)際上CLK1到CLK4比CLK1到CLK3時(shí)序更緊張。這時(shí),使用如下命令,只告訴DC時(shí)鐘間的關(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
方式一和方式二的作用等價(jià),但顯然,使用set_clock_groups命令來(lái)描述時(shí)鐘關(guān)系的方式二更簡(jiǎn)便。其實(shí),除了選項(xiàng)–logically_exclusive,該命令還可以帶-phsically_exclusive和-asynchronous選項(xiàng),這三個(gè)選項(xiàng)都可以表述聲明的時(shí)鐘組間的時(shí)序路徑間是沒(méi)有約束檢查的。不同點(diǎn)在于: 1)-asynchronous選項(xiàng)表示聲明的時(shí)鐘組的組間關(guān)系是異步的,異步關(guān)系的時(shí)鐘在芯片正常工作時(shí)物理上是可以同時(shí)存在的; 2)–logically_exclusive和-phsically_exclusive選項(xiàng)在DC中作用是相同的,–logically_exclusive選項(xiàng)表示的是聲明的時(shí)鐘組的組間關(guān)系是邏輯獨(dú)立、物理可共存的,而-phsically_exclusive選項(xiàng)表示的是聲明的時(shí)鐘組的組間關(guān)系是物理獨(dú)立的,如圖2所示,沒(méi)有信號(hào)是跨CLK1傳遞到CLK2域的,但是CLK1和CLK2是在電路中共存的。這點(diǎn)不同在PT做信號(hào)完整性分析時(shí)是有影響的,-phsically_exclusive較–logically_exclusive樂(lè)觀,而-asynchronous最悲觀。
圖2
另外,set_clock_groups只帶一個(gè)-group選項(xiàng)的用法也很常見(jiàn),比如:set_clock_groups–phsically_exclusive –group scan_clk,這表示DFT掃描測(cè)試時(shí)鐘scan_clk與其他所有時(shí)鐘物理上不共存。其實(shí)掃描時(shí)鐘和功能時(shí)鐘的關(guān)系也是異步的,而使用-asynchronous選項(xiàng)對(duì)PT的影響要比實(shí)際悲觀,故而對(duì)于既是物理互斥也是異步的情況,應(yīng)使用選項(xiàng)-phsically_exclusive。事實(shí)上,圖2示例的時(shí)鐘數(shù)目少、電路結(jié)構(gòu)簡(jiǎn)單,而實(shí)際電路中時(shí)鐘選擇和電路結(jié)構(gòu)復(fù)雜的多,這時(shí)候使用命令set_clock_groups描述時(shí)鐘關(guān)系,優(yōu)勢(shì)更為明顯。事實(shí)上,掃描模式與功能模式不同時(shí)存在,且時(shí)鐘頻率差距甚大,掃描時(shí)鐘與功能時(shí)鐘的切換使用命令 set case analysis足以。
對(duì)圖2進(jìn)一步分析,時(shí)鐘切換電路U1前有兩個(gè)時(shí)鐘CLK1和CLK2,圖中沒(méi)有信號(hào)跨越這兩個(gè)時(shí)鐘域,那么這兩個(gè)時(shí)鐘是邏輯獨(dú)立、物理共存的。那如果有信號(hào)跨越這兩個(gè)時(shí)鐘域傳輸?shù)脑挘珻LK1和CLK2便不再是邏輯獨(dú)立的了,可是U1的輸出端口Z后的時(shí)鐘,仍然是物理獨(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
還有一種常見(jiàn)的情況是,時(shí)鐘經(jīng)過(guò)分頻模塊分出多個(gè)分頻時(shí)鐘,然后多個(gè)分頻時(shí)鐘經(jīng)過(guò)時(shí)鐘切換電路選擇輸出,而且分頻電路中常有小數(shù)分頻,比如1.5分頻,且如果有信號(hào)從1.5分頻時(shí)鐘域傳到未分頻的時(shí)鐘域,這時(shí)候最緊的時(shí)鐘約束應(yīng)是半個(gè)時(shí)鐘周期,那么綜合人員需要跟設(shè)計(jì)人員確認(rèn)電路中絕無(wú)這種工作情況的可能,才能使用set_case_analysis來(lái)選擇未分頻時(shí)鐘對(duì)后續(xù)電路約束。而電路是多個(gè)設(shè)計(jì)人員分別對(duì)各自模塊設(shè)計(jì)的,假設(shè)和溝通常常容易出錯(cuò),這時(shí)候如果在分頻模塊的輸出端口產(chǎn)生兩個(gè)物理獨(dú)立的generated時(shí)鐘,那么DC工具會(huì)給出分析結(jié)果。善用命令 set_clock_groups描述時(shí)鐘關(guān)系,優(yōu)勢(shì)確實(shí)很明顯。
三 、面對(duì)pad-limitted設(shè)計(jì),可調(diào)節(jié)變量placer_max_cell_density_threshold進(jìn)行迭代
現(xiàn)在 synopsys建議使用SPG流程,該流程和后端有更好的匹配和關(guān)聯(lián)。如果綜合人員所面臨的設(shè)計(jì)是 pad-limitted,那么在第二次綜合流程中可以聲明一個(gè)最小單元密度,這讓 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 會(huì)略過(guò)這一步驟,可以不在ICC中做同樣的命令設(shè)置。如果不對(duì)placer_ max_cell_density_threshold設(shè)置,DC默認(rèn)其為50%,在執(zhí)行了compile_ultra命令后,DC會(huì)對(duì)這個(gè)值重新計(jì)算,并將重新計(jì)算的值覆蓋默認(rèn)值。綜合人員可以查看這個(gè)值,并可以將這個(gè)值設(shè)置為重新計(jì)算值和1之間的中間值,進(jìn)而指導(dǎo)DC下一次綜合。
四、盡量使用高閾值電壓庫(kù)綜合,時(shí)序?qū)嵲跓o(wú)法收斂時(shí),使用多閾值電壓庫(kù)來(lái)綜合
泄露功耗與工藝和閾值電壓有關(guān),閾值電壓越大,泄露功耗越低,但是器件速度越慢。DC EXPERT 需要通過(guò)命令set_leakage_optimization true 聲明,而DC Ultra會(huì)自動(dòng)進(jìn)行泄露功耗優(yōu)化,為了不影響時(shí)序性能,DC會(huì)默認(rèn)對(duì)非關(guān)鍵路徑進(jìn)行功耗優(yōu)化。若采用了多閾值電壓庫(kù),DC 會(huì)自動(dòng)對(duì)非關(guān)鍵時(shí)序路徑,用高閾值電壓?jiǎn)卧鎿Q低閾值電壓?jiǎn)卧?;綜合人員可以使用set_multi_vth_constraint 命令來(lái)聲明設(shè)計(jì)所允許使用的低閾值電壓?jiǎn)卧陌俜直?,并通過(guò)從5%到10%,開(kāi)始逐步提升低閾值電壓?jiǎn)卧及俜直?,直到時(shí)序符合要求為止。在使用命令set_multi_vth_constraint時(shí),帶-type soft選項(xiàng),DC會(huì)在保證時(shí)序的前提下,進(jìn)行功行功耗優(yōu)化;另外,在計(jì)算低閾值電壓?jiǎn)卧及俜直鹊臅r(shí)候,并沒(méi)有算進(jìn)黑盒子,如果欲將黑盒子也算進(jìn)來(lái),使用-include_blackboxes選項(xiàng)。 一般工藝廠提供的工藝庫(kù)都是已經(jīng)根據(jù)閾值電壓的不同對(duì)庫(kù)單元進(jìn)行了分組的,如果沒(méi)有分組的話,多閾值電壓庫(kù)可以使用set_attribute命令對(duì)庫(kù)屬性進(jìn)行設(shè)置,從而將多閾值電壓庫(kù)中的不同單元根據(jù)閾值電壓的不同進(jìn)行分組。
Library-level attribute: defaultthreshold voltage_group:string; Library-cell-level attributestring; 綜合人員可以使用analyze_library–multi_vth 命令來(lái)獲得各個(gè)閾值電壓組的時(shí)序和泄露功耗信息。綜合完成后,可以使用report_threshhold_voltage_group 命令,報(bào)告設(shè)計(jì)中低閾值電壓?jiǎn)卧急惹闆r。
五、使用set_app_var compile_timing_high_effort true 命令獲得更好的時(shí)序QoR
在第二次綜合時(shí)使用compile_ultra –timing_high_effort_script 是大家很熟悉的方式了,不過(guò)其中的開(kāi)關(guān)選項(xiàng)-timing_high_effort_script目前在DC 優(yōu)化過(guò)程中已經(jīng)不起作用了,若希望DC 花費(fèi)更多資源在時(shí)序優(yōu)化上,那么可使用命令set_app_var compile_timing_high_effort true來(lái)獲得更好的時(shí)序QoR。需要說(shuō)明的是,該變量的設(shè)置只在Design compiler topographical模式下有效,即需要用compile_ultra -spg 命令進(jìn)行綜合優(yōu)化。
以上幾點(diǎn)純是個(gè)人建議,寫(xiě)DC腳本的最終目的是設(shè)置合理的約束來(lái)指導(dǎo)DC更好的優(yōu)化電路,每個(gè)人都有自己的習(xí)慣和綜合策略,歡迎大家多多交流心得體會(huì)。
審核編輯:湯梓紅
-
時(shí)鐘
+關(guān)注
關(guān)注
11文章
1900瀏覽量
133200 -
DC
+關(guān)注
關(guān)注
10文章
3684瀏覽量
681874 -
觸發(fā)器
+關(guān)注
關(guān)注
14文章
2039瀏覽量
62135 -
切換電路
+關(guān)注
關(guān)注
0文章
30瀏覽量
9602
原文標(biāo)題:五點(diǎn)Tips助你DC應(yīng)用進(jìn)階
文章出處:【微信號(hào):芯司機(jī),微信公眾號(hào):芯司機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
負(fù)載點(diǎn)DC-DC轉(zhuǎn)換器解決電壓精度、效率和延遲問(wèn)題

Altium Designer PCB設(shè)計(jì)高級(jí)進(jìn)階
選擇最佳的DC/DC轉(zhuǎn)換器的五大秘訣
負(fù)載點(diǎn)DC/DC電源模塊
編程實(shí)戰(zhàn)!C++快遞入門與進(jìn)階!
關(guān)于單片機(jī)串口編程進(jìn)階的知識(shí)點(diǎn)不看肯定后悔
【直播回顧】Hello HarmonyOS進(jìn)階課程第五課——原子化服務(wù)
點(diǎn)云濾波與匹配進(jìn)階干貨收藏
RK3568驅(qū)動(dòng)指南|驅(qū)動(dòng)基礎(chǔ)進(jìn)階篇-進(jìn)階8 內(nèi)核運(yùn)行ko文件總結(jié)

評(píng)論