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

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

3天内不再提示

时序约束的相关知识(一)

CHANBAEK 来源:数字IC与好好生活的两居室 作者:除夕之夜啊 2023-03-31 16:37 次阅读

本章节主要介绍一些简单的时序约束的概念,主要包括:

四种时序路径

时序路径的约束语句

输入转换时间与电容输出负载模型

时序约束文件的简单编写

关键词:create_clock、 set_clock_uncertainty、 set_clock_latency、 set_clock_transition、 set_input_delay、 set_ouput_delay、 remove_input_delay、 report_clock、set_load、 set_input_ transition、 set_driving_cell

该章节在 DC 综合流程中的位置如下。

图片

4 种时序路径

DC 进行时序分析时,都是基于同步时钟下的设计。 假设数据都在时钟上升沿到来 (launch) 或输出,则 DC 会将设计分割成 4 种时序路径,如下图所示:

图片

Path1 指输入到寄存器的时序路径 (Input-to-Reg Path)

Path2 指寄存器到寄存器的时序路径 (Reg-to-Reg Path)

Path3 指寄存器到输出的时序路径 (Reg-to-Output Path)

Path4 指输入到输出的时序路径 (Input-to-Output Path)

这些路径的起点和终点必须是固定的类型,说明如下:

起点必须是非时钟的输入端 (input port other than a clock port),或触发器 (寄存器) 的时钟端。

终点必须是非时钟的输出端 (output port other than a clock port),或时序元件的非时钟输入端 (例如触发器的 D 端)。

正常的静态时序分析 (Static Timing Analysis, STA) 主要包括 3 个步骤:

1> 将设计分割成多个时序路径

2> 计算每条时序路径的延时

3> 时序路径和数据到达时间 (arrival times) 做对比,判断时序约束是否满足 (meet)

Reg-to-Reg Path 约束

时序约束时,时钟的下降沿只有在双边沿时钟设计中才会起作用。 所以一般设计的时序约束都与时钟上升沿相关。

假设一个含有 Reg-to-Reg Path 的设计示意图如下:

图片

此设计中,时钟周期 2ns,setup 为 0.2ns,则 FF2 的 clock 端到 FF3 的 D 端的最大延迟为:

Tmax = 2ns-0.2ns = 1.8ns

那么最简单的时钟约束可以编写为:

create_clock [get_ports Clk] -name sys_clk \\
        -period 2 -waveform "0 1"

create_clock : DC Memory 中创建 clock 的命令 ;

[get_ports Clk] : 为创建的 clock 指定对应设计中的源 clock,源 clock 不一定是顶层模块中的 clock ,也可以是子模块中的 clock ;

-name sys_clk : 将创建的 clock 命名为 sys_clk,可以省略 ;

-period 2 : 指定创建的 clock 周期为 2ns ;

-waveform "0 1" : 表示时钟上升沿时刻为 0ns、下降沿时刻为 1ns,以此循环,间接指定了占空比。 此选项也可以省略,则创建的时钟默认占空比为 50% 。

clock 模型

关于时钟的基本概念,欢迎参考《Verilog 教程高级篇》中《5.2 时钟简介》一节。

时钟树综合 (Clock Tree Synthesis, CTS) 一般发生在 DC 之后的布局布线阶段。 DC 阶段不进行时钟树综合,不允许插入缓冲单元 (buffer)。 此时时钟网络认为是理想的,且具有无限驱动能力。

例如上述创建的 clock 模型中,时钟特性如下:

上升沿、下降沿转换时间为 0

时钟偏移为 0

时钟延迟为 0

但是还是建议在 DC 阶段对 clock 进行建模,估算时钟的各种特性,也为布局布线时的时钟树综合留有时间裕量。 时钟特性的建模主要包括:时钟偏移、时钟延迟与时钟转换时间的估算模拟。

时钟偏移建模

时钟偏移模型通过设置时钟的不确定度来描述。 时钟的不确定度参数,也包含了时钟抖动 (jitter)、裕量 (margin) 等参数信息

假设某个设计示意图如下,时钟偏移量为 0.14ns,建立时间为 0.08ns,则时钟不确定度的设置描述如下:

create_clock [get_ports Clk] -name sys_clk -period 2
# -setup 0.14 表示时钟偏移设置为 0.14
set_clock_uncertainty -setup 0.14 [get_clocks sys_clk]

FF1 到 FF2 的最大延迟,即 FF2 的建立时间的检查时刻为:

2 - 0.14 - 0.08 = 1.78ns

设置时钟不确定度时,也可以指定不同的时钟域 (clock domain) :

set_clock_uncertainty -setup 0.14 \\
    -from [get_clocks clk1] -to [get_clock clk2]

图片

时钟延迟建模

时钟延迟模型分为 2 种:时钟网络延迟 (network latency) 与时钟源延迟 (source latency)。

时钟网路延迟模型定义了从 clock port 或 pin 端 (create_clock 时指定的点) 到寄存器 clock 端的延迟。 时钟源延迟定义了实际时钟原点 (clock origin) 到 clock port 或 pin 端的延迟。 示意图如下:

图片

如上图所示,假设时钟周期为 10ns,source latency 为 3ns,network latency 为 1ns,则时钟延迟的设置描述如下:

create_clock -period 10 [get_ports CLK]
# -source 指设定 source latency,不指定时设置 network latency
set_clock_latency -source -max 3 [get_clocks CLK]
set_clock_latency -max 1 [get_clocks CLK]

set_clock_latency 命令表示设置时钟的 latency 属性,指定 -source 选项时表示设置 source latency,不指定时表示设置 network latency。 -max 表示指定延迟最大值,当然也可以使用 -min 表示指定时钟延迟最小值。

布局布线阶段,时钟树综合之后的具有一定实际延迟的时钟称为 propagated clock。 DC 阶段不进行 CTS,所以需要设置 network latency 。 布局布线阶段的 CTS 之后,时钟树具有实际的 latency,此时设置 network latency 的语句要改成:

# 布局布线时,network latency 需要设置实际的 propagated clock
# set_clock_latency -max 1 [get_clocks CLK]
set_propagated_clock [get_ports CLK]

时钟转换时间建模

时钟从上升沿跳变到下降沿,或者从下降沿跳变到上升沿时,并不是"直上直下" 的完成电平跳变,而是 "斜坡式" 需要一个过渡时间完成电平跳变。 这个过渡时间称之为时钟的转换时间 (transition),示意图如下。

图片

假设某一设计中时钟的转换时间最大值为 0.1ns,则 clock transition 的设置语句描述如下:

set_clock_transition -max 0.1 [get_clocks CLK]

时钟模型小结

下图显示了时钟不确定度、时钟延迟、时钟转换时间的示意图,以及在 DC 和布局布线阶段的设置差异性。

图片

uncertainty、latency 以及 transition 等时钟特性影响的是时序路径的长度。 latency 作用于所有的时序路径,所以时序分析时会产生一种“抵消”的效果,不影响时序分析结果 (下一节介绍)。

工程设计时,往往使用 uncertainty 与 margin (时间裕量) 来进行时钟建模,避免繁琐的设置,也能为布局布线时的 CTS 留有一定的时长调节范围。

例如,带有 margin 和 uncertainty 的时钟模型描述如下:

set UNCERTAINTY 0.3
# 留有 30% 的裕量,作用在时钟周期上
set MARGIN 0.3
set PERIOD 10
create_clock [get_ports CLK] -period [expr $PERIOD*(1-$MARGIN)]
# 时钟模型只设置不确定度参数
set_clock_uncertainty -setup $UNCERTAINTY [get_clocks CLK]
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5311

    浏览量

    119995
  • 约束
    +关注

    关注

    0

    文章

    82

    浏览量

    12717
  • 时序约束
    +关注

    关注

    1

    文章

    115

    浏览量

    13409
  • 时序路径
    +关注

    关注

    0

    文章

    12

    浏览量

    1394
  • 同步时钟
    +关注

    关注

    0

    文章

    44

    浏览量

    3216
收藏 人收藏

    评论

    相关推荐

    VIVADO时序约束及STA基础

    时序约束的目的就是告诉工具当前的时序状态,以让工具尽量优化时序并给出详细的分析报告。般在行为仿真后、综合前即创建基本的
    的头像 发表于 03-11 14:39 9682次阅读

    FPGA的IO口时序约束分析

      在高速系统中FPGA时序约束不止包括内部时钟约束,还应包括完整的IO时序约束时序例外
    发表于 09-27 09:56 1717次阅读

    FPGA时序约束的基础知识

    FPGA开发过程中,离不开时序约束,那么时序约束是什么?简单点说,FPGA芯片中的逻辑电路,从输入到输出所需要的时间,这个时间必须在设定的时钟周期内完成,更详细
    发表于 06-06 17:53 1446次阅读
    FPGA<b class='flag-5'>时序</b><b class='flag-5'>约束</b>的基础<b class='flag-5'>知识</b>

    FPGA主时钟约束详解 Vivado添加时序约束方法

    在FPGA设计中,时序约束的设置对于电路性能和可靠性都至关重要。在上篇的文章中,已经详细介绍了FPGA时序约束的基础
    发表于 06-06 18:27 1w次阅读
    FPGA主时钟<b class='flag-5'>约束</b>详解 Vivado添加<b class='flag-5'>时序</b><b class='flag-5'>约束</b>方法

    FPGA时序约束之衍生时钟约束和时钟分组约束

    在FPGA设计中,时序约束对于电路性能和可靠性非常重要。在上篇的文章中,已经详细介绍了FPGA时序约束的主时钟
    发表于 06-12 17:29 2597次阅读

    FPGA I/O口时序约束讲解

    前面讲解了时序约束的理论知识FPGA时序约束理论篇,本章讲解时序
    发表于 08-14 18:22 1552次阅读
    FPGA I/O口<b class='flag-5'>时序</b><b class='flag-5'>约束</b>讲解

    FPGA时序约束OFFSET

    ;TNM_NET = "SysCLk";TIMESPEC是个基本时序相关约束,TS_xxxxx由关键字TS和用户定义的xxxx表示,两者共同构成
    发表于 09-05 21:13

    时序约束时序分析 ppt教程

    时序约束时序分析 ppt教程 本章概要:时序约束时序分析基础常用
    发表于 05-17 16:08 0次下载

    时序约束用户指南

    时序约束用户指南包含以下章节: ?第章“时序约束用户指南引言” ?第2章“时序
    发表于 11-02 10:20 0次下载

    FPGA时序约束方法

    FPGA时序约束方法很好地资料,两大主流的时序约束都讲了!
    发表于 12-14 14:21 19次下载

    XDC约束及物理约束的介绍

    观看视频,了解和学习有关XDC约束,包括时序,以及物理约束相关知识
    的头像 发表于 01-07 07:10 6150次阅读
    XDC<b class='flag-5'>约束</b>及物理<b class='flag-5'>约束</b>的介绍

    FPGA设计之时序约束

    篇《FPGA时序约束分享01_约束四大步骤》文中,介绍了时序
    发表于 03-18 10:29 1638次阅读
    FPGA设计之<b class='flag-5'>时序</b><b class='flag-5'>约束</b>

    时序约束相关知识(二)

    设置 Input-to-Reg 时序路径的约束时,不仅需要创建时钟模型,还需要设置输入延时 (input delay)。设置 input delay 时,需要假设输入 port 信号是与时钟相关
    的头像 发表于 03-31 16:39 1955次阅读
    <b class='flag-5'>时序</b><b class='flag-5'>约束</b>的<b class='flag-5'>相关</b><b class='flag-5'>知识</b>(二)

    如何在Vivado中添加时序约束

    前面几篇文章已经详细介绍了FPGA时序约束基础知识以及常用的时序约束命令,相信大家已经基本掌握了时序
    的头像 发表于 06-23 17:44 2277次阅读
    如何在Vivado中添加<b class='flag-5'>时序</b><b class='flag-5'>约束</b>

    浅谈时序设计和时序约束

      本文主要介绍了时序设计和时序约束
    的头像 发表于 07-04 14:43 1355次阅读