静态时序分析简明教程(六)]时钟组与其他时钟特性

news2024/11/18 21:52:11

生成时钟的sdc约束方法

    • 一、写在前面
      • 1.1 快速导航链接·
    • 二、时钟组
      • 2.1 引入时钟组
      • 2.2 set_clock_group
        • 2.2.1 -name
        • 2.2.2 -group clock_list
        • 2.2.3 -logically_exclusive|-physically_exclusive|-asynchronous
        • 2.2.4 -allow_path
        • 2.2.5 -comment
    • 三、其他时钟特性
      • 3.1 过渡时间
      • 3.2 偏移与抖动
      • 3.3 时钟延迟
    • 四、总结

一、写在前面

一个数字芯片工程师核心竞争力是什么?不同的工程师可能给出不同的答复,有些人可能提到硬件描述语言,有些人可能会提到对于特定算法和协议的理解,有些人或许会提到对于软硬件的结合划分,作者想说,这些说法,其实对也不对,硬件描述语言,翻来覆去无非是always和assign这几个语句的反复使用,而一些基础的协议算法深究起来其实也并不复杂,于作者而言,在常规的技能以外,有两项额外的技能颇为重要,其中之一便为sdc/STA的分析能力,它的重要之处在于作为桥梁建立了前端和后端的连接,虽然对于DE工程师而言,初版交付的sdc往往不甚准确,也没有办法通过这份sdc生成一份无误的timing report,但sdc的内容体现却是完完整整的将时序约束从行为级的描述映射到了gate level这样一个真实的电路层次上面。
写此专栏,一为学习记录,二为交流分享,以犒粉丝读者。

1.1 快速导航链接·

静态时序分析简明教程(一)绪论
静态时序分析简明教程(二)基础知识:建立保持时间,违例修复,时序分析路径
静态时序分析简明教程(三)备战秋招,如何看懂一个陌生的timing report
静态时序分析简明教程(四)时钟常约束
静态时序分析简明教程(五)生成时钟
静态时序分析简明教程(六)时钟组与其他时钟特性
静态时序分析简明教程(七)端口延迟
静态时序分析简明教程(七)完整端口约束
静态时序分析简明教程(八)虚假路径
静态时序分析简明教程(九)多周期路径
静态时序分析简明教程(十)组合电路路径
静态时序分析简明教程(十一)模式分析与约束管理
静态时序分析简明教程(十二)浅议tcl语言

二、时钟组

2.1 引入时钟组

对于同步电路而言,正确的建立时间和保持时间的检测,就可以确保捕获可靠的数据,但是对于异步时钟而言,我们没有办法确定几个时钟之间的相位关系,因此没有办法使用常规的STA分析方法,对于这样的时序路径,我们需要让时序工具加以忽略,时钟组的引入,给予设计人员这样的机会。

2.2 set_clock_group

对于set_clock_group而言,它的BNF(巴斯科范式)表达式如下

set_clock_groups [-name group_name]
				 [-group clock_list]
				 [-logically_exclusive]
				 [-physically_exclusive]
				 [-asynchronous]
				 [-allow_paths]
				 [-comment comment_string]

我们也将进一步的进行解释

2.2.1 -name

提供时钟组唯一的名称,与时钟常规约束类似,详情可见静态时序分析简明教程(四)时钟常归约束中的3.3节内容,通过-name的形式设定名称。

2.2.2 -group clock_list

-group可以将设定好的单个时钟信号分入各组,案例如下

create_clock -period 10 -name C1 [get_ports A]
#创建一个时钟C1
create_clock -period 13 -name C2 [get_ports B]
#创建一个时钟C2
set_clock_groups -name CLK_GRP -group C1 -group C2
#通过-group的形式把他们放到一个时钟组,时钟组命名为CLK_GRP

2.2.3 -logically_exclusive|-physically_exclusive|-asynchronous

接下来的这三个命令要放到一块进行讨论,原因是这三个命令是互斥的,在命名时钟组的时候只能挑其中一个使用,虽然使用他们的任意一个都代表时钟组内的时序路径不用考虑,但是他们还是有细微的差别如下

-logically_exclusive-physically_exclusive-asynchronous
设计中共存多个时钟,并且电路仅选择一个设计中不能共存多个时钟设计中共存多个时钟,却没有相位关系

有关于-asynchronous的使用最为频繁,对于异步电路而言,我们频繁的需要使用这个指令来拒绝STA工具分析CDC的路径问题

2.2.4 -allow_path

在工艺进入深亚微米后,由于串扰的影响,建立时间和保持时间的检查也会受串扰的影响而产生变动,当用户希望执行串扰分析时,可以使用-allow_path这个选项,这个选项仅可以和–asynchronous一块,代表执行串扰分析而不禁用时钟之间的时序电路路径。
这种串扰的分析确实也不归设计人员管,所以略过这里即可

2.2.5 -comment

参见静态时序分析简明教程(四)时钟常约束中3.6的内容,使用-comment的尾缀增加时钟注释。

三、其他时钟特性

3.1 过渡时间

理想的时钟边沿,从0到1和从1到0,时间为均0,但是实际上的clk,从0到1和从1到0会在一个有限的时间内完成,我们使用过渡时间来描述信号从一个状态转变为另一个状态时间,当然什么样的摆幅算0,什么样的摆幅算1,其实是由设计人员决定的,我们可以在30%到70%的区间上定义过渡时间。
在这里插入图片描述
时钟的过渡时间使用set_clock_transition来描述,该指令的BNF为

set_clock_transition [-rise]
					 [-fall]
					 [-max]
					 [-min]
					 clock_list
					 transition_time

需要注意的是,该指令仅用于预布局阶段,在时钟树生成之后,该指令不应再用于时序分析
该指令的案例如下:

#设置C1的上升沿过渡时间
set_clock_transition -rise 0.2 [get_clocks C1]


#设置C2的下降沿最大和最小的过渡时间
set_clock_transition -fall -min 0.2 [get_clocks C2]
set_clock_transition -fall -max 0.4 [get_clocks C2]


#设计所有时间的过渡时间
set_clock_transition 0.3 [all_clocks]

3.2 偏移与抖动

抖动:由于晶振本身稳定性,电源以及温度变化等原因造成了时钟频率的变化,指的是时钟周期的变化
偏斜:同样的时钟产生的多个子时钟信号,他们之间存在的延时差异。是时钟相位上的不确定
抖动和偏斜,都会影响建立时间和保持时间检查的要求,为了应对这种不确定性,我们可以使用set_clock_uncertainty去进行偏移与抖动的约束,它的BNF表达式如下所示

set_clock_uncertainty [-from|rise_from |-fall_from from_clock]
					  [-to|-rise_to|-fall_to to_clock]
					  [-setup]
					  [-hold]
					  [-rise]
					  [-fall]
					  [object_list]
					  Uncertainty_value

我们可以通过上面的语句,分别设置上升沿/下降沿的不确定度,亦或是设置建立时间/保持时间的不确定度,同样可以设置某两个点之间的不确定度,比如

# 从C1到C2的建立时间和保持时间的不确定度
set_clock_uncertainty -from C1 -to C2 -setup 0.5
set_clock_uncertainty -from C1 -to C2 -hold 0.5

而通常情况下,作为SDC交付的第一版,在同步电路中,DE人员也可以简略的将不确定度设置为

set_clock_uncertainty 0.5 [get_clocks CLK]

3.3 时钟延迟

时钟延迟主要是指,源时钟(通常为PLL)和时钟触发的设备之间的延迟,它有两个来源,分别是源延迟和网络延迟,一个形象的图片描述如下
在这里插入图片描述
我们可以通过set_clock_latency来建模网络延迟,不需要建模源延迟的原因是它的延迟与时钟树相关,要在布局布线后才能得到,该指令的BNF为

set_clock_latency [-rise]
				  [-fall]
				  [-min]
				  [-max]
				  [-source]
				  [-late]
				  [-early]
				  [-clock clock_list]
				  delay
				  object_list

通过-rise/fall来指定上升沿和下降沿的延迟,通过-min和-max指定最小延迟和最大延迟,通过-source指定设置延迟的源组件,通过-late/-early来设置最长路径延迟和最短路径延迟

四、总结

第二章中,我们讨论了一个复杂的电路设计不可能只存在一个时钟域,面对不可避免地多时钟域问题,我们采用时钟组的方式来描述不同时钟之间的关系。
而在第三章中,我们使用SDC命令去约束和描述那些非理想的时钟特性,如过渡时间、偏移、抖动、延迟等。
虽然说在布局布线完成后,他们的数值或者形态会发生改变,但这些约束依旧值得学习,因为他们在整个芯片设计的前面阶段为我们提供了重要的参考

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/11330.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】进程间通信——管道

目录 一、概念 二、管道函数 1.popen函数 2.pclose函数 3.文件函数 三、管道的操作 1.管道的分类 无名管道 有名管道 管道的特点 四、管道的实现 操作系统对进程之间相互保护 两个进程之间相互通信 前言: 进程间通信的方法/IPC机制都有哪些: …

求二进制中1的个数的三种方法

求二进制中的1的个数 文章目录第一种方法:模2除2第二种方法:利用操作符右移后与1第三种方法:该数与上比它小1的数(最优的方法)第一种方法:模2除2 首先明白如何得到一个数的十进制的每一位? 以1…

PHP代码审计入门-DVWA靶场CSRF篇

0x00 写在前面 从零学习php,最终目的实现代码审计入门,软件采用sublime text,环境使用phpstudy搭建,数据库是navicat,需要有基本的前端基础、简单的phpmysql后端基础、渗透知识和漏洞原理,文章跟随流沙前…

bizlog通用操作日志组件(使用篇)

引言 如上图所示,产品的新需求,需要将操作人在系统中具体编辑操作的变更内容记录下来。 按正常思路来说,无非就是将修改前后的对象字段逐个比较,再拼接为详细的操作描述记录到操作日志表中。如果是一个模块的需求,单独…

用HTML+CSS做一个学生抗疫感动专题网页设计作业网页

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

springboot如何修改thymeleaf中默认的页面路径及默认的后缀名呢?

转自: springboot如何修改thymeleaf中默认的页面路径及默认的后缀名呢? 下文讲述springboot修改thymefleaf修改页面默认路径及后缀名的方法分享,如下所示: 实现思路:只需在配置文件中修改相应的配置即可,如:application.yaml spring:thym…

MySQL单表查询操作详解,不做CRUD程序员

在我们对数据进行操作时,查询无疑是至关重要的,查询操作灵活多变,我们可以根据开发的需求,设计高效的查询操作,把数据库中存储的数据展示给用户。 文章目录前言1. 基础查询1.1 基础查询语法1.2 基础查询练习2. 条件查询…

大数据路线

一、概念部分 1.1 大数据、数仓、数据湖、中台的概念 区别数仓数据湖使用场景批处理,BI,数据可视化机器学习、预测分析、数据分析Schema写入型读取型数据源类型OLTP为主的结构化数据loT,日志,各个端等结构非结构均可性价比需要快…

牛客刷题总结——Python入门08:面向对象、正则表达式

🤵‍♂️ 个人主页: 北极的三哈 个人主页 👨‍💻 作者简介:Python领域优质创作者。 📒 系列专栏:《牛客题库-Python篇》 🌐推荐《牛客网》——找工作神器|笔试题库|面试经验|实习经验内推&am…

Design A Youtube

title: Notes of System Design No.05 — Design a Youtube description: ‘Design a Youtube’ date: 2022-05-14 13:45:37 tags: 系统设计 categories: 系统设计 01. Funtional Requirements 02. Non Functional Requirements 03.Assumption 04 API 05 High Level Design 上…

05 MSYS2中安装树莓派32位和64位ARM交叉编译工具

作者将狼才鲸创建日期2022-11-14 Gitee源码和工程地址:才鲸嵌入式 / 开源安防摄像机(嵌入式软件)CSDN文章地址:项目介绍:开源安防摄像机(嵌入式软件) 4.3 MSYS2中安装32位和64位ARM交叉编译工具…

1524_AURIX TC275存储分布_下

全部学习汇总: GreyZhang/g_TC275: happy hacking for TC275! (github.com) 继续前面的学习,这一次把这个小章节的剩余信息看完。 这一部分是外设相关的寄存器地址区间描述,看起来一个模块的地址空间占用基本都是256个字节。具体包括什么暂时…

Unity技术手册-UGUI零基础详细教程-Graphic Raycaster 射线检测和Canvas Group

往期文章分享点击跳转>《导航贴》- Unity手册,系统实战学习点击跳转>《导航贴》- Android手册,重温移动开发 本文约3千字,新手阅读需要6分钟,复习需要2分钟 【收藏随时查阅不再迷路】 👉关于作者 众所周知&#…

outsystems合集系列(三)

outsystemsModeling DataDatabase Entities的介绍如何创建Database Entities如何用excel快速导入真实数据到entity?如何用excel快速创建entity并导入真实数据?Static Entities的介绍Modeling Data 这一节我将介绍在outsystems中建模数据(model data)的一些思路。注意在这里我…

shellcode 中 null byte 的成因和避免方式总结

背景 shellcode 中要避免 null byte(\x00)这个是个通用的概念(windows,linux 都是一样),因为栈溢出的数据作为字符串写入到栈上,\x00 会作为字符串终止符,毁掉整个 shellcode。 这…

HTML+CSS个人静态网页设计

🎉精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

【AGC】安全规则resource.data获取不到字段

问题背景 在表结构里有但resource.data获取不到uid字段 解决该问题 request变量是指请求,request.resource.data是请求数据的所有字段和值的映射;resource变量是指所请求的数据在数据库中保存的状态,resource.data是数据库中保存数据的所有…

教师工作量管理系统思路(链表应用)

教师工作量管理系统思路(链表应用) 文章目录教师工作量管理系统思路(链表应用)题目描述:初始信息菜单部分数据结构功能实现查询历史信息从键盘录入信息信息删除和修改工作量计算如何存储到工作量信息链表中&#xff1f…

Bootstrap响应式轮播效果网页(1+X Web前端开发中级 例题)

文章目录 📄题目要求 🧩说明 🧩效果图 💻HTML代码 🎯实现效果 📰完整答案 📄题目要求 阅读下列说明、效果图和HTML代码,进行静态网页开发,填写(1&…

springboot12总结篇(9 10 11)

1.视图解析 以重定向为例 如果返回字符串 则会调用视图解析器thymeleafResolver判断返回值为普通字符串,返回thymeleafView调用其render方法,拼接直接访问 2.异常处理 404 ControllerAdvie 处理异常类 ExceptionHandler ControllerAdvie 处理异常类…