精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

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

【Vivado約束學(xué)習(xí)】 時鐘約束介紹

FPGA之家 ? 來源:FPGA開源工作室 ? 2024-01-04 09:16 ? 次閱讀

1 時鐘介紹

在數(shù)字設(shè)計中,時鐘代表從寄存器(register)到寄存器可靠傳輸數(shù)據(jù)的時間基準(zhǔn)。Xilinx Vivado集成設(shè)計環(huán)境(IDE)時序引擎使用ClocK特征計算時序路徑要求,并通過松弛計算報告設(shè)計時序裕度(Slack)。
時鐘必須正確定義,以獲得最佳的時序路徑。以下特性定義了時鐘:

1,時鐘定義在它的樹根的驅(qū)動器管腳或端口上,被稱為源點(diǎn)。
2,時鐘的邊沿是由周期和波形特性相結(jié)合來描述的。
3,周期以納秒(ns)為單位,時鐘對應(yīng)于波形重復(fù)的時間。
4,波形是時鐘周期內(nèi)上升邊沿和下降邊沿絕對時間的列表,以納秒(ns)為單位。列表必須包含偶數(shù)的值。第一個值總是相對應(yīng)的。到第一個上升的邊沿。除非另有規(guī)定,占空比默認(rèn)為50%,相移到0ns。

如圖1所示,時鐘CLK0具有10ns周期、50%占空比和0ns相位。時鐘CLK1具有8ns周期、75%占空比(8ns內(nèi)的高電平時間為6ns)和2ns上升沿相位偏移。

Clk0: period = 10, waveform = {0 5} 
Clk1: period = 8, waveform = {2 8}

98a16720-aa9e-11ee-8b88-92fbcf53809c.png

圖1 時鐘波形示例

1.1 傳播時鐘(Propagated Clocks)

周期和波形屬性代表時鐘的理想特性。當(dāng)進(jìn)入FPGA并通過時鐘樹傳播時,時鐘邊沿被延遲并受到噪聲和硬件行為引起的變化的影響。這些特性稱為時鐘網(wǎng)絡(luò)延遲和時鐘不確定性。

時鐘的不確定性包括:
1,時鐘抖動(Clock jitter)
2,相位誤差
3,您指定的任何其他不確定性

默認(rèn)情況下,Vivado IDE始終將時鐘視為傳播時鐘,即非理想時鐘,以便提供包括時鐘樹插入延遲和不確定性的準(zhǔn)確松弛值。

1.2專用硬件資源

Xilinx FPGA的專用硬件資源有效支持大量設(shè)計時鐘。這些時鐘通常由電路板上的外部元件產(chǎn)生。它們通常通過輸入端口進(jìn)入設(shè)備。
它們也可以由稱為時鐘修改塊的特殊原語生成,例如:
1,MMCM
2,BUFR
3,PLL
它們也可以通過常規(guī)單元格(如LUTS和寄存器)進(jìn)行轉(zhuǎn)換。

2 主時鐘(Primary Clocks)

主時鐘是通過輸入端口或GT收發(fā)器輸出引腳(例如,恢復(fù)時鐘)進(jìn)入設(shè)計的板時鐘。
主時鐘只能由create_clock命令定義。
如圖2所示,板時鐘通過端口sysclk進(jìn)入器件,然后在到達(dá)路徑寄存器之前通過輸入緩沖器和時鐘緩沖器傳播。
1,時鐘周期10ns
2,占空比50%
3,沒有相位偏移
相應(yīng)的Xilinx設(shè)計約束(XDC):

create_clock -period 10 [get_ports sysclk] 

98a6023a-aa9e-11ee-8b88-92fbcf53809c.png

圖2 主時鐘

與sysclk類似,板時鐘devclk通過端口clkIn進(jìn)入設(shè)備。
1,時鐘周期10ns
2,占空比為25%
3,相位偏移90度
對應(yīng)的XDC:

create_clock -name devclk -period 10 -waveform {2.5 5} [get_ports ClkIn]

如圖3所示,展示了一個收發(fā)器gt0,它從電路板上的高速鏈路恢復(fù)時鐘rxclk。時鐘rxclk的周期為3.33 ns,占空比為50%,并被路由到MMCM,MMCM為設(shè)計生成多個補(bǔ)償時鐘。
對應(yīng)的XDC:

create_clock -name sysclk -period 3.33 [get_ports SYS_CLK_clk_p]

98aa84a4-aa9e-11ee-8b88-92fbcf53809c.png

圖3 GT主時鐘

如圖4所示,差分緩沖器驅(qū)動PLL。在這種情況下,主時鐘只能在差分緩沖區(qū)的正輸入上創(chuàng)建。在緩沖區(qū)的每個正/負(fù)輸入上創(chuàng)建主時鐘將導(dǎo)致不切實(shí)際的CDC路徑。
相應(yīng)的XDC:

create_clock -name sysclk -period 3.33 [get_ports SYS_CLK_clk_p]

98b8850e-aa9e-11ee-8b88-92fbcf53809c.png

圖4 差動緩沖器上的主時鐘

3虛擬時鐘( Virtual Clocks)

虛擬時鐘是指在設(shè)計中沒有物理連接到任何Netlist元素的時鐘。
虛擬時鐘是通過create_clock命令定義的,而不指定源對象。
虛擬時鐘通常用于在下列情況之一中指定輸入和輸出延遲約束:
1,外部設(shè)備I/O參考時鐘不是設(shè)計時鐘之一。
2,FPGA I / O路徑與內(nèi)部生成的時鐘有關(guān),該時鐘無法與從中導(dǎo)出的時鐘板正確計時。
3,希望只為與I/O延遲約束相關(guān)的時鐘指定不同的抖動和延遲,而不修改內(nèi)部時鐘特性。
例如,時鐘CLK_virt的周期為10 ns,不附加到任何Netlist對象。未指定[]參數(shù)。在這種情況下,-name選項(xiàng)是強(qiáng)制性的.
相應(yīng)的XDC:

create_clock -name clk_virt -period 10

在輸入和輸出延遲約束使用之前,必須定義虛擬時鐘

4 生成時鐘(Generated Clocks)

生成的時鐘由設(shè)計內(nèi)部的特殊單元(稱為時鐘修改塊(例如,MMCM))或某些用戶邏輯驅(qū)動。
生成的時鐘與主時鐘相關(guān)聯(lián)。create_generated_clock命令考慮主時鐘的起始點(diǎn)。主時鐘可以是主時鐘或另一個生成時鐘。
生成的時鐘屬性直接來自其主時鐘。必須描述修改電路如何轉(zhuǎn)換主時鐘,而不是指定其周期或波形。

4.1 用戶定義產(chǎn)生時鐘

例1:一個簡單的二分頻

98d47bba-aa9e-11ee-8b88-92fbcf53809c.png

圖5 Generated Clocks

主時鐘clkin的周期為10 ns。寄存器REGA將其除以2,驅(qū)動其他寄存器時鐘引腳。相應(yīng)的生成時鐘稱為clkdiv2。
以下是兩個同等的制約因素:

create_clock -name clkin -period 10 [get_ports clkin]
# Option 1: master clock source is the primary clock source point
create_generated_clock -name clkdiv2 -source [get_ports clkin] -divide_by 2 
[get_pins REGA/Q] 
# Option 2: master clock source is the REGA clock pin
create_generated_clock -name clkdiv2 -source [get_pins REGA/C] -divide_by 2 
[get_pins REGA/Q]

例2:除以2使用-edges選項(xiàng)
以下示例等效于示例1中定義的生成時鐘:簡單除法2

# waveform specified with -edges instead of -divide_by
create_generated_clock -name clkdiv2 -source [get_pins REGA/C] -edges {1 3 5}  [get_pins REGA/Q]

例3:使用-edges和-edge_shift選項(xiàng)進(jìn)行占空比更改和相移
通過使用-edge_shift選項(xiàng),生成的時鐘波形的每個邊沿也可以單獨(dú)移位正值或負(fù)值。僅在需要相移時才使用此選項(xiàng)。
-edge_shift選項(xiàng)不能與以下任何內(nèi)容同時使用:
1,-divide_by
2,-multiply_by
3,-invert

98da5ca6-aa9e-11ee-8b88-92fbcf53809c.png

考慮主時鐘clkin,周期為10 ns,占空比為50%。它到達(dá)單元mmcm0,產(chǎn)生一個占空比為25%的時鐘,移動90度。生成的時鐘定義指的是主時鐘邊沿1,2和3.這些邊沿分別出現(xiàn)在0ns,5ns和10ns。要獲得所需波形,請將第一個和第三個邊沿移動2.5ns。

create_clock -name clkin -period 10 [get_ports clkin] 
create_generated_clock -name clkshift -source [get_pins mmcm0/CLKIN] -edges {1 2 3}  -edge_shift {2.5 0 2.5} [get_pins mmcm0/CLKOUT] 
# First rising edge: 0ns + 2.5ns = 2.5ns
# Falling edge: 5ns + 0ns = 5ns
# Second rising edge: 10ns + 2.5ns = 12.5ns

4.2 自動派生時鐘(Automatically Derived Clocks)

自動派生的時鐘也稱為自動生成的時鐘。如果已經(jīng)定義了相關(guān)的主時鐘,Vivado IDE會自動為時鐘修改模塊(CMBs)的輸出引腳創(chuàng)建約束。
在Xilinx 7系列器件中,CMBs是:
1,MMCM*/ PLL*
2,BUFR
3, PHASER*
例:以下自動導(dǎo)出的時鐘示例是由MMCM生成的時鐘。主時鐘clkin驅(qū)動MMCME2實(shí)例clkip / mmcm0的輸入CLKIN。自動生成時鐘的名稱是cpuClk,其定義點(diǎn)是clkip / mmcm0 / CLKOUT。

98eaf110-aa9e-11ee-8b88-92fbcf53809c.png

5 時鐘組(Clock Groups)

默認(rèn)情況下,Vivado IDE會對設(shè)計中所有時鐘之間的路徑進(jìn)行計時,除非您通過使用時鐘組或錯誤的路徑約束來指定。set_clock_groups命令禁用您標(biāo)識的時鐘組之間的時序分析,而不是同一組內(nèi)的時鐘之間的時序分析。與set_false_path約束不同,時鐘之間的兩個方向都會忽略時序。
可以使用-group選項(xiàng)多次指定多組時鐘。如果設(shè)計中不存在組中的任何時鐘,則該組變空。只有當(dāng)至少兩個組有效且不為空時,set_clock_groups約束才會保持有效。如果只有一個組保持有效且所有其他組都為空,則不應(yīng)用set_clock_groups約束并生成錯誤消息。
使用原理圖查看器或時鐘網(wǎng)絡(luò)報告可視化時鐘樹的拓?fù)洌⒋_定哪些時鐘不能一起定時。您還可以使用時鐘交互報告來查看兩個時鐘之間的現(xiàn)有約束,并確定它們是否共享相同的主時鐘 - 也就是說,它們具有已知的相位關(guān)系 - 或者識別沒有共同周期的時鐘(不可擴(kuò)展)。

5.1時鐘類別

1)同步時鐘(Synchronous Clocks)
當(dāng)兩個時鐘的相對相位是可預(yù)測的時,它們是同步的。當(dāng)它們的樹源自網(wǎng)表中的同一根,并且它們具有共同的時間段時,通常就是這種情況。
2)異步時鐘(Asynchronous Clocks )
當(dāng)無法確定它們的相對相位時,兩個時鐘是異步的。
例如,由電路板上的獨(dú)立振蕩器產(chǎn)生并通過不同輸入端口進(jìn)入FPGA的兩個時鐘沒有已知的相位關(guān)系。因此,它們必須被視為異步。如果它們是由電路板上的相同振蕩器產(chǎn)生的,那就不是真的。
3)不可擴(kuò)展時鐘(Unexpandable Clocks )
當(dāng)定時引擎無法確定超過1000個周期的共同周期時,兩個時鐘不可擴(kuò)展。在這種情況下,在時序分析期間使用1000個周期內(nèi)的最差設(shè)置關(guān)系,但是時序引擎無法確保這是最悲觀的情況。
這是典型的情況下,兩個時鐘的奇數(shù)分?jǐn)?shù)周期比。例如,考慮由共享同一個主時鐘的兩個MMCM生成的兩個時鐘clk 0和clk 1:
1,clk0的周期為5.125 ns。
2,Clk1的周期為6.666 ns.
它們的時鐘上升沿不會在1000個周期內(nèi)重新對齊。定時引擎在兩個時鐘之間的時序路徑上使用0.01 ns的建立路徑要求。即使兩個時鐘在其時鐘樹根處具有已知的相位關(guān)系,它們的波形也不允許它們之間的安全時序分析。

5.2異步時鐘組(Asynchronous Clock Groups)

異步時鐘和不可擴(kuò)展的時鐘無法安全定時。在分析期間,可以使用set_clock_groups命令忽略它們之間的時序路徑。
創(chuàng)建異步時鐘組
使用-asynchronous選項(xiàng)創(chuàng)建異步組。

set_clock_groups -name async_clk0_clk1 -asynchronous -group {clk0 usrclk itfclk} -group {clk1 gtclkrx gtclktx}

5.3 排他時鐘組(Exclusive Clock Groups)

一些設(shè)計具有幾種需要使用不同時鐘的操作模式。時鐘之間的選擇通常使用諸如BUFGMUX和BUFGCTRL或A LUT的時鐘多路復(fù)用器來完成。
通過使用set_clock_groups的選項(xiàng)來約束它們:
1,-logically_exclusive
2, -physically_exclusive
例:MMCM實(shí)例生成clk0和clk1,它們連接到BUFGMUX實(shí)例clkmux。clkmux的輸出驅(qū)動設(shè)計時鐘樹。
默認(rèn)情況下,Vivado IDE會分析clk0和clk1之間的路徑,即使兩個時鐘共享同一個時鐘樹且不能同時存在。
您必須輸入以下約束以禁用兩個時鐘之間的分析:

set_clock_groups -name exclusive_clk0_clk1 -physically_exclusive 
-group clk0 -group clk1

6 時鐘延遲、抖動和不確定性(Clock Latency, Jitter, and Uncertainty)

6.1 時鐘延遲

在電路板上和FPGA內(nèi)部傳播之后,時鐘邊沿到達(dá)目的地并有一定的延遲。此延遲通常表示為:
1,源延遲(時鐘源點(diǎn)之前的延遲,通常在設(shè)備外部)
2,網(wǎng)絡(luò)延遲
對于Xilinx FPGA,主要使用set_clock_latency命令指定器件外部的時鐘延遲。

# Minimum source latency value for clock sysClk (for both Slow and Fast corners)
set_clock_latency -source -early 0.2 [get_clocks sysClk] 
# Maximum source latency value for clock sysClk (for both Slow and Fast corners)
set_clock_latency -source -late 0.5 [get_clocks sysClk]

6.2時鐘不確定性

1)時鐘抖動(Clock Jitter)
對于ASIC器件,時鐘抖動通常用時鐘不確定性特性表示。但是,對于Xilinx FPGA,抖動屬性是可預(yù)測的。它們可以由時序分析引擎自動計算,也可以單獨(dú)指定。
①輸入抖動是連續(xù)時鐘邊沿與標(biāo)稱或理想時鐘到達(dá)時間的變化之間的差異。輸入抖動是絕對值,表示時鐘邊沿每一側(cè)的變化。
使用set_input_jitter命令分別指定每個主時鐘的輸入抖動。您不能直接在生成的時鐘上指定輸入抖動。Vivado IDE定時引擎自動計算生成的時鐘從其主時鐘繼承的抖動。
②系統(tǒng)抖動是由電源噪聲,電路板噪聲或系統(tǒng)的任何額外抖動引起的整體抖動。
使用set_system_jitter命令僅為整個設(shè)計設(shè)置一個值,即所有時鐘。
以下命令在通過輸入端口clkin傳播的主時鐘上設(shè)置+/- 100 ps抖動:

set_input_jitter [get_clocks -of_objects [get_ports clkin]] 0.1

2)額外的時鐘不確定性
使用set_clock_uncertainty命令根據(jù)需要為不同的角點(diǎn),延遲或特定時鐘關(guān)系定義額外的時鐘不確定性。這是從時序角度為設(shè)計的一部分添加額外余量的便捷方式。

set_clock_uncertainty 2.0 -from [get_clocks clk1] -to [get_clocks clk2] 
set_clock_uncertainty 1.0 [get_clocks clk1]







審核編輯:劉清

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

    關(guān)注

    52

    文章

    8164

    瀏覽量

    146037
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5325

    瀏覽量

    120032
  • 占空比
    +關(guān)注

    關(guān)注

    0

    文章

    97

    瀏覽量

    29051
  • Vivado
    +關(guān)注

    關(guān)注

    19

    文章

    808

    瀏覽量

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

    關(guān)注

    0

    文章

    15

    瀏覽量

    6013

原文標(biāo)題:【Vivado約束學(xué)習(xí)】 時鐘約束

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

收藏 人收藏

    評論

    相關(guān)推薦

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

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

    FPGA主時鐘約束詳解 Vivado添加時序約束方法

    在FPGA設(shè)計中,時序約束的設(shè)置對于電路性能和可靠性都至關(guān)重要。在上一篇的文章中,已經(jīng)詳細(xì)介紹了FPGA時序約束的基礎(chǔ)知識。
    發(fā)表于 06-06 18:27 ?1.1w次閱讀
    FPGA主<b class='flag-5'>時鐘</b><b class='flag-5'>約束</b>詳解 <b class='flag-5'>Vivado</b>添加時序<b class='flag-5'>約束</b>方法

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

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

    FPGA時鐘周期約束講解

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

    vivado約束參考文檔

    約束指令介紹)UG904 - Vivado Design Suite User Guide -Implementation UG906- Vivado Design Suite U
    發(fā)表于 09-26 15:35

    Vivado時鐘分組約束的三類應(yīng)用

    Vivado中通過set_clock_groups來約束不同的時鐘組,它有三個選項(xiàng)分別是-asynchronous,-logically_exclusive
    發(fā)表于 02-08 08:39 ?1116次閱讀
    <b class='flag-5'>Vivado</b><b class='flag-5'>時鐘</b>分組<b class='flag-5'>約束</b>的三類應(yīng)用

    ISE約束導(dǎo)入vivado總共分幾步

    最近有些朋友在ISE中做的V7項(xiàng)目需要切換到vivado來,但導(dǎo)入代碼后,導(dǎo)入約束時,發(fā)現(xiàn)vivado不再支持UCF文件,如果手抄UCF約束VI
    發(fā)表于 03-24 13:54 ?8834次閱讀
    ISE<b class='flag-5'>約束</b>導(dǎo)入<b class='flag-5'>vivado</b>總共分幾步

    FPGA約束的詳細(xì)介紹

    介紹FPGA約束原理,理解約束的目的為設(shè)計服務(wù),是為了保證設(shè)計滿足時序要求,指導(dǎo)FPGA工具進(jìn)行綜合和實(shí)現(xiàn),約束Vivado等工具努力實(shí)現(xiàn)
    發(fā)表于 06-25 09:14 ?6679次閱讀

    Vivado中XDC文件的約束順序

    很對人在使用Vivado時喜歡使用多個約束文件對整個工程進(jìn)行約束,同時Vivado允許設(shè)計者使用一個或多個約束文件。雖然使用一個
    的頭像 發(fā)表于 10-13 16:56 ?6863次閱讀

    vivado時鐘周期約束set_multicycle_path使用

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

    Vivado設(shè)計約束功能概述

    XDC約束可以用一個或多個XDC文件,也可以用Tcl腳本實(shí)現(xiàn);XDC文件或Tcl腳本都要加入到工程的某個約束集(set)中;雖然一個約束集可以同時添加兩種類型約束,但是Tcl腳本不受
    的頭像 發(fā)表于 06-30 11:27 ?3691次閱讀

    時鐘周期約束詳細(xì)介紹

    時鐘周期約束:?時鐘周期約束,顧名思義,就是我們對時鐘的周期進(jìn)行約束,這個
    的頭像 發(fā)表于 08-05 12:50 ?3713次閱讀

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

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

    如何在Vivado中添加時序約束呢?

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

    Vivado綜合階段什么約束生效?

    Vivado綜合默認(rèn)是timing driven模式,除了IO管腳等物理約束,建議添加必要的時序約束,有利于綜合邏輯的優(yōu)化,同時綜合后的design里面可以評估時序。
    的頭像 發(fā)表于 07-03 09:03 ?682次閱讀