0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STA学习记录-时钟定义

冬至子 来源:行走的BUG永动机 作者:行走的BUG永动机 2023-05-26 17:20 次阅读

STA的准备工作包括:设定时钟、指定IO时序特性、指定false path和multicycle path

1 什么是STA环境

看下面这张图,假定Design Under Analysis(DUA)会与其他同步设计交互,这意味着DUA会从前一级触发器接收数据,并将数据发送到DUA后一级触发器

图片

为了对这种设计执行STA,需要指定触发器的时钟、进入DUA和退出DUA的所有路径上的时序约束

2 指定时钟

定义时钟时需要提供以下信息

  • Clock source:可以是design的port,也可以是design内部的pin
  • Period:时钟周期
  • Duty cycle:高电平持续时间和低电平持续时间
  • Edge time:上升沿和下降沿出现的时刻

通过时钟定义,所有内部的timing path都将受到约束,表明所有的internal path都可以用时钟路径来分析

下面是一个基本的时钟定义:

create_clock \\
 -name SYSCLK \\
 -period 20 \\
 -waveform {0 5} \\
 [get_ports SCLK]

在这个例子中,定义的时钟名称为SYSCLK,并且指定定义的时钟是在端口 SCLK上定义的

SYSCLK的时钟周期时20(如果没有明确指定时间的单位,默认是ns)

-waveform中,第一个变量是上升沿出现的时刻,第二个变量是下降沿出现的时刻,因此在这个例子中,上升沿出现在0ns,下降沿出现在5ns

这个例子对应的波形图如下

图片

-waveform中可以指定任意数量的边沿,但是所有的边沿必须在一个周期之内

边沿时刻从0时刻之后的第一个上升沿开始,然后依次是下降沿、上升沿、下降沿……

-waveform {time_rise time_fall time_rise time_fall ...}

-waveform中需要指定偶数个边沿,并且-waveform指定的是一个周期内的波形,在后续周期中不断重复

如果没有指定-waveform,默认是

-waveform {0, period/2}

下面看一个不使用-waveform选项的时钟定义

create_clock -period 5 [get_ports SCAN_CLK]

其对应的波形图如下:

图片

在这个例子中,由于没有指定-name,因此定义时钟名称与端口名称相同

再来看另一个例子

create_clock -name BDYCLK \\
-period 15 \\
-waveform {5 12} \\
[get_ports GBLCLK]

其对应的波形图如下:

图片

在这个例子中,根据-waveform可以知道,第一个上升沿出现在5ns,第一下降沿出现在12ns

因为选项-waveform给出的上升沿和下降沿时刻会在每个cycle里重复,又因为-period指定周期是15ns,

所以在第二个cycle中,上升沿应该出现在15+5=20ns处

下降沿出现在15+12=27ns处

再来看另外两个例子:

# Figureacreate_clock  -period 10 \\ 
-waveform {0 5} \\
[get_ports FCLK]

#Figurebcreate_clock -period 125 \\
-waveform {100 150} \\
[get_ports ARMCLK]

对应的波形图如下:

图片

对于图(a),周期为10ns,上升沿出现在5ns,下降沿出现在10ns

在第二个cycle中,上升沿出现在10+5=15ns,下降沿出现在10+10=20ns

对于图(b),周期为125ns,从选项-waveform {100 150}可以知道,上升沿出现在100ns处,并且 high duration = 150-100=50ns,那么low duration = period - high duration,即low duration = 75ns

因为150ns的时刻已经超出了第一个cycle的时间范围,并且low duration的时长小于上升沿出现的时刻,那么可以推断出 在第一个cycle中有一个下降沿 ,这个下降沿出现的时刻可以用100 - low duration得到(100 - 75 = 25ns)

出现这种情况的原因是:选项-waveform要从上升沿开始

根据下面的例子,再次理解一下选项-waveform

#Figure (a)
create_clock -period 1.0 \\
-waveform {0.5 1.375} \\
[get_ports MAIN_CLK]

#Figure (b)
create_clock -period 1.2 \\
-waveform {0.3 0.4 0.8 1.0} \\
[get_ports JTAG_CLK]

对应的波形图如下:

图片

在这个例子中,图(a)的分析方式与上一个例子相同

图(b)由于选项-waveform中给出的上升沿和下降沿时刻都在第一个cycle时间范围内,因此不需要进行额外的推断

在某些情况下,比如在顶层的输入端口或某些PLL的输出端口,工具无法自动计算出过渡时间,此时在clock source出显示指定过渡时间很有用,可以使用set_clock_transition来指定

set_clock_transition -rise 0.1 [get_clocks CLK_CONFIG]

set_clock_transition -fall 0.12 [get_clocks CLK_CONFIG]

# 这个约束仅适用于ideal clocks,一旦构建了时钟树就将其忽略

3 时钟不确定度

可以用set_clock_uncertainty来指定时钟周期的timing uncertainty,用不确定度来建模那些会降低有效时钟周期的因素

set_clock_uncertainty -setup 0.2 [get_clocks CLK_CONFIG]

set_clock_uncertainty -hold 0.05 [get_clocks CLK_CONFIG]

setup check会减少可用的有效时钟周期

对于hold check,clock uncertainty被用作需要满足的额外时序裕量

这里我的理解是,由于clock uncertainty的存在,减小了有效的时钟周期,并且在clock uncertainty范围内,我们无法预测clock是否有效,为了保证数据的正确性,在进行数据传输时,应当避开clock uncertainty的范围

图片

下面几个command可以用来指定跨时钟边界path上的clock uncertainty,被称为 inter-clock uncertainty

set_clock_uncertainty -from VIRTUAL-SYS_CLK -to SYSCLK -hold 0.05

set_clock_uncertainty -from VIRTUAL-SYS_CLK -to SYSCLK -setup 0.3

set_clock_uncertainty -from SYS_CLK -to CFG_CLK -hold 0.05

set_clock_uncertainty -from SYS_CLK -to CFG_CLK -setup 0.1

图片

从图中可以看到,该电路为两个不同的clock domain SYS_CLK和CFG_CLK之间的path,根据上面约束可知,setup check的uncertainty是100ps,hold check的uncertainty是50ps

4 时钟延迟

可以使用set_clock_latency来指定时钟的延迟,用法如下:

set_clock_latency 1.8 -rise [get_clocks MAIN_CLK]
# MIN_CLK的上升沿延迟是1.8ns
set_clock_latency 2.1 -fall [all_clocks]
# 所有时钟的下降沿延迟是2.1ns

# -rise和-fall指的是 时钟在DFF的clock pin上的延迟

时钟延迟有两种:network latency和source latency

  • network latency:从时钟定义点(creat_clock)到DFF的clock pin上的延迟
  • source latency:指的是从时钟源到时钟定义点的延迟

下图直观的展示了这两个延迟类型的位置

图片

以下是一些指定源延迟和网络延迟的示例

# 没有给出 -source 选项,表明是 network latency
# 没有给出 -fall和-rise选项,表明fall和rise是相同的
# 没有给出 -min和-max选项,表明min和max是相同的

set_clock_latency 0.8 [get_clocks CLK_CONFIG]

set_clock_latency 1.9 -source [get_clocks SYS_CLK]

set_clock_latency 0.851 -source -min [get_clocks CFG_CLK]

set_clock_latency 1.322 -source -max [get_clocks CFG_CLK]

一个重要的区别:

当clock tree建立后,network latency可以忽略,source latency不可以忽略

这是因为network latency的作用是在clock tree综合之前用来估算clock tree上的latency,当clock tree综合之后,我们可以计算出clock tree上的实际的latency,因此不在需要network latency

当clock tree综合后,总的clock latency = source latency + clock tree上的实际latency

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 触发器
    +关注

    关注

    14

    文章

    1677

    浏览量

    60402
  • 时钟源
    +关注

    关注

    0

    文章

    87

    浏览量

    15770
  • PLL电路
    +关注

    关注

    0

    文章

    91

    浏览量

    6281
  • dff
    dff
    +关注

    关注

    0

    文章

    26

    浏览量

    3287
收藏 人收藏

    评论

    相关推荐

    【小e物联网试用体验】+小e做为AP和STA

    通过学习小e开发板的各种资料,了解到小e开发板可以作为AP、STA连接到路由器和AP+STA, AP就是无线接入点,无线网的创建者,也是网络的中心节点,例如家用无线路由器就是一个典型的AP。S
    发表于 05-22 17:16

    USART程序USATR_RX_STA为什么要定义成无符号字符型

    研究了几天还是没有研究出来的问题,所以上来请教高手们。在《例说STM32》的USART部分,有u8USATR_RX_STA=0这一定义语句,我的问题是:1.USATR_RX_STA为什么要定义
    发表于 06-17 04:35

    MCU产生12MHz时钟应用于ADC和STA339BW差异有多大?

    一个放大器系统:ADC + STA339BW + MCU,MCU产生12MHz时钟应用于ADC(连接到MCLK引脚)和STA339BW(连接到XTI引脚)。我不知道会有多少差异,这会影响THD
    发表于 07-22 16:10

    STM32时钟学习记录

    STM32 时钟学习记录时钟树介绍在STM32 时钟系统中,有5 个重要的时钟源:分别是LSI
    发表于 08-13 07:38

    FOC学习记录

    FOC学习——第一天(20210208)##前言——20210208###为什么博客希望养成一个记录和总结的好习惯学习的过程记录就像日记,可追溯分享下
    发表于 08-17 07:15

    Wifi的STA模式连接wifi的过程分享

    Harmony OS 设备开发学习记录(十四)–Wifi的STA模式连接wifi基于hispark wifi套件采用harmony os 2.0全量代码一、在源码中建立demo文件在app下建立
    发表于 02-15 06:14

    STA7056.pdf

    The STA7056 is a mono Bridge Amplifier assembled in single in line 9 pins package. The STA
    发表于 09-19 14:47 25次下载
    <b class='flag-5'>STA</b>7056.pdf

    单片机中的时钟周期是如何定义

    时钟周期也称为振荡周期,定义时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如12M的晶振,它的时间周期就是1/12 us),是计算机中最基本的、最小的时间单位。
    发表于 07-09 15:28 5287次阅读

    GD32F407的时钟学习记录

    GD32F407的时钟学习记录起因: 因工作原因,使用到了国产的GD32F407,顺便学习了下他们的时钟,构成,这里简单讲一下ADC,CAN
    发表于 11-29 17:36 13次下载
    GD32F407的<b class='flag-5'>时钟</b><b class='flag-5'>学习</b><b class='flag-5'>记录</b>

    K60学习记录

    K60学习记录二前言一、ADC的使用二、DAC的使用三、定时器的使用四、数码管的使用五、测频和测周期总结前言提示:记录一可在我的文章找到一、ADC的使用A/D在进行转化时,一般都需要经过采样、量化
    发表于 12-03 13:51 10次下载
    K60<b class='flag-5'>学习</b><b class='flag-5'>记录</b>

    i.max开发板学习记录

    i.max开发板学习记录
    发表于 12-08 15:21 2次下载
    i.max开发板<b class='flag-5'>学习</b><b class='flag-5'>记录</b>

    Harmony OS 设备开发学习记录(十四)--Wifi的STA模式连接wifi

    Harmony OS 设备开发学习记录(十四)–Wifi的STA模式连接wifi基于hispark wifi套件采用harmony os 2.0全量代码一、在源码中建立demo文件在app下建立
    发表于 12-14 19:09 2次下载
    Harmony OS 设备开发<b class='flag-5'>学习</b><b class='flag-5'>记录</b>(十四)--Wifi的<b class='flag-5'>STA</b>模式连接wifi

    蓝桥杯单片机学习过程记录(八)时钟芯片

    蓝桥杯单片机学习过程记录(八)时钟芯片//时钟芯片#include#includesbit sck=P1^7;sbit
    发表于 12-23 19:15 6次下载
    蓝桥杯单片机<b class='flag-5'>学习</b>过程<b class='flag-5'>记录</b>(八)<b class='flag-5'>时钟</b>芯片

    蓝桥杯单片机学习过程记录(十四)第六届温度记录

    蓝桥杯单片机学习过程记录(十四)第六届温度记录结果实现的问题:时钟和定时器两个时间走的不同,定时器5ms下200次不是1s,差别挺大,没找到什么原因。官方的底层驱动下,ds1302的
    发表于 12-29 19:19 11次下载
    蓝桥杯单片机<b class='flag-5'>学习</b>过程<b class='flag-5'>记录</b>(十四)第六届温度<b class='flag-5'>记录</b>

    STM32 task3学习记录

    由寄存器的四位控制3.stm32f10x.h用宏定义的方式实现了地址映射4.GPIO_TypeDef用typedef关键字声明了GPIO_TypeDef的结构体类型,结构体内定义了七个_IO uint32_t类型的变量5.时钟
    发表于 01-12 17:52 0次下载
    STM32 task3<b class='flag-5'>学习</b><b class='flag-5'>记录</b>