【【深入浅出了解静态时钟分析和时钟约束】】

news2025/1/12 4:43:33

深入浅出了解静态时钟分析和时钟约束

时序分析是什么?
我们提出一些特定的时序要求(或者说是添加特定的时序约束),使用特定的时序模型,针对特定的电路进行分析。分析的最终结果是要求系统时序满足我们提出的要求。

这么说可能还不是很清晰
我们进行一个对比 上次实验做的CORDIC算法
未添加时序约束时的频率利用率与功耗如下
在这里插入图片描述

我们可以看出这是一个非常大的占用率 甚至是 一个很恐怖的功耗(怎么不把板子烧了)

现在我们添加简单的时序约束
在这里插入图片描述

再次点击report Power 我们会发现 整体的 功耗瞬间降低了

在这里插入图片描述

我们通过这样的例子,可以很直观的通过时序约束找到优解

再举一个简单的例子
下面举一个最简单的例子来说明时序分析的基本概念。假设信号需要从输入到输出在 FPGA 内部经过一些逻辑延时和路径延时。我们的系统要求这个信号在 FPGA 内部的延时不能超过 13ns,而开发工具在执行过程中找到了下图所示的一些可能的布局布线方式。图中区域 1 的延迟是 5ns,区域 2 的延迟是 7ns,区域 3 的延迟是 5ns,区域 4 的延迟是 11ns。那么,怎样的布局布线能够达到我们的要求呢?仔细分析一番,发现所有路径的延时可能为 12ns(走路径 1)、16ns(走路径 3)、21ns(走路径 2 到路径 5)、17ns(走路径 2 到路径 4),只有 1 条路径能够满足要求,布局布线工具就会选择满足要求的路径 1。
在这里插入图片描述

下面介绍
什么是时钟抖动?
理想的时钟信号是非常完美的正弦波,但是实际晶振产生的正弦波是存在一些时钟抖动的。那么什么是时钟抖动呢?时钟抖动,英文名叫做 Clock Jitter,是相对于理想时钟沿实际时钟存在不随时间积累的、时而超前、时而滞后的偏移称为时钟抖动(时钟脉冲宽度发生暂时变化,也就是 T cycle【时钟周期】或大或小)。
什么是时钟偏差?
时钟偏差,Clock Skew,是指同一个时钟域内的时钟信号到达数字电路各个部分(一般是指寄存器)所用时间的差异。
时序分析的起点一般是源寄存器(reg1),终点一般是目标寄存器(reg2)。时钟和其它信号的传输一样会有延时的。下图中,时钟信号从时钟源传输到源寄存器的延时我们定义为 Tc2s,传输到目标寄存器的延时我们定义为 Tc2d。
在这里插入图片描述

时钟网络延时 Tskew 就是 Tc2d 与 Tc2s 之差,即 Tskew=Tc2d-Tc2s。
在这里插入图片描述

第一个方波是时钟源,第二个方波为时钟到达 REG1 时的波形,第三个方波为时钟到达 REG2 时的波形,从图上可以看出 Tskew 是时钟到达两个寄存器时的相位偏差。时钟偏差分为两类:正偏差和负偏差。当信号传输的目标寄存器在接收寄存器之前捕获正确的时钟信号,电路发生正偏差(也就是时钟布线方向与数据流水方向一致);反之,当信号传输的目标寄存器在接收寄存器之后捕获正确的时钟信号,电路发生负偏差(也就是时钟布线方向与数据流水方向相反)。

时钟约束 分析
首先看懂时钟约束的代码
这两段代码是用于在数字电路设计的时候进行时钟约束的,通常用于 FPGA(可编程逻辑器件)的设计。这是基于Verilog/SystemVerilog语言的时钟约束代码。

1.第一段代码:
create_clock -period 20.000 -name sys_clk -waveform {0.000 10.000} -add [get_ports sys_clk]

这段代码表示创建了一个时钟约束,指定了一个名为 sys_clk 的时钟信号。具体的含义如下:
- -period 20.000
- -name sys_clk
sys_clk
- -waveform {0.000 10.000}
- -add [get_ports sys_clk]
sys_clk
2.第二段代码:
create_clock -period 8.000 -name eth_rxc -waveform {0.000 4.000} -add [get_ports eth_rxc]

这段代码表示创建了另一个时钟约束,指定了一个名为 eth_rxc 的时钟信号。具体的含义如下:
- -period 8.000
- -name eth_rxc
eth_rxc
- -waveform {0.000 4.000}
- -add [get_ports eth_rxc]
eth_rxc

这些时钟约束对于数字电路设计至关重要,因为它们帮助工具确保设计在时钟频率范围内正常工作,并且在实现时满足时序要求。

接下来点击Design Timing Summary
在这里插入图片描述

第一个是 Setup 的最差情况(WNS),第二个是 Hold 的最差情况(WHS),第三个是 Pulse Width最差情况(WPWS)。蓝色字体下面的一行是总的 Setup 不满足总的分数(TNS),第二个是总的 Hold 不满足总的分数(THS),第三个是总的 Pulse Width 不满足总的分数(TPWS)。一般我们只关注 Setup 总的分数,分数是 0,说明时序是满足的,分数是负的,说明时序是不满足的,负分越大,说明时序越差,时序负分过大会导致功能可能出问题,所以我们的时序优化的效果可以参考负分的变化。

对于负值不满足要求的我们可以点击进入查看是哪一条路径不满足 查看是否可以优化

在这里插入图片描述
在这里插入图片描述

点击shematic 可以显示的更加直观

在这里插入图片描述

含有PLL模块的时钟其实在我们没看到的地方系统自动帮助我们生成了时钟约束了

这是含有内部PLL模块的HDMI始终约束
因为在PLL端设定了HDMI传输模块时钟74M 内部编译是5倍频
在这里插入图片描述

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

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

相关文章

大文件分片上传,断点续传,秒传 示例(待更新...)

1.html代码 <template><div class="card content-box"><el-upload ref="upload" class="upload-demo" action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15":limit="1" :on-change=&quo…

【C++】手撕 list类(包含迭代器)

目录 1&#xff0c;list的介绍及使用 2&#xff0c;list_node 3&#xff0c;list_node() 3&#xff0c;list 4&#xff0c;list() 5&#xff0c;push_back(const T& x) 6&#xff0c;print() 7&#xff0c;_list_iterator 8&#xff0c;operator*() 9&#xff0c…

Qt QComboBox组合框控件

文章目录 1 属性和方法1.1 文本1.2 图标1.3 插入和删除1.4 信号和槽 2 实例2.1 布局2.2 代码实现 Qt中的组合框是集按钮和下拉列表体的控件&#xff0c;&#xff0c;它占用的屏幕空间很小&#xff0c;对应的类是QComboBox 1 属性和方法 QComboBox有很多属性&#xff0c;完整的…

【福利】百度内容审核平台实战

文章目录 前言功能概述产品价格快速入门&#xff08;账号登录及资源领取、在线验证、编写示例程序&#xff09;实战演示1、首先创建一个应用2、引入百度的SDK3、测试用例百度内容审核-文本 200QPS百度内容审核-图像 50QPS 写在最后 前言 百度内容审核平台主要针对图像、文本、…

RT-Thread 中断管理

中断管理 什么是中断&#xff1f;简单的解释就是系统正在处理某一个正常事件&#xff0c;忽然被另一个需要马上处理的紧急事件打断&#xff0c;系统转而处理这个紧急事件&#xff0c;待处理完毕&#xff0c;再恢复运行刚才被打断的事件。 生活中&#xff0c;我们经常会遇到这…

开源C语言库Melon:数据恢复算法

本文讲述开源C语言库Melon中的里德所罗门纠错码的使用。 关于 Melon 库&#xff0c;这是一个开源的 C 语言库&#xff0c;它具有&#xff1a;开箱即用、无第三方依赖、安装部署简单、中英文文档齐全等优势。 Github repo 简介 里德所罗门编码是一种纠错码技术&#xff0c;…

C++ λ表达式

λ表达式提供了函数对象的另一种编程机制。 在 C 11 和更高版本中&#xff0c;Lambda 表达式&#xff08;通常称为 Lambda&#xff09;是一种在被调用的位置或作为参数传递给函数的位置定义匿名函数对象&#xff08;闭包&#xff09;的简便方法。 Lambda 通常用于封装传递给算法…

项目与工程的关系,是一个项目包含若干个工程还是一个工程包含若干个项目?

在项目管理和工程管理的领域里&#xff0c;项目&#xff08;Project&#xff09;和工程&#xff08;Engineering&#xff09;通常有不同的定义和关系&#xff0c;这取决于具体的行业和应用背景。但一般来说&#xff0c;项目和工程之间的关系可以这样理解&#xff1a; 项目包含工…

CMake入门教程【高级篇】管理MSVC编译器警告

😈「CSDN主页」:传送门 😈「Bilibil首页」:传送门 😈「动动你的小手」:点赞👍收藏⭐️评论📝 文章目录 1.什么是MSVC?2.常用的屏蔽警告3.MSVC所有警告4.target_compile_options用法5.如何在CMake中消除MSVC的警告?6.屏蔽警告编写技巧

docker一键安装

1.把docker_compose_install文件夹放在任意路径&#xff1b; 2.chmod -R 777 install.sh 3.执行./install.sh 兼容&#xff1a;CentOS7.6、麒麟V10服务器版、统信UOS等操作系统。 下载地址&#xff08;本人上传&#xff0c;免积分下载&#xff09;&#xff1a;https://downlo…

PPT模板,免费下载

找PPT模板、素材&#xff0c;就上这几个网站&#xff0c;免费下载。 1、菜鸟图库 https://www.sucai999.com/search/ppt/0_0_0_1.html?vNTYxMjky 菜鸟图库素材非常齐全&#xff0c;设计、办公、图片、视频等素材这里都能找到&#xff0c;PPT模板数量很可观&#xff0c;模板样…

每日一题——LeetCode1154.一年中的第几天

方法一 列举法&#xff1a; 用一个数组把每个月份的天数都列举出来 判断闰年&#xff0c;是闰年2月份有29天 循环对当前月份之前的月份天数求和 加上当天月份的天数 var dayOfYear function(date) {let year date.slice(0, 4);let month date.slice(5, 7);let day dat…

SpringBoot用MultipartFile.transferTo传递相对路径的问题

问题描述&#xff1a; 打算给自己的项目添加一个上传文件保存功能&#xff0c;于是我使用MultipartFile.transferTo()来完成这个功能&#xff0c;由于我的项目要部署到服务器&#xff0c;所以我使用了相对路径把上传的文件保存到当前项目的工作目录下&#xff0c;但是报错了&am…

基于SpringBoot的教学管理系统

文章目录 项目介绍主要功能截图&#xff1a;部分代码展示设计总结项目获取方式 &#x1f345; 作者主页&#xff1a;超级无敌暴龙战士塔塔开 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、 简历模板、学习资料、面试题库【关注我&#xff0c;都给你】 &…

黑马程序员——2022版软件测试——乞丐版——day01

目录&#xff1a; 测试介绍 什么是软件测试&#xff1f;测试主流技能主流方向建议测试常用分类 分类阶段划分代码可见度划分总结模型 角度质量模型测试流程 需求分析&#xff08;评审&#xff09;测试计划用例设计用例执行缺陷管理测试报告测试用例 用例的作用用例模板八大要素…

Camunda Spin

Spin 常用于在脚本中解析json或者xml使用&#xff0c;S(variable) 表示构造成Spin对象&#xff0c;通过prop(“属性名”)获取属性值&#xff0c;通过stringValue()、numberValue()、boolValue() 等对类型转换。 repositoryService.createDeployment().name("消息事件流程&…

Fluids —— Fluid-object collisions

对移动碰撞体的精确速度&#xff0c;通常对模拟是非常重要的&#xff0c;尤其是FLIP&#xff1b;不正常的碰撞速度&#xff0c;可能会缺乏动态的飞溅或泄漏&#xff1b; SOP流体通过FLIP Collide SOP节点来处理碰撞和交互&#xff1b;碰撞对象可以是静态达到&#xff0c;移动的…

Druid 分析jpa批量插入

Druid是阿里巴巴开发的号称为监控而生的数据库连接池&#xff0c;在功能、性能、扩展性方面&#xff0c;都超过其他数据库连接池&#xff0c;包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource等&#xff0c;秒杀一切。 Druid 可以很好的监控 DB 池连接和 SQL 的执行情况&am…

浅析NVMe key per IO加密技术-1

一、Key per IO功能介绍 在当前的数据中心环境中&#xff0c;数据加密通常采用存储设备内部生成和管理的加密密钥与加密数据紧密耦合的方式进行。TCG Opal定义了一套针对自加密硬盘&#xff08;SED, Self-Encrypting Drives&#xff09;的标准化安全子系统类&#xff08;SSC, …

Go语言学习笔记(三)

教程&#xff1a;文档 - Go 编程语言 (studygolang.com) 调用模块代码 在call-module-code需要注意&#xff0c;需要在hello目录下操作 go mod edit -replace example.com/greetings../greetings 这是一个在Go项目的模块管理中的命令。在Go的模块管理工具&#xff08;go mod&…