草庐IT

FPGA时序约束篇之时序分析与时序约束的作用

锅巴不加盐 2024-01-30 原文

FPGA时序约束篇之时序分析与时序约束的作用

一、写在前面

  在每个初学者学习FPGA设计时,都会听前辈说:时序约束对FPGA设计很重要。那么,听了这么多次,时序分析到底是什么?时序约束的作用是什么?

  网上巴拉巴拉看了一些杂七杂八的资料,简单写个学习笔记。

二、名词解释

  先用比较官方一点的语言来描述一下时序分析与时序约束?

  • 时序分析:时序分析是指通过分析FPGA设计中各个路径之间的数据传输和时钟传输路径,根据路径延迟与数据延迟,判断是否符合我们预期的要求:在工作时钟信号的锁存沿(Latch Edge)是否可以正确寄存我们需要的数据。
  • 时序约束:时序约束是指告诉EDA软件,我们所需要设计的系统需要达到什么样的设计指标,那么EDA软件根据我们所提供的设计指标,进行优化布局布线,尽量达到我们的设计指标。

  我们在使用HDL(Hardware Description Language )描述或者设计一个电路时,常常会被问到,你所设计的电路的最高主频能跑到多少?
  What?我们在给设计系统中不是给定了约束的系统时钟频率了吗?这里,最高主频是啥?最高主频是指当设计电路每个寄存器都能正确所存数据所需要的最大时钟频率。那么,在这里最高主频在设计中是通过我们手算得到的吗?当然不是。可以通过EDA软件的综合后的时序报告中可以看到。然后根据时序报告对时序约束进行修改。

三、举个栗子

  假如我们设计一个模块,其示意图如下。模块的输入数据DATA通过一个寄存器REG_1(D触发器)进行寄存后,在经过一系列的逻辑运算后,在通过一个寄存器(D触发器)REG_2进行寄存后,作为模块的输出。

  那么,这里有几个点需要指出:

  • CLK_1与CLK_2都是接到模块的输入时钟CLK,但是由于电路布局布线的原因,CLK_1与CLK_2相对于输入时钟(主时钟)的延迟是不一致的
  • 数据从寄存器REG_1发出,再到寄存器REG_2,其中REG_1称为源寄存器,REG_2称为目的寄存器
  • 分析信号在两个寄存器之间的传递时,需要保证这两个寄存器的工作时钟信号是同源时钟

3.1 降低时钟频率

  对于上面图中的逻辑计算部分,内部是由一系列的逻辑门电路组成的,这里每个逻辑器件之间数据的传输存在延迟。那么问题来了,在第一个时钟的上升沿数据DATA从寄存器REG_1的D端输入,经过一定时间后从D触发器REG_1的Q端输出,再经过逻辑运算,这里逻辑运算也得需要一定的时间,从输入到输出存在延迟,如果这个延迟超过了一个时钟的周期,那么在第二个时钟周期的上升沿处,寄存器REG_2对逻辑运算的结果进行采样得到的结果就不是我们想要的数据,如下图所示。

  那么,在上图中,由于组合逻辑的路径太长,所以从寄存器REG_1的Q端到寄存器REG_2的D端的时间太长,从而导致经过组合逻辑运算后的数据到达目的寄存器REG_2的D端时已经超过了其工作时钟CLK_2的上升沿(Latch Edge),所以目的寄存器REG_2无法锁存到正确的数据。
  假如这里我们约束的系统时钟频率为50M Hz,那么源时钟CLK、源寄存器工作时钟CLK_1与目的寄存器工作时钟CLK_2的时钟周期都为20ns。这里由于无法满足时序收敛的要求,需要降低时钟频率,即增大时钟周期,以满足时序收敛的要求,如下图中右图所示。

3.2 提升时钟频率

  那么,上面是不满足时序收敛的情况。加入经过时序分析后,我们给的系统时钟频率50M Hz是满足时序收敛的情况,如下图中左图所示。

  那么,在这里,可以进一步提升时钟的频率,即降低时钟的周期,但此时目的寄存器REG_2仍然能够正确寄存数据,如上图中右图所示。

END

  好了,上面就是关于时序分析与时序约束的解释,如果有疑义的地方欢迎评论区友好探讨学习!!!!!
  关于时序分析与时序约束中的基本知识参照下一篇《FPGA时序约束篇之时序约束中的一些基础概念》

有关FPGA时序约束篇之时序分析与时序约束的作用的更多相关文章

  1. ruby-on-rails - 如果 Object::try 被发送到一个 nil 对象,为什么它会起作用? - 2

    如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象

  2. ruby-on-rails - "assigns"在 Ruby on Rails 中有什么作用? - 2

    我目前正在尝试学习RubyonRails和测试框架RSpec。assigns在此RSpec测试中做什么?describe"GETindex"doit"assignsallmymodelas@mymodel"domymodel=Factory(:mymodel)get:indexassigns(:mymodels).shouldeq([mymodel])endend 最佳答案 assigns只是检查您在Controller中设置的实例变量的值。这里检查@mymodels。 关于ruby-o

  3. ruby - 字符串文字前面的 * 在 ruby​​ 中有什么作用? - 2

    这段代码似乎创建了一个范围从a到z的数组,但我不明白*的作用。有人可以解释一下吗?[*"a".."z"] 最佳答案 它叫做splatoperator.SplattinganLvalueAmaximumofonelvaluemaybesplattedinwhichcaseitisassignedanArrayconsistingoftheremainingrvaluesthatlackcorrespondinglvalues.Iftherightmostlvalueissplattedthenitconsumesallrvaluesw

  4. ruby - 为什么这个 eval 在 Ruby 中不起作用 - 2

    你能解释一下吗?我想评估来自两个不同来源的值和计算。一个消息来源为我提供了以下信息(以编程方式):'a=2'第二个来源给了我这个表达式来评估:'a+3'这个有效:a=2eval'a+3'这也有效:eval'a=2;a+3'但我真正需要的是这个,但它不起作用:eval'a=2'eval'a+3'我想了解其中的区别,以及如何使最后一个选项起作用。感谢您的帮助。 最佳答案 您可以创建一个Binding,并将相同的绑定(bind)与每个eval相关联调用:1.9.3p194:008>b=binding=>#1.9.3p194:009>eva

  5. ruby-on-rails - Spring 不起作用。 [未初始化常量 Spring::SID::DL] - 2

    我无法运行Spring。这是错误日志。myid-no-MacBook-Pro:myid$spring/Users/myid/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/spring-0.0.10/lib/spring/sid.rb:17:in`fiddle_func':uninitializedconstantSpring::SID::DL(NameError)from/Users/myid/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/spring-0.0.10/li

  6. ruby-on-rails - Simple_form 必填字段不起作用 - Ruby on Rails - 2

    我在RoR应用程序中有一个提交表单,是使用simple_form构建的。当字段为空白时,应用程序仍会继续下一步,而不会提示错误或警告。默认情况下,这些字段应该是required:true;但即使手动编写也行不通。该应用有3个步骤:NewPost(新View)->Preview(创建View)->Post。我的Controller和View的摘录会更清楚:defnew@post=Post.newenddefcreate@post=Post.new(params.require(:post).permit(:title,:category_id))ifparams[:previewButt

  7. 建模分析 | 平面2R机器人(二连杆)运动学与动力学建模(附Matlab仿真) - 2

    目录0专栏介绍1平面2R机器人概述2运动学建模2.1正运动学模型2.2逆运动学模型2.3机器人运动学仿真3动力学建模3.1计算动能3.2势能计算与动力学方程3.3动力学仿真0专栏介绍?附C++/Python/Matlab全套代码?课程设计、毕业设计、创新竞赛必备!详细介绍全局规划(图搜索、采样法、智能算法等);局部规划(DWA、APF等);曲线优化(贝塞尔曲线、B样条曲线等)。?详情:图解自动驾驶中的运动规划(MotionPlanning),附几十种规划算法1平面2R机器人概述如图1所示为本文的研究本体——平面2R机器人。对参数进行如下定义:机器人广义坐标

  8. 网站日志分析软件--让网站日志分析工作变得更简单 - 2

    网站的日志分析,是seo优化不可忽视的一门功课,但网站越大,每天产生的日志就越大,大站一天都可以产生几个G的网站日志,如果光靠肉眼去分析,那可能看到猴年马月都看不完,因此借助网站日志分析工具去分析网站日志,那将会使网站日志分析工作变得更简单。下面推荐两款网站日志分析软件。第一款:逆火网站日志分析器逆火网站日志分析器是一款功能全面的网站服务器日志分析软件。通过分析网站的日志文件,不仅能够精准的知道网站的访问量、网站的访问来源,网站的广告点击,访客的地区统计,搜索引擎关键字查询等,还能够一次性分析多个网站的日志文件,让你轻松管理网站。逆火网站日志分析器下载地址:https://pan.baidu.

  9. ABB-IRB-1200运动学分析MATLAB RVC工具分析+Simulink-Adams联合仿真 - 2

    一、机器人介绍        此处是基于MATLABRVC工具箱,对ABB-IRB-1200型号的微型机械臂进行正逆向运动学分析,并利Simulink工具实现对机械臂进行具有动力学参数的末端轨迹规划仿真,最后根据机械模型设计Simulink-Adams联合仿真。 图1.ABBIRB 1200尺寸参数示意图ABBIRB 1200提供的两种型号广泛适用于各作业,且两者间零部件通用,两种型号的工作范围分别为700 mm 和 900 mm,大有效负载分别为 7 kg 和5 kg。 IRB 1200 能够在狭小空间内能发挥其工作范围与性能优势,具有全新的设计、小型化的体积、高效的性能、易于集成、便捷的接

  10. 关于Qt程序打包后运行库依赖的常见问题分析及解决方法 - 2

    目录一.大致如下常见问题:(1)找不到程序所依赖的Qt库version`Qt_5'notfound(requiredby(2)CouldnotLoadtheQtplatformplugin"xcb"in""eventhoughitwasfound(3)打包到在不同的linux系统下,或者打包到高版本的相同系统下,运行程序时,直接提示段错误即segmentationfault,或者Illegalinstruction(coredumped)非法指令(4)ldd应用程序或者库,查看运行所依赖的库时,直接报段错误二.问题逐个分析,得出解决方法:(1)找不到程序所依赖的Qt库version`Qt_5'

随机推荐