时序约束

###1. clock
# 在设计之初 并不知道设计所能跑的时钟周期能有多小; 根据DC ICC 都是多次迭代 获得最优解的原则 ; 一开始先给自己的估计值;
# 对于180nm 的库来说, 由于IO pad 的限制 , 最多能跑100Mhz左右 当然单独综合core 的频率会更大一些;
#一开始 我们设置5ns 一开始紧一些 可以更快的获得 设计的时钟顶;
# set clock constrians
create_clock -period 5 [get_ports clk]
set_dont_touch_network [get_ports clk]
set CLOCK1 [get_clocks clk]
set_clock_latency -source -max 0.5 $CLOCK1
set_clock_latency -max 0.5 $CLOCK1
set_clock_uncertainty -setup 0.35 $CLOCK1 ;#clock period 5%;skew=0.04,jitter=0.03,margin=0.03
set_clock_transition -max 0.2 $CLOCK1
#max_fanout
#max_fanout是一个设计规则约束;

对于 REG -REG 的path 需要我们提供哪些约束for setup time?

主要是时钟相关的约束;

  1. 占空比 仅仅在你的设计中寄存器是在时钟的上升沿和下降沿都触发的时候才必须指定,对于都是时钟上升沿触发的路径,仅需要指定时钟周期即可,DC会从工艺库中拿出setup_time进行计算;
  2. 除非指定了waveform option ,默认的时钟在0时刻上升在50%下降依次重复;时钟的名字必须和时钟引脚的名字一致,除非使用-name选项指定;
  3. 如果你想知道时钟的单位的话 可以通过report_lib 来查看库里规定的单位;或者get_attribute <lib_name> time_unit_name

input path的约束

  1. input_daly

    1. 上一级模块所要保留的最大时间 是 P - input_delay(max)- clock_uncertainty - register setup_time
  2. 一般预留40%在自己的电路部分

output path的约束

  1. output_delay

    1. 下级模块所要保留的时间 就是 P-clock_uncertainty - output_delay;

输入输出延迟默认会继承在set_clock_latency和uncertainty的值

也就是输入输出延迟的计算是在附加clock_latency和clock_uncertainty的时钟的launch &capture计算的;

对于纯组合逻辑电路来说

需要创建虚拟的时钟去分析纯组合逻辑路径的时序,
指定input_delay 和output_delay 也就是说和design 外部的时序同步起来,也就是在comb两边加两个寄存器,使它成为一个带时序的路径,然后估算他的path time;

除了上面的输入输出 delay

那些都是需要的,除此之外还要指定input_transition 和output_load
上面的那些约束只是描述regreg input output path多少时间是可行的;但没有描述在什么样的条件下这些delay必须满足;
门的延迟是它 input_transition和output_load的函数,默认 DC对于output port声明理想的负载(zero),对input port声明理想的transition time(zero);这会导致比较乐观的path timing;为了更加精确的path timing 必须对input_transition和output_load 做精确的建模.

输入转换时间和输出负载的影响

输入端口的上升和下降转换时间影响后边门的cell delay
输出电容负载的大小会影响到transition time 电平的转换时间

set

set_input_transition or set_driver_cell 二选一; 一个是指定确定的transition time的值 一个是通过库中的单元信息估算transition time;

set_driver_cell -max -lib_cell OR3B [get_ports all_inputs]
set_input_delay -max [grt_ports all_inputs]#output load
set_load -max [expr{30.0/1000}] [get_ports all_outputs]
#或者
set_load -max [load_of my_lib/AN2/A] get_ports [all_outputs]

在输入输出电路结构都不知道的情况下 如何做load budget

  1. 为input_pins 设置比较小的driving_cell 比如一个反相器
  2. 为output_load 设置个较大的负载 比如3个与门;

补充 2022 08 13

SDC主要分6部分内容
包括:

  1. operation condition & wire load mode
  2. timing constrains
  3. 设计规则约束
  4. 时序例外
  5. logic assignments (设置逻辑确定的约束值 set_case_analysis set_logic_zero)
  6. 优化用约束 如set_max_delay set_max_area

时钟约束

创建时钟

#使用
create_clock -name clk -period 15 -waveform {5 10} get_clock clk
#其中 waveform 指定的是第一个上升沿和下降沿??yes
#对于 生成时钟
create_generated_clock -divide_by 2 -source clk [get_pins FF1/Q]#其中source 是源时钟, edge是??

理解eage选项的用法,这里介绍脉冲时钟;

pulse clock

脉冲时钟是由一系列短脉冲组成,脉冲的上升沿和下降沿均来自同一时钟的同一沿生成的,PT为了对这种生成时钟进行分析需要获得这个时钟的一些时序信息;有三种方法:

  1. 直接使用库中标注了时序信息的 pulse generator;
  2. 使用 create_generated_clock 去描述pulse与source clock的时序;
  3. 使用 set_sense -type clock 指定生成时钟对于源时钟的意义??
    最好的方法是直接使用 库中做了标注的 pulse generator;

如图,所示同一个沿生成了CLKP的上升沿和下降沿,pulse的宽度取决于inverter的延迟;

create_generated_clok -name CLKP -source CLK -edges {1 1 3} [get_pins and2/z]

-edges 主要有4种搭配
{1 1 3} 源时钟上升沿触发high pulse
{2 2 4} 源时钟下降沿触发high pulse
{1 3 3} 源时钟上升沿触发low pulse
{2 4 4} 源时钟下降沿触发low pulse 凹脉冲

clock skew 和 latency

clock skew 时序单元时钟端时钟到达时间的不同
clock latency是时钟从源到叶子节点总的延迟时间;

在设计周期的较早阶段,会使用理想的时钟树进行静态时序分析;理想时钟树中的clock skew默认为0,可以使用 clock uncertainty指定;latency使用 set_clock_latency来建模;

set_clock_latency 2.2 [get_clocks SYS_CLK]set_clock_uncertainty -setup
#clock skew 5% + jitter 0.01%

synchronous clock & asynchronous clock

同步时钟

  1. share a common source
  2. have a fixed phase relationship
    除非你指定, STA工具会假定存在数据launch和capture的路径上的两个时钟是同步的;

异步时钟
两个时钟域的时钟沿没有任何关系,STA工具不会分析launch by one capture by another one的路径;

互斥时钟组
logic exclusive 逻辑互斥
1. do not have a function path
2. but may have coupling interaction
在逻辑上相互排斥,但互相之间可能存在耦合影响,比如两个时钟被MUX选通,但会收到MUX内部coupling upstream影响;
physical exclusive 物理互斥
两个时钟不会同时存在于设计中,例如function clock 和test clock ,例如多个时钟定义在同一个pin上,但同时只有一个可以活跃在设计中.

IO path constrains

对于输入输出端口,假设上一级与本级同步,需要上级寄存器 tcq,寄存器D端到 输入pin中间的组合逻辑时间;

set_input_delay -max 7.4 -clock CLk [get_ports A]set_input_delay  1.5 -clock CK1 [get_pins IN1]
set_input_delay 2 -clock CK2 [get_pins IN1] -add_delay
#使用add_delay 选项对 同一个输入pin 不同的时钟路径,进行约束;

输出引脚的约束 与输入引脚类似;

输入输出引脚外部的时钟需要通过virtual clock定义

create_clock -那么 VCLK -period 20

false path

false_path 是对于那些实际中不存在,不能被激活的路径且在时序分析中是毫不相干;
设置false_path 可以避免工具不必要的优化; 但是无效的false_path 会掩盖真正的时序违例;

multi-cycle path

一些路径上存在非常负载的组合逻辑,不能在一个周期内完成计算;
默认综合工具会优化这些组合逻辑,通过重新分配单机流水线的宽度,使其满足单周期的要求;
添加multi-cycle path会放松此条路径上的约束;

set_multicycle_path -setup 6 -from -to
set_multicycle_path -hold 5 -from -to#为啥 hold要比 setup 早一个??
# 暂时理解为 hold 都是在capture 沿进行检查 所以 capture 到 capture 比 launch 到 capture 少一个周期.

set max delay

设置路径的最大延迟,此约束会覆盖掉根据时钟的launch和capture edges到达时间所建立的默认建立时间约束;

设置max min delay之后 在时序分析时 data require time会根据 max_delay 去计算;

创建DC时序约束文件相关推荐

  1. xilinx Vivado的使用详细介绍(2):创建工程、添加文件、综合、实现、管脚约束、产生比特流文件、烧写程序、硬件验证

    xilinx Vivado的使用详细介绍(2):创建工程.添加文件.综合.实现.管脚约束.产生比特流文件.烧写程序.硬件验证 Author:zhangxianhe 新建工程 打开Vivado软件,直接 ...

  2. 基于Xlinx的时序分析与约束(1)----什么是时序分析?什么是时序约束?什么又是时序收敛?

    文章目录 写在前面 磨刀不误砍柴工 什么是时序分析? 什么是时序约束? 什么是时序收敛? 写在前面 时序约束与分析是FGPA开发过程中一项必备的技能,同时也是设计开发中相对较难的部分.很多人一谈起FP ...

  3. 转载:基于Xlinx的时序分析、约束和收敛(1)— 什么是时序分析?什么是时序约束?什么又是时序收敛?

    本文转载自CSDN博主「孤独的单刀」的原创文章,原文链接:https://blog.csdn.net/wuzhikaidetb/article/details/125731074 写在前面 时序约束与 ...

  4. FPGA之道(80)静态时序分析(六)常用时序约束介绍(基于ISE的UCF文件语法)

    文章目录 前言 常用时序约束介绍 时序环境约束 分组时序约束 TNM TNM_NET TIMEGRP 常用时序约束 周期约束 输入时钟周期约束 内部时钟周期约束 关联时钟周期约束 差分时钟周期约束 输 ...

  5. vivado下创建基本时序周期约束

    创建基本时钟周期约束.(验证我们的设计能否在期望的频率上运行) (学习记录,晚一点会做实验传上来的.) 时钟基本概念:https://blog.csdn.net/wordwarwordwar/arti ...

  6. ise 时钟约束_ISE——ucf文件中时序约束

    摘要:本文主要通过一个实例具体介绍ISE中通过编辑UCF文件来对FPGA设计进行约束,主要涉及到的约束包括时钟约束.群组约束.逻辑管脚约束以及物理属性约束. Xilinx FPGA设计约束的分类 Xi ...

  7. IDEA使用过程中相应的配置和设置(如编码设置、窗口调整以及config.xml文件模板创建、工程打开方式、约束文件)

    1. IDEA调整工具栏的位置(原来在右边,现在调整到左边),[View]-->[Appearance]-->[Toolbar] 2. IDEA调整代码区背景([File]-->[S ...

  8. Tcl与Design Compiler (十)——其他的时序约束选项(一)

    本文如果有错,欢迎留言更正:此外,转载请标明出处 http://www.cnblogs.com/IClearner/  ,作者:IC_learner 之前讲了基本的时序路径约束,现在我们来看一下其他的 ...

  9. 数字逻辑综合工具-DC-04 ——怎样增加时序约束(Timing Constraints)

    数字逻辑综合工具-DC-04 --怎样增加时序约束(Timing Constraints) 逻辑综合的过程为:转化 优化 映射 另外还有环境约束和面积约束 时序有三个大的方面 input logic ...

最新文章

  1. 使用Docker搭建svn服务器教程
  2. mysql 主从有哪几种模式_mysql 主从模式总结(一)
  3. Python调用MongoDB使用心得
  4. 薪酬管理的特点和注意事项[转]
  5. asp.net控件开发基础十四
  6. java基础(五) String性质深入解析
  7. VTK:图片之ImageRange3D
  8. LeetCode 20. 有效的括号(栈)
  9. Twisted入门教程(9)
  10. 程序员如何借助 AI 开挂股票神预测?| 技术头条
  11. Vue2学习小记-给Vue2路由导航钩子和axios拦截器做个封装 1
  12. iphone手机删除的照片怎么恢复
  13. linux装sql2008数据库,Ubuntu 16.04下安装SQL Server for Linux
  14. c语言智能插座多线程原理,主芯片HLW8012 - 基于WiFi智能插座的智能家居电路及原理解析—电路精选(49)...
  15. 数据分析之RFM——用户模型分析(附案例数据和代码)
  16. Unity打包WebGL遇到的il2cpp.exe did not run properly问题
  17. SFP光模块电气接口参数详解
  18. 生物特征识别的种族偏见,肤色偏见,性别偏见
  19. 用友t3服务器地址在哪里修改,畅捷通T+pos端后续想更换服务器地址链接,怎么操作?...
  20. 如何通过QQ邮箱获取授权码

热门文章

  1. What?外星人电脑大放价?双十一来杭州外星人大悦城旗舰店薅羊毛吧
  2. OpenStack 命令行速查表
  3. 帆软报表如何调整软件字体?字体太小看不清怎么办?
  4. 足疗浴池收银软件如何帮助商店进行良好的市场定位?
  5. 1-20 IO流_2
  6. 原生Ajax下载excel(带token)
  7. python批量爬取下载网易云音乐
  8. Car Key是什么?
  9. Python多元线性回归、机器学习、深度学习在近红外光谱分析中的应用
  10. 数学中为什么要研究各种各样的变换?