本文主要是介绍深入浅出讲透set_multicycle_path,从此彻底掌握它,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
深入浅出讲透set_multicycle_path,从此彻底掌握它
文章右侧广告为官方硬广告,与吾爱IC社区无关,用户勿点。点击进去后出现任何损失与社区无关。
点击标题下「蓝色微信名」可快速关注
今天在跑 PR flow 后 debug timing 时,发现前端给的 constraint 中存在一点问题,若干地方的时序本可以设置 multicycle 的 path,给漏设了,直接影响工具对 design timing 的优化力度。因此,小编打算写一篇文章来介绍下 multicycle path 的概念和用法,同时也带领大家复习下 setup 和 hold 的时序检查机制。
通常情况下,两个同步的 reg 进行 timing check 时,组合逻辑的 delay 必须在一个时钟周期内到达,才能满足 setup 的时序。但在某些情况下,从一个寄存器输出到另外一个寄存器的 data 端需要不止一个 cycle 的时间,而且又不影响逻辑的功能。此时,我们可以将这样的 path 约束为 multicycle path。图 1 所示为一个 3cycle 的 multicycle path 的电路结构图和波形图。
因此,我们可以用下面的命令来定义约束:
create_clock -name CLKM -period 10 [get_ports CLKM]
set_multicycle_path 3 -setup -from [get_pins UFF0/Q] -to [get_pins UFF1/D]
setup 检查:
默认情况下,当 UFF0/CK 作为 launch clock 时(T=0ns 时),在 T=10ns 时 UFF1/CK 采集到前一级过来的数据。
图 1 multicycle path 下的 setup 时序检查
但是当我们通过以上的命令设置了 3 个 cycle 的 multicycle path 的约束之后,launch clk 的沿推到了 T=30ns。因此,两个寄存器之间那段组合逻辑的 delay 要求就放松到了近三个时间 cycle。这种情况下 setup 是比较容易满足的。对应的 setup 检查时序报告如下图 2 所示。
图 2 setup 检查时序报告
hold 检查:
默认情况下,hold 检查的沿应该是在 T=20ns 时刻(较 setup capture edge 早一个 cycle)。这种检查机制好不好呢?显然不好。为什么呢?(可以自己画波形,其实波形已经在图 3 中了)。从图中看到这样的 hold 检查方式,会导致 hold 可能过度悲观,很难满足 hold time 的要求。
图 3 multicycle path 下的 hold 时序检查
因此,我们需要像单 cycle check 的情况一样,即 hold 检查的沿应该和 launch clk 的 edge 一致(T=0 时刻)。这样我们的 hold time check 比较容易满足,也比较科学。那么如何实现这种想法呢?我们引进了如下约束命令:
set_multicycle_path 2 -hold -from [get_pins UFF0/Q] -to [get_pins UFF1/D]
这里面的数字 “2” 是指将默认的 hold check edge 往前推 2 个时钟周期,即从原来的 T=20ns 时刻往前移到 T=0ns 时刻。对应的 hold 时序检查报告如下图 3 所示。
图 4 hold 检查时序报告
因此,在我们给设计写约束文件时(定义 multicycle path 时),需要同时定义如下命令:
set_multicycle_path N -setup -from [get_pins UFF0/Q] -to [get_pins UFF1/D]
set_multicycle_path N-1 -hold -from [get_pins UFF0/Q] -to [get_pins UFF1/D]
如果只定义了 - setup 3 而没有定义 - hold 时,工具 hold check 时, 默认的 clock edge 为 capture edge(setup timing check 时)前一个 cycle 的那个 edge。
到此小编已经介绍完了 set_multicycle_path 的概念,用法以及 setup hold time 的检查机制。本文用的例子是两个寄存器是被同一个 CLK 所驱动的。那如果两个寄存器是被不同的 clk 所驱动的,情况又是如何呢?这里我就不多啰嗦了,大家自己思考,必须学会举一反三。图 5 中的 setup check 和 hold check 对不对呢?
图 5 思考题波形图
文章末尾福利:
很多公司面试或者笔试时,经常也会要求看懂 timing report,这是最基本的能力,必须学会看懂。
那么谁能告诉我图 2 中的 launch clock latency 为何是 0.11,capture clock latency 为何是 0.12?什么原因导致的?从 timing report 中能否知道是否已经做了 CTS?
图 5 中的 CLM 和 CLP 的周期分别是多少呢?如何来根据波形来定义这两个 clock 呢?。。。此处可以有更多的问题可以提问和值得我们思考的地方。
如果你对这些有疑问,欢迎到公众号留言,与我互动交流。
好了,今天的内容分享就到这里。另外,因为公众号更改推送规则,小编分享的每篇干货不一定能及时推送给各位。为了避免错过精彩内容,请关注星标公众号,点击 “在看”,点赞并分享到朋友圈,让推送算法知道你是社区的老铁,这样就不会错过任何精彩内容了。
如果你想和小编有更进一步的沟通交流的机会,欢迎加入小编知识星球,让我们一起学习成长,共同进步。相信在这里能让你成就一个更完美的自己 。
小编知识星球简介(如果你渴望进步,期望高薪,喜欢交流,欢迎加入 *** *):
在这里,目前已经规划并正着手做的事情:
-
ICC/ICC2 lab 的编写
-
基于 ARM CPU 的后端实现流程
-
利用 ICC 中 CCD(Concurrent Clock Data)实现高性能模块的设计实现
-
基于 ARM 四核 CPU 数字后端 Hierarchical Flow 实现教程
-
时钟树结构分析
-
低功耗设计实现
-
定期将项目中碰到的问题以案例的形式做技术分享
-
基于 90nm 项目案例实现教程(ICC 和 Innovus 配套教程)
-
数字 IC 行业百科全书
吾爱 IC 社区 知识星球星主为公众号” 吾爱 IC 社区” 号主,从事数字 ic 后端设计实现工作近十年,拥有55nm,40nm,28nm,22nm,14nm 等先进工艺节点成功流片经验,成功tapeout 过三十多颗芯片 。
这里是一个数字 IC 设计实现高度垂直细分领域的知识社群,是数字 IC 设计实现领域中最大,最高端的知识交流和分享的社区,这里聚集了无数数字 ic 前端设计,后端实现,模拟 layout 工程师们。
在这里大家可以多建立连接,多交流,多拓展人脉圈,甚至可以组织线下活动。在这里你可以就数字 ic 后端设计实现领域的相关问题进行提问,也可以就职业发展规划问题进行咨询,也可以把困扰你的问题拿出来一起讨论交流。对于提问的问题尽量做到有问必答,如遇到不懂的,也会通过查阅资料或者请教专家来解答问题。在这里鼓励大家积极发表主题,提问,从而促进整个知识社群的良性循环。每个月小编会针对活跃用户进行打赏。
最重要的是在这里,能够借助这个知识社群,短期内实现年薪百万的梦想!不管你信不信,反正已经进来的朋友肯定是相信的!相遇是一种缘分,相识更是一种难能可贵的情分!如若有缘你我一定会相遇相识!知识星球二维码如下,可以扫描或者长按识别二维码进入。目前已经有 900 位星球成员,感谢这900 位 童鞋的支持!欢迎各位渴望进步,期望高薪的铁杆粉丝加入!终极目标是打造实现本知识星球全员年薪百万的宏伟目标 。
欢迎关注 “吾爱 IC 社区 ”
微信号:ic-backend2018
https://mp.weixin.qq.com/s/RGAC6hKsPF3WTkdVJS9CWw
这篇关于深入浅出讲透set_multicycle_path,从此彻底掌握它的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!