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

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

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

SDC是如何煉成的?create_generated_clock花式定義方法

冬至子 ? 來(lái)源:RTL2GDS ? 作者:老本 Benjamin ? 2023-06-27 15:00 ? 次閱讀

定義時(shí)鐘

從最早的芯片規(guī)格定義分解出系統(tǒng)所需要的時(shí)鐘和頻率,以及各個(gè)模塊需要的時(shí)鐘和頻率。SoC的時(shí)鐘一般是由PLL產(chǎn)生,然后經(jīng)過(guò)時(shí)鐘生成電路和分配網(wǎng)絡(luò),最終給具體的功能模塊使用。一般地,第三方IP供應(yīng)商都會(huì)提供比較成熟的SDC,SoC集成時(shí)需稍作修改。對(duì)于自研的IP和SoC頂層,設(shè)計(jì)人員在提供RTL的同時(shí),也需提供一份時(shí)鐘結(jié)構(gòu)圖,一方面是方便撰寫(xiě)SDC,另一方面對(duì)后端PnR有針對(duì)性的進(jìn)行CTS也非常有幫助。

時(shí)鐘結(jié)構(gòu)圖分不同的層次,或抽象或具體,看具體的需要了,下面是一顆MCU全局時(shí)鐘分布的結(jié)構(gòu)圖,大家有個(gè)認(rèn)識(shí)就可以:

圖片

基于詳細(xì)的時(shí)鐘結(jié)構(gòu)圖,定義時(shí)鐘的命令有兩個(gè):create_clock和create_generated_clock

其中,create_clock命令比較簡(jiǎn)單易懂,格式如下:

create_clock [-name clock_name] \\
    -period period_value \\
    [-waveform edge_list] \\
    [-add] \\
    [source_objects]

create_generated_clock命令解析

create_generated_clock命令格式如下,主要是定義generated clock和master clock的關(guān)系:

create_generated_clock [-name clock_name] \\
    -source master_pin \\
    [-master_clock clock] \\
    [-edge edge_list] \\
    [-edge_shift shift_list] \\
    [-divide_by factor] \\
    [-multiply_by factor] \\
    [-duty_cycle percent] \\
    [-combinational]
    [-invert] \\
    [-add] \\
    source_objects

create_generated_clock 需要指定源時(shí)鐘(master clock)的master_pin,在CTS時(shí),默認(rèn)會(huì)去balance這兩個(gè)時(shí)鐘(即generated clock 和 master clock),讓skew盡可能小。而且在計(jì)算generated clock的clock latency時(shí),會(huì)把從master clock pin 到generated clock pin之間的delay也考慮在內(nèi)。在工具中report_timing的時(shí)候,通過(guò)選項(xiàng)-path_type full_clock_expanded可以將master clock的部分也展開(kāi)。

report_timing -path_type full_clock
report_timing -path_type full_clock_expanded

需要注意:在使用create_generated_clock時(shí),需要保證電路結(jié)構(gòu)和命令的效果是一致的,否則工具在report_timing時(shí)會(huì)報(bào)錯(cuò),比如下面的錯(cuò)誤(UITE-461),這時(shí)就要仔細(xì)檢查分頻電路結(jié)構(gòu)了。

Error: Generated clock 'CLKdiv2 with source pin Udiv/Q' 'rise_edge' is not satisfiable; zero
source latency will be used. (UITE-461)


Error: Generated clock 'CLKdiv2 with source pin Udiv/Q' 'fall_edge' is not satisfiable; zero
source latency will be used. (UITE-461)

簡(jiǎn)單2分頻

先看一個(gè)簡(jiǎn)單的2分頻的實(shí)際的例子,命令和效果圖如下:

create_clock -name SYSCLK \\
    -period 2 \\
    [get_ports SYSCLK]

create_generated_clock -name DIVIDE \\
    -source [get_ports SYSCLK] \\
    -divide_by 2 \\
    [get_pins FF1/Q]

圖片

考慮了edge/edge_shift的3分頻實(shí)例

下面是3分頻的實(shí)例,-edge選項(xiàng)中{3 5 9}分別表示SYSCLK的第3、5、9個(gè)時(shí)鐘沿(clock edge),也分別對(duì)應(yīng)DIV3B的一個(gè)完整時(shí)鐘周期(上升、下降、上升)的時(shí)鐘沿時(shí)間點(diǎn)。而-edge_shift選項(xiàng){2.2 2.2 2.2}表示將DIV3B每個(gè)時(shí)鐘沿都往后延遲2.2ns,命令和效果圖如下:

create_clock -name SYSCLK \\
    -period 2.2 \\
    [get_ports SYSCLK]


create_generated_clock -name DIV3B \\
    -source [get_ports SYSCLK]  \\
    -edges { 3 5 9 } \\
    [get_pins U3/Q]


create_generated_clock -name DIV3C \\
    -source [get_ports SYSCLK]  \\
    -edges { 3 5 9 } \\
    -edge_shift {2.2 2.2 2.2} \\
    [get_pins U4/QN]

圖片

考慮invert/preinvert的實(shí)例

create_generated_clock使用-invert/-preinvert選項(xiàng)都表明generated clock與master clock相位相反,但這兩個(gè)選項(xiàng)的區(qū)別是:

  • preinvert : Creates a generated clock based on the inverted sense of the master clock.
  • invert : Creates an inverted generated clock based on the non-inverted sense of the master clock.

命令和效果圖如下:

create_generated_clock -name gclk_pos \\
-source [get_pins FF1/CLK]  \\
-divide_by 2 \\
[get_pins FF1/Q]


create_generated_clock -name gclk_neg \\
-source [get_pins FF1/CLK] \\
-divide_by 2 \\
-preinvert \\
[get_pins FF1/Q]


create_generated_clock -name glk_inv \\
-source [get_pins FF1/CLK] \\
-divide_by 2 \\
-invert \\
[get_pins FF1/Q]

圖片

同一點(diǎn)定義多個(gè)generated clock

在實(shí)際電路中比較常見(jiàn)的情況是,不同的場(chǎng)景下使用不同頻率的時(shí)鐘來(lái)驅(qū)動(dòng)電路,如下圖所示,同一個(gè)時(shí)鐘,與經(jīng)過(guò)二分頻,四分頻后的時(shí)鐘經(jīng)過(guò)MUX輸出給電路使用。

圖片

這種情況下,需要在UMUX輸出點(diǎn)定義三個(gè)時(shí)鐘CLKbypass/CLKdiv2/CLKdiv4,而且這三個(gè)時(shí)鐘在物理上是不能共存的(physically_exclusive),可以考慮使用以下命令來(lái)定義時(shí)鐘:

create_clock -period 10 CLK


create_generated_clock -name CLKbypass \\
    -source [get_ports CLK] \\
    -master CLK \\
    -divide_by 1 \\
    -combinational \\
    -add \\
    UMUX/Y


create_generated_clock -name CLKdiv2 \\
    -source FFdiv2/CK \\
    -master CLK \\
    -divide_by 2 \\
    -add \\
    UMUX/Y


create_generated_clock -name CLKdiv4 \\
    -source FFdiv4/CK \\
    -master CLK \\
    -divide_by 4 \\
    -add \\
    UMUX/Y


set_clock_groups -physically_exclusive \\
    -group {CLKbypass} \\
    -group {CLKdiv2} \\
    -group {CLKdiv4}

注意,這種方式定義時(shí)鐘看似合理,但是容易造成問(wèn)題,因?yàn)樵贑LK和UMUX/Y之間有三條不同的路徑,延遲大小不同,所以在計(jì)算timing時(shí),在launch path和capture path上選擇的路徑會(huì)不同,帶來(lái)悲觀的影響,如下圖所示,也有可能在計(jì)算min_pulse_width時(shí)造成假的違例。

圖片

在Solvnet上給出了更恰當(dāng)?shù)奶幚矸绞?,具體命令如下:

# create parent clock
create_clock -period 10 CLK


# create divide-by-2, divide-by-4 generated clocks
create_generated_clock -name CLKdiv2 -divide_by 2 FFdiv2/Q -source FFdiv2/CK
create_generated_clock -name CLKdiv4 -divide_by 4 FFdiv4/Q -source FFdiv4/CK


# create "MUXed" versions of all clocks arriving at MUX
create_generated_clock -name CLK_mux -combinational UMUX/A -source UMUX/A
create_generated_clock -name CLKdiv2_mux -combinational UMUX/B -source UMUX/B
create_generated_clock -name CLKdiv4_mux -combinational UMUX/C -source UMUX/C


# create divide-by-3 versions of all clocks arriving at FFdiv3
create_generated_clock -name CLK_mux_div3 \\
    -divide_by 3 FFdiv3/Q -source FFdiv3/CK -master CLK_mux -add
create_generated_clock -name CLKdiv2_mux_div3 \\
    -divide_by 3 FFdiv3/Q -source FFdiv3/CK -master CLKdiv2_mux -add
create_generated_clock -name CLKdiv4_mux_div3 \\
    -divide_by 3 FFdiv3/Q -source FFdiv3/CK -master CLKdiv4_mux -add


# apply physical exclusivity to all clock families (generated clocks included)
# which are exclusive due to statically switched MUX
set_clock_groups -physically_exclusive \\
    -group {CLK_mux     CLK_mux_div3} \\
    -group {CLKdiv2_mux CLKdiv2_mux_div3} \\
    -group {CLKdiv4_mux CLKdiv4_mux_div3}
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • SoC芯片
    +關(guān)注

    關(guān)注

    1

    文章

    587

    瀏覽量

    34765
  • 驅(qū)動(dòng)電路
    +關(guān)注

    關(guān)注

    152

    文章

    1510

    瀏覽量

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

    關(guān)注

    0

    文章

    48

    瀏覽量

    15487
  • PLL電路
    +關(guān)注

    關(guān)注

    0

    文章

    92

    瀏覽量

    6372
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

    時(shí)序約束之時(shí)鐘約束

    、變占空比 create_clock -name clkin -period 10[get_ports clkin]create_generated_clock -name clkdiv2
    發(fā)表于 09-21 11:51

    CLOCK作為外部輸出控制Pin的整體延遲?

    , using create_generated_clock, but more importantly I can control the delay from the MMCM
    發(fā)表于 10-30 18:04

    create_generate_clock無(wú)法找到正確的引腳

    create_generated_clock -name dut_clk -source [get_ports InClk] -divide_by 6 [get_pins u_clk_div / CLK_OUT]我已經(jīng)通過(guò)
    發(fā)表于 11-05 11:32

    Xilinx工具vivado使用約束命令時(shí)出現(xiàn)警告的解決辦法?

    (TX_CLK_o)。我想使用下面的約束命令來(lái)設(shè)置時(shí)鐘轉(zhuǎn)發(fā),但我在合成時(shí)發(fā)現(xiàn)了警告。警告是什么意思?// constraints命令create_generated_clock -name TX_CLK_o
    發(fā)表于 05-04 08:04

    請(qǐng)問(wèn)如何約束作為輸入時(shí)鐘復(fù)制的時(shí)鐘?

    的問(wèn)題是如何約束這個(gè)TDM_SCKx4輸出時(shí)鐘。我試過(guò)這個(gè):create_generated_clock -name TDM_SCKx4 -source [get_pins
    發(fā)表于 08-18 10:16

    靜態(tài)時(shí)序分析

    ]create_generated_clock -name CORE_CLK -divide_by 1 -source SYS_CLK [get_pins UAND1/Z]什么時(shí)候定義一個(gè)新的master clock,而不是
    發(fā)表于 04-20 16:17

    今日說(shuō)“法”:TimeQuest約束外設(shè)之詭異的Create Generated Clocks

    create_generated_clock -name {clk_div_r} -source [get_ports {sysclk}] -divide_by 2 -master_clock {sysclk
    發(fā)表于 05-06 16:24

    FPGA案例之衍生時(shí)鐘約束

    create_generated_clock -name clk_samp -source [get_pins clk_gen_i0/clk_core_i0/clk_tx] -divide_by 32 [get_pins
    的頭像 發(fā)表于 11-17 16:28 ?2240次閱讀
    FPGA案例之衍生時(shí)鐘約束

    時(shí)序分析的設(shè)計(jì)約束SDC怎么寫(xiě)呢?

    使用SDC命令create_clock創(chuàng)建時(shí)鐘,時(shí)鐘周期20,占空比50%的時(shí)鐘信號(hào)
    的頭像 發(fā)表于 06-18 09:42 ?3930次閱讀
    時(shí)序分析的設(shè)計(jì)約束<b class='flag-5'>SDC</b>怎么寫(xiě)呢?

    SDC是如何煉成的?怎么去驗(yàn)收SDC呢?

    STA是由SDC驅(qū)動(dòng)的,所以SDC的完整性、正確性和一致性直接決定著綜合、布局布線以及STA的有效性。
    的頭像 發(fā)表于 06-28 17:17 ?3361次閱讀
    <b class='flag-5'>SDC</b>是如何<b class='flag-5'>煉成</b>的?怎么去驗(yàn)收<b class='flag-5'>SDC</b>呢?

    時(shí)序分析基本概念介紹&lt;generate clock&gt;

    今天我們要介紹的時(shí)序分析概念是generate clock。中文名為生成時(shí)鐘。generate clock定義sdc中,是一個(gè)重要的時(shí)鐘概念。
    的頭像 發(fā)表于 07-06 10:34 ?1995次閱讀
    時(shí)序分析基本概念介紹&lt;generate <b class='flag-5'>clock</b>&gt;

    探討下clock的基本定義(上)

    Clock分為兩大類,一類是root clock,其定義指令是create_clock;另外一類是generated
    的頭像 發(fā)表于 07-06 15:31 ?1848次閱讀
    探討下<b class='flag-5'>clock</b>的基本<b class='flag-5'>定義</b>(上)

    探討下clock的基本定義(下)

    要探討今天的主題,首先需要跟大家一起學(xué)習(xí)下clock latency這個(gè)基本概念。Clock latency通俗意義上是指clock定義點(diǎn)到cloc
    的頭像 發(fā)表于 07-06 15:34 ?3555次閱讀
    探討下<b class='flag-5'>clock</b>的基本<b class='flag-5'>定義</b>(下)

    請(qǐng)問(wèn)create_generated_clock該怎么使用呢?

    FPGA設(shè)計(jì)中,生成時(shí)鐘分為兩大類:自動(dòng)生成時(shí)鐘和用戶生成時(shí)鐘。
    的頭像 發(fā)表于 01-25 09:06 ?1517次閱讀
    請(qǐng)問(wèn)<b class='flag-5'>create_generated_clock</b>該怎么使用呢?