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

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

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

時序分析的設(shè)計約束SDC怎么寫呢?

sanyue7758 ? 來源:數(shù)字ICer ? 2023-06-18 09:42 ? 次閱讀

創(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)換后,在相位,頻率,占空比等方面和主時鐘有一定變化的分支時鐘;

生成時鐘的時鐘源來自主時鐘,其相位參考主時鐘;

f079f0a0-0d16-11ee-962d-dac502259ad0.png

生成時鐘可以通過以下方式生成:

時鐘分頻

時鐘倍頻

時鐘門控

通過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è)置

f0a51816-0d16-11ee-962d-dac502259ad0.png

生成時鐘

可對生成時鐘占空比進(jìn)行設(shè)置:

f0bfddd6-0d16-11ee-962d-dac502259ad0.png

占空比進(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ā):

f0dbe72e-0d16-11ee-962d-dac502259ad0.png

源時鐘下降沿觸發(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)時序違例,如下圖所示:

f0fe154c-0d16-11ee-962d-dac502259ad0.png

通過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);

保持時間比建立時間少一個周期;

f11cdca2-0d16-11ee-962d-dac502259ad0.png

最大最小延遲

當(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,那么指定的值既用于建立時間分析,也用于保持時間分析;

f142ca34-0d16-11ee-962d-dac502259ad0.png

2.set_driving_cell

指定驅(qū)動單元

set_driving_cell-lib_cellINVX1M[all_inputs]

上述命令定義設(shè)計所有驅(qū)動力等價于單元庫中INVX1M單元的驅(qū)動力;

-lib_cell:指定驅(qū)動引腳的單元;

f15d63bc-0d16-11ee-962d-dac502259ad0.png

3.set_input_transition

通過set_input_transition 定義驅(qū)動該引腳的輸入驅(qū)動端轉(zhuǎn)換時間,設(shè)置的轉(zhuǎn)換時間越大驅(qū)動力越小,當(dāng)定義為0時,其代表輸入端驅(qū)動力無窮大;

f1799f78-0d16-11ee-962d-dac502259ad0.png

輸出負(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ā)器時間差異;

時鐘抖動:時鐘周期的不良偏差;

f19f4c00-0d16-11ee-962d-dac502259ad0.png

如上圖,時鐘到達(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;如下圖所示:

f1c70a74-0d16-11ee-962d-dac502259ad0.png

不同時鐘的不確定性

對于不同時鐘不確定度建模時,源時鐘可用-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)路延遲是指時鐘定義的端口到時序單元時鐘輸入端的延遲;

f1f1d6dc-0d16-11ee-962d-dac502259ad0.png

通過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)約束;

f21726ee-0d16-11ee-962d-dac502259ad0.png

如上圖,假如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

屏蔽時序弧:

f2300326-0d16-11ee-962d-dac502259ad0.png

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





審核編輯:劉清

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

    關(guān)注

    43

    文章

    447

    瀏覽量

    49752
  • SDC
    SDC
    +關(guān)注

    關(guān)注

    0

    文章

    48

    瀏覽量

    15518
  • 時鐘信號
    +關(guān)注

    關(guān)注

    4

    文章

    442

    瀏覽量

    28490
  • CLK
    CLK
    +關(guān)注

    關(guān)注

    0

    文章

    127

    瀏覽量

    17104

原文標(biāo)題:一文了解下SDC約束怎么寫

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

收藏 人收藏

    評論

    相關(guān)推薦

    VIVADO時序約束及STA基礎(chǔ)

    時序約束的目的就是告訴工具當(dāng)前的時序狀態(tài),以讓工具盡量優(yōu)化時序并給出詳細(xì)的分析報告。一般在行為仿真后、綜合前即創(chuàng)建基本的
    的頭像 發(fā)表于 03-11 14:39 ?9641次閱讀

    FPGA的IO口時序約束分析

      在高速系統(tǒng)中FPGA時序約束不止包括內(nèi)部時鐘約束,還應(yīng)包括完整的IO時序約束時序例外
    發(fā)表于 09-27 09:56 ?1705次閱讀

    時序分析的設(shè)計約束SDC

    使用SDC命令create_clock創(chuàng)建時鐘,時鐘周期20,占空比50%的時鐘信號;
    的頭像 發(fā)表于 11-08 09:12 ?7597次閱讀

    時序約束 專版

    此版只討論時序約束約束理論約束方法約束結(jié)果時鐘約束(Clock Specification):
    發(fā)表于 05-16 18:51

    ETD第14期:SDR源同步接口時序約束方法

    。本次沙龍主要介紹怎樣通過Quartus? II軟件中的TimeQuest時序分析器來約束分析單倍數(shù)據(jù)速率源同步接口。會議焦點  1、源同步接口相對于公共時鐘系統(tǒng)接口有何優(yōu)點?  2
    發(fā)表于 12-31 14:21

    FPGA的reset信號需要加什么SDC約束

    FPGA的reset信號需要加什么SDC約束?
    發(fā)表于 04-23 11:38

    請問時序約束文件SDC支持哪些約束

    時序約束文件SDC支持哪些約束?
    發(fā)表于 08-11 09:27

    時序約束時序分析 ppt教程

    時序約束時序分析 ppt教程 本章概要:時序約束時序
    發(fā)表于 05-17 16:08 ?0次下載

    如何將Altera的SDC約束轉(zhuǎn)換為Xilinx XDC約束

    了解如何將Altera的SDC約束轉(zhuǎn)換為Xilinx XDC約束,以及需要更改或修改哪些約束以使Altera的約束適用于Vivado設(shè)計軟件
    的頭像 發(fā)表于 11-27 07:17 ?5057次閱讀

    調(diào)用timequest工具對工程時序進(jìn)行分析

    TimeQuest Timing Analyzer是一個功能強(qiáng)大的,ASIC-style的時序分析工具。采用工業(yè)標(biāo)準(zhǔn)--SDC(synopsys design contraints)--的約束
    的頭像 發(fā)表于 11-28 07:09 ?1962次閱讀

    時序約束的步驟分析

    FPGA中的時序問題是一個比較重要的問題,時序違例,尤其喜歡在資源利用率較高、時鐘頻率較高或者是位寬較寬的情況下出現(xiàn)。建立時間和保持時間是FPGA時序約束中兩個最基本的概念,同樣在芯片
    的頭像 發(fā)表于 12-23 07:01 ?2113次閱讀
    <b class='flag-5'>時序</b><b class='flag-5'>約束</b>的步驟<b class='flag-5'>分析</b>

    正點原子FPGA靜態(tài)時序分析時序約束教程

    靜態(tài)時序分析是檢查芯片時序特性的一種方法,可以用來檢查信號在芯片中的傳播是否符合時序約束的要求。相比于動態(tài)
    發(fā)表于 11-11 08:00 ?62次下載
    正點原子FPGA靜態(tài)<b class='flag-5'>時序</b><b class='flag-5'>分析</b>與<b class='flag-5'>時序</b><b class='flag-5'>約束</b>教程

    約束、時序分析的概念

    很多人詢問關(guān)于約束、時序分析的問題,比如:如何設(shè)置setup,hold時間?如何使用全局時鐘和第二全局時鐘(長線資源)?如何進(jìn)行分組約束?如何約束
    的頭像 發(fā)表于 05-29 10:06 ?742次閱讀
    <b class='flag-5'>約束</b>、<b class='flag-5'>時序</b><b class='flag-5'>分析</b>的概念

    如何在Vivado中添加時序約束

    今天介紹一下,如何在Vivado中添加時序約束,Vivado添加約束的方法有3種:xdc文件、時序約束向?qū)В–onstraints Wiza
    的頭像 發(fā)表于 06-26 15:21 ?3821次閱讀
    如何在Vivado中添加<b class='flag-5'>時序</b><b class='flag-5'>約束</b><b class='flag-5'>呢</b>?

    時序分析基本概念—SDC概述

    今天我們要介紹的時序概念是設(shè)計約束文件 **SDC** . 全稱 ***Synopsys design constraints*** . SDC是一個設(shè)計中至關(guān)重要的一個文件。
    的頭像 發(fā)表于 07-03 14:51 ?6084次閱讀
    <b class='flag-5'>時序</b><b class='flag-5'>分析</b>基本概念—<b class='flag-5'>SDC</b>概述