一文弄懂Verilog静态时序分析中的建立时间和保持时间

这篇具有很好参考价值的文章主要介绍了一文弄懂Verilog静态时序分析中的建立时间和保持时间。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

       在对Verilog代码进行静态时序分析的时候,建立时间和保持时间是需要我们重点关注的指标。

1.建立时间和保持时间的是什么?

建立时间(Setup Time):指采样时钟边沿到来之前,数据需要保持稳定的时间。如果数据在采样时钟的边沿到来之前的建立时间内这段时间变化,可能会造成时钟采样的数据在0和1之间跳变,使得寄存器进入亚稳态(亚稳态:可以理解为不稳定的状态)。

保持时间(Hold Time):指采样时钟边沿到来之后,数据需要保持稳定的时间。如果数据在采样时钟的边沿到来之后的建立时间内这段时间变化,可能会造成寄存器进入亚稳态,寄存器内的数据采样数据可能无法正确存储。

        建立时间和保持时间,总的来说就是,采样时钟跳变沿到来的前一段时间和后一段时间,被采样数据都不能变化,要保持稳定,如果在采样时钟跳变沿来之前的一小段时间内变化,则可能无法正确对数据进行采样,如果在采样时钟跳变沿来之后的一小段时间内变化,则可能出现采样了之后但数据没有正确地保存在寄存器里面。

       下面,举一个例子来说明时钟和建立时间以及保持时间的关系。想象一下你(数据)坐公交(时钟)从你家到学校,公交车每隔10分钟来一趟(相当于某一时钟频率)。假设公交车每天的8:00am会到你家附近的公交站(时钟的采样沿),如果你8点踩点去公交站,那你有可能会错过那一趟公交车(数据在时钟跳变沿来之前还没稳定),因为公交车可能会来早点或者来晚一点。那么,怎么能确保你一定坐上8:00am那一趟公交车呢?答案很明显,就是提前几分钟过去公交站等(这个等待的时间就是建立时间)。而你上车之后,可能要坐10分钟的车,3个站,但是时间还没到,你就提前一个站下车,那你就无法准时到达学校(不考虑你下车后叫司机来接你的情况)。也就是说,你必须要在车上待足够长的时间(这个等待的时间就是保持时间),否则,公交车无法将你送到学校(寄存器数据可能无法正确保存)。

2.建立时间和保持时间的作用是什么?

       在对Verilog代码进行静态时序分析的时候,建立时间和保持时间是需要我们重点关注的指标。它们关系到代码能否正常地在FPGA中的运行。Verilog代码使用Vivado,Quartus等开发套件编译完成后,都可以看到静态时序分析报告。在时序分析报告中,通常出现的是setup time slack(建立时间裕量)和hold time slack(保持时间裕量),即建立时间和保持时间还有多少余量,如果setup time slack为正值,则表示建立时间裕量还有空余,意味着该路径可以运行在更高的时钟频率下;而setup time slack为负值时,则表示建立时间不满足要求,意味着该路径无法在该时钟频率下稳定运行,需要做时序优化。至于hold time slack,一般都不用管,几乎遇不到会出现保持时间违例的情况。(本人对保持时间违例的情况了解甚少,需要学习)

一文弄懂Verilog静态时序分析中的建立时间和保持时间,fpga开发,信号处理

       上图是一个 经典的时序分析图,展示的是一个寄存器到寄存器的路径。一般来说,绝大部分的静态时序分析都是在分析寄存器到寄存器之间的路径。接下来用一段简短的代码来辅助说明一下。

//========= code 1 ========
    reg  in ;
    reg  out;
always@(posedge clk or negedge rst_n)
    if(!rst_n)
       out <= 1'd0;
    else
       out <= ~in;

//========= code 2 ========
    reg  [ 7: 0] in ;
    reg  [17: 0] out;
always@(posedge clk or negedge rst_n)
    if(!rst_n)
       out <= 1'd0;
    else
       out <= (~in + 1'b1) * (~in + 1'b1);

以上两段代码,都是从寄存器到寄存器的路径,唯一的区别就是,从in到out的计算不一样,第一段只是将in取反就送给out了,而第二段既做了取反,还做了加法和乘法,计算相对第一段明显复杂了。这个时候,我们思考这样一个问题:上面这两段代码中的时钟clk到底支持多高的频率?100MHz,200MHz还是300MHz?

一文弄懂Verilog静态时序分析中的建立时间和保持时间,fpga开发,信号处理

计算最大工作频率的公式如上,其中,Tco为发端寄存器从时钟到达直至数据到达Q端的时间,Tlogic为组合逻辑延迟,Tnet为两级寄存器之间的布线延迟,Tsetup为收端寄存器建立时间,Tskew两级寄存器的时间skew,其值等于时钟同一边沿到达两个寄存器时钟端口的时间差。在FPGA中,对于同步设计,Tskew可以忽略,Tco和Tsetup取决于芯片工艺,通常越先进的工艺,Tco和Tsetup越小。因此,一旦芯片型号选定只能通过Tlogic和Tnet来改善最大频率。对于FPGA来说,由于布局布线的过程一般都是自动完成的(除非你加了额外的约束),Tnet也不是我们能决定的因素。

       因此,上面的代码支持的最大频率主要由Tlogic决定,亦即如果想代码运行得快一点,那就得缩短Tlogic,这个关系到时序优化的方法,内容很多,以后我有时间会再写一篇关于时序优化的文章,和大家一起学习一下。

       总结一下,建立时间和保持时间,是静态时序分析中的重要一环,通常以建立时间裕量和保持时间裕量的形式出现,来评价Verilog设计的电路是否符合要求。而静态时序分析,又是评价Verilog代码能否在硬件载体中稳定运行得一个重要手段,是上板调试前的必要步骤,因此初学者应该充分理解其含义,为后续的深入学习打下基础。以上内容仅为个人的学习分享,如果错误,还望指正。文章来源地址https://www.toymoban.com/news/detail-794642.html

到了这里,关于一文弄懂Verilog静态时序分析中的建立时间和保持时间的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 时序分析、时序约束和时序收敛(8)--关于时序路径、时钟悲观度和建立时间/保持时间的一些问题

    目录 写在前面 1、为什么同一条时序路径在报表里的值不一样?

    2024年02月08日
    浏览(41)
  • FPGA的时序分析、约束和收敛(8)----关于时序路径、时钟悲观度和建立时间/保持时间的一些问题

    目录 写在前面 1、为什么同一条时序路径在报表里的值不一样?

    2024年02月12日
    浏览(49)
  • 一文弄懂Python中的内存管理

    Python是一种解释性语言,这意味着它在运行之前不需要编译。当Python程序运行时,它会动态地为所有变量和对象分配相应的内存。这意味着Python的内存管理是自动处理的,使得开发人员能够专注于编写代码,而不用担心相关内存分配和释放。本文就Python的内存管理进行详述,

    2023年04月15日
    浏览(30)
  • Mybatis中的缓存机制(一文带你弄懂)

    缓存的作⽤:通过减少IO的⽅式,来提⾼程序的执⾏效率。 缓存就是指存在内存中的临时数据,使用缓存能够减少和数据库交互的次数,提高效率。将相同查询条件的sql语句执行一遍后得到的结果存在内存或者某种缓存介质中,当下次遇到一模一样的查询sql时候不在执行sql与

    2024年02月11日
    浏览(38)
  • 静态时序分析与时序约束

    理性的时钟模型是一个占空比为50%且周期固定的方波:  实际电路中输入给FPGA的晶振时钟信号是正弦波: Clock Jitter,时钟抖动,相对于理想时钟沿,实际时钟存在不随时钟存在积累的、时而超前、时而滞后的偏移。 Clock Skew:时钟偏差,同一个时钟域内的时钟信号到达数字电

    2024年02月12日
    浏览(36)
  • 静态时序分析(STA)

    静态时序分析原理 什么是STA 分析(计算)design是否满足timing约束的要求 DFF(sequential cell—有clk的器件)setup/hold需求 复位/设置信号 信号脉冲宽度 门控时钟信号 计算design是否满足DRC的要求 max_capacitance—节点电容 max_transition—信号爬升时间 max_fanout—负载能力有多少 如上图所

    2024年01月23日
    浏览(36)
  • 静态时序分析STA基础

    @ 目录 一、TCL语言和synopsys TCL语言入门 1.1 TCL基本指令 1.2 synopsys TCL常用语言 二、STA基本概念 2.1 时序弧(Timing Arc)与线延迟、单元延迟 2.2 建立时间与保持时间 2.3 时序路径(Timing path) 2.4时钟域(Clock Domains) 2.5 操作条件(Operating Conditions)和 PVT(Process Voltage Temperature)

    2024年02月15日
    浏览(39)
  • [静态时序分析简明教程(八)]虚假路径

    一个 数字芯片工程师 的 核心竞争力 是什么?不同的工程师可能给出不同的答复,有些人可能提到 硬件描述语言 ,有些人可能会提到对于 特定算法和协议的理解 ,有些人或许会提到 对于软硬件的结合划分 ,作者想说,这些说法, 其实对也不对 ,硬件描述语言,翻来覆去

    2024年02月02日
    浏览(76)
  • 静态时序分析 第二章 基础知识

    目录 1. 逻辑门单元 2. 门单元的时序计算参数         2.1 信号转换延时(transition delay)          2.2 逻辑门延时(logic gate delay) 3.  时序单元相关约束         3.1 建立时间(setup time)         3.2 保持时间(hold time)         3.3 恢复时间         3.4 移除时间      

    2023年04月13日
    浏览(39)
  • 静态时序分析 第三章 标准单元库

       本章将介绍时序信息在 单元库(library cell) 中是如何描述的。这个单元可以是1个 标准单元(standard cell) 、1个 IO缓存器( IO buffer) ,或者 复杂的IP(ItellectualProperty,知识产权)核 ,比如 USB核( USB core) 。    除了时序信息,单元库还包括了其他一些属性 attributes ,比如 单元

    2024年01月16日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包