基于Xlinx的时序分析与约束(6)----如何读懂vivado下的时序报告?

news2024/12/29 1:09:26

写在前面

        在《基于Xlinx的时序分析与约束(3)----基础概念(下)》文章中写了一些时序分析的基础概念,同时还说了文章中提到的公式根本就不需要记忆,因为综合工具vivado会帮你把所有时序路径都做详尽的分析,你所需要做的就是理解概念。

        光说不练云玩家,今天就通过一个简单的工程来看下如何在vivado软件中查看时序报告。


1、建立工程与添加时序约束

        首先新建一个vivado的RTL工程,再添加一个Verilog文件,内容如下:

module test
(
    input               sys_clk	,
    input               rst  	,
    output reg [7:0]	cnt
);

always @(posedge sys_clk)begin
    if(rst)
        cnt <= 0;
    else
        cnt <= cnt + 1'b1;
end

endmodule

        这个工程要实现的功能非常简单,就是一个8bit的循环计数器。这是生成的功能框图:

3f6aa35fc12943adaaf8ebc4536cdead.png

        然后再往工程里添加一个时序约束文件timing.xdc,内容如下:

create_clock -period 10.000 -name sys_clk -waveform {0.000 5.000} [get_ports sys_clk]

        这句约束的意思是将输入的主时钟频率约束在100MHz,如果你不懂主时钟约束,可以参考《基于Xlinx的时序分析与约束(4)----主时钟约束》

        管脚的绑定因为只是看时序报表不涉及具体的开发,所以就省去了(vivado自动分配,不影响看查看时序)。


2、时序报表

        工程新建完成后,点击综合、实现(完成布局布线)。然后点击实现implementation下的report timing summary,弹出的界面如下:

bc1304acaee640faba2bf06aa77430e4.png

        按上图设置,点击OK,然后就出现了timing界面:

de4d35df19a24e479bce68a1c1ba9ef4.png

        timing界面左侧是时序路径分类,右侧是时序的一个总览,其中一些参数的含义如WNS以及TNS,WHS以及THS是我们需要着重关注的:

  • WNS:最差负时序裕量 (Worst Negative Slack)
  • TNS :总的负时序裕量 (Total Negative Slack),也就是负时序裕量路径之和
  • WHS :最差保持时序裕量 (Worst Hold Slack)
  • THS :总的保持时序裕量 (Total Hold Slack),也就是负保持时序裕量路径之和

       

        可以看到WNS为8.370ns,这表示这个工程中最差的那条时序路径的建立时间裕量是8.370ns,所以该设计是时序收敛的。如果时序不收敛,那么肯定是有WNS为负。

        而TNS为0代表不存在建立时间裕量为负的时序路径,这也表示设计是收敛的。如果设计不收敛,那么必然存在1条或多条建立时间裕量为负的时序路径,作为路径之和的TNS也就一定是一个负数。

        所以WNS描述设计中最差的时序路径的裕量情况,而TNS则描述设计中所有不收敛的时序路径的裕量情况。保持路径的分析类似。

        我们最需要关注的是intra-clock paths下sys_clk的setup和hold,这把具体的时序路径都穷举出来了:

ddbc334c389140c698b2172d7e55a9c7.png

        其中一些参数的意义如下:

  • slack:建立时间裕量
  • level:逻辑级数,这里1就表示在两个寄存器之间仅存在1个组合逻辑器件
  • fanout:表示从这一点连接到了几个目的端点,fanout = 1就表示连接了1个目的端点
  • from to:表示是哪两者之间的时序

        点击schematic就会出现设计的原理图:

7c80b7cc15fd44b69047740e523786e2.png

       

        此时,点击某条路径,就会在原理图上高亮该条路径:

d94ead2778b240ee9e517d2da6077ba9.png

        上图以路径9为例,源端是cnt_reg【1】,目的端则是cnt_reg【5】,中间的数据路径经过了2个CARRY4,所以逻辑级数levels为2。

        

        双击某条路径,则可以打开其具体的路径分析(仍以路径9为例),由于报表很长,分为3个部分讲解:

        第1部分--总览:

d31a217f7c3e48ad9f36f196542b8d0e.png

  • slack:裕量,具体到这条路径就是建立时间裕量,裕量为8.370ns,表示这条路径是满足时序要求的
  • source:源端寄存器,即时序分析的起点,发射沿(Launch Edge)
  • destination:目的端寄存器,即时序分析的终点,锁存沿(Latch Edge)
  • path group:时序分析的时钟来源
  • path type:路径类型,此路径为建立时间的分析
  • requirement:时序要求,设定为100MHz,所以就是10ns
  • data path delay:组合路径的数据延时,包括组合逻辑器件的延时(logic)和布线延时(route)
  • logic levels:逻辑级数,即两个寄存器之间存在多少级组合逻辑
  • clock path skew:时钟到达目的寄存器和源寄存器之间的时间差值
  • clock uncertainty :时钟的不确定度,包括skew和jitter

       

        在讲第2部分和第3部分之前,先把建立时间裕量计算的这张模型图请出来,对照着理解会比较方便。

cad86def4fbe4ea9a171aafbcdd71a05.png

Data Arrival Time = launch edge + Tclk1 + Tco +Tdata 

Data Required Time = latch edge + Tclk2 - Tsu

Setup Slack = Data Required Time – Data Arrival Time

        第2部分由源端的时钟路径和数据路径组成:

cd98c05ec47c47d886551c68be9e5b79.png

        时钟路径就是时钟从起点到达源端寄存器时钟端口的路径,也就是Tclk1,映射到路径9的具体路线则是:FPGA的时钟管脚--布线--IBUF(这个是缓冲的,每个管脚都会自动添加,增加驱动能力)--布线--BUFG(全局时钟网络,可以减少时钟到不同寄存器之间的Skew,一般时钟管脚都会添加)--布线--源端寄存器时钟端口。从上图可以看到,把每一条细小的路径叠加后,时钟从IO口到源端寄存器的时间是 4.392ns。

        数据路径则是数据从源端寄存器的D端到目的寄存器的D端的路径,也就是Tco +  Tdata。Tco等于0.379ns,接下来的所有net+2个CARRY4则是组合逻辑的延迟即Tdata,计算得到Tco +  Tdata = 1.625ns。

        那么Tclk1 + Tco +  Tdata不就是数据的到达时间吗?加起来就是6.017ns。

        第3部分是目的端的时钟路径,也就是Tclk2:

234ff91cd63f43d7be212fdbbed2c42a.png

        时钟路径就是时钟从起点到达目的端寄存器时钟端口的路径,也就是Tclk2,映射到路径9的具体路线则是:FPGA的时钟管脚--布线--IBUF--布线--BUFG--布线--目的寄存器。这些时间参数统统加起来就构成了数据的要求到达时间,即14.387ns。

        最后就可以算出建立时间裕量slack =   数据要求到达时间Data Required Time – 数据实际到达时间Data Arrival Time = 14.387ns - 6.017ns = 8.370ns。

        如果你想查看某一条路径在FPGA内部的具体分布,可以按下面操作:

7d7948088b764e5db85eb1662d779048.png

       

        这样就把该路径标成了紫色高亮,然后在device视图下就很快可以找到了:

e2ffeef8632f46b99ab7915362d0cb66.png


3、参考

        ug903,Vivado Design Suite User Guide--Using Constraints

        ug949,适用于 FPGA 和 SoC 的 UltraFast 设计方法指南

        ug906,Vivado Design Suite 用户指南--设计分析与收敛技巧


  • 📣博客主页:wuzhikai.blog.csdn.net
  • 📣本文由 孤独的单刀 原创,首发于CSDN平台🐵
  • 📣您有任何问题,都可以在评论区和我交流📞!
  • 📣创作不易,您的支持是我持续更新的最大动力!如果本文对您有帮助,还请多多点赞👍、评论💬和收藏⭐!

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

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

相关文章

Springboot延伸之自定义Banner

前言 前几周陆陆续续花了5万多字写了我读到的Springboot启动过程的源码&#xff0c;收获颇多&#xff0c;其中给自己留了扩展的作业。我们每次启动Springboot的时候&#xff0c;都有一个Spring的Banner&#xff0c;读源码的过程中可以得知我们可以自定义属于自己的Banner&…

领域驱动设计

DDD的代码结构_ronshi的博客-CSDN博客_ddd代码结构 DDD( 领域驱动设计)概念来源于2004年著名建模专家eric evans的书籍:《domain-driven design –tackling complexity in the heart of software》(中文译名&#xff1a;领域驱动设计—软件核心复杂性应对之道)。 DDD领域驱动设…

全流量安全分析为IT运维提供高效保障(二)

前言 某高校信息中心老师反应&#xff0c;用户反馈教务系统有访问慢的情况&#xff0c;需要通过流量分析系统来了解系统的运行情况&#xff0c;此报告专门针对系统的性能数据做了分析。 前一章做了系统功能模块分析和整体流量分析&#xff0c;本章将进行异常分析、其他信息发…

【Linux】C语言缓冲区、缓冲区的实现

目录 一、C语言缓冲区 1.1 什么是缓冲区 1.2 缓冲区刷新 1.3 问题解释 1.4 stdout与stderr 1.5 perror的实现 二、模拟实现缓冲区 2.1 接口展示 2.2 函数实现 2.3 测试与源代码 一、C语言缓冲区 1.1 什么是缓冲区 缓冲区本质是一块C语言提供的内存空间&#xff0c…

边缘计算网关的应用有哪些

边缘计算网关&#xff08;又叫物联网边缘计算网关&#xff09;&#xff0c;简称 Edge-Gateway&#xff0c;是一种可以在设备上运行本地计算、消息通信、数据缓存等功能的工业智能网关&#xff0c;可以在无需联网的情况实现设备的本地联动以及数据处理分析。 其具备接口丰富&…

无线蓝牙耳机什么牌子的好?好的无线蓝牙耳机推荐

无线蓝牙耳机因为携带更便捷&#xff0c;连接也越来越迅速而受到了不少用户的喜爱。在目前的耳机市场中&#xff0c;蓝牙耳机所占的比例越来越高&#xff0c;无线蓝牙耳机牌子也逐渐增多。那么&#xff0c;什么牌子的无线蓝牙耳机好&#xff1f;下面&#xff0c;我给大家盘点了…

迁移学习的 PyTorch 实现

什么是迁移学习&#xff1f;迁移学习是一种用于机器学习的技术&#xff0c;它使用预先训练好的模型来创建新的模型。这可以减少新创建模型所需的训练时间&#xff0c;因为它将继承以前学习的特性&#xff0c;这也将提高其准确性。但是迁移学习能带来多大的不同呢&#xff1f;为…

销售促单话术

销售过程中&#xff0c;销售不仅可以运用一些销售技巧来吸引客户的兴趣&#xff0c;也可以通过一些话术来获得客户的认同。 ​ 前言 销售过程中&#xff0c;销售不仅可以运用一些销售技巧来吸引客户的兴趣&#xff0c;也可以通过一些话术来获得客户的认同。很多销售一定遇到过…

【观察】全面赋能汽车行业数字化转型,亚马逊云科技的决心与诚意

毫无疑问&#xff0c;新一轮科技革命正在驱动整个汽车产业发生颠覆性的重大变革&#xff0c;传统的行业游戏规则也将在数字化时代被改写&#xff0c;而未来以电动化、智能化、互联化、共享化为特征的“新四化”&#xff0c;也正在成为整个汽车产业技术创新和商业模式进化的新方…

一文带你走进Python文件操作

Py文件操作 一: """ 1.找到这个文件,双击打开 ​ open(文件路径,mode"",encoding"") mode>读/写 encoding>文件的编码集是什么 ​文件路径:1.绝对路径d:Tools/Tool/python/a.txt 不安全2.相对路径相对于当前你的程序所在的文件夹…

回首来时路,未来皆坦途.......

不觉间&#xff0c;又到了年末&#xff0c;这一年似乎并没有什么特别的经历和值得一提的业绩&#xff0c;就是这样平淡的过着每一天&#xff0c;这大概就是普通人的人生吧..... 今年最大的改变就是跨行业成长&#xff0c;从事了售前工程师的工作&#xff0c;由于之前并没有相关…

20221230英语学习

今日单词 agreeable adj.惬意的&#xff0c;宜人的&#xff1b;可接受的&#xff0c;适合的&#xff1b;欣然同意的 gleam v.发微光&#xff1b;闪烁&#xff1b;隐约闪光&#xff1b;&#xff08;在眼中&#xff09;闪现&#xff1b;表露 hypothesis n.[复数hypotheses] 假…

CSS3 filter滤镜

filter 顾名思义就是过滤的意思 使用 filter属性为元素(常用于<img>)带来视觉的效果 filter描述none默认值&#xff0c;没有效果。blur(px)给图像设置模糊效果。默认是0&#xff1b;这个参数可设置css长度值&#xff0c;但不接受百分比值。brightness(%)调整图像的对比…

main 方法演示 spring 注解方式获取 bean

文章目录一、环境准备1、创建 Java 工程&#xff0c;引入 spring 相关 jar 包2、构建 path二、开发1、准备一个 User 类2、编写配置类 BeanConfig3、编写测试类 SpringTest4、验证结果本文章使用 JavaSE 方式&#xff0c;创建含有 main 方法的类&#xff0c;演示如何用简单的方…

用天翎低代码做办公协同软件,简单高效

编者按&#xff1a;在数字办公流行的现在&#xff0c;办公协同软件是企业必备。本文分析了办公协同软件的作用&#xff0c;并指出了基于低代码平台实现的办公协同软件可以很好地满足企业需求&#xff0c;最后进行了相关案例展示。 关键词&#xff1a;私有化部署&#xff0c;数…

从云原生实战峰会,透视2023年云原生发展趋势

CSDN&#xff1a;如果用两个关键词来总结 2022 年云原生的发展态势&#xff0c;您会有哪些评价&#xff1f;——繁荣和普惠。“繁荣”代表当前云原生的技术和产品蓬勃发展&#xff1b;“普惠”代表云原生技术从互联网走向金融、零售、政企等行业&#xff0c;普惠千行百业构建丰…

MySQL学习笔记(十五)行锁表锁间隙锁临键锁共享锁排他锁死锁

行锁表锁间隙锁临键锁共享锁排他锁死锁手动提交行锁&#xff08;记录锁Record Locks&#xff09;表锁间隙锁&#xff08;Gap Locks&#xff09;临键锁&#xff08;Next-Key Locks&#xff09;共享锁&#xff0c;排他锁死锁查看事物&#xff0c;锁的命令死锁的4个必要条件模拟死…

odoo学习之security, menu, tree, form

security 在ir.model.access.csv中 id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink可以设置成 access_org_info,org.info,model_org_info,,1,1,1,1其中&#xff1a;access_org_info&#xff1a;access_为固定开头&#xff0c;org_info为模块…

Mol2Image: Improved Conditional Flow Models for Molecule to Image Synthesis

Mol2Image: 连接药物分子与细胞显微图像的条件流模型【2021CVPR】 Mol2Image: Improved Conditional Flow Models for Molecule to Image Synthesis paper&#xff1a;Improved Conditional Flow Models for Molecule to Image Synthesis | Papers With Code code&#xff1…

谷粒商城之高级篇(3)

2 商城业务 2.7 订单服务 2.7.22 创建业务交换机&队列 这里承接 知识补充篇 6 RabbitMQ 订单分布式主体逻辑 订单超时未支付触发订单过期状态修改与库存解锁 创建订单时消息会被发送至队列order.delay.queue&#xff0c;经过TTL的时间后消息会变成死信以order.release…