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

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

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

時鐘周期約束詳細介紹

FPGA設(shè)計論壇 ? 來源:FPGA設(shè)計論壇 ? 作者:FPGA設(shè)計論壇 ? 2022-08-05 12:50 ? 次閱讀

1. 時鐘周期約束:?時鐘周期約束,顧名思義,就是我們對時鐘的周期進行約束,這個約束是我們用的最多的約束了,也是最重要的約束。

2. vivado中時鐘約束指令:

create_clock

使用create_clock來創(chuàng)建時鐘周期約束,使用方法:

create_clock -name -period -waveform { } [get_ports ]

5df8888c-1473-11ed-ba43-dac502259ad0.png

值得注意的是,這里的時鐘必須是主時鐘 primary clock。主時鐘通常有兩種情況:一種是由外部時鐘源提供,另外一種是告訴收發(fā)器的時鐘提供。

如何查看主時鐘?

綜合、布局布線之后

打開綜合設(shè)計或者布局布線設(shè)計

兩種方式查看主時鐘:第一種,report_clock_networks -name mainclock,可以直接查看主時鐘。第二種,check_timing -override_defaults no_clock,可以查看沒有被約束的主時鐘

當主時鐘之間的相位關(guān)系確定時,則通過-waveform參數(shù)進行約束

5e144cca-1473-11ed-ba43-dac502259ad0.png

如上圖所示的兩個主時鐘,進行如下約束:

create_clock -name clk0 -period 10.0 -waveform {0 5} [get_ports clk0]

create_clock -name clk1 -period 8.0 -waveform {2 8} [get_ports clk1]

數(shù)字單位默認是ns。如果不寫waveform參數(shù),則默認占空比是50%且第一個上升沿在0時刻。

一般來說,如果輸入時鐘是差分的,只需要對P端進行約束即可。

create_generated_clock

約束在FPGA內(nèi)部產(chǎn)生的衍生時鐘,使用方法如下:

create_generated_clock -name

-source

-multiply_by

-divide_by

-master_clock

5e346a14-1473-11ed-ba43-dac502259ad0.png

因為是衍生時鐘,所以有-source參數(shù),指明衍生時鐘從哪里來的,后面就是源時鐘名字,master clock,叫上一級時鐘,區(qū)別于primary clock。它可以是primary clock 也可以是其他衍生時鐘。

這個命令并不是設(shè)定周期和波形,而是描述時鐘電路如何對上級時鐘的轉(zhuǎn)換:

簡單的頻率分頻、倍頻

頻率和分頻組合,獲得非整數(shù)的比例,通常由MMCM或PLL完成

相移或波形反相

占空比改變

set_clock_groups

使用方法:

set_clock_groups -asynchronous -group -group

set_clock_groups -physically_exclusive -group -group

第一種用法:來指定兩個主時鐘是異步關(guān)系,使用asynchronous。

create_clock -period 10 -name clk1 [get_ports clk1]

create_clock -period 8 -name clk2 [get_ports clk2]

set_clock_groups -asynchronous -group clk1 -group clk2

第二種用法:當我們需要驗證同一個時鐘端口在不同時鐘頻率下能否獲得時序收斂時使用。 比如有兩個異步主時鐘clk1和clk2,需要驗證在clk2頻率為100MHz,clk1頻率分別為50MHz、100MHz和200MHz下的時序收斂情況,我們就可以這樣寫。

create_clock -name clk1A -period 20.0 [get_ports clk1]

create_clock -name clk1B -period 10.0 [get_ports clk1] -add

create_clock -name clk1C -period 5.0 [get_ports clk1] -add

create_clock -name clk2 -period 10.0 [get_ports clk2]

set_clock_groups -physically_exclusive -group clk1A -group clk1B -group clk1C

set_clock_groups -asynchronous -group "clk1A clk1B clk1C" -group clk2

第三種用法:當我們使用BUFGMUX時,會有兩個輸入時鐘,但只會有一個時鐘被使用。 比如MMCM輸入100MHz時鐘,兩個輸出分別為50MHz和200MHz,這兩個時鐘進入了BUFGMUX。在這種情況下,我們需要設(shè)置的時序約束如下:

set_clock_groups -logically_exclusive

-group [get_clocks -of [get_pins inst_mmcm/inst/mmcm_adv_inst/CLKOUT0]]

-group [get_clocks -of [get_pins inst_mmcm/inst/mmcm_adv_inst/CLKOUT1]]

虛擬時鐘

虛擬時鐘通常用于設(shè)定對輸入和輸出的延遲約束,這個約束其實是屬于IO約束中的延遲約束。虛擬時鐘和前面講的延遲約束的使用場景不太相同。顧名思義,虛擬時鐘,就是沒有與之綁定的物理管腳。

虛擬時鐘主要用于以下三個場景:

外部IO的參考時鐘并不是設(shè)計中的時鐘

FPGA I/O路徑參考時鐘來源于內(nèi)部衍生時鐘,但與主時鐘的頻率關(guān)系并不是整數(shù)倍

針對I/O指定不同的jitter和latency

??簡而言之,之所以要創(chuàng)建虛擬時鐘,對于輸入來說,是因為輸入到FPGA數(shù)據(jù)的捕獲時鐘是FPGA內(nèi)部產(chǎn)生的,與主時鐘頻率不同;或者PCB上有Clock Buffer導(dǎo)致時鐘延遲不同。對于輸出來說,下游器件只接收到FPGA發(fā)送過去的數(shù)據(jù),并沒有隨路時鐘,用自己內(nèi)部的時鐘去捕獲數(shù)據(jù)。

比如:如下圖所示,在FPGA的A和B端口分別有兩個輸入,其中捕獲A端口的時鐘是主時鐘,而捕獲B端口的時鐘是MMCM輸出的衍生時鐘,而且該衍生時鐘與主時鐘的頻率不是整數(shù)倍關(guān)系。

5e4950c8-1473-11ed-ba43-dac502259ad0.png

這種情況下時序約束如下:

create_clock -name sysclk -period 10 [get_ports clkin]

create_clock -name virclk -period 6.4

set_input_delay 2 -clock sysclk [get_ports A]

set_input_delay 2 -clock virclk [get_ports B]

可以看到,創(chuàng)建虛擬時鐘用的也是create_clock約束,但后面并沒有加get_ports參數(shù),因此被稱為虛擬時鐘。

再舉個輸出的例子,我們常用的UART和SPI,當FPGA通過串口向下游器件發(fā)送數(shù)據(jù)時,僅僅發(fā)過去了uart_tx這個數(shù)據(jù),下游器件通過自己內(nèi)部的時鐘去捕獲uart_tx上的數(shù)據(jù),這就需要通過虛擬時鐘來約束;而當FPGA通過SPI向下游器件發(fā)送數(shù)據(jù)時,會發(fā)送sclk/sda/csn三個信號,其中sclk就是sda的隨路時鐘,下游器件通過sclk去捕獲sda的數(shù)據(jù),而不是用自己內(nèi)部的時鐘,這是就不需要虛擬時鐘,直接使用set_output_delay即可。

注意,虛擬時鐘必須在約束I/O延遲之前被定義。

max/min delay的約束平時用的相對少一些,因為在跨異步時鐘域時,我們往往會設(shè)置asynchronous或者false_path。對于異步時鐘,我們一般都會通過設(shè)計來保證時序能夠收斂,而不是通過時序約束來保證。

審核編輯:湯梓紅


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

    關(guān)注

    1629

    文章

    21736

    瀏覽量

    603313
  • 時序約束
    +關(guān)注

    關(guān)注

    1

    文章

    115

    瀏覽量

    13425
  • Vivado
    +關(guān)注

    關(guān)注

    19

    文章

    812

    瀏覽量

    66523
  • 時鐘約束
    +關(guān)注

    關(guān)注

    0

    文章

    15

    瀏覽量

    6021

原文標題:FPGA時序約束之時鐘周期約束

文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設(shè)計論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    FPGA時序案例分析之時鐘周期約束

    時鐘周期約束,顧名思義,就是我們對時鐘周期進行約束,這個約束是我們用的最多的
    的頭像 發(fā)表于 11-19 11:44 ?5656次閱讀
    FPGA時序案例分析之<b class='flag-5'>時鐘</b><b class='flag-5'>周期約束</b>

    FPGA時序約束之衍生時鐘約束時鐘分組約束

    在FPGA設(shè)計中,時序約束對于電路性能和可靠性非常重要。在上一篇的文章中,已經(jīng)詳細介紹了FPGA時序約束的主時鐘
    發(fā)表于 06-12 17:29 ?2742次閱讀

    FPGA時序約束之偽路徑和多周期路徑

    前面幾篇FPGA時序約束進階篇,介紹了常用主時鐘約束、衍生時鐘約束、
    發(fā)表于 06-12 17:33 ?1817次閱讀

    FPGA時鐘周期約束講解

    時鐘周期約束是用于對時鐘周期約束,屬于時序約束中最重要的
    發(fā)表于 08-14 18:25 ?888次閱讀

    關(guān)于時序約束

    例子來說明如何設(shè)置周期約束??紤]圖3所示的電路設(shè)計范例1,輸入時鐘周期是10ns,并且是上升沿動作,占空比為45%高電平,55%低電平?! ∥覀兛梢杂眠@樣的UCF語旬來定義這個時鐘
    發(fā)表于 02-03 14:13

    ISE多周期時序約束

    有沒有哪位大神對ISE的時序約束比較熟悉,尤其是多周期約束這一塊。在Quartus中使用比較簡單,而且相關(guān)資料也比較多,但是ISE中的資料好像不是那么多,而且也沒有針對具體例子進行分析。官網(wǎng)上給出
    發(fā)表于 04-30 09:52

    輸入抖動與收緊周期約束有什么不同?

    嗨,將input_jitter值與周期約束一起使用而不是僅僅收緊周期有什么不同?防爆。輸入抖動:+/- 100 ps周期:10 ns約束1和2是等價的嗎?1)TIMESPEC TS_c
    發(fā)表于 03-18 06:28

    設(shè)計中的關(guān)鍵路徑如何約束

    方法來限制關(guān)鍵路徑,而不是將周期約束放在它上面? (沒有虛假路徑或多周期路徑)。我的理解是正確的,如果我應(yīng)用10ns的周期約束,那么連接到該時鐘的所有路徑都被
    發(fā)表于 04-08 08:58

    時鐘約束的概念

    文章目錄1、時鐘約束的概念2、 DC中的時序約束參考文章時間又拖拖拖,隨著追尋DFT的進度,DC的進度在經(jīng)歷了.dynopsys_dc.setup后,就停滯不前了,接下來本文就來介紹D
    發(fā)表于 11-17 06:56

    FPGA開發(fā)之時序約束周期約束

    時序約束可以使得布線的成功率的提高,減少ISE布局布線時間。這時候用到的全局約束就有周期約束和偏移約束。周期約束就是根據(jù)
    發(fā)表于 02-09 02:56 ?719次閱讀

    添加時序約束的技巧分析

    。 在添加全局時序約束時,需要根據(jù)時鐘頻率劃分不同的時鐘域,添加各自的周期約束;然后對輸入輸出端口信號添加偏移約束,對片內(nèi)邏輯添加附加
    發(fā)表于 11-25 09:14 ?2605次閱讀

    Specific Timing Constraints

    關(guān)鍵詞:ISE , 時序約束 時鐘上升沿和下降沿之間的時序約束 周期約束可以自動計算兩個沿的的約束——包括調(diào)整非50%占空比的
    發(fā)表于 09-26 07:44 ?323次閱讀

    vivado多時鐘周期約束set_multicycle_path使用

    Vivado下set_multicycle_path的使用說明 vivado下多周期路徑約束(set_multicycle_path)的使用,set_multicycle_path一般...
    發(fā)表于 12-20 19:12 ?1次下載
    vivado多<b class='flag-5'>時鐘</b><b class='flag-5'>周期約束</b>set_multicycle_path使用

    關(guān)于多周期路徑約束

    一、什么是多周期路徑約束? 不管是quartus中還是在Vivado中,默認的建立時間和保持時間的檢查都是單周期的,如圖1所示,也就是說如果A時刻發(fā)送,B時刻捕獲,這兩者之間相差一個時鐘
    的頭像 發(fā)表于 12-10 12:05 ?1566次閱讀

    時序約束---多時鐘介紹

    當設(shè)計存在多個時鐘時,根據(jù)時鐘的相位和頻率關(guān)系,分為同步時鐘和異步時鐘,這兩類要分別討論其約束
    的頭像 發(fā)表于 04-06 14:34 ?1200次閱讀
    時序<b class='flag-5'>約束</b>---多<b class='flag-5'>時鐘</b><b class='flag-5'>介紹</b>