当前位置: 首页 > news >正文

[静态时序分析简明教程(九)]多周期路径set_multicycle_path

静态时序分析简明教程-多周期路径

    • 一、写在前面
      • 1.1 快速导航链接·
    • 二、多周期路径
      • 2.1 多周期路径的SDC命令
      • 2.2 路径常规约束
      • 2.3 建立/保持规格
      • 2.4 位移量
      • 2.5 多时钟周期案例
    • 三、总结

一、写在前面

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

1.1 快速导航链接·

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

二、多周期路径

通常情况下,在本周期时钟边沿启动的数据,会在下一个时钟上升沿捕获,如下图所示
在这里插入图片描述

但是也有些情况,我们希望在数个时钟周期后再进行捕获(比如为了确保复位信号有效的多周期低电平等),在时序分析中进行额外周期约束的方案,称为多周期路径
在这里插入图片描述

2.1 多周期路径的SDC命令

set_multicycle_path		[-setup][-hold][-rise][-fall][-start][-end][-from from_list][-to to_list][-through through_list][-rise_from rise_from_list][-rise_to rise_to_list][-rise_through rise_through_list][-fall_from fall_from_list][-fall_to rise_to_list][-fall_through fall_through_list]path_multiplier[-comment comment_string]

2.2 路径常规约束

虚假路径相似的,多周期路径的约束过程中也出现了以下常规约束

[-rise],[-fall],
[-from],[-to],[-through],
[-rise_from],[-rise_to],[-rise_through],
[-fall_from],[-fall_to],[-fall_through]

具体的内容可以参考静态时序分析简明教程(八)虚假路径中的有关内容进行学习

2.3 建立/保持规格

对于多周期路径的约束而言,[-setup]和[-hold]的选项,理解起来可能会有些复杂。
在这里插入图片描述
常规路径中,数据假如在A处启动,那么应该在B处进行捕获,换言之,建立时间的分析应该发生在A边沿,和B边沿;
而在多周期路径中,通过[-setup]选项,我们可以改变捕获沿,需要注意的是,这里改变的边沿是捕获沿位置,我们可以将捕获沿右移,留出更多的时钟周期,但是需要注意的是,假如移动了捕获沿到D后,不仅仅是建立时间的检查移动到了D处,保持时间的检查也同样会进行移动,我们当然可以在D处同时进行建立时间检查和保持时间检查,但是这存在一个问题,即对于综合工具而言,它会在时序路径上插入buffer类的缓冲器来满足严苛的保持时间检查,增大面积和功耗。

为了解决这个问题,我们可以使用[-hold]选项,将保持时间的检查左移回A处或B处。

举个例子,将建立沿移动三个周期至D沿,保持分析自动移动至C处,此时C对应的保持倍数为0,B对应的保持倍数为1,A对应的保持倍数为2
通过 [-hold] N 的选项,N为保持倍数,可以将检查边沿向左挪动
而对于[-setup] N来说,该选项指定的N为将建立沿挪动到第N个周期(需要注意和挪动了N个周期的区别)存在1个周期的差。以上图为例,D对应的N为4,换言之,挪动了3个周期。

2.4 位移量

2.3中,我们讨论的内容是捕获沿的移动,那么,对于建立沿来说,是否有办法,也可以使其左右移动呢?
答案是可以的,我们可以使用[-start] [-end]的选项来移动
总结来说:
-end意味着捕获沿的移动,采样沿可以理解为采样时钟信号的边沿
-start意味着启动沿的移动,启动沿可以理解为启动时钟信号的边沿

2.5 多时钟周期案例

让我们来举一个例子搞明白多周期路径的应用
在这里插入图片描述
上面的图片是一个什么样的逻辑关系呢?

Cs驱动F1寄存器产生data信号,同时驱动F2寄存器产生enable信号,这个enable信号进入到FSM(即小云朵一样的图形中),经过N个周期输入给F3,F3寄存器再Cd的驱动下,接收到en拉高,采样data

我们发现,data信号不需要立即进入到F3寄存器中,它可能需要N个时钟周期才能抵达,因此在SDC中我们可以对其进行如下的约束

set_multicycle_path -from Cs -through F1/Q -setup N -end
set_multicycle_path -from Cs -through F1/Q -to Cd -hold N-1 -end

三、总结

DMUX或者异步复位同步释放的情境中,data或复位信号并不是单拍被下一级获取,而是需要经过几个时钟周期后才进行采样,因此,我们可以通过set_multicycle_path的SDC命令进行约束,该命令不仅可以约束建立时间检查或保持时间检查,也可以约束捕获沿或采样沿

http://www.lryc.cn/news/120639.html

相关文章:

  • Unity学习笔记--使用 C# 开发一个 LRU
  • 【一】初步认识数据库
  • HTML <section> 标签
  • PHP 之房贷计算器、组合贷
  • 解决Vue+Element UI使用表单rules国际化时From表单验证信息不能实时更新
  • 友善之臂NanoPi NEO利用fbtft驱动点亮1.69寸ST7789V2屏幕
  • MFC第三十天 通过CToolBar类开发文字工具栏和工具箱、GDI+边框填充以及基本图形的绘制方法、图形绘制过程的反色线模型和实色模型
  • Android Https
  • Games101学习笔记2
  • java字符串String类的常用方法
  • 自动化测试如何解决chrome自动更新问题
  • 闲鱼卖货:新手容易踩坑的7个地方。赶紧看看有没有中招?
  • PowerShell 获取某目录下所有的文件、文件夹,同时对获取到的文件路径字符串进行替换处理
  • JUC并发编程之线程锁(一)
  • Android AlertDialog标题居中
  • k8s界面化平台dashboard、kubesphere、Rancher对比
  • 【字符串左旋】
  • Docker Dirtypipe(CVE-2022-0847)漏洞复现与分析容器逃逸
  • python接口自动化测试框架2.0,让你像Postman一样编写测试用例,支持多环境切换、多业务依赖、数据库断言等
  • Vue.js2+Cesium1.103.0 九、淹没分析效果
  • SpringBoot案例-部门管理-新增
  • 微信小程序中背景图片如何占满整个屏幕,拉伸
  • Java并发编程(四)线程同步 中 [AQS/Lock]
  • PyTorch深度学习环境安装(Anaconda、CUDA、cuDNN)及关联PyCharm
  • Active Directory安全和风险状况管理
  • 学术论文GPT源码解读:从chatpaper、chatwithpaper到gpt_academic
  • 单链表(C语言版)
  • 初学vue3时应该注意的几个问题
  • 基于Selenium技术方案的爬虫入门实践
  • 【C++入门到精通】C++入门 —— vector (STL)