(1) clock

Q1.1什么是同步时钟?
时钟频率是整倍数,并且相互之间的相位是固定而且相差可预知的,才可以称得上是同步时钟。其他的都算异步时钟。
比如,
5M,10M是同步
2M,3M一般算异步
一个时钟,输出到另一个芯片中,转一圈后,以同样的频率返回到自己的芯片,因为无法确定时钟在另一个芯片里面的latency,所以输出的时钟与输入的时钟算异步
一个时钟进到2个PLL,就算那2个PLL的输出频率相同,一般也算是异步时钟,除非你de-skew

Q1.2 如何处理同步时钟?
设计要求严格的公司,就算是同步时钟,数据在同步时钟间传送时,依然要用meta-stability FF,可以set_false_path
如果放松要求,不用meta-stability FF,则同步时钟之间是real path,做CTS时,同步时钟要clock tree balance。
注意不同频率的同步时钟的最小时间间隔被用来检查setup
如果上升下降沿混用的话,setup的时间间隔就只有半个时钟周期了

Q1.3 如何处理异步时钟?
很简单,set_false_path
注意要from A to B,同时要from B to A

Q1.4 如何定义时钟?
create_clock 如果指定某个pin/port,就是实时钟,如果没有指定pin和port,就是虚拟时钟
巧妙利用waveform选项可以做出不同波形的时钟
被定义成时钟的net,在综合时,自动带有ideal network和dont_touch的属性。但是当它被用作data计算延迟时,idealnet的属性会自动消失

set_drive 0 clk

Note:

Toprevent buffering of the clock network, the script sets the input driveresistance of the clock port (clk) to 0 (infinite drive strength).

时钟会自动穿过逻辑单元,停在时序单元的时钟端,所以用FF产生的分频时钟要再用create_generated_clock定义一次

Q1.5 如何处理多选一时钟?
在实际应用当中,如果这几个时钟不会同时出现的话,则在定义时钟时,只选择最快频率的就可以了
如果是多个时钟同时出现,可以用set_case_analysis选一个,
也可以放它们全都过去,但是在MUX后面把它们之间set_false_path

Q1.6 巧妙定义时钟
直接在分频FF的Q端定义generatedclock时,有时会把分频FF的时序打掉,解决办法是在分频FF的Q端加一个时钟buf,从那个buf的输出端定义generatedclock,从而保证分频FF自身的时序完整
如果从source clock到generated clock之间有多条路径,你希望PT用指定的一条路径来计算时序的话,可以用set_case_analysis,set_disbale_timing 或者一级一级地定义generated clock来引导PT达到你的要求

分频器时序约束问题

http://bbs.eetop.cn/thread-316442-1-1.html
时序分析中同一时钟的不同路径问题

问题:

解答:

首先这个跟CPPR没关系,CPPR补偿是以同一路径的时钟为前提的,ABD,ACD路径不一样,所以不涉及到CPPR
后来做时序检查的时候分成两个case,set case analysis在D点,ABD和ACD分开检查

这个是典型的Clockreconvergency问题, 时钟源头一样,然后走不同的路径,然后在某个mux上重新汇聚,在做timingcheck的时候这两条路径互相check,就产生violation,然而这样的路径是虚假的,因为一个mux不能同时通过两个时钟.

解决方法可以在mux上设case_analysis,每个mode只过一条路径,这样mode会变多,需用MMMC来解.做时钟树的时候一般情况下两条路径做到大致平衡,不过也有不能平衡的情况,比如DLL.

一般解决方法:如果不想用MMMC的话,在B和C处,分别定义generated_clock,然后把它俩set_false_path
Q1.7 什么时候需要设置latency?
latency分为source latency 和 network latency 两种。 source latency是源时钟自带的,networklatency就是CTS后的clock tree insertion delay。
在综合时,一般不需要latency,
除非,
已知不同clock带有不同的source latency,并且它们之间有时序要求
预知不同clock会有不同的clock tree insertion delay,不想平衡它们,但是要满足他们之间的时序要求

做完CTS后,要把network latency去掉

请问set_clock_latency 设太大会有什么不好

Q1.8 如何设置uncertainty
clock uncertainty分为setup和hold,preCTS和postCTS几种不同的情况
一般的处理原则是:
preCTS,setup: uncertainty = PLL jitter + 预估的clock skew
preCTS,hold: uncertainty = 预估的clock skew

postCTS,set_propagate_clock [all_clocks]
postCTS,setup: uncertainty = PLL jitter
postCTS,hold: uncertainty = 0
有时fundry要求hold uncertainty保留一定的量,这时就把那个保留量加到上面的公式中

sdc文件中对clk的uncertainty、transition、latency的设置

(2) IO端口的约束

Q2.1如何加IO端口的约束?
最普通的方法是
对输入端,set_input_delay, set_driving_cell (也有用set_input_transition的,但是不多见)
对输出端,set_output_delay,set_load
对时钟端,set_clock_transition

dc综合时的clock transition应该参考什么设定?

这个和工艺与设计有关,一般建议是
65nm时, min(1/10时钟周期,150ps)
90nm时,后面的数字为200ps,130nm更大一些
不过如果你的时钟特别慢时,再小一点也可以。
set_drive ,set_load
180nm工艺dc综合里set_load,set_drive的值具体根据什么参考来约束啊,一点概念都没有 ,请大家帮帮忙了 。。。。。。

解答:

如果你会布局布线的话
随便赋一个值,完成综合,然后做后端
从后端拿到一个精确值,返回来定driver和load,再重新做综合

版主解答:

set_drive很少用了
一般用set_driving_cell . set_load用来约束output port,
set_driving_cell/set_input_transition 用来约束input port
对于pad输出, load一般是10~30pf (很大了),
对于模块输出 ,load一般是 0.XXX pf
对于input transition,一般比查找表再大些的范围内

How to"set drive" and "set load" in DC?

if thisis a digital block inside an analog module, you can request to the analogdesigner, the load/drive capability for each pins and define betterconstraints.

If you want to add this constraint at padlevel, you need to know the PCB used, and every think like this, package....

Ingeneral, I only apply the set load/drive only for pin between analog/digital,because, this could have an impact on timing. The pad are so "slow",this constraints do not add much info.

Q2.2 哪些端口不需要约束?
静态信号可以set_false_path,比如reset,test_mode,function_mode_select
不能真的什么约束都不加

Q2.3 什么样的reset信号可以set_false_path?
如果在工作时,reset信号有效时,时钟信号不翻转,就可以set_false_path
如果reset信号动作时,时钟也有动作的话,就不能set_false_path

Q2.4 像reset那样的high fanout信号需要设定为ideal net吗?
如果是false path的话,可以设为ideal net
一般不需要设为ideal net,让DC加入buffer tree后,有利于估算功耗和面积

Q2.5 如果有一组输出信号,需要他们之间对齐,但是不太在乎有多大的延迟,这时应该如何约束?
如果有输出时钟的话,在那个输出时钟端口定义一个generated_clock,其它信号的output_delay都相对于这个generated_clock而定。只要有max和min,就可以把所有信号卡在一个范围之内
如果没有输出时钟的话,用set_output_delay -reference_pin

Q2.6 如何计算input和output delay?
如果是block的input和output delay,可以预先分配,比如输出端,输入端各1/3,中间的连接1/3
block的端口最好都flop-in,flop-out
如果是chip IO,要度其他芯片的IO时序和电路板上面的延迟,比较麻烦

set_input_delay的时间设置

set_input_delay/output_delay是设置外面的delay, 从而保留芯片内部的IO delay来约束
input io 到flop和flop到output port的delay,
一般紧约束为外面留70% , 里面留30% ,但实际上有些port要调整,不是每个port都需要一样的值 ,

set_input_delay [expr 0.7* $clk_period ] -clock $clk [all_inputs]
set_output_delay [expr 0.7 * $clk_period ] -clock $clk [all_outputs ]

(3) DRV
DRV有时也加DRC,与物理检测的DRC不是一个概念
DRV包括,
set_max_transition 与工艺相关,65nm的话,在0.6ns左右
set_max_fanout 与工艺相关,一般在12~20之间
set_max_capacitance
set_max_power
set_max_area

4) falsepath,multicycle path
Q4.1 什么情况下需要set_false_path?
异步时钟之间,
到meta-stability 的第一个FF路径,
静态信号

Q4.2 何时会用到multicycle_path?
太长的path,
不会每个周期都变的信号
注意:在RTL中,前端一定要多周期工作一次的功能

一般set_multicycle_path -setup <n周期>
要同时写set_multicycle_path -hold <n-1周期>

(5) wire loadmodel
wire load model是一种简单地根据fanout来估算wire delay的方法,在综合时,一般根据设计的大小选择对应的WLM
有时也会用zero wire load model,这时的clock period要相应减小15~25%,或者clock uncertainty增加15~25%

set_wire_load_model两种模式top和enclosed到底有什么区别?

更加准确的计算wire delay的方法是DC topo和RC physical,
他们在综合时会粗略地做个place,然后根据距离来计算延迟

(6) clock gating
Q6.1 如何加clock gating?
局部的clock gating在综合时,会自动加进去。加clockgating后,不但会减小功耗,还会改善时序,因为本来到D端的逻辑,一部分被移到CK端了,简化了D端的逻辑
整个block的clock gating,一般直接在RTL里面加,因为DC没有那么聪明

Q6.2 需要对clock gating加什么特别的约束吗?
如果使用标准库里面的ICG单元,不需要附加任何特别的约束,前后端的工具都认得它
如果用latch+and自己搭的clock gating,你要对那个and单元set_disable_clock_gating_check,还要告诉后端,一定把latch和and摆在一起
一般只在没有动态切换时钟时,才可以用一个and/or做clockgating,这时也要set_disable_clock_gating_check

(7)case_analysis
set_case_analysis可以强制某个node为0/1
这个0/1会沿着纯逻辑组合单元向前传送,如果没有特别设定的话,会停在时序单元上
注意,只是是向前传,不会向左右2边和向后传
举例:
如果设在输出端上,那么所有fanin端都会被强制为0/1
如果只设在某个输入端上,与之相连的输出端和其他输入端都不受影响

(8)ideal net/network
ideal_net只作用于这条net
ideal_network会把这个属性传送下去
clock net自动带有ideal net属性
其他net,何时需要设定ideal net?见Q2.4

时序约束,STA的QA相关推荐

  1. FPGA的设计艺术(6)STA实战之SmartTime时序约束及分析示例(I)

    前言 FPGA进行时序分析通常使用厂家的编译工具,进行时序分析,但是万变不离其宗,时序分析的知识通常都是通用的,原理都是一致的.下面根据SmartTime的资料来看下时序分析的实际操作是如何的,这在其 ...

  2. VIVADO时序约束及STA基础

    一.前言 无论是FPGA应用开发还是数字IC设计,时序约束和静态时序分析(STA)都是十分重要的设计环节.在FPGA设计中,可以在综合后和实现后进行STA来查看设计是否能满足时序上的要求.本文阐述基本 ...

  3. vivado 亚稳态_VIVADO时序约束及STA基础

    一.前言 无论是FPGA应用开发还是数字IC设计,时序约束和静态时序分析(STA)都是十分重要的设计环节.在FPGA设计中,可以在综合后和实现后进行STA来查看设计是否能满足时序上的要求.本文阐述基本 ...

  4. FPGA的设计艺术(7)STA实战之SmartTime时序约束及分析示例(II)

    前言 本文续FPGA的设计艺术(6)STA实战之SmartTime时序约束及分析示例(I),分析了时钟的不确定性,多周期路径,以及门控时钟的STA分析方法.可以使用各大厂家的时序分析工具,大多数都自带 ...

  5. fpga电平约束有什么作用_FPGA时序约束有什么样的作用

    何谓静态时序分析(Static Timing Analysis,简称STA) 它可以简单的定义为:设计者提出一些特定的时序要求(或者说是添加特定的时序约束),套用特定的时序模型,针对特定的电路进行分析 ...

  6. 时序约束基础 和 quartusII 中的设置

    时序约束目的: 一.提高设计的工作频率 二.获得正确的时序分析报告(STA:静态时序分析) 常用的时序概念:   周期,    最大时钟频率.    时钟建立时间.时钟保持时间.    时钟到输出延时 ...

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

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

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

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

  9. FPGA设计-时序约束(上篇,理论篇)

    最近想要同步CSDN和微信公众号的内容,各位看客们可以两边都关注一下,方便获取最新的信息.请扫描下面的的二维码添加关注,谢谢支持. 最近都在做ARM的方面学习工作,感觉有必要记录下来之前FPGA的工作 ...

最新文章

  1. JavaWeb学习之Path总结、ServletContext、ServletResponse、ServletRequest(3)
  2. 肝!用 Python 加密文件
  3. Shell编程-控制结构 | 基础篇
  4. 图解Ubuntu中pidgin登陆IRC
  5. Java中创建对象的5种方式
  6. Python数据清理之数据质量
  7. Java-WAS的Hello world
  8. 二叉树的深度优先遍历(DFS)与广度优先遍历(BFS)
  9. 萌新的Python练习菜鸟100例(十六)输出指定格式的日期。
  10. 扫描控件Web在线Applet
  11. 运行 java applet_创建运行第一个Java Applet程序
  12. 二维码扫一扫java开发
  13. 迷茫时的3个选择,决定了你人生的高度
  14. 教你编写一份高质量的软件测试报告
  15. linux df -h显示空间信息不正确
  16. [转贴]杨式太极拳八十五式通释—3—王志远
  17. JavaScript 三座大山
  18. 有哪些适合男生的蓝牙耳机?520情人节适合送男生的蓝牙耳机推荐
  19. 高校实验室设备预约管理系统
  20. python爬取携程网旅游_爬取携程网(ajax动态加载)

热门文章

  1. 这些赛道设计的点子,不让用太可惜了 | 赛道审核环节
  2. 2021年广东赛区线上比赛高校组合点-五邑大学
  3. 无线信标功能调试-2021-3-9-HALL检测与主控接口
  4. 智能车竞赛自动裁判系统
  5. python第五章_Python数据分析-第5章Series(下)
  6. c语言卡尔曼函数库,kalman之c语言实现
  7. java实时汇率的接口_eoLinker-API_Shop_汇率查询_API接口_Java调用示例代码
  8. mysql 查询rowno_C# Mysql 查询 Rownum的解决方法
  9. 教师php一对一修改成绩,【教师助手】班小二发成绩,一键导入成绩表格,自动一对一私密分发...
  10. 【 FPGA 】使用状态机设计一个ADC采样控制电路