FPGA学习_时序约束以及VIVADO时序报告

news2024/12/26 10:40:13

文章目录

  • 前言
  • 时序约束的目的
  • 一、时序约束种类
    • 1、约束主时钟
    • 2、约束衍生时钟
    • 3、约束虚拟时钟
    • 4、input delay
    • 5、output delay
    • 6、约束异步时钟组
    • 7、约束互斥时钟
    • 8、假路径约束
    • 9、多周期约束
  • 二、VIVADO时序报告
  • 三、从时序的角度看为什么寄存器赋值慢一拍

前言

一边学习一边补充当中

时序约束的目的

  1. 告知EDA软件需要达到什么样的设计指标,然后EDA软件尽可能的优化布局布线以达到该约束指标
  2. 协助EDA软件进行分析设计当中的时序路径,以产生相应的时序报告,例如约束主时钟,EDA软件才可以根据此约束进行分析电路设计

一、时序约束种类

1、约束主时钟

SYSCLK_div SYSCLK_div_5mhz
   (
    .clk_out1               (w_clk_5mhz     ),   
    .locked                 (w_clk_5mhz_lock),       
    .clk_in1                (i_clk          )      
);

对于这种直接使用Clocking Wizard IP核的时钟信号,输入输出我们都不需要进行约束,IP核会自动进行约束。

CLK_DIV_module#(
    .P_CLK_DIV_CNT          (40) //MAX = 65535
)CLK_DIV_module_U(
    .i_clk                  (w_clk_5mhz      ),
    .i_rst                  (~w_clk_5mhz_lock),
    .o_clk_div              (w_clk_125khz    )
    );

对于这种我们自己设计的时钟分频模块,如果我们不对其进行约束的话,VIVADO就不知道w_clk_125khz的频率是多少,涉及到w_clk_125khz的时序逻辑,VIVADO就不会正确分析,所以我们需要对其进行约束。

2、约束衍生时钟

w_clk_5mhz是由i_clk分频出来的时钟,称为衍生时钟。
首先给衍生时钟命名;
选择主时钟pin
选择主时钟
设置分频或者倍频值
添加Source object,即我们需要约束的时钟w_clk_5mhz
注:这里需要勾选-add属性,这是因为时钟i_clk在主时钟约束那里已经被约束过了,加上add属性则可以避免冲突,在已有约束基础上再增加约束
在这里插入图片描述
w_clk_125khz同理,设置分频值为40即可,主时钟选择5mhz时钟,具体的工程代码设计可以先看之前介绍IIC的文章https://blog.csdn.net/m0_56222647/article/details/136815041
在这里插入图片描述

3、约束虚拟时钟

暂时没用到,后续补充

4、input delay

5、output delay

6、约束异步时钟组

静态时序分析是穷尽式的,所有寄存器之间路径都会被分析,但异步时钟寄存器之间是不用进行分析的,该约束就是告知VIVADO不要分析异步时钟路径

7、约束互斥时钟

物理互斥:即CLK1有信号时,CLK2则无信号,物理芯片上进行控制的
逻辑互斥:俩个时钟结果选择器,一次只能选择一个时钟

8、假路径约束

异步时钟路径也可以通过假路径约束

9、多周期约束

大概就让触发沿和锁存沿之间不再是只隔一个时钟周期,可以隔多个

二、VIVADO时序报告

在这里插入图片描述
打开布局布线后可以看到建立时间余量和保持时间,都是大于0的,时序正常。
估计是时序逻辑主要是使用主时钟i_clk分频出来的的5mhz(200ns),所以这里的建立时间余量这么大。
点击WNS可以看到最差建立时间余量这几条路径:如下图
在这里插入图片描述
点击第一条路径,可以在原理图里看到它的路径,原理图里面的路径,绿色为起点,红色为终点
在这里插入图片描述
双击第一条路径可以打开时序报告:
源时钟路径,Incr是指增加的时延,Path是指当前时延总和
在这里插入图片描述
这里多提一嘴,经过MMCM后这里增加的时延是负的,这是由于相位调整的缘故,目的寄存器时钟也会引入负的延时,所以相对来说这个负的时延是无所谓的。
数据路径
在这里插入图片描述
这里是数据经过各个LUT,寄存器、进位链以及走线net的延时。
同时可以计算出数据到达时间:Tarrive = Tco + Tdatadelay = 1.964
目的时钟路径
在这里插入图片描述
个别名词解释:
clock pessimism : 时钟悲观度,由于温度影响,时钟最坏情况下会引入的偏移
clock uncertainly:时钟不确定度
FDCE(Setup):这里是指建立时间,按道理来说这里应该是负的,但是图中是正的,不知道啥情况,估计还是和时钟相位调整有关系吧
根据此可以计算出数据要求到达时间:
Trequired = Tcycle + Tskew - Tsu = 198.495
最终的建立时间裕量为:Trequired - Tarrive = 198.495 - 1.964 = 196.531
该数值和时序报告summary当中数值一致。

三、从时序的角度看为什么寄存器赋值慢一拍

  • 时序逻辑电路并没有真正意义上的落后一拍,落后一拍的原因是因为Tco的存在,导致在当前时钟上升沿无法采集到最新的值,而只能采集到未变化的值
  • 在仿真时,输入信号尽量用非阻塞赋值“<=”来模拟其来自寄存器的输出,这样的仿真结果更接近实际电路
  • 可以采用“#1”这种赋值方式来模拟Tco的存在,这可以在仿真时带来很大的便利

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

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

相关文章

Unity Toggle与Toggle Group的妙用

Toggle与Toggle Group结合使用&#xff0c;妙处多多。 因为在同一Toggle Group内只有一个Toggle可以被选中&#xff0c;那么对于我们要创建单选按钮组、游戏的一些开关、暗夜模式、筛选不同显示内容等功能都非常好用。 比如我要实现通过点击不同按钮,从而筛选显示不同内容&am…

IO扩展芯片应用及方案选型 (74HC595,74HC165,8255,CH351等)

IO扩展芯片应用及方案选型 (74HC595,74HC165,8255,CH351等) 参考书籍《振南技术干货集&#xff1a;单片机–基础进阶创业十年》作者&#xff1a;于振南 在我们进行单片机开发的时候, 经常会发现I/O 口不够用。 一方面是因为我们产品中往往都包括很多的功能, 又有显示, 又有存储…

uniapp,导航栏(切换项)有多项,溢出采取左滑右滑的形式展示

一、实现效果 当有多项的导航&#xff0c;或者说切换项&#xff0c;超出页面的宽度&#xff0c;我们采取可滑动的方式比较好一些&#xff01;并且在页面右边加个遮罩&#xff0c;模拟最右边有渐变效果&#xff01; 二、实现代码 html代码&#xff1a; <!-- 头部导航栏 --…

探究Kafka主题删除失败的根本原因

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 探究Kafka主题删除失败的根本原因 前言主题删除的基础主题删除的定义和作用&#xff1a;删除操作的基本流程&#xff1a; 可能存在删除异常的因素数据积压的处理方法Broker状态异常处理方法通用方法 前…

PyTorch 深度学习(GPT 重译)(一)

第一部分&#xff1a;PyTorch 核心 欢迎来到本书的第一部分。在这里&#xff0c;我们将与 PyTorch 迈出第一步&#xff0c;获得理解其结构和解决 PyTorch 项目机制所需的基本技能。 在第一章中&#xff0c;我们将首次接触 PyTorch&#xff0c;了解它是什么&#xff0c;解决了…

【JS】数组查重

码 /*** 数组查重* param {Array} arr 查重的数组* returns Array 返回不重复的数组 */ const noReArr arr > [...new Set(arr)]const a [12,12,3,4] console.log( noReArr(a) );效果图

使用STM32 再实现电动车防盗

项目需求 点击遥控器 A 按键&#xff0c;系统进入警戒模式&#xff0c;一旦检测到震动&#xff08;小偷偷车&#xff09;&#xff0c;则喇叭发出声响报警&#xff0c; 吓退小偷。 点击遥控器 B 按键&#xff0c;系统退出警戒模式&#xff0c;再怎么摇晃系统都不会报警&…

vscode搜索总是搜到修改记录文件如何处理

如图每次搜索出来的结果总是有好多编辑记录中的文件&#xff0c;给自己找文件及提交代码时带来很大困扰&#xff0c;每次都得删特别麻烦。 解决办法&#xff1a; 如上图在插件里找到 local history 点击 ”禁用“ 即可。以后再编辑代码就不会产生修改记录文件了。 如果直接搜索…

【matlab安装casadi】

虽然安装起来很简单&#xff0c;但是网上没找到好的教程&#xff0c;姑且写一下记录一下 首先到github找到对应的库&#xff1a;https://github.com/casadi/casadi找到发布的版本&#xff0c;点进去 这里就可以点进去下载自己需要的版本了下面也有对应的下载后的安装方式&…

ArcGIS Pro与R:携手优化生态系统服务评估流程

生态系统服务是指生态系统所形成的用于维持人类赖以生存和发展的自然环境条件与效用&#xff0c;是人类直接或间接从生态系统中得到的各种惠益。联合国千年生态系统评估&#xff08;Millennium ecosystem assessment&#xff0c;MA&#xff09;提出生态系统服务包括供给、调节、…

linux系统--------------mysql数据库管理

目录 一、SQL语句 1.1SQL语言分类 1.2查看数据库信息 1.3登录到你想登录的库 1.4查看数据库中的表信息 1.5显示数据表的结构&#xff08;字段&#xff09; 1.5.1数据表的结构 1.5.2常用的数据类型: 二、关系型数据库的四种语言 2.1DDL&#xff1a;数据定义语言&am…

【堆】Top-K问题

标题&#xff1a;C语言库函数scanf&#xff08;&#xff09;解读 水墨不写bug &#xff08;图片来源于网络&#xff09; 正文开始&#xff1a; Top-K问题是一类问题的统称&#xff1a; 即根据对象的某一属性&#xff0c;找出这个属性最突出的K个对象&#xff0c;并且通常对象…

Midjourney发布新特性风格参考

1. 引言 最近&#xff0c;Midjourney 推出了Style Reference V2.0 即功能更加强大的风格参考工具&#xff0c;该工具可以让大家参考其他图像的风格&#xff0c;生成与参考图像风格保持一致&#xff0c;与文本提示词语义内容保持一致的图像。它与图像提示类似&#xff0c;但是只…

LightDB24.1 存储过程支持inner和outer对变量的引用

背景 Oracle oracle plsql支持如下场景&#xff1a; 在for循环中&#xff0c;将select查询的结果给一个record类型&#xff0c;这一操作也被称为隐式游标操作。record类型中一个字段用来接收查询结果中的一个select查询语句&#xff08;update,delete,insert在这个语法中都会…

ELK快速搭建图文详细步骤

目录 一、下载地址二、安装docker-compose(已安装则跳过)三、初始化ELK1. 赋予/setup/entrypoint.sh执行权限2. 初始化 docker-elk 所需的 Elasticsearch 用户和组3. 重置默认用户的密码4. 替换配置文件中的用户名和密码5. 重启 Logstash 和 Kibana&#xff0c;使用新密码重新连…

蓝桥杯单片机快速开发笔记——NE555测频

一、原理分析 NE555作为一种多功能集成电路&#xff0c;在信号发生和频率测量方面具有广泛的应用。通过合理配置和连接外部元件&#xff0c;可以实现不同类型的信号发生和频率测量功能。 原理&#xff1a; 信号发生器&#xff1a; NE555可以配置为多种不同的振荡器电路&#x…

鸿蒙Harmony应用开发—ArkTS-转场动画(组件内转场)

组件内转场主要通过transition属性配置转场参数&#xff0c;在组件插入和删除时显示过渡动效&#xff0c;主要用于容器组件中的子组件插入和删除时&#xff0c;提升用户体验。 说明&#xff1a; 从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记…

leetcode代码记录(移除链表元素

目录 1. 题目&#xff1a;2. 我的代码&#xff1a;小结&#xff1a; 1. 题目&#xff1a; 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例 1&#xff1a; 输入&#xff1a;head […

学点Java打小工_Day2Day3_一点作业

1 猜数字&#xff08;10次机会&#xff09; 随机生成[1,1000]的一个数&#xff0c;输入你猜的数程序会给出反馈&#xff0c;直到猜对或次数用尽(10次)。 //猜数字 10次机会Testpublic void guessNumber() {Random random new Random();// [0, 1000) 1// [1, 1000]int num ra…

基于 Echarts + Python Flask ,我搭建了一个动态实时大屏监管系统

一、效果展示 1. 动态实时更新数据效果图 2. 鼠标右键切换主题 二、确定需求方案 支持Windows、Linux、Mac等各种主流操作系统&#xff1b;支持主流浏览器Chrome&#xff0c;Microsoft Edge&#xff0c;360等&#xff1b;服务器采用python语言编写&#xff0c;配置好python环…