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

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

3天内不再提示

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

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

Input-to-Reg 约束

设置 Input-to-Reg 时序路径的约束时,不仅需要创建时钟模型,还需要设置输入延时 (input delay)。 设置 input delay 时,需要假设输入 port 信号是与时钟相关联的,且 port 信号是在时钟上升沿到来之后延迟了一小段时间到达的 port 端。 这一小段延迟时间称为 input delay。

图片

假设上图中 port A 信号是在时钟到来之后的 0.6ns 达到,时钟周期为 2ns,clock uncertainty 为 0.3ns,建立时间为 0.2ns,则约束语句为:

create_clock -period 2 [get_ports Clk]
set_clock_uncertainty -setup 0.3 [get_clocks Clk]
set_input_delay -max 0.6 -clock Clk [get_ports A]

则 port A 到寄存器 FF2 的 D 端的 N 路径延时为:

Tmax = 2-0.3-0.6-0.2 = 0.9ns

只要 port A 到寄存器 FF2 的 D 端的延时小于 0.9ns,时序就能满足要求。

当所有输入端口延迟相同时,可利用以下语句进行时序约束:

set_input_delay -max 0.6 -clock Clk \\
    [remove_from_collection [all_inputs] [get_ports Clk]]

当仅有一两个信号的输入延迟不同时,可以使用分别设置的方法,也可以使用覆盖设置的方法:

# 首先设置所有 input delay0.6ns
set_input_delay -max 0.6 -clock Clk [all_inputs] 
# port A 的输入延时设为 0.7ns,则上一句 A 的输入延时属性会被覆盖
set_input_delay -max 0.7 -clock Clk [get_ports A]
# 去除掉 clock 端的输入延时设置
remove_input_delay [get_ports Clk]

Reg-to-Output 约束

设置 Reg-to-Output 时序路径的约束时,也需要设置输出延时 (output delay)。

设置 output delay 时,也需要假设输出 port 信号是与时钟相关联的,且 port 端信号在延迟了一小段时间后可以到达可能存在的 ”下一级寄存器的 D 端“,并被时钟捕获。 这一小段延迟时间称为 output delay。

图片

假设上图中 port B 信号输出后到达下一级的 output delay (Tt + Tsetup) 为 0.8ns,时钟周期为 2ns,clock uncertainty 为 0.3ns,则约束语句描述为:

create_clock -period 2 [get_ports Clk]
set_clock_uncertainty -setup 0.3 [get_clocks Clk]
set_output_delay -max 0.8 -clock Clk [get_ports B]

寄存器 FF3 的 clock 端到 port B 的最大延时为:

Tmax = 2-0.3-0.8 = 0.9ns

只要寄存器 FF3 的 clock 端到 port B 的延时小于 0.9ns,时序就能满足要求。

当所有输出端口延迟相同时,也可以同时对所有输出端进行 output delay 的设置。 当仅有一两个信号的输出延时不同时,可以使用分别设置的方法,也可以使用覆盖设置的方法。

Input-to-Output 约束

当输入端和输出端之间只存在组合逻辑时,就需要在 DC 中创建虚拟时钟来约束时序。 虚拟时钟没有连接到设计中的任何端口,只为方便分析 input delay 与 output delay。

例如某个设计示意图如下所示,估算虚拟时钟的频率为 2ns, uncertainty 为 0.3ns,则 Input-to-Output 的约束语句描述如下:

# 创建虚拟时钟时无需指定 clock 源,且不可省略 -name 选项
create_clock -name VCLK -period 2
set_clock_uncertainty -setup 0.3 [get_clocks VCLK]
set_input_delay -max 0.4 -clock VCLK [get_ports A]
set_output_delay -max 0.3 -clock VCLK [get_ports B]

此时 port A 与 port B 之间的组合逻辑最大延时要求为:

Tcomb = 2-0.3-0.4-0.3 = 1ns

图片


Latency/Uncertainty 对 Input/Output Delay 的影响

上一个寄存器的时钟端到下一个寄存器的数据端的路径,可以称为数据路径 (data path)。 而时钟周期的传输可以称为时钟路径 (clock path)。

clock 建模时,如果设置了 Uncertainty/Latency,则会对 data path 和 clock path 产生影响,从而对 Input/Output Delay 的相关时序可能也会产生影响。

某一设计示意图及时序约束语句描述如下,图中也简单计算了数据到来时刻、数据捕获时刻、时钟到来时刻等信息

图片

首先分析 Input-to-Reg path:

考虑 clock latency,时钟延时为 source latency 与 network latency 的总和:

clock latency = 0.3+0.12 = 0.42 ns

FF2 时钟端的 clock launch 包含了 clock latency 和 uncertainty,到达时刻为:

clk launch = 2+0.42-2 = 2.22ns

数据到达 port 端口的时间为 clock latency 与 input delay 的总和:

input arrival = 0.42+0.6 = 1.02ns

所以,内部路径 N 的最大延时为:

Npath_Tmax = clk launch - input arrival = 2.22-1.02 = 1.2ns

不考虑 clock latency,则内部路径 N 的最大延时为:

Npath_Tmax = 2 - 0.2 - 0.6 = 1.2ns

可见,clock latency 对 Input-to-Reg 路径时序没有影响,clock uncertainty 有影响。

分析 Reg-to-Output 路径:

考虑 clock latency,则 clock launch 时间不变,仍然为 2.22ns。

clock latency 与内部路径 S 的延时时间和为:

clock latency + Spath_Tmax
= clock launch - output_delay
=2.22 - 0.8 = 1.42ns

内部路径 S 的最大延时为:

Spath_Tmax = 1.42 -0.42 = 1ns

不考虑 clock latency,则内部路径 S 的最大延时为:

Spath_Tmax = 2 - 0.2 - 0.8 = 1ns

可见,clock latency 对 Reg-to-Output 路径时序没有影响,clock uncertainty 有影响。

小结

clock latency 同时作用于 data_path 与 clock path,所以对 Input-to-Reg 与 Reg-to-Output path 的时序分析不会产生影响。

clock Uncertainty 只作用于clock path,所以对 Input-to-Reg 与 Reg-to-Output path 的时序分析会产生影响。

时序预算 (Timing Budget)

因为应用场景的差异,更多时候 input/output delay 的具体值是无法精确得到的,这就需要对相关的延时值进行估计,并应用到约束设置中,即为时间预算 (timing budget)。

Timing Budget 的方式主要有两种:按时钟百分比估算和按寄存器输出估算。

按时钟百分比估算

图片

一般建议使用时钟周期的 40% 时长来约束 port 端到寄存器 D 的延时 (上图中 MY_BLOCK 的 N path) ,即 input delay 可以设置为时钟周期的 60% 时长。 output delay 同理。

假如上一级 Q 端到输出端的延时 (上图中 X_BLOCK 的 S path) 也取 40%,那么 Input-to-Reg path 将有 20% 的裕量,裕量中包括 FF1 的 CQ 延时 (FF1 时钟端到输出端) 和 FF2 的建立时间。 所以,实际设置 60% 的 input delay 是有些偏大的。

假设上述设计中,时钟周期为 10ns,则 timing bugdet 方案可以描述如下:

create_clock -period 10 [get_ports CLK]
set_input_delay -max 6 -clock CLK \\
      [remove_from_collection [all_inputs] [get_ports CLK]]
set_output_delay -max 6 -clock CLK [all_outputs]

按寄存器输出估算

假设所有的输出 port 都是由寄存器驱动的 (见上图中的 X_BLOCK 和 Y_BLOCK 设计),那么 input delay 可以由上一级寄存器的延时特性估算,output delay 可以由下一级寄存器的延时特性估算。

例如通过查找 library 得到触发器的 CQ 延时 (时钟端到输出端) 最大为 1.5ns,最小为 0.2ns,那么 input/output delay 的约束语句可以描述如下:

set C2Q_MAX 1.5
set C2Q_MIN 0.2
set PERIOD 10
create_clock -period $PERIOD [get_ports CLK]
set_input_delay -max $C2Q_MAX -clock CLK \\
      [remove_from_collection [all_inputs] [get_ports CLK]]
set_output_delay -max [expr 10-$C2Q_MIN] -clock CLK [all_outputs]
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    30

    文章

    5020

    浏览量

    117625
  • 时钟
    +关注

    关注

    10

    文章

    1479

    浏览量

    130295
  • 约束
    +关注

    关注

    0

    文章

    82

    浏览量

    12637
  • 时序约束
    +关注

    关注

    1

    文章

    111

    浏览量

    13349
  • 时序路径
    +关注

    关注

    0

    文章

    12

    浏览量

    1371
收藏 人收藏

    评论

    相关推荐

    VIVADO时序约束及STA基础

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

    FPGA的IO口时序约束分析

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

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

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

    FPGA I/O口时序约束讲解

    前面讲解了时序约束的理论知识FPGA时序约束理论篇,本章讲解时序
    发表于 08-14 18:22 907次阅读
    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

    高云半导体时序约束相关内容

    本手册主要描述高云半导体时序约束相关内容,包含时序约束编辑器(Timing Constraints Editor)的使用、
    发表于 09-29 08:09

    时序约束时序分析 ppt教程

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

    时序约束用户指南

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

    XDC约束及物理约束的介绍

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

    FPGA设计之时序约束

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

    时序约束相关知识(一)

    本章节主要介绍一些简单的时序约束的概念。
    的头像 发表于 03-31 16:37 994次阅读
    <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 1360次阅读
    如何在Vivado中添加<b class='flag-5'>时序</b><b class='flag-5'>约束</b>

    如何在Vivado中添加时序约束呢?

    今天介绍一下,如何在Vivado中添加时序约束,Vivado添加约束的方法有3种:xdc文件、时序约束向导(Constraints Wiza
    的头像 发表于 06-26 15:21 2137次阅读
    如何在Vivado中添加<b class='flag-5'>时序</b><b class='flag-5'>约束</b>呢?

    时序约束怎么用?时序约束到底是要干嘛?

    很多小伙伴开始学习时序约束的时候第一个疑惑就是标题,有的人可能会疑惑很久。不明白时序约束是什么作用,更不明白怎么用。
    的头像 发表于 06-28 15:10 930次阅读
    <b class='flag-5'>时序</b><b class='flag-5'>约束</b>怎么用?<b class='flag-5'>时序</b><b class='flag-5'>约束</b>到底是要干嘛?

    浅谈时序设计和时序约束

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