創(chuàng)建時鐘
使用SDC命令create_clock創(chuàng)建時鐘,時鐘周期20,占空比50%的時鐘信號;
create_clock-nameCLK-period20[get_portsCLK]-waveform{07}
-waveform 時鐘占空比,不指定該選項,則時鐘默認(rèn)占空比為50%
生成時鐘
生成時鐘:是基于一個主時鐘并通過相關(guān)邏輯轉(zhuǎn)換后,在相位,頻率,占空比等方面和主時鐘有一定變化的分支時鐘;
生成時鐘的時鐘源來自主時鐘,其相位參考主時鐘;
生成時鐘可以通過以下方式生成:
時鐘分頻
時鐘倍頻
時鐘門控
通過SDC命令 create_generated_clock 來定義生成時鐘:
create_generated_clock-nameclk_gen-source[get_portsCLK][get_pins{DFF/Q}]-divide_by3
-source 設(shè)定生成時鐘的源引腳
divide_by 3 :3分頻
divide_by:表示生成時鐘通過分頻生成;
multiply_by :表示生成時鐘通過倍頻生成;
edges: 占空比設(shè)置
生成時鐘
可對生成時鐘占空比進(jìn)行設(shè)置:
占空比進(jìn)行設(shè)置
create_generated_clock-nameCLK_LSB-source[get_portsCLK][get_pins{DFF/Q}]-edges{135} create_generated_clock-nameCLK_LSB-source[get_portsCLK][get_pins{DFF/Q}]-edges{159}
分頻器由源時鐘下降沿觸發(fā):
源時鐘下降沿觸發(fā)
create_generated_clock-nameGCLK3-source[get_portsCLK][get_pins{DFF/Q}]-edges{246} create_generated_clock-nameGCLK4-source[get_portsCLK][get_pins{DFF/Q}]-edges{468}
虛擬時鐘
虛擬時鐘即設(shè)計中不存在的時鐘,定義虛擬時鐘應(yīng)滿足:
設(shè)計中的某個時鐘實際存在,但其時鐘源不是來自設(shè)計中任何引腳和端口;
由于虛擬時鐘和設(shè)計中的任何引腳和端口無直接關(guān)系,故定義虛擬時鐘時并不指定時鐘端口;
虛擬時鐘用于作為輸入輸出端口延時約束的時鐘源;
通過SDC命令創(chuàng)建虛擬時鐘:
create_clock-nameVIRTUAL_CLK-period10-waveform{05}
IO端口延遲
輸入延遲:在一個時鐘周期內(nèi),外部邏輯的輸出數(shù)據(jù)到達(dá)設(shè)計輸入端口所需的時間;
輸出延遲:在一個時鐘周期內(nèi),設(shè)計輸出端口數(shù)據(jù)到達(dá)外部邏輯所需的時間;
通過SDC命令set_input_delay在輸入端口指定延遲;
set_input_delay-clockCLK1.2[get_ports{IO}]
set_input_delay-max-add_delay-clock[get_clocks{CLK}]15[get_ports{IO}] set_input_delay-min-add_delay-clock[get_clocks{CLK}]15[get_ports{IO}]
-add_delay:通知工具除了現(xiàn)存的約束外,這是一個額外的約束,不會覆蓋前一個約束;如果沒有-add_delay,那么后面的約束會覆蓋前面的約束。
通過SDC命令set_output_delay在輸出端口指定延遲;
set_output_delay-max-add_delay-clock[get_clocks{CLK}]15[get_ports{IO}] set_output_delay-min-add_delay-clock[get_clocks{CLK}]15[get_ports{IO}]
負(fù)延遲:
下面值可能是負(fù)值:set_input_delay -max
set_input_delay -min
set_output_delay -max
set_output_delay -min
時鐘分組
同步時鐘:時鐘存在固定的相位關(guān)系,來自同一個時鐘源;異步時鐘:不存在固定的相位關(guān)系;
為了讓時序工具忽略異步時鐘之間的時序路徑或串?dāng)_分析,SDC提供了set_clock_groups命令,表明時鐘組之間的時序路徑不必考慮;
set_clock_groups-name{clk_group1}-group{GCCK}-group{RCLK}
-asynchronous:時鐘彼此不共享相位關(guān)系時可使用;
例:
set_clock_groups-name{clk_group1}-group[get_clocks{CCK1CLK2CLK3}]-group[get_clocks{CCK4CLK5CLK6}]
表示:CLK1,CLK2,CLK3分別異步于CLK4,CLK5,CLK6;
偽路徑
不需要做時序分析的時序路徑,可以通過偽路徑忽略該路徑,使得工具對該路徑不進(jìn)行時序分析;
set_false_path-from[get_clocksCLK1]-to[get_clocksCLK2]
定義兩個時鐘域CLK1和CLK2之間的路徑為偽路徑;
set_false_path-through[get_pinsX1]-through[get_pinsX2]
定義按X1->X2的順序通過X1 X2引腳的路徑為偽路徑;
-from,-to,-through指定false的路徑;
-from X1 -to X2:表示從起點X1到終點X2的路徑;
多周期路徑
多周期路徑,存在時序路徑較長或者信號在延時等于幾個時鐘周期的時間,如果仍然按照單周期進(jìn)行約束,可能會出現(xiàn)時序違例,如下圖所示:
通過SDC命令set_multicycle_path:
set_multicycle_path-from[get_pinsDFF1/Q]-to[get_clocksDFF2/D]-setup5 set_multicycle_path-from[get_pinsDFF1/Q]-to[get_clocksDFF2/D]-hold4
-setup和-hold成對出現(xiàn);
保持時間比建立時間少一個周期;
最大最小延遲
當(dāng)需要點對點對某些路徑進(jìn)行約束時,可通過最大最小延遲實現(xiàn);
異步電路之間
輸入信號直接通過組合邏輯后輸出
當(dāng)約束定義的是時序路徑中的節(jié)點時,則約束的僅在兩個節(jié)點之間;
set_max_delay-from[get_portsA1]-to[get_portsA2]8 set_min_delay-from[get_portsA1]-to[get_portsA2]5
上述定義A1到A2之間的時序路徑的約束最大延時8ns最小延時6ns;
當(dāng)約束定義是時鐘時,最大最小延時將應(yīng)用于該時鐘源所控制的所有路徑;
set_max_delay-from[get_clocksCLK1]-to[get_clocksCLK2]8 set_min_delay-from[get_clocksCLK1]-to[get_clocksCLK2]5
上述定義從時鐘域CLK1到CLK2之間的所有時序路徑的約束最大延時為8ns,最小延時為6ns;
IO環(huán)境建模
輸入驅(qū)動建模:默認(rèn)情況下,如果沒有設(shè)置外部輸入驅(qū)動,時序分析工具則默認(rèn)外部輸入驅(qū)動為無窮大;
推薦查看:綜合對象及環(huán)境屬性
1.set_drive
設(shè)置外部輸入驅(qū)動信息,通過該命令定義驅(qū)動該引腳的輸入驅(qū)動電阻值,通過該驅(qū)動電阻值計算出驅(qū)動端的轉(zhuǎn)換時間,并計入時序路徑延時信息;
當(dāng)定義為0時,代表輸入端驅(qū)動力為無窮大;
set_drive0[get_portsCLK]
上述定義CLK輸入的驅(qū)動值為無窮大;
set_drive-rise0.4[all_inputs] set_drive-fall0.3[all_inputs]
上述命令定義所有輸入的驅(qū)動值,上拉驅(qū)動電阻為0.4,下拉驅(qū)動電阻為0.3;
-min指定最小電阻,用于保持時間分析;
-max指定最大電阻,用于建立時間分析;
如果不指定-max和-min,那么指定的值既用于建立時間分析,也用于保持時間分析;
2.set_driving_cell
指定驅(qū)動單元
set_driving_cell-lib_cellINVX1M[all_inputs]
上述命令定義設(shè)計所有驅(qū)動力等價于單元庫中INVX1M單元的驅(qū)動力;
-lib_cell:指定驅(qū)動引腳的單元;
3.set_input_transition
通過set_input_transition 定義驅(qū)動該引腳的輸入驅(qū)動端轉(zhuǎn)換時間,設(shè)置的轉(zhuǎn)換時間越大驅(qū)動力越小,當(dāng)定義為0時,其代表輸入端驅(qū)動力無窮大;
輸出負(fù)載建模:默認(rèn)情況下,如果沒有設(shè)置外部輸出負(fù)載,時序分析工具則默認(rèn)外部輸出負(fù)載為0;
1.輸出負(fù)載可通過SDC命令set_load,定義外部負(fù)載為一個等效電容,其電容值即為負(fù)載值(指定的是負(fù)載的實際電容值);
set_load10[all_outputs] set_load[expr[load_of$LIB_NAME/AND2X1M/A]*3][all_outputs]
上述命令定義所有輸出負(fù)載等效為庫中與門AND2X1M的引腳A的電容值的3倍;
負(fù)載類型:-pin_load,-wire_load可以指定負(fù)載類型是引腳負(fù)載還是線負(fù)載;
2.set_port_fanout_number value port_list
指定輸出的扇出數(shù)(如果已知外部寄生負(fù)載并且已經(jīng)通過set_load指定了外部寄生負(fù)載,則這個命令沒有具體含義)
3.set_fanout_load value port_list
指定扇出負(fù)載(根據(jù)標(biāo)準(zhǔn)負(fù)載指定負(fù)載值)
其他時鐘特性
1.時鐘轉(zhuǎn)換時間:
時鐘在高低電平狀態(tài)下切換所需要的延時;
通過SCD命令 set_clock_transition 來定義時鐘轉(zhuǎn)換延時;
-rise 提供時鐘上升沿的轉(zhuǎn)換時間;
-fall 提供時鐘下降沿的轉(zhuǎn)換時間;
-max和-min 設(shè)置轉(zhuǎn)換時間的最大最小條件;
set_clock_transition-rise0.2[get_clocksCLK] set_clock_transition-fall-min0.2[get_clocksCLK] set_clock_transition-fall-max0.4[get_clocksCLK]
該命令僅用于預(yù)布局階段,即時鐘樹綜合完成之前,再時鐘樹生成之后,該命令不應(yīng)用于任何的后布局時序分析;
2.時鐘不確定性
實際時鐘本身與理想時鐘存在一定的差異,比如時鐘抖動,時鐘偏斜等因素;
時鐘偏斜:時鐘到達(dá)不同觸發(fā)器時間差異;
時鐘抖動:時鐘周期的不良偏差;
如上圖,時鐘到達(dá)P4時間為1.3ns,到達(dá)P3時間為1.2ns,那么不確定性延時為1.3-1.2=0.1ns;
通過SDC命令set_clock_uncertainty 可將時鐘偏斜和抖動模型化;
set_clock_uncertainty0.5[get_clocksCLK1] set_clock_uncertainty-setup0.5[get_clocksCLK2] set_clock_uncertainty-hold0.2[get_clocksCLK2]
以上時鐘不確定性為建立時間0.5ns,保持時間0.2ns;如下圖所示:
不同時鐘的不確定性
對于不同時鐘不確定度建模時,源時鐘可用-form,目的時鐘可用-to;
#C1到C2的建立時間和保持時間不確定度 set_clock_uncertainty-fromC1toC2-setup0.5 set_clock_uncertainty-fromC1toC2-hold0.5 #C1上升沿到C2下降沿的不確定度 set_clock_uncertainty-rise_fromC1fall_toC20.5 #C1和C2之間的不確定度 set_clock_uncertainty-fromC1toC20.5 set_clock_uncertainty-fromC2toC10.5
3.時鐘延遲
時鐘信號從時鐘源輸出端到達(dá)時序單元時鐘輸入端(如觸發(fā)器)所需要的時間,稱為時鐘延遲;
時鐘延遲包括源延遲和網(wǎng)絡(luò)延遲,源延遲是指源時鐘到達(dá)時鐘定義的端口的延遲;
網(wǎng)路延遲是指時鐘定義的端口到時序單元時鐘輸入端的延遲;
通過SDC命令set_clock_latency來定義時鐘延遲信息:
-source 設(shè)定源延遲:
set_clock_latency-source0.5[get_clocksC1]
set_clock_latency-source-early0.5[get_clocksC1] set_clock_latency-source-late1.0[get_clocksC1]
最長路徑的延遲可用-late,最短路徑的延遲可用-early。
或者:
set_clock_latency-source-min0.5[get_clocksC1] set_clock_latency-source-max1.0[get_clocksC1]
當(dāng)未設(shè)定-source時,表示網(wǎng)路延遲;
#上下降沿網(wǎng)路延遲 set_clock_latency0.5-rise[get_clocksC1] set_clock_latency0.3-fall[get_clocksC1]
時鐘網(wǎng)路延遲和時鐘源延遲區(qū)別:
時鐘網(wǎng)絡(luò)延遲是時鐘樹生成前的設(shè)置,當(dāng)實際時鐘樹生成后,時鐘網(wǎng)絡(luò)延遲將通過set_propagated_clock被時鐘樹的實際結(jié)果所替代;而時鐘源延遲則會一直存在。
模式分析
恒定狀態(tài)約束:
根據(jù)設(shè)計中不同模式的需要,通過設(shè)置恒定狀態(tài)約束來定義時鐘選擇端口的對應(yīng)狀態(tài)值,
在多個模式中選擇的時候,設(shè)定指定單一模式(相當(dāng)于mux選擇器);
通過SDC命令set_case_analysis定義恒定狀態(tài)約束;
如上圖,假如CLK_SEL為0時,選擇PLLdiv6_input,CLK_SEL為1時,選擇PLLdiv2_input,則可設(shè)
set_case_analysis0[get_pins{mux.CLK_SEL}]
上述定義模式端口mux.CLK_SEL恒定狀態(tài)為0;
可以是0,1,rising,falling
其他SDC命令
指定工作條件和要執(zhí)行分析類型:
set_operaing_conditions-maxss_1v62_125c-libraryss_1v62_125c
指定相應(yīng)工作條件的庫(根據(jù)PVT溫度,電壓,工藝決定)
線負(fù)載模型:
set_wire_load_model-namesmic18_wl10-libraryss_1v62_125c
屏蔽時序弧:
set_disable_timing-fromS-toZ[get_cellsMUX]
上述命令屏蔽選擇器單元MUX中從S端到Z端的時序?。?/p>
最大轉(zhuǎn)換時間:
set_max_transition0.8[all_outputs]
上述命令定義所有輸出驅(qū)動最大轉(zhuǎn)換時間為0.8ns;
最大電容負(fù)載:
set_max_capacitance0.6[all_outputs]
上述命令定義所有輸出驅(qū)動最大電容負(fù)載為0.6pF;
最大扇出:
set_max_fanout15[all_outputs]
上述命令定義所有輸出驅(qū)動最大扇出為15;
附:SDC命令
SDC約束分為:
時序約束
面積與功率約束
設(shè)計規(guī)則約束
接口約束
特定模式和配置約束
設(shè)計要求的異常
其他命令
時序約束
命令包括指定時鐘特性,端口延遲,引腳和路徑命令;
create_clock
create_generated_clock
set_clock_groups
set_clock_uncertainty
set_clock_latency
set_clock_transition
set_input_delay
set_output_delay
set_propagated_clock
set_clock_gating_check
set_ideal_latency
set_ideal_network
set_ideal_transition
set_max_time_borrow
set_resistance
set_time_derate
set_data_check
group_path
set_load
set_drive
set_input_transiton
set_fanout_load
面積與功率約束
set_max_area
create_valtage_area
set_level_shifter_threshold
set_level_shifter_strategy
set_max_dynamic_power
set_max_leakage_power
設(shè)計規(guī)則約束
set_max_transition
set_max_capacitance
set_min_capacitance
set_max_fanout
接口約束
set_load
set_drive
set_driving_cell
set_fanout_load
set_port_fanout_numberset_input_transitionset_input_delay
set_output_delay
特定模式和配置約束
set_case_analysis
set_logic_dc
set_logic_zero
set_logic_one
時序例外
set_false_path
set_multicycle_path
set_max_delay
set_min_delay
set_disable_timing
其他命令
set_wire_load_model
set_wire_load_mode
set_wire_load_selection_group
set_wire_load_min_block_size
set_units
set_operating_condition
sdc_version
SDC查詢命令
get_cells
get_ports
get_pins
get_nets
get_clocks
all_inputs
all_output
all_registers
all_clocks
get_libs
get_lib_cells
get_lib_pins
current_design
審核編輯:劉清
-
分頻器
+關(guān)注
關(guān)注
43文章
447瀏覽量
49752 -
SDC
+關(guān)注
關(guān)注
0文章
48瀏覽量
15518 -
時鐘信號
+關(guān)注
關(guān)注
4文章
442瀏覽量
28490 -
CLK
+關(guān)注
關(guān)注
0文章
127瀏覽量
17104
原文標(biāo)題:一文了解下SDC約束怎么寫
文章出處:【微信號:處芯積律,微信公眾號:處芯積律】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論