Logic Synthisis on EDA cloud === 這篇將說明在EDA cloud上是如何執行合成,會將所有commend集合在tcl檔一次執行,若要看Design Compiler的GUI介面如何使用的話可看[這篇](https://hackmd.io/@linda8832825/SkrgdRId2)。 在合成階段需要考慮multi-Vt的使用與否,我在合成階段做了兩個版本,分別是lvt+hvt與單獨lvt,若單使用lvt可以有更高的工作頻率但也有更高的功耗,而只使用hvt則相反,工作頻率與功耗皆較低,multi-Vt可以有最好的表現。 以下會介紹需要準備的檔案與執行方式以及結果的除錯,並且會將準備的檔案分成"multi-Vt"與"lvt"做介紹。 db file --- 在下一步要將使用到的db檔加入setup檔,若有使用到SRAM需先產db檔,方法可參照[這篇](https://hackmd.io/@linda8832825/H1l8PHS1C#SYN-Level)。 .synopsys_dc.setup file --- 這個檔案稱之為setup檔,用來設置環境變數、定義資料庫路徑和設計工具參數等等,之後的階段也都會使用到這個檔案。 * multi-Vt ```=setup= set company "CIC" set designer "Student" set search_path "/cad/CBDK/CBDK_TN40G_Arm/CBDK_TSMC40_core_Arm_v2.0/CIC/SynopsysDC/db/sc9_base_hvt/ \ /cad/CBDK/CBDK_TN40G_Arm/CBDK_TSMC40_core_Arm_v2.0/CIC/SynopsysDC/db/sc9_base_lvt/ \ /project/dr390/pc19/UuT/MEM/112 \ /project/dr390/pc19/UuT/MEM/128 $search_path " set target_library "sc9_cln40g_base_hvt_ffg_typical_min_0p99v_125c.db \ sc9_cln40g_base_hvt_ff_typical_min_0p99v_125c.db \ sc9_cln40g_base_hvt_ff_typical_min_0p99v_m40c.db \ sc9_cln40g_base_hvt_ss_typical_max_0p81v_125c.db \ sc9_cln40g_base_hvt_ss_typical_max_0p81v_m40c.db \ sc9_cln40g_base_hvt_tt_typical_max_0p90v_25c.db \ sc9_cln40g_base_lvt_ffg_typical_min_0p99v_125c.db \ sc9_cln40g_base_lvt_ff_typical_min_0p99v_125c.db \ sc9_cln40g_base_lvt_ff_typical_min_0p99v_m40c.db \ sc9_cln40g_base_lvt_ss_typical_max_0p81v_125c.db \ sc9_cln40g_base_lvt_ss_typical_max_0p81v_m40c.db \ sc9_cln40g_base_lvt_tt_typical_max_0p90v_25c.db \ sram_112_ffg.db \ sram_112_ss.db \ sram_128_ffg.db \ sram_128_ss.db" set link_library "* $target_library dw_foundation.sldb" set synthetic_library "dw_foundation.sldb" set verilogout_no_tri true set hdlin_translate_off_skip_text "TRUE" set sh_enable_line_editing turn history keep 100 alias h history ``` * lvt ```=setup= set company "CIC" set designer "Student" set search_path "/cad/CBDK/CBDK_TN40G_Arm/CBDK_TSMC40_core_Arm_v2.0/CIC/SynopsysDC/db/sc9_base_lvt/ \ /project/dr390/pc19/UuT/MEM/112 \ /project/dr390/pc19/UuT/MEM/128 $search_path " set target_library "sc9_cln40g_base_lvt_ffg_typical_min_0p99v_125c.db \ sc9_cln40g_base_lvt_ff_typical_min_0p99v_125c.db \ sc9_cln40g_base_lvt_ff_typical_min_0p99v_m40c.db \ sc9_cln40g_base_lvt_ss_typical_max_0p81v_125c.db \ sc9_cln40g_base_lvt_ss_typical_max_0p81v_m40c.db \ sc9_cln40g_base_lvt_tt_typical_max_0p90v_25c.db \ sram_112_ffg.db \ sram_112_ss.db \ sram_128_ffg.db \ sram_128_ss.db" set link_library "* $target_library dw_foundation.sldb" set synthetic_library "dw_foundation.sldb" set verilogout_no_tri true set hdlin_translate_off_skip_text "TRUE" set sh_enable_line_editing turn history keep 100 alias h history ``` DC_script.tcl file --- * multi-Vt 下圖17行為fanout的邏輯閘數超過20個就拆開做訊號加強。 下圖的23、24行為input delay與output delay,保留的時間很短不太好,若晶片要實際下線需要再多保留多一點。  * lvt lvt這版因為後續沒有使用他做apr,所以不會遇到timing問題,因此input delay與output delay給很緊。  run.tcl file --- 兩種vt設計都是使用相同的執行指令 `Rdc_shell -f DC_script.tcl | tee syn.log` syn.log file --- 在這個檔案裡包含所有DC_script.tcl從第一行執行到最後一行的經過,需要檢查library有無正確抓到、有無latch、有無Constraints下完後沒有回覆"1"的情況發生,若有則須修改完畢,然後主要會產生四個檔案。 * .ddc file : 後續須對合成後檔案做處理可以使用這個檔案開啟,就不用重新合成,像是後續繪製area breakdown就可以直接用dc開這個檔案 * .sdc file : 合成中所有下的Constraints會存在這裡 * .v file : 合成後的.v檔,用來做下一步的DFT或是APR * .sdf file : DC產生的各個gate的delay time,而net的delay是在apr才會產生,為下一步驟Gate-level Simulation所需使用的檔案 * area.log : 主要用來看total cell area * timing.log : 若最後的slack為負則須放寬clock period或是修改RTL timing.log file --- 如下圖path共分為四種: * in2reg (Path1) : input to register * reg2reg (Path2) : register to register * reg2out (Path3) : register to output * in2out (Path4) : input to output (不可以有這條,會在APR有很大的timing violation)  path1、path3大部分都是合成下的constraints,而path4是不能有的狀況,代表這個訊號穿越晶片卻沒做任何處理,會嚴重拖慢晶片的運作速度,所以剩下path2是可做修改的。 Path 1、2、3都能在後續的APR ECO掉但若能在這階段多修一點就修掉,你的晶片就能跑得更快。 timing.log是在合成完後第一個要檢查的檔案,slack必須為正值,可以看下圖這個範例,第一條黃線以上是critical path,可以針對這條路徑中的path2做改善,例如拆成兩個clk做之類的。  area.log file --- 這個檔案只需要看其中的Total cell area * Total cell area = Combination(組合) area + Noncombinational(循序) area + Macro area * Macro/Black Box area : SRAM的面積 * net interconnect area : 線的面積不要相信  area breakdown --- 這步驟是為了畫各個子電路或是SRAM在整體電路中的比例,如果前面步驟的dv已經關掉的話可以再重開DC後匯入ddc檔,輸入以下指令: ` report_area -hierarchy > area_sub.log ` 這行指令是為了看到更底層的子電路的面積,如下圖可以看到三個黃線的子電路的面積,將所有子電路以及SRAM的面積找出後可以畫圓餅圖。  畫出來的圓餅圖  --- :::danger 如果我有哪裡寫錯或是做不好的請告訴我 :woman-bowing: 完成之後小休一下回到前面進行[下一步](https://hackmd.io/dzfWsm7iQ6aeVqjeko-Hlg?both#Gate-Level-Simulation),你超棒的:facepunch: :::
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up