时序分析与时序约束(一)

前言

   这几天一直在学习FPGA关于时序的内容,在低频率,小位宽的设计中,几乎不用考虑时序违例的情况,但是一旦上了高频率,大位宽,就很有必要分析好自己的时序,在出现问题的时候也能及时地解决。另外,随着对时序的深入理解,也有利于平时调试代码(我就有很多bug是因为clock的问题)。当然一次性肯定也没有办法学懂,学深,所以记录下来,希望自己后面也可以多多完善。本篇博客主要参考的有郑师兄的培训视频,一些网上的相关资料等等

  时序分析与时序约束大致分为两类:一就是时序分析的基本知识,二就是如果发生时序违例的情况应该如何处理。

一.基础知识

1.时序分析的概念

     时序分析本质上就是时序检查,目的是检查设计中的所有D触发器是否能够正常工作。也就是检查(1)D触发器的同步端口(数据输入端口)的变化是否满足建立时间和保持时间的要求(2)检查D触发器的异步端口(异步复位端口)的变化(这里指复位信号的释放)是否满足恢复时间要求和移除时间要求

2.时序分析的类型

  主要分为静态时序分析和动态时序分析两种类型。

  动态时序分析:将布局布线生成的布线延迟信息反标注到门级网表中进行仿真,检查是否存在时序违例。

  动态时序分析的优点:直观,自动

  动态时序分析的缺点:(1)testbench覆盖的时序路径不全面(2)覆盖率低(3)如果写很多条时序路径的testbench,可能导致仿真时间过长,消耗内存多。

   静态时序分析:是指将设计中所有的时序路径,利用工具分成一小段一小段的路径,然后利用用户提供的一些基本信息(.XDC约束文件中体现),计算信号在这些路径上的传播延时,检查信号的建立和保持时间是否满足时序要求,通过对最大路径延时和最小路径延时的分析,找出违背时序约束的错误。

   静态时序分析的优点:(1)不需要输入向量就能穷尽所有路径(2)运行速度快,占用内存较少。

  静态时序分析的缺点:需要撰写基本的时序约束文件,告知时序引擎一些必要的信息(比如时钟,input dealy,output dealy)

  综合来看,静态时序分析不仅可以对芯片设计进行全面的时序功能检查,还可以利用时序分析的结果来优化设计,因此现实中也是使用静态分析更多。

3.为什么要有建立时间和保持时间?

       因为在FPGA中,都是依靠D触发器来完成时序功能的,所以要深入到原理部分,就必须熟悉D触发器。

       下图是D触发器的电路结构,可以看出它由两部分组成:主锁存器和从锁存器。

  

       当CLK = 0时,主锁存器工作,位于前级的主锁存器将输入D的值保存进来,而后级的从锁存器依然维持上一周期的的数据,由于这个时候前级和后级反相器环路之间的传输门是关闭状态,所以前级的数据不会到达后级。

       当CLK =1时,从锁存器工作,前级反相器环路中保存的数据会传到后级,同时输入D的信号会被隔绝在外面,这个时候如果前级反相器环路中的信号没有循环一周以上,就会出现介于0和1之间的摇摆电位,造成亚稳态。由于亚稳态时间比延迟时间长,在读阶段读取数据可能会引入错误,所以我们引入建立时间来保证在时钟上升沿来临之前,输入D保持稳定的时间。

       当CLK=1时,如果输入D在传输门关闭前发生变化,那么本该下一周期读取的数据就会提前进入锁存器,从而引起反相器环路震荡或者产生亚稳态。因此在CLK = 1之后输入D也需要稳定一段时间,称之为保持时间约束。保持时间约束是为了防止下一周期的数据冲刷掉本周起的数据。饿

4.全局时钟延迟:T_{co}

  全局时钟到输出延迟,时钟引脚发出全局时钟后获得有效输出所需的时间。即中间级的传输门到输出Q的延迟。

5.时序分析中的常用术语

源时钟:也称为发起时钟

目的时钟:也称为捕获时钟

发起沿:源时钟产生数据的有效时钟沿

捕获沿:目的时钟捕获数据的有效时钟沿。

发起沿通常在0ns,捕获沿通常在下一个发起沿,发起沿和捕获沿通常相差一个时钟周期。

时钟偏差(clock  skew):目的时钟与源时钟的偏差

建立时钟要求:表示定义最严格的建立约束的发送沿与捕获沿之间的关系。

二.setup与holdup分析

1.一条典型的时序路径

  时序路径是由设计实例之间的连接定义的。在数字化设计中,时序路径由一对时序元件组成,这对时序元件受相同时钟或 2 个不同时钟控制。

每条时序路径均由 3 个部分组成:源时钟路径,数据路径,目的时钟路径。

源时钟路径:源时钟路径是源时钟从源点(通常为输入端口)到发送时序单元的时钟管脚的路径。对于始于输入端口的时序路径,不存在源时钟路径。

数据路径:数据路径表示在其中传输数据的时序路径(介于路径起点与路径端点之间)。适用如下定义:(1) 路径起点为时序单元时钟管脚或数据输入端口;(2) 路径端点为时序单元数据输入管脚或数据输出端口。

目的时钟路径:目标时钟路径表示目标时钟从源点(通常为输入端口)到捕获时序单元的时钟管脚的路径。对于终止于输出端口的时序路径,不存在目标时钟路径。

2.FPGA中常见的四种时序路径

  第一种:从FPGA的输入端口到目的寄存器的数据输入端口。

数据:

  • 器件外部由开发板上的时钟发送。
  • 经延迟后到达器件端口,此延迟称为输入延迟(Synopsys 设计约束 (SDC) 定义)。
  • 通过器件内部逻辑传输后到达由目标时钟进行时钟设置的时序单元

第二种:从源寄存器的时钟端口到目的寄存器的数据输入端口。

数据:

  • 在器件内部由时序单元发送,该时序单元的时钟由源时钟进行设置。
  • 通过部分内部逻辑传输后到达由目标时钟进行时钟设置的时序单元。

这种时序路径一般在FPGA设计中最为常见。

第三种:从源寄存器的时钟端口到FPGA中的输出端口

  • 器件内部由时序单元发送,该时序单元的时钟由源时钟进行设置。
  • 传输穿过部分内部逻辑,然后到达输出端口。
  • 经过称为输出延迟(SDC 定义)的附加延迟后,由板上时钟捕获。

第四种:从FPGA的输入端口到FPGA的输出端口。

在从输入端口到输出端口的路径中,数据无需锁存即可遍历整个器件。此类路径通常也称为输入到输出路径 (in-to-out path)。输入和输出延迟参考时钟可能是虚拟时钟,也可能是设计时钟。

这种情况很少。

3.时序引擎如何进行setup检查的?

1.确定建立时间要求(建立时间的捕获沿-建立时间的发起沿)

  时序引擎会找出发起时钟和捕获时钟沿的最小公共周期,然后在最小公共周期找那个找到所有发起时钟沿和捕获时钟沿的所有可能得情况,并在所有可能得情况中找出最小的建立时间需求。从而确定了发起沿和捕获沿。

可以看出最小时钟周期=12ns,setup(2)为我们确定的最小建立时间需求,因此也可以确定发起沿:6ns,捕获沿:8ns,因此建立时间需求=捕获时钟沿-发起时钟沿 = 2ns。

2.计算数据需求时间,即在保证目的寄存器满足setup时间要求下,可以接受的最晚时间点。

Data Required Time(set up) = capture edge time +  destination clock path delay - clock certainy - setup time

capture dege time:捕获沿时间

destination clock path delay :目的时钟相对于master clock的偏移

clock certainy :一般由于晶振导致的,很小。

setup time:建立时间,一般在手册中可以查到

3.计算数据的到达时间(真实)

Data Arrival Time(set up) = launch edge time + source clock path delay + datapath delay

launch dege time:是发起沿时间

source clock path delay:源时钟相对于master clock的时钟偏移

datapath delay:全局时钟输出延时(即t_{co})+组合逻辑延时+布线延时

4.计算setup的裕量(slack)

Slack(set up) = Data Required Time - Data Arrival Time

当slack为负时,即发生时序违例。

5.根据公式分析哪些因素会导致Setup Slack为负呢?

Setup Slack = (Capture edge -Launch edge) + (destination clk delay -  source clk delay)

- Setup time - clk uncertainty - datapath delay

Setup Slack = Setup Requirement一定大于0)+ clk skew(时钟歪斜) -  T_{su} 

T_{clk} uncertainty(很小) - T_{logic} - T_{net} - T_{co}(时钟上升沿与输出Q端的差值)

排除一些不可控的因素(比如器件,温度等),我们可以在时序违例时调整的:Setup Requirement ,T_{logic},T_{net}

4.分析哪些因素会导致Setup Slack为负呢?

1.Setup Requirement 与实际情况不符合。

  这种情况通常在同步跨时钟域中出现。在同步跨时钟域中源时钟和目的时钟的相位关系虽然是已知的,但是时序引擎默认选择的捕获沿通常都是错误的,需要用户通过多周期路径约束的方式手动修改建立时间需求。比如下图中,两个同频不同相的同步时钟,时序引擎默认选择的捕获沿是目的时钟第二个上升沿,到时建立时间要求非常小,肯定会造成时序违例。

2.clk skew为负值,且很大。

  通常情况下,同一个时钟下的时钟歪斜不应该超过300ps,同步跨时钟域的时钟歪斜不应该超过500ps,异步跨时钟域路径的时钟歪斜一般比较大,因为他们的时钟源不同。

当出现时钟歪斜大的情况时:

  • 检查同步跨时钟域路径是否干净,时钟路径上是否引入了组合逻辑,时钟路径是否使用了过多的BUFGCE,时钟路径上是否级联了多个BUFGCE导致时钟延时变大。
  • 检查源时钟路径和目的时钟路径所经过的模块是否相同,比如源时钟路径上经过全局缓冲,PMMCM,但是目的时钟路径上只经过了全局缓冲。

3.T_{su}/T_{co} 大

  当设计中使用Block(DSP/Block RAM等)时,应该要注意以下问题。对于以这些Block为时序路径起点或者终点的时序路径,这些Block的T_{su}/T_{h}/T_{co}都比普通的寄存器大,而且这些Block的布线延时和时钟歪斜都比较大。所以当使用这些Block作为时序路径的终点时,它的起点一定要是触发器。

  比如说一个Block RAM的写数据信号,输入Block前最好打一拍。当使用这些Block作为时序路径的起点时,应该使用Block内部的输出寄存器,比如使用由Block RAM组成的FIFO时,尽量不要使用首字置出的,而是使用打一拍后疏忽的,使用后者可以显著降低T_{co}。当时序路径为从一个Block到另一个Block时,中间需要进行打拍操作。当使用这些Block的控制端口时,应该保证这些控制信号的低扇出,如果使用由Block RAM组成的FIFO时,应该尽量降低读/写使能/地址信号的扇出。

4.T_{logic}

  一般情况下,逻辑延时与时序路径的逻辑层级数息息相关,逻辑层级是指时序路径的起点和终点之间组合逻辑单元(LUT)的个数。逻辑层级多一级意味着多一个LUT的延时加一条网线的总延时为0.5ns。如果某条路径的逻辑级数大于时钟周期/0.5ns,那么这条路径被称为长路径。

  常用的处理长路径的方案有两种:第一种,修改rtl代码,在长路径的逻辑中加入流水线,将长路径打破分为多条短路径。第二种,使用综合工具的retiming优化方式,retiming实际上时寄存器重定向。原理是当某条长路径的相邻路径的建立时间裕量较大,那么它可以调整中间寄存器的位置,来调整布线延迟,通过适当增加相邻路径的布线延迟而减少长路径的布线延迟,使得哪些时序违例较小的长路径通过这种微调实现时序收敛。需要强调的是,这种方式只适合时序违例较小的长路径,对于一些延时特别大的长路径,也是无力回天。

5.T_{net}

  一般情况下,布线延迟与设计整体或局部模块的资源利用率一级拥塞程度息息相关。

  在正常情况下,一条网线的延时小于1ns,在发生拥塞的区域,网线的延时可能达到若干ns,导致布线延时显著增加。为了解决布线延迟大,需要从降低资源利用率和降低拥塞程度下手。

  比如某个模块使用了大量的寄存器堆,占用了大量的资源,此时应该考虑使用Block RAM代替这些寄存器堆。某个模块使用了大量的数据选择器,此时应该考虑如何优化这些数据选择器。某个模块的控制信号扇出比较大,与其他模块的互联很重,此时应该考虑如何降低这些信号的扇出。某条时序路径的起点或者终点是Block,由于Block的位置比较固定,所以Block的布线延迟会大一些。最后需要强调的是,一定要额外关注高扇出的网线也会对布线延时产生影响。

5.时序引擎是如何进行Holdup检查的?

1.确定保持时间需求(确定用于保持时间分析的发起沿和捕获沿)

保持时间要求是以建立时间要求为基础的,保持时间要求有两种:

  • 当前建立时间的发起沿产生的数据不能被当前建立时间的捕获沿捕获
  • 当前建立时间发起沿的下一个有效沿产生的数据不能被当前建立时间的捕获沿捕获
  • 根据所哟的建立时间需求找到所有的保持时间需求,并从保持时间需求(可正可负)中找到最大的保持时间需求

2.计算数据需求时间(旧数据至少得保持的时间)

Data Required Time(hold) =  destinantion clock  capture edge time +  destination clock  path clock delay + clock uncertainty +hold time

3.计算数据的到达时间

Data Arrival Time(hold) =  source clock launch dege time +  source clock path delay + datapath delay

4.计算hold up 的裕量

Slack(hold) = Data Arrival Time - Data Required Time

Slack(hold) =  T_{co} + T_{data} ( T_{logic} + T_{net}) - T_{h} - holdup requirement - clk skew

hold up Slack为负的情况比较少见,当Setup Slack有较大裕量的时候,通常工具可以通过自动插入延时来增加hold up slack。

6.分析哪些因素会导致hold up Slack为负呢?

  • 保持时间需求大于0(通常由于时序引擎选择错误的捕获沿导致)
  • 时钟歪斜大于300ps(通常由于时钟路径上的组合逻辑导致)
  • T_{h}过大(通常由于时序路径终点为Block导致)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: FPGA时序分析与约束是针对现场可编程门阵列(FPGA)设计的重要概念。这些概念涉及到设计者需要了解和控制信号在FPGA器件中传播的时间和时序关系。而"吴厚航PDF"可能是与该主题相关的一本参考书籍。 FPGA时序分析指的是对设计中的信号和时钟进行分析,以确保在FPGA中的电路功能正确工作。在FPGA设计中,信号需要遵循特定的时钟信号来进行同步。时序分析可以帮助设计者确定信号在时钟周期内是否能够到达正确的位置,以及是否存在时序冲突或延迟问题。 约束是指设计者在FPGA设计中对信号传输时间和延迟进行设置的规定和要求。约束通常根据设计的需求和时钟信号的特性来确定。约束可以包括时钟频率、信号延迟、时序路径等。 FPGA时序分析与约束的目标是保证电路在特定的工作频率下能够正确工作,避免由于时序问题而导致的不稳定性和错误。通过合理的时序分析和设置约束,设计者可以优化FPGA电路的性能和可靠性。 《FPGA时序分析与约束》吴厚航PDF可能是一本专门讲解FPGA时序分析和约束的参考资料。在这本书中,可能会详细解释FPGA时序分析的基本原理、技术和工具,以及如何针对具体的应用场景设置约束。 总之,FPGA时序分析与约束是FPGA设计中的关键概念,它们可以帮助设计者确保电路的稳定性和正确性。《FPGA时序分析与约束》吴厚航PDF可能是一本与该主题相关的参考资料,提供了更深入的理论和实践知识。 ### 回答2: FPGA时序分析与约束是针对FPGA设计的一项重要工作。FPGA是可编程逻辑门阵列的缩写,是一种硬件实现的芯片。在FPGA设计中,时序是指设计中各个逻辑块之间的信号传输的时间关系。时序分析是对这些时间关系进行评估和优化的过程。 FPGA时序分析的主要目标是确保设计在FPGA芯片上能够正常工作,并满足预期的时序要求。为了实现这一目标,我们需要进行时序约束的设置。时序约束是一种指导工具,向综合工具和布局布线工具提供设计时序要求的信息。 时序约束的设置需要考虑以下几个方面。首先是时钟约束,包括时钟的频率、时钟的起始边沿和时钟的延迟等。时钟是FPGA设计中的核心部分,时序约束需要确保时钟信号在设计中的传输和同步是稳定的,以保证正确的计时。 其次是数据通路约束。数据通路约束包括数据信号的延迟和传输路径的限制等。为了避免数据的丢失和错误,时序约束需要确保数据在各个逻辑块之间的传输是准确和可靠的。 此外,时序约束还需要考虑时序缓存和时序精确性等因素。时序缓存是一种关键的设计工具,用于在不同时钟域之间进行数据的传输和同步,以确保数据的准确性和可靠性。时序精确性则是指设计需要满足的精确的时序要求,以保证设计的稳定性和可靠性。 总而言之,FPGA时序分析与约束对于FPGA设计来说至关重要。通过合理设置时序约束,我们可以保证设计在FPGA芯片上能够正常工作,并满足预期的时序要求。这对于提高设计的性能和可靠性非常重要。 ### 回答3: FPGA时序分析与约束是指在设计FPGA时,对时序特性进行分析和约束的过程。FPGA时序分析主要涉及到时钟信号的传输延迟、时钟频率和数据路径的延迟等方面,而FPGA时序约束则是为了保证设计的正确性和可靠性。 在FPGA时序分析中,我们需要考虑时钟信号的传输延迟。FPGA中的时钟信号需要在各个逻辑元件中进行传输,传输过程中会产生延迟,这会影响到时钟信号的稳定性和准确性。因此,我们需要分析时钟信号的传输路径,确定时钟延迟,避免时钟信号的过早到达或延迟到达的情况。 时钟频率也是FPGA时序分析的重要考虑因素。时钟频率决定了系统的运行速度和性能。在分析时序时,我们需要确保时钟信号的频率与设计要求相匹配,以避免时序不稳定或不可靠的情况。对于高时钟频率的设计,需要更加严格的时序约束和设计考虑,以保证数据的准确传输和处理。 此外,FPGA时序分析还需要考虑数据路径的延迟。FPGA中的数据路径是指数据在逻辑元件之间的传输路径,包括组合逻辑电路和时序逻辑电路等。在分析数据路径时,我们需要确定数据传输的延迟,避免数据信号在逻辑元件之间发生冲突或竞争的情况。 FPGA时序约束是为了保证FPGA设计的正确性和可靠性。通过设置时序约束,我们可以限制时钟信号的延迟范围,保证时序稳定;同时,我们也可以约束数据路径的延迟,保证数据的正确传输。时序约束可以通过HDL代码中的约束语句进行设置,也可以通过专门的工具进行约束文件的编辑和设置。 总之,FPGA时序分析与约束是保证FPGA设计正确性和可靠性的重要步骤。通过分析时钟信号的传输延迟、时钟频率和数据路径的延迟等因素,并通过设置合理的时序约束,可以确保FPGA设计在工作时满足时序要求,稳定可靠地工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值