[FPGA9]时序路径_时延_建立保持时间_亚稳态

时序路径,时延,建立保持时间,亚稳态

时序路径

  • 所谓时序路径,就是由相同的时钟或者是两个不同的时钟控制的一对时序原件之间的路径。典型的时序路径有4类,如下图所示,这4类路径可分为片间路径(标记①和标记③)和片内路径(标记②和标记④)。
  • 对于所有的时序路径,我们都要明确其起点和终点,这4类时序路径的起点和终点分别如下表。在这4类路径中,我们最为关心是②的同步时序路径,也就是FPGA内部的时序逻辑。
时序路径 起点 终点 应用约束
①输入端口到FPGA内部第一级触发器的路径 ChipA/clk rega/D set_input_delay
②FPGA内部触发器之间的路径 rega/clk regb/D create_clock
③FPGA内部末级触发器到输出端口的路径 regb/clk ChipB/D set_output_delay
④FPGA输入端口到输出端口的路径 输入端口 输出端口 set_max_delay

时序延迟

逻辑延迟

  • 所谓逻辑延迟,即我们在两个时序原件之间添加了实现我们逻辑功能的组合逻辑电路,而这些逻辑的运算,是需要一定的时间的,两个触发器之间设计的组合逻辑越多,则他们之间的逻辑时延则越大。

布线延迟

  • 所谓布线延迟,则是因为FPGA内部,是通过实际的物理线路将各个模块之间相连接的,这跟连线的阻抗模型、分段寄生电容、电感以及连线长度等等都有很大关系,它取决于FPGA设计最终在芯片内的布局布线情况。根据经验法则,信号可以在1ns的时间内传输1inch长度的导线,所以布线延迟是不可忽略的。

传播时延

  • 根据官方的定义,"Propagation Delay is the amount of time it takes for a signal to travel from a source to a destination."意思是传播延迟是信号从源触发器到目的触发器所需要的时间!也就是我们常说的传播时延=逻辑延迟+布线延迟。
  • 下图是传播延迟的示意图,在图中,有两个触发器,它们之间通过一些逻辑和布线(电线)连接在一起。第一个触发器的输出传播到第二个触发器的输入所花费的时间为传播延迟。这两个触发器相距越远,或者中间的组合逻辑越多,则它们之间的传播延迟就越长。
  • 而传播延迟时间越长,就要求时钟的运行速度越慢。这是因为两个触发器采用了相同的时钟,第一个触发器在时钟沿1处驱动其输出,第二个触发器在时钟沿2处才看到第一个触发器的信号变化。如果信号能够在一个时钟周期内安全地从触发器1传输到触发器2,则电路设计很好! 如果没有,则有可能将遇到问题。
  • 例如,考虑两个触发器相距10纳秒(ns)的情况。 如果您使用的时钟频率为50 MHz(周期为20 ns),则将是安全的。 您还有10 ns的空闲时间。 但是,如果使用200 MHz时钟(周期为5 ns),则设计将无法进行时序分析,并且无法按预期方式工作。FPGA的任何时序分析器是用来告诉您在时序方面是否存在问题。 如果您的设计太慢而无法以所需的时钟频率运行,则会出现时序错误,并且您的设计可能无法正常工作。

建立保持时间

建立时间与建立松弛

  • 在时钟采样之前,触发器的输入必须提前稳定一小段时间,早于时钟上升沿到达。第一个触发器在时钟沿1处输出信号,要求信号比时钟沿2提早Tsu的时间到达,数据所需的建立时间=时钟周期 - 所要求的提早到达时间Tsu。或者可以说,建立时间是指在第二个时钟沿到来之前,第一级触发器输入到第二级触发器稳定所需的时间。
  • 建立松弛 = 数据所要求的建立时间 - 数据到达的实际时间

保持时间与保持松弛

  • 保持时间类似于建立时间,但是它在时钟沿发生后处理事件。在时钟采样之后,触发器的输入也要求能保持一段时间,迟于时钟上升沿撤离。在时钟沿到达之后,要求输入信号要比时钟沿晚Th的时钟撤离。保持时间是在时钟沿之后要求输入信号到触发器稳定所需的最短时间。
  • 保持松弛 = 撤除数据的时间 - 数据所要求的保持时间

建立/保持时间示意图

  • 在图中,蓝色区域代表Tsu或建立时间。 蓝色区域代表Th或保持时间。 在这些区域中,触发器中的数据必须为稳定的0或1,否则会发生不良情况。用公式可表示为Tdata\_path = Tco + Tlogic + Trouting ≥ Tskew + Thold。其中,Tskew为两级寄存器的时钟歪斜
  • 建立时间与保持时间的长短是由器件本身的特性决定的,当我们选定了一款FPGA时,他的建立保持时间也就相对确定了。XILINX的FPGA__建立时间一般是在0.04ns量级,保持时间一般是在0.2ns量级__,不同器件会有所差异,具体可查看器件的“DC and AC Switching Characteristics”

时序模型

  • 典型的时序模型如下图所示,一个完整的时序路径包括源时钟路径、数据路径和目的时钟路径,也可以表示为触发器+组合逻辑+触发器的模型。

  • 该时序模型的要求为:Tclk ≥ Tco + Tlogic + Trouting + Tsetup - Tskew,其中,Tco为发端寄存器时钟到输出时间;Tlogic为组合逻辑延迟;Trouting为两级寄存器之间的布线延迟;Tsetup为收端寄存器建立时间;Tskew为两级寄存器的时钟歪斜,其值等于时钟同边沿到达两个寄存器时钟端口的时间差;Tclk为系统所能达到的最小时钟周期。

  • 用示意图表示如下图所示,发送端寄存器产生的数据,数据经过Tco、Tlogic、Trouting后到达接收端,同时还要给接收端留出Tsetup的时间。而时钟延迟了Tskew的时间,因此有:Tdata\_path + Tsetup <= Tskew + Tclk,对于同步设计Tskew可忽略(认为其值为0),因为FPGA中的时钟树会尽量保证到每个寄存器的延迟相同。

  • 那么,根据时序模型,我们系统的最快时钟应该是多少呢?通常,在FPGA设计中,Tsu和Th对于触发器是固定的,因此,您可以控制的唯一变量是Tpd或传播延迟。这种延迟代表了你想在一个时钟周期内完成多少东西。您尝试做的事情越多,Tpd越长,Tclk(min)越高,这意味着您将无法尽快对FPGA设计进行计时。这是FPGA设计的基本权衡,需要权衡一个时钟周期内可以为时钟频率执行多少操作。这两个是相反的关系……没有免费的午餐!

  • 所以当出现高传播延迟的情况时,你可以选择降低时钟频率或将逻辑分为多个阶段(流水线)进行解决。降低时钟频率是最明显的事情。 如果能够较慢地运行FPGA,那么时序将会改善。将要实现的逻辑拆分为多个阶段也是可靠的解决方案,当两个触发器之间逻辑较少,则传播延迟将减小,从而让设计满足时序要求。

亚稳态

何为亚稳态

  • 如果FPGA设计违反设置或保持时间,则不能保证触发器输出稳定。可能为0,可能为1,可能在中间的某个地方,未知。这称为亚稳态。FPGA内部的亚稳定性不是所希望的,它可能导致FPGA出现无法预知的异常表现。
  • 以图片所示为例,当时钟信号变化时,输入信号从低电平转换为高电平,这违反了寄存器的tsu(建立时间)要求。数据输出信号示例从低电平开始,然后变为亚稳态,在高电平和低电平之间徘徊。信号输出A解析为输入数据的新逻辑1状态,而输出B返回数据输入的原始逻辑0状态。在这两种情况下,输出到定义的1或0状态的转换的延迟都超过寄存器的指定tco(寄存器时钟到输出时间)。该例子是由于建立时间不足而导致的亚稳态,对于保持时间不足,也会出现同样类似的亚稳态现象。

常发生亚稳态的情况

  • 通常在进行如下两个操作时,容易引发亚稳态现象:
  1. 当通过FPGA对于外部输入信号进行采集时
  2. 当FPGA跨时钟域进行数据传输时
  • 在以上两种情况中,源时钟与目的时钟不为一个时钟,故难以保证第一个寄存器的输出能够满足第二个寄存器的建立保持要求,出现亚稳态的情况

解决思路

  • 对于单比特跨时钟域问题,可采用两级触发器进行采样,即“Double-flop”待采样数据。第一个触发器正在采样与时钟异步的信号。 这将在输出处创建一个亚稳态条件。 如果再次采样此输出,则现在可以修复亚稳态事件。 第二个触发器的输出将保持稳定。
  • 对于多比特跨时钟域的问题,可考虑采用异步FIFO或者采用握手协议的方式加以解决。

参考资料:
FPGA基础知识极简教程(7)
FPGA时序约束理论篇之时序路径与时序模型-Author:猫叔