創(chuàng)建時(shí)鐘
使用SDC命令create_clock創(chuàng)建時(shí)鐘,時(shí)鐘周期20,占空比50%的時(shí)鐘信號;
create_clock-nameCLK-period20[get_portsCLK]-waveform{07}
-waveform 時(shí)鐘占空比,不指定該選項(xiàng),則時(shí)鐘默認(rèn)占空比為50%
生成時(shí)鐘
生成時(shí)鐘:是基于一個(gè)主時(shí)鐘并通過相關(guān)邏輯轉(zhuǎn)換后,在相位,頻率,占空比等方面和主時(shí)鐘有一定變化的分支時(shí)鐘;
生成時(shí)鐘的時(shí)鐘源來自主時(shí)鐘,其相位參考主時(shí)鐘;
生成時(shí)鐘可以通過以下方式生成:
時(shí)鐘分頻
時(shí)鐘倍頻
時(shí)鐘門控
通過SDC命令 create_generated_clock 來定義生成時(shí)鐘:
create_generated_clock-nameclk_gen-source[get_portsCLK][get_pins{DFF/Q}]-divide_by3
-source 設(shè)定生成時(shí)鐘的源引腳
divide_by 3 :3分頻
divide_by:表示生成時(shí)鐘通過分頻生成;
multiply_by :表示生成時(shí)鐘通過倍頻生成;
edges: 占空比設(shè)置
生成時(shí)鐘
可對生成時(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}
分頻器由源時(shí)鐘下降沿觸發(fā):
源時(shí)鐘下降沿觸發(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í)鐘
虛擬時(shí)鐘即設(shè)計(jì)中不存在的時(shí)鐘,定義虛擬時(shí)鐘應(yīng)滿足:
設(shè)計(jì)中的某個(gè)時(shí)鐘實(shí)際存在,但其時(shí)鐘源不是來自設(shè)計(jì)中任何引腳和端口;
由于虛擬時(shí)鐘和設(shè)計(jì)中的任何引腳和端口無直接關(guān)系,故定義虛擬時(shí)鐘時(shí)并不指定時(shí)鐘端口;
虛擬時(shí)鐘用于作為輸入輸出端口延時(shí)約束的時(shí)鐘源;
通過SDC命令創(chuàng)建虛擬時(shí)鐘:
create_clock-nameVIRTUAL_CLK-period10-waveform{05}
IO端口延遲
輸入延遲:在一個(gè)時(shí)鐘周期內(nèi),外部邏輯的輸出數(shù)據(jù)到達(dá)設(shè)計(jì)輸入端口所需的時(shí)間;
輸出延遲:在一個(gè)時(shí)鐘周期內(nèi),設(shè)計(jì)輸出端口數(shù)據(jù)到達(dá)外部邏輯所需的時(shí)間;
通過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)存的約束外,這是一個(gè)額外的約束,不會覆蓋前一個(gè)約束;如果沒有-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
時(shí)鐘分組
同步時(shí)鐘:時(shí)鐘存在固定的相位關(guān)系,來自同一個(gè)時(shí)鐘源;異步時(shí)鐘:不存在固定的相位關(guān)系;
為了讓時(shí)序工具忽略異步時(shí)鐘之間的時(shí)序路徑或串?dāng)_分析,SDC提供了set_clock_groups命令,表明時(shí)鐘組之間的時(shí)序路徑不必考慮;
set_clock_groups-name{clk_group1}-group{GCCK}-group{RCLK}
-asynchronous:時(shí)鐘彼此不共享相位關(guān)系時(shí)可使用;
例:
set_clock_groups-name{clk_group1}-group[get_clocks{CCK1CLK2CLK3}]-group[get_clocks{CCK4CLK5CLK6}]
表示:CLK1,CLK2,CLK3分別異步于CLK4,CLK5,CLK6;
偽路徑
不需要做時(shí)序分析的時(shí)序路徑,可以通過偽路徑忽略該路徑,使得工具對該路徑不進(jìn)行時(shí)序分析;
set_false_path-from[get_clocksCLK1]-to[get_clocksCLK2]
定義兩個(gè)時(shí)鐘域CLK1和CLK2之間的路徑為偽路徑;
set_false_path-through[get_pinsX1]-through[get_pinsX2]
定義按X1->X2的順序通過X1 X2引腳的路徑為偽路徑;
-from,-to,-through指定false的路徑;
-from X1 -to X2:表示從起點(diǎn)X1到終點(diǎn)X2的路徑;
多周期路徑
多周期路徑,存在時(shí)序路徑較長或者信號在延時(shí)等于幾個(gè)時(shí)鐘周期的時(shí)間,如果仍然按照單周期進(jìn)行約束,可能會出現(xiàn)時(shí)序違例,如下圖所示:
通過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);
保持時(shí)間比建立時(shí)間少一個(gè)周期;
最大最小延遲
當(dāng)需要點(diǎn)對點(diǎn)對某些路徑進(jìn)行約束時(shí),可通過最大最小延遲實(shí)現(xiàn);
異步電路之間
輸入信號直接通過組合邏輯后輸出
當(dāng)約束定義的是時(shí)序路徑中的節(jié)點(diǎn)時(shí),則約束的僅在兩個(gè)節(jié)點(diǎn)之間;
set_max_delay-from[get_portsA1]-to[get_portsA2]8 set_min_delay-from[get_portsA1]-to[get_portsA2]5
上述定義A1到A2之間的時(shí)序路徑的約束最大延時(shí)8ns最小延時(shí)6ns;
當(dāng)約束定義是時(shí)鐘時(shí),最大最小延時(shí)將應(yīng)用于該時(shí)鐘源所控制的所有路徑;
set_max_delay-from[get_clocksCLK1]-to[get_clocksCLK2]8 set_min_delay-from[get_clocksCLK1]-to[get_clocksCLK2]5
上述定義從時(shí)鐘域CLK1到CLK2之間的所有時(shí)序路徑的約束最大延時(shí)為8ns,最小延時(shí)為6ns;
IO環(huán)境建模
輸入驅(qū)動(dòng)建模:默認(rèn)情況下,如果沒有設(shè)置外部輸入驅(qū)動(dòng),時(shí)序分析工具則默認(rèn)外部輸入驅(qū)動(dòng)為無窮大;
推薦查看:綜合對象及環(huán)境屬性
1.set_drive
設(shè)置外部輸入驅(qū)動(dòng)信息,通過該命令定義驅(qū)動(dòng)該引腳的輸入驅(qū)動(dòng)電阻值,通過該驅(qū)動(dòng)電阻值計(jì)算出驅(qū)動(dòng)端的轉(zhuǎn)換時(shí)間,并計(jì)入時(shí)序路徑延時(shí)信息;
當(dāng)定義為0時(shí),代表輸入端驅(qū)動(dòng)力為無窮大;
set_drive0[get_portsCLK]
上述定義CLK輸入的驅(qū)動(dòng)值為無窮大;
set_drive-rise0.4[all_inputs] set_drive-fall0.3[all_inputs]
上述命令定義所有輸入的驅(qū)動(dòng)值,上拉驅(qū)動(dòng)電阻為0.4,下拉驅(qū)動(dòng)電阻為0.3;
-min指定最小電阻,用于保持時(shí)間分析;
-max指定最大電阻,用于建立時(shí)間分析;
如果不指定-max和-min,那么指定的值既用于建立時(shí)間分析,也用于保持時(shí)間分析;
2.set_driving_cell
指定驅(qū)動(dòng)單元
set_driving_cell-lib_cellINVX1M[all_inputs]
上述命令定義設(shè)計(jì)所有驅(qū)動(dòng)力等價(jià)于單元庫中INVX1M單元的驅(qū)動(dòng)力;
-lib_cell:指定驅(qū)動(dòng)引腳的單元;
3.set_input_transition
通過set_input_transition 定義驅(qū)動(dòng)該引腳的輸入驅(qū)動(dòng)端轉(zhuǎn)換時(shí)間,設(shè)置的轉(zhuǎn)換時(shí)間越大驅(qū)動(dòng)力越小,當(dāng)定義為0時(shí),其代表輸入端驅(qū)動(dòng)力無窮大;
輸出負(fù)載建模:默認(rèn)情況下,如果沒有設(shè)置外部輸出負(fù)載,時(shí)序分析工具則默認(rèn)外部輸出負(fù)載為0;
1.輸出負(fù)載可通過SDC命令set_load,定義外部負(fù)載為一個(gè)等效電容,其電容值即為負(fù)載值(指定的是負(fù)載的實(shí)際電容值);
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ù)載,則這個(gè)命令沒有具體含義)
3.set_fanout_load value port_list
指定扇出負(fù)載(根據(jù)標(biāo)準(zhǔn)負(fù)載指定負(fù)載值)
其他時(shí)鐘特性
1.時(shí)鐘轉(zhuǎn)換時(shí)間:
時(shí)鐘在高低電平狀態(tài)下切換所需要的延時(shí);
通過SCD命令 set_clock_transition 來定義時(shí)鐘轉(zhuǎn)換延時(shí);
-rise 提供時(shí)鐘上升沿的轉(zhuǎn)換時(shí)間;
-fall 提供時(shí)鐘下降沿的轉(zhuǎn)換時(shí)間;
-max和-min 設(shè)置轉(zhuǎn)換時(shí)間的最大最小條件;
set_clock_transition-rise0.2[get_clocksCLK] set_clock_transition-fall-min0.2[get_clocksCLK] set_clock_transition-fall-max0.4[get_clocksCLK]
該命令僅用于預(yù)布局階段,即時(shí)鐘樹綜合完成之前,再時(shí)鐘樹生成之后,該命令不應(yīng)用于任何的后布局時(shí)序分析;
2.時(shí)鐘不確定性
實(shí)際時(shí)鐘本身與理想時(shí)鐘存在一定的差異,比如時(shí)鐘抖動(dòng),時(shí)鐘偏斜等因素;
時(shí)鐘偏斜:時(shí)鐘到達(dá)不同觸發(fā)器時(shí)間差異;
時(shí)鐘抖動(dòng):時(shí)鐘周期的不良偏差;
如上圖,時(shí)鐘到達(dá)P4時(shí)間為1.3ns,到達(dá)P3時(shí)間為1.2ns,那么不確定性延時(shí)為1.3-1.2=0.1ns;
通過SDC命令set_clock_uncertainty 可將時(shí)鐘偏斜和抖動(dòng)模型化;
set_clock_uncertainty0.5[get_clocksCLK1] set_clock_uncertainty-setup0.5[get_clocksCLK2] set_clock_uncertainty-hold0.2[get_clocksCLK2]
以上時(shí)鐘不確定性為建立時(shí)間0.5ns,保持時(shí)間0.2ns;如下圖所示:
不同時(shí)鐘的不確定性
對于不同時(shí)鐘不確定度建模時(shí),源時(shí)鐘可用-form,目的時(shí)鐘可用-to;
#C1到C2的建立時(shí)間和保持時(shí)間不確定度 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.時(shí)鐘延遲
時(shí)鐘信號從時(shí)鐘源輸出端到達(dá)時(shí)序單元時(shí)鐘輸入端(如觸發(fā)器)所需要的時(shí)間,稱為時(shí)鐘延遲;
時(shí)鐘延遲包括源延遲和網(wǎng)絡(luò)延遲,源延遲是指源時(shí)鐘到達(dá)時(shí)鐘定義的端口的延遲;
網(wǎng)路延遲是指時(shí)鐘定義的端口到時(shí)序單元時(shí)鐘輸入端的延遲;
通過SDC命令set_clock_latency來定義時(shí)鐘延遲信息:
-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時(shí),表示網(wǎng)路延遲;
#上下降沿網(wǎng)路延遲 set_clock_latency0.5-rise[get_clocksC1] set_clock_latency0.3-fall[get_clocksC1]
時(shí)鐘網(wǎng)路延遲和時(shí)鐘源延遲區(qū)別:
時(shí)鐘網(wǎng)絡(luò)延遲是時(shí)鐘樹生成前的設(shè)置,當(dāng)實(shí)際時(shí)鐘樹生成后,時(shí)鐘網(wǎng)絡(luò)延遲將通過set_propagated_clock被時(shí)鐘樹的實(shí)際結(jié)果所替代;而時(shí)鐘源延遲則會一直存在。
模式分析
恒定狀態(tài)約束:
根據(jù)設(shè)計(jì)中不同模式的需要,通過設(shè)置恒定狀態(tài)約束來定義時(shí)鐘選擇端口的對應(yīng)狀態(tài)值,
在多個(gè)模式中選擇的時(shí)候,設(shè)定指定單一模式(相當(dāng)于mux選擇器);
通過SDC命令set_case_analysis定義恒定狀態(tài)約束;
如上圖,假如CLK_SEL為0時(shí),選擇PLLdiv6_input,CLK_SEL為1時(shí),選擇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
屏蔽時(shí)序弧:
set_disable_timing-fromS-toZ[get_cellsMUX]
上述命令屏蔽選擇器單元MUX中從S端到Z端的時(shí)序??;
最大轉(zhuǎn)換時(shí)間:
set_max_transition0.8[all_outputs]
上述命令定義所有輸出驅(qū)動(dòng)最大轉(zhuǎn)換時(shí)間為0.8ns;
最大電容負(fù)載:
set_max_capacitance0.6[all_outputs]
上述命令定義所有輸出驅(qū)動(dòng)最大電容負(fù)載為0.6pF;
最大扇出:
set_max_fanout15[all_outputs]
上述命令定義所有輸出驅(qū)動(dòng)最大扇出為15;
附:SDC命令
SDC約束分為:
時(shí)序約束
面積與功率約束
設(shè)計(jì)規(guī)則約束
接口約束
特定模式和配置約束
設(shè)計(jì)要求的異常
其他命令
時(shí)序約束
命令包括指定時(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è)計(jì)規(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
時(shí)序例外
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
審核編輯:劉清
-
時(shí)序分析
+關(guān)注
關(guān)注
2文章
127瀏覽量
22542 -
SDC
+關(guān)注
關(guān)注
0文章
48瀏覽量
15518 -
時(shí)鐘源
+關(guān)注
關(guān)注
0文章
92瀏覽量
15921
原文標(biāo)題:SDC約束
文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論