vivado生成时钟分析

2023-12-21 20:41:35

生成的时钟

本节讨论生成的时钟,包括:

?关于生成的时钟

?用户定义的生成时钟

?自动衍生时钟

?自动衍生时钟

关于生成的时钟

生成的时钟在设计内部由称为时钟修改块(用于例如MMCM),或者通过一些用户逻辑。生成的时钟与主时钟相关联。create_generated_clock命令考虑主时钟的起始点。主时钟可以是主时钟或者另一个生成的时钟。生成的时钟属性直接来源于它们的主时钟。而不是指定它们的周期或波形,您必须描述修改电路如何转换主控形状时钟。

主时钟和生成的时钟之间的关系可以是以下任意一种:

?简单的分频

?简单的倍频

?倍频和分频的组合,以获得非积分比(通常由MMCM和PLL完成)

?相移或波形反转

?工作循环转换

?以上所有内容的组合

用户定义的生成时钟

用户定义的生成时钟是:

?由create_generated_clock命令定义。

?连接到网表对象,最好是时钟树根引脚。使用-source选项指定主时钟。这表示设计中的引脚或端口主时钟通过其传播。通常使用主时钟源点或所生成的时钟源单元的输入时钟引脚。source选项只接受pin或端口网表对象。它不接受时钟对象。

示例一:简单除以2

主时钟clkin具有10ns的周期。它被寄存器REGA除以2驱动其他寄存器的时钟引脚。相应生成的时钟称为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]

示例二:使用-edges选项除以2

您可以使用-edges选项直接描述所生成的时钟的波形基于主时钟的边沿。论点是用于定义生成时钟的时间位置的主时钟边缘索引列表边缘,从上升的时钟边缘开始。以下示例等效于示例一中定义的生成时钟:简单除以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]

示例三:具有-边和的占空比变化和相移

-edge_shift选项

生成的时钟波形的每个边缘也可以分别偏移正或使用-edge_shift选项为负值。仅当需要相移时才使用此选项。-edge_shift选项不能与以下任何选项同时使用:

?-分隔

?多功能_ by

?-倒转

考虑具有10ns周期和50%占空比的主时钟clkin。它到达细胞mmcm0,其产生具有25%占空比、偏移90度的时钟。生成的时钟定义是指主时钟边沿1、2和3。这些边分别出现在0ns、5ns和10ns。为了获得所需波形,将第一边缘和第三边缘偏移2.5 ns。

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

示例四:同时使用-divide_by和-multiply_by时间

Vivado IDE允许您同时指定-divide_by和-multiply_by。这是对标准Synopsys设计约束(SDC)支持的扩展。尤其是方便手动定义MMCM或PLL实例生成的时钟,尽管AMD建议让引擎自动创建这些约束。有关详细信息,请参见自动派生时钟。考虑示例三中的mmcm0单元:占空比变化和带-边的相和-edge_shift选项,并假设它乘以主时钟的频率减少4/3。相应生成的时钟定义为:

create_generated_clock -name clk43 -source [get_pins mmcm0/CLKIN] -
multiply_by 4 \
-divide_by 3 [get_pins mmcm0/CLKOUT]

如果在MMCM或PLL的输出上创建生成的时钟约束,最好进行验证波形定义与MMCM或PLL的配置相匹配。示例五:通过组合弧追踪主时钟只有在这个例子中,假设主时钟驱动基于寄存器的时钟除以2和时钟多路复用器,可以从寄存器中选择主时钟或除以2的时钟时钟分频器。在这种情况下从主时钟到生成时钟有两条路径,通过顺序弧和组合弧多路复用器输出上生成的时钟,反映组合路径的延迟从主时钟通过多路复用器。这是通过使用-组合命令行选项:

create_generated_clock -name clkout -source [get_pins mmcm0/CLKIN] -
combinational [get_pins MUX/O]

示例六:ODDR驱动的正向时钟

在本例中,在ODDR单元驱动的输出端口上创建转发时钟。这个转发时钟参考驱动ODDR/CLKDIV引脚的主时钟,并且具有相同的周期作为主时钟(-divide_by-1):

create_generated_clock -name ck_vsf_clk_2 \
-source [get_pins ODDRE1_vsfclk2_inst/CLKDIV] -divide_by 1 [get_ports
vsf_clk_2]

文章来源:https://blog.csdn.net/cckkppll/article/details/135139152
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。