【数字静态时序分析】复杂时钟树的时序约束SDC写法

以上图为例,SoC芯片上往往存在几种不同的时钟源,有pll时钟、环振时钟、外部的晶振时钟,在SoC不同的模块或者不同的运行阶段使用的时钟也往往不同,所以在使用的时候,相同的模块会出现选择不同的时钟源的情况。上图的情形就会出现。这里先不展开各个时钟源之间的区别,也不展开clk_mux和div的设计因为还没写哈哈,但是可以去看我clk_gate的那一篇了解下clk_gate。【数字】一篇文章读懂数字芯片中的时钟门控单元/时序/ICG/clk gater-CSDN博客
进入对上述结构的sdc约束:
//进行时钟创建约束
//假设rco、HXT 50M,pll 200M,sleep 32K,LXT 32.768K
//-period表示时钟周期,waveform表示占空比,get_ports指明端口名
create_clock -name rco -period 20 -waveform {0 10} [get_ports rco]
create_clock -name HXT -period 20 -waveform {0 10} [get_ports HXT]
create_clock -name pll -period 5  -waveform {0 10} [get_ports pll]
create_clock -name LXT -period 30517 -waveform {0 15258} [get_ports LXT]
create_clock -name sleep -period 31250 -waveform {0 15625} [get_ports sleep]
//设置时钟的uncertainty
...
set_clock_uncertainty -setup/-hold [period 10%] [get_clocks rco]
...至此第一步成功设立,以M0这个mux为例,创建mux两侧的clock,这些clock是源自rco或者HXT的所以需要使用generated clk,创建generated clk的原则是需要使用就近原则,-source的时候需要选择靠近的clk。
//创建M0前的clk,因为实际电路中需要进行SI的分析,需要将这种clk声明出来
//因为将generated clock创建在了不同的pins上,这样可以确保这些generated clock的source latency都是来自指定的位置,保证正确的时序分析
create_generated_clock -name m0_rco_a -source [get_ports rco] -divide 1 [get_pins m0/A]
create_generated_clock -name m0_HXT_b -source [get_ports HXT] -divide 1 [get_pins m0/B]//创建M0 output上的clk
create_generated_clock -name m0_rco_z -divide 1 m0/z -source m0/A -master_clock m0_rco_a -add
create_generated_clock -name m0_HXT_z -divide 1 m0/z -source m0/B -master_clock m0_HXT_b -add//设置logically_exclusive之后能保证这样的时钟线,实际布局的时候会摆放的比较远
set_clock_groups -logically_exclusive -group {m0_rco_a} -group {m0_HXT_b}
//M0后的时钟不会同时出现,所以是物理互斥的
set_clock_groups -physically_exclusive -group {m0_rco_z} -group {m0_HXT_z}那按照这样的设置我们成功的把M0左右两端的时钟约束成功了!
那现在时钟传播到M2上,对M2进行clock约束。
//M2的A端,这个时候有2个clk已经在之前定义了,M2的B端是PLL的时钟,直接创建MUXed之后的时钟
create_generated_clock -name m2_rco_z -divide 1 m2/z -source m2/A -master_clock m0_rco_z -add
create_generated_clock -name m2_HXT_z -divide 1 m2/z -source m2/A -master_clock m0_HXT_z -add
create_generated_clock -name m2_pll_z -divide 1 m2/z -source m2/B -master_clock pll -add
//声明物理互斥
set_clock_group -physically_exclusive -group {m2_rco_z} -group {m2_HXT_z} -group {m2_pll_z}set_clock_group -logically_exclusive -group {pll} -group {m0_rco_z}
set_clock_group -logically_exclusive -group {pll} -group {m0_HXT_z}按照这个规律同理我们能得到M1前后的clock,M3前后的clock,最终我们会在M3的Z端得到5个物理互斥的时钟,m3_rco_z,m3_HXT_z,m3_pll_z,m3_sleep_z,m3_LXT_z。
那如果经过DIV之后的DFF需要设置set_output_delay这种输出约束,-clock应该设置在上述哪一个时钟上呢?
因为M3的Z端的时钟必定只有一个输出出去,并且有可能不同情况下输出的时钟频率也不同,可以使用set_case_analysis来指定M0~M3的选择情况,以使用rco为例,sel0~sel3可以是0X00。
set_case_analysis 0 [get_ports {m0/sel m2/sel m3/sel}]
set_case_analysis 1 [get_ports {m1/sel}]那在DIV之前加一个buf的目的是什么呢?
为了改名!
以m3_rco_z为例,set_output_delay -get_port A -clock m3_rco_z,那如果DIV后的时钟在使用m3_pll_z的时候驱动的是B,那B那边的约束就要把-clock 后面改成m3_pll_z,这样未免有些麻烦,所以用一个buf在那里将名字更改成同一个但是case不同source源不同,这样写不同模块的SDC约束的时候就可以简化很多。
经过分频器之后假设分频系数是3分频,且经过buf的clk为clk_buf
//经过buf的clk
create_generated_clock -name clk_buf -divide 1 buf/Q -source buf/D -master m3_rco_z//经过分频之后的clk
create_generated_clock -name clk_div -divide 3 div/Q -source div/CK -master clk_buf 另外需要强调的是在设置-asynchronous时
set_clock_groups -asynchronous -group {rco x0} -group {HXT x1}
set_clock_groups -asynchronous -group {rco a0} -group {HXT a1}x0和a0之间工具仍然会分析,并没认为他们是异步的还需要声明x0与a0的异步关系才能消除工具的分析。
set_clock_groups -asynchronous -group x0 -group a0相关文章:
 
【数字静态时序分析】复杂时钟树的时序约束SDC写法
以上图为例,SoC芯片上往往存在几种不同的时钟源,有pll时钟、环振时钟、外部的晶振时钟,在SoC不同的模块或者不同的运行阶段使用的时钟也往往不同,所以在使用的时候,相同的模块会出现选择不同的时钟源的情况。上图的情形…...
 
springboot苍穹外卖实战:五、公共字段自动填充(aop切面实现)+新增菜品功能+oss
公共字段自动填充 不足 比起瑞吉外卖中的用自定义元数据类型mybatisplus的实现,这里使用的是aop切面实现,会麻烦许多,建议升级为mp。 定义好数据库操作类型 sky-common中已经定义好,OperationType。 自定义注解 AutoFill co…...
Go 语言中,golang结合 PostgreSQL 、MySQL驱动 开启数据库事务
Go 语言中,golang结合 PostgreSQL 、MySQL驱动 开启数据库事务 PostgreSQL代码说明: MySQL代码说明: PostgreSQL 在 Go 语言中,使用 database/sql 包结合 PostgreSQL 驱动(如 github.com/lib/pq)可以方便地…...
 
Git核心概念
目录 版本控制 什么是版本控制 为什么要版本控制 本地版本控制系统 集中化的版本控制系统 分布式版本控制系统 认识Git Git简史 Git与其他版本管理系统的主要区别 Git的三种状态 Git使用快速入门 获取Git仓库 记录每次更新到仓库 一个好的 Git 提交消息如下&#…...
 
网络安全技术在能源领域的应用
摘要 随着信息技术的飞速发展,能源领域逐渐实现了数字化、网络化和智能化。然而,这也使得能源系统面临着前所未有的网络安全威胁。本文从技术的角度出发,探讨了网络安全技术在能源领域的应用,分析了能源现状面临的网络安全威胁&a…...
 
这些场景不适合用Selenium自动化!看看你踩过哪些坑?
Selenium是自动化测试中的一大主力工具,其强大的网页UI自动化能力,让测试人员可以轻松模拟用户操作并验证系统行为。然而,Selenium并非万能,尤其是在某些特定场景下,可能并不适合用来自动化测试。本文将介绍Selenium不…...
PHP反序列化靶场(php-SER-libs-main 第一部分)
此次靶场为utools-php-unserialize-main。适合有一定基础的师傅,内容是比较全面的,含有我们的大部分ctf中PHP反序列化的题型。 level1: <?php highlight_file(__FILE__); class a{var $act;function action(){eval($this->act);} } …...
 
基于大数据爬虫+Python+SpringBoot+Hive的网络电视剧收视率分析与可视化平台系统(源码+论文+PPT+部署文档教程等)
博主介绍:CSDN毕设辅导第一人、全网粉丝50W,csdn特邀作者、博客专家、腾讯云社区合作讲师、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围…...
 
DHCP与FTP
DHCP dhcp:动态主机配置的协议,应用在大型的局域网环境中 服务端和客户端 服务端:提供IP地址,某种特定功能的提供者 客户端:请求IP地址,请求对应的功能的使用者 服务端的端口号:67 客户端的端…...
 
云渲染与云电脑,应用场景与技术特点全对比
很多朋友问,你们家一会宣传云渲染,一会宣传云电脑的,我到底用哪个?今天,渲染101云渲染和川翔云电脑就来对比下两者的区别! 渲染101&川翔云电脑,都是我们的产品,邀请码6666 一、…...
 
RockPI 4A单板Linux 4.4内核下的RK3399 GPIO功能解析
RockPI 4A单板Linux 4.4内核下的RK3399 GPIO功能解析 摘要:本文将基于RockPI 4A单板,介绍Linux 4.4内核下RK3399 GPIO(通用输入输出)功能的使用方法。通过详细的代码解析和示例,帮助读者理解如何在Linux内核中使用GPI…...
【Vue】Vue3.0(二十三)Vue3.0中$attrs 的概念和使用场景
文章目录 一、$attrs的概念和使用场景概念使用场景 二、代码解释Father.vueChild.vueGrandChild.vue 三、另一个$attrs使用的例子 一、$attrs的概念和使用场景 概念 在Vue 3.0中,$attrs是一个组件实例属性,它包含了父组件传递给子组件的所有非props属性…...
RHEL/CENTOS 7 ORACLE 19C-RAC安装(纯命令版)
一 首先需要安装两个CENTOS 7虚拟机(此处省略)。 由于我们是要安装ORCLE-RAC双节点集群所以至少每个CENTOS虚拟机上需要两块网卡,并且两块网卡都是HOST-ONLY具体步骤请看视频一《为虚拟机添加网卡》 这里大家需要注意的是,我们需要绑定两台机器的IP一共…...
 
CCSK:面试云计算岗的高频问题
在竞争激烈的云计算岗位求职市场中,拥有 CCSK云计算安全知识认证无疑能为你增添强大的竞争力。而深入了解云计算面试中的高频问题并熟练掌握答案,更是迈向成功的关键一步。 一、AWS 相关问题 AWS 是重要考点,常被问到其关键特性,…...
 
C++ String(1)
String的头文件是#include <string> String本质上是一个类,是C实现好的一个类 初学只用学重要的部分,不可能一次性全部学完 1.构造函数 我们先来看它的几个构造函数 首先(1)就是无参的构造 (2)是…...
ts 中 ReturnType 作用
ReturnType 用于获取函数的返回值类型。 一、基本概念和语法 1. 定义和语法结构 ReturnType是一个泛型类型,其语法为ReturnType<T>,其中T是一个函数类型。例如,如果有一个函数add,ReturnType<typeof add>就可以获取…...
 
Hadoop + Hive + Apache Ranger 源码编译记录
背景介绍 由于 CDH(Clouderas Distribution Hadoop )近几年已经开始收费并限制节点数量和版本升级,最近使用开源的 hadoop 搭了一套测试集群,其中的权限管理组件用到了Apache Ranger,所以记录一下编译打包过程。 组件…...
 
Java从入门到精通笔记篇(十二)
枚举类型与泛型 枚举类型可以取代以往常量的定义方式,即将常量封装在类或接口中 使用枚举类型设置常量 关键字为enum 枚举类型的常用方法 values()方法 枚举类型实例包含一个values()方法,该方法将枚举中所有的枚举值以数组的形式返回。 valueOf()可…...
入侵排查之Linux
目录 1.黑客入侵后的利用思路 2.入侵排查思路 2.1.账号安全 2.1.1.用户信息文件/etc/passwd 2.1.2.影子文件/etc/shadow 2.1.3.入侵排查 2.1.3.1.排查当前系统登录信息 2.1.4.2.查询可以远程登录的账号信息 2.2.历史命令 2.2.1.基本使用 2.2.1.1.root历史命令 2.2.…...
 
从0开始学习Linux——文件管理
往期目录: 从0开始学习Linux——简介&安装 从0开始学习Linux——搭建属于自己的Linux虚拟机 从0开始学习Linux——文本编辑器 从0开始学习Linux——Yum工具 从0开始学习Linux——远程连接工具 从0开始学习Linux——文件目录 从0开始学习Linux——网络配置 从0开…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
 
【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
 
最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
 
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
 
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
 
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
 
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
 
sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
