[静态时序分析简明教程(九)]多周期路径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.mzph.cn/news/34319.shtml

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

相关文章

山景DSP芯片可烧录AP8224C2音频处理器方案

AP8224C2高性能32位音频应用处理器AP82系列音频处理器是面向音频应用领域设计的新一代SoC平台产品,适用于传统音响系统、新兴的蓝牙或Wifi 无线音频产品、Sound Bar 和调音台等市场。该处理器在总体架构和系统组成上,充分考虑了音频领域的特点&#xff0…

MYSQL幻读问题

幻读是什么? “Phantom Problem是指在同一事务下,连续执行两次同样的SQL语句可能导致不同的结果,第二次的SQL语句可能会返回之前不存在的行。”摘录来自 MySQL技术内幕:InnoDB存储引擎(第2版) (数据库技术丛书) ​ 通俗来说就是&a…

【积水成渊】9 个CSS 伪元素

大家好,我是csdn的博主:lqj_本人 这是我的个人博客主页: lqj_本人_python人工智能视觉(opencv)从入门到实战,前端,微信小程序-CSDN博客 最新的uniapp毕业设计专栏也放在下方了: https://blog.csdn.net/lbcy…

Jupyter Notebook 500 : Internal Server Error

1. 这个问题的根本原因在于: pygments 包 版本过高。 安装pygments 2.6.1 2.jupyter版本如下 如果某个版本有冲突,卸载了重新安装一下就行。 安装命令: pip install pygments 2.6.1 -i https://pypi.tuna.tsinghua.edu.cn/simple 另外…

界面控件DevExpress WPF Chart组件——拥有超快的数据可视化库!

DevExpress WPF Chart组件拥有超大的可视化数据集,并提供交互式仪表板与高性能WPF图表库。DevExpress Charts提供了全面的2D / 3D图形集合,包括数十个UI定制和数据分析/数据挖掘选项。 PS:DevExpress WPF拥有120个控件和库,将帮助…

Mysql中插入数据,并返回自增主键的值

创建数据库和表使用 insert into 进行插入数据使用 RETURN_GENERATED_KEYS 进行返回插入的这条数据 具体方法如下: Testvoid addGetPk(){try{Statement stmt conn.createStatement();String sql String.format("insert into t_students values(null,%s,%s,%d…

「已解决」iframe 本地生效 但是在测试环境不生效问题

背景 我有一个表格中一列是个详情,这个详情可被点击,点击后弹出抽屉,抽屉里是后端传给我详情字段的值对应的 url 的 iframe 展示。 问题是,在本地 localhost 下运行,ifame 运行正常,但是部署到测试环境就看…

王道机组难题分析

第四章 指令系统 大端方式:就是高地址存放高位, LSB的意思是:全称为Least Significant Bit,在二进制数中意为最低有效位 MSB的意思是:全称为Most Significant Bit,在二进制数中属于最高有效位 操作数可以理…

JavaWeb-Servlet服务连接器(三)

目录 Response响应对象 1.基本功能 2.重定向 3.路径 4.服务器输出数据到浏览器 Response响应对象 1.基本功能 设置响应行:格式为 HTTP/1.1 200 OK,可以使用 setStatus(int sc) 方法设置状态码为 200 表示成功。 方法名称描述setStatus(int sc)设…

docker下载和案例

文章目录 Docker安装一,根据官方文档安装二,根据我以下方式 Docker配置错误导致漏洞一,CRLF注入漏洞介绍在nginx中该漏洞例子解决方法 目录穿越漏洞介绍解决方法 Docker安装 一,根据官方文档安装 官方文档 二,根据我以下方式 docker安装要求: Docker要求Ce…

用户数据报协议UDP

UDP的格式 载荷存放的是:应用层完整的UDP数据报 报头结构: 源端口号:发出的信息的来源端口目的端口号:信息要到达的目的端口UDP长度:2个字节(16位),即UDP总长度为:2^16bit 2^10bit * 2^6bit 1KB * 64 64KB.所以一个UDP的最大长度为64KBUDP校验和:网络的传输并非稳定传输,…

【leetcode】前缀和

内容摘抄自: 小而美的算法技巧:前缀和数组 | labuladong 的算法小抄 一维数组的前缀和 看这个 preSum 数组,若想求索引区间 [1, 4] 内的所有元素之和, 就可以通过 preSum[5] - preSum[1] 得出。 class NumArray {private:// 前缀…

wordpress数据表中标签和分类如何区分?

wordpress中标签和分类是什么关系怎么区分?最后有一个群的网友告诉了我文章ID和标签ID的关系是放在了wp_term_relationships表中,然后我百度了下这个表的结构和相关介绍,发现果然如此,先把文章保存起来: wp_term_rela…

消息中间件 Asio (C++)

折腾了一上午,看到这个结果的时候泪目了兄弟闷,讲真。我的asio客户端成功收到服务端发来的消息了。虽然这确实是极其智障又简单的入门哈哈 下载独立版本 asio网络通信库新建cmake工程,CMakeLists.txt加载asioasio最简单的服务端和客户端代码…

【elasticSearch系】3.完整搭建详尽版elk

话不多说,我们先看下经典的elk 是由哪些组件搭建组合起来的 elasticSearch和kibana搭建 可以查看之前我搭建elasticsearch和kibana 的这篇文章 logstash搭建 为了和之前我搭建elasticsearch和kibana版本保持一致,这里我们还是选择7.17.3 下载地址 点击下载,这里为了方…

wangEditor5实现@评论功能

需求描述:在输入框输入后显示用户列表,实现人功能 当前环境:vue3viteelementPluswangEditor5 需要插件:wangeditor/plugin-mention 安装插件:npm i wangeditor/plugin-mention 输入框组件分两部分:1. wa…

谈谈对Spring MVC的理解

问题分析: SpringMVC 是一种基于 Java 语言开发,实现了 Web MVC 设计模式,请求驱动类型 的轻量级 Web 框架。 SpringMVC采用了 MVC 架构模式的思想,通过把 Model,View,Controller 分离,将 Web 层…

基于vue3+webpack5+qiankun实现微前端

一 主应用改造(又称基座改造) 1 在主应用中安装qiankun(npm i qiankun -S) 2 在src下新建micro-app.js文件,用于存放所有子应用。 const microApps [// 当匹配到activeRule 的时候,请求获取entry资源,渲染到containe…

软件测试基础篇——MySQL

MySQL 1、数据库技术概述 数据库database:存放和管理各种数据的仓库,操作的对象主要是【数据data】,科学的组织和存储数据,高效的获取和处理数据SQL:结构化查询语言,专为**关系型数据库而建立的操作语言&…

JavaScript类

JavaScript 类(class) 类是用于创建对象的模板。 我们使用 class 关键字来创建一个类,类体在一对大括号 {} 中,我们可以在大括号 {} 中定义类成员的位置,如方法或构造函数。 每个类中包含了一个特殊的方法 constructor(),它是类…