深入浅出讲透set_multicycle_path,从此彻底掌握它

2024-03-03 06:30

本文主要是介绍深入浅出讲透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,从此彻底掌握它的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/768755

相关文章

poj 3050 dfs + set的妙用

题意: 给一个5x5的矩阵,求由多少个由连续6个元素组成的不一样的字符的个数。 解析: dfs + set去重搞定。 代码: #include <iostream>#include <cstdio>#include <set>#include <cstdlib>#include <algorithm>#include <cstring>#include <cm

Collection List Set Map的区别和联系

Collection List Set Map的区别和联系 这些都代表了Java中的集合,这里主要从其元素是否有序,是否可重复来进行区别记忆,以便恰当地使用,当然还存在同步方面的差异,见上一篇相关文章。 有序否 允许元素重复否 Collection 否 是 List 是 是 Set AbstractSet 否

论文翻译:ICLR-2024 PROVING TEST SET CONTAMINATION IN BLACK BOX LANGUAGE MODELS

PROVING TEST SET CONTAMINATION IN BLACK BOX LANGUAGE MODELS https://openreview.net/forum?id=KS8mIvetg2 验证测试集污染在黑盒语言模型中 文章目录 验证测试集污染在黑盒语言模型中摘要1 引言 摘要 大型语言模型是在大量互联网数据上训练的,这引发了人们的担忧和猜测,即它们可能已

生信代码入门:从零开始掌握生物信息学编程技能

少走弯路,高效分析;了解生信云,访问 【生信圆桌x生信专用云服务器】 : www.tebteb.cc 介绍 生物信息学是一个高度跨学科的领域,结合了生物学、计算机科学和统计学。随着高通量测序技术的发展,海量的生物数据需要通过编程来进行处理和分析。因此,掌握生信编程技能,成为每一个生物信息学研究者的必备能力。 生信代码入门,旨在帮助初学者从零开始学习生物信息学中的编程基础。通过学习常用

多路转接之select(fd_set介绍,参数详细介绍),实现非阻塞式网络通信

目录 多路转接之select 引入 介绍 fd_set 函数原型 nfds readfds / writefds / exceptfds readfds  总结  fd_set操作接口  timeout timevalue 结构体 传入值 返回值 代码 注意点 -- 调用函数 select的参数填充  获取新连接 注意点 -- 通信时的调用函数 添加新fd到

如何掌握面向对象编程的四大特性、Lambda 表达式及 I/O 流:全面指南

这里写目录标题 OOP语言的四大特性lambda输入/输出流(I/O流) OOP语言的四大特性 面向对象编程(OOP)是一种编程范式,它通过使用“对象”来组织代码。OOP 的四大特性是封装、继承、多态和抽象。这些特性帮助程序员更好地管理复杂的代码,使程序更易于理解和维护。 类-》实体的抽象类型 实体(属性,行为) -》 ADT(abstract data type) 属性-》成

Android set Tag, findViewWithTag使用

设置了tag为“principal”的view ImageView principal = (ImageView) findViewById(R.id.imagen_home_0);principal.setTag("principal"); 在其它地方获取,获取已经设置了tag为“principal”的view LayoutInflater inflater = LayoutInflate

C++ STL关联容器Set与集合论入门

1. 简介 Set(集合)属于关联式容器,也是STL中最实用的容器,关联式容器依据特定的排序准则,自动为其元素排序。Set集合的底层使用一颗红黑树,其属于一种非线性的数据结构,每一次插入数据都会自动进行排序,注意,不是需要排序时再排序,而是每一次插入数据的时候其都会自动进行排序。因此,Set中的元素总是顺序的。 Set的性质有:数据自动进行排序且数据唯一,是一种集合元素,允许进行数学上的集合相

JAVA初级掌握的J2SE知识(二)和Java核心的API

/** 这篇文章送给所有学习java的同学,请大家检验一下自己,不要自满,你们正在学习java的路上,你们要加油,蜕变是个痛苦的过程,忍受过后,才会蜕变! */ Java的核心API是非常庞大的,这给开发者来说带来了很大的方便,经常人有评论,java让程序员变傻。 但是一些内容我认为是必须掌握的,否则不可以熟练运用java,也不会使用就很难办了。 1、java.lang包下的80%以上的类

JAVA初级掌握的J2SE知识(一)

时常看到一些人说掌握了Java,但是让他们用Java做一个实际的项目可能又困难重重,在这里,笔者根据自己的一点理解斗胆提出自己的一些对掌握Java这个说法的标准,当然对于新手,也可以提供一个需要学习哪些内容的参考。另外这个标准仅限于J2SE部分,J2EE部分的内容有时间再另说。 1、语法:必须比较熟悉,在写代码的时候IDE的编辑器对某一行报错应该能够根据报错信息知道是什么样的语法错误并且知道