学习FPGA时序约束笔记

静态时序分析————时序路径约束()

1、时序路径与关键路径

常见的同步电路

 

中间是我们设计的模块,对于同步电路,为了使电路能够正常工作,即电路在我们规定的工作频率和工作环境中能够正确的工作

,我们需要对设计中的所有时序路径进行约束。

    那么时序路径是什么呢?

    (1)时序路径是一个点到点的数据通路,数据沿着时序路径进行传递。每条时序路径都有一个起点(start point)和终点(end point)。

    起点定义为:

      .输入端口;

      .触发器或寄存器的时钟引脚。

    终点定义为:

      .输出端口

      .时序器件的除时钟引脚外的所有引入引脚。

    这样,时序路径可以是输入端到寄存器、寄存器到寄存器、寄存器到输出端口、输入端口到输出端口。如图

   

 

   这样就有四条路径

      (1):从输入端口A到FF1的D端

      (2):从FF1的CLK端到FF2的D端

      (3):从FF2的CLK端到输出端口OUT1

      (4):从输入端口A到输出端口OUT1

      路径的特性是存在延迟,也就是说,路径1,2,3,4都存在有延时,延时最长的一条路径被称为关键路径。一般情况下,

      路径1,2,3是最常见的,路径4比较少见。

    2、常见的时序路径约束

       (1)建立时间、保持时间和亚稳态

        在进行约束的时候,先了解触发器的三个概念:建立时间、保持时间和亚稳态。

     建立时间:时钟有效沿到来之前的一段时间内,数据必须稳定,否则触发器锁存不住数据,这段时间称为建立时间,

       用Tsetup或者Tsu表示。

     保持时间:时钟有效沿到来之后的一段时间内,数据也必须稳定,否则也必须稳定,否则触发器锁存不住数据。这段时间

               称为保持时间用Thold或者Th表示。

        如下图所示

        

        

     亚稳态: 每个触发器都有其规定的建立(setup)和保持(hold)时间参数,该参数存放在由半导体厂商所提供的工艺库

     中。假如触发器由时间的上升沿触发,在这个时间参数内,输入信号时不允许发生变化的。否则在信号的建立或保持时间

     内对其采样,的到的结果是不可预测的。可能是0或1,即亚稳态。

     有了这三个概念之后,可以对路径进行约束了。约束的最终目的就是为了满足寄存器的建立时间(和保持时间),我们先

     对模块内的路径进行约束,也就是下面电路框图中的中间部分:

     

 

     对于中间部分的路径,可以用前面的那个路径图来描述:

     

 

     也就是主要约束这些类型的路径。

     (2)路径2(寄存器到寄存器之间的路径)的约束

            前面提到,为什么要约束时序路径,是为了满足寄存器的建立和保持时间。对于路径2,数据从FF1的D端传输到FF2的D端     口  ,主要经历了触发器的翻转时间/转换延时、寄存器与寄存器之间的组合逻辑延时、连接延时这种延时。因为数据是随着时钟的节拍一拍一拍往后传的,因此 这里的寄存器与寄存器之间的路径约束,就是对时钟的建模,或者说对时钟的约束。下面进行说明:

         为了满足FF2建立时间的要求,也就是数据经过上面的延时后,再加上FF2的建立时间,需要小于一个时钟周期;也就是

     说,你的那些延时不能过大,延时一旦过大,一旦过大,数据可能不满足建立时间的关系,甚至还更新不了。举例

     

     

     现在的节拍(0ns的时刻)到来后,数据(比如一个高电平)从FF1的D端传来,经过组合逻辑,在下一个节拍(20ns这一时刻)  的时候传到FF2的D端,更新FF2 的数据(0ns时,FF2保存的是低电平),如红色箭头所示;但由于延时过大,下一个节拍到来 了,这个高电平还在组合逻辑那里面,就会导致FF2的D端数据不能更新,或者不满足建立时间。就可能引发锁存错误。所以, 当对时钟建模的时候,拍子的长度也就决定了关键路径的延时最大是多少。通过对时钟进行建模,也就是通过对寄存器与寄存 器之间的的路径进行约束,DC就知道了路径运行的最大延时,就会选择合适的单元来满足这些延时的约束。 通过对上面的讲解,我们知道,一般情况下,如果寄存器和寄存器之间的组合电路的延迟大于clock_cycle-Tsu(clock_cycle为时钟周期,Tsu是触发器的建立时间),电路的功能会不正确,将不能正常工作,如果已知电路的时钟频率,就知道了寄存器与寄存器之间的组合电路的最大时延。

        

        

        图中路径X的最大时延应满足下列关系

             “X Path Delay” <= Clock Period-Tclk-Q-Tsetup

     Tclk-Q是FF2的从引脚CLK到引脚Q的延时,Tsetup是FF3的建立时间,这两个参数都由工艺库提供。总结完成之后,下面对时钟进行建模,也就是寄存器到寄存器的路径进行约束,时钟的建模是比较复杂的,因此先一步一步的讲解,最后给出约束脚本。 定义时钟的命令为:create_clock. 假设时钟周期为10ns,定义的时钟命令就是:

         create_clock -period 10 [get_ports  clk]

    一旦定义了时钟,对于寄存器之间的路径,我们已经做了约束。我们可以用report_clock命令来查看所定义的时钟以及属性

    。如果我们需要使用时钟的两个沿(上升沿和下降沿),时钟的占空比将会影响时序的约束

     (3)路径1(输入端到寄存器D端)的约束

    在上图中,在clk时钟的上升沿,通过外部电路的寄存器FF1发送数据经过输入端口A传输到要综合的电路,在下一个时钟的

    上升沿被内部寄存器FF2接收。他们之间的时序关系如下图所示。

    

 

        其中Tclk-q为FF1寄存器的翻转时间,Tm为线网的传输延时,TN为组合逻辑延时,Tsetup为FF2的建立时间

        只有当 clk_period-Tclk-q-Tm>T+Tsetup的时候,才能正常采到数据。 如果外部延时太大,DC就会进行优化,以减少延时。如果延时还是太大,DC就会报错。因此我们要对输入端进行约束,告诉外部电路的延时是多少,以便DC约束输入的组合逻辑。

        如果我们已知输入端口的外部延迟(假设为4ns,包括翻转延时和外部的逻辑延时),就可以很容易的计算出留给综合电路

   输入端到寄存器N的最大允许延迟:

     DC中,用get_input_delay命令约束输入路径的延迟

       set_input_delay -max 4 -clock CLK [get_ports A]

    我们指定外部逻辑用了多少时间,DC计算还有多少时间留给内部逻辑。在这条命令中,外部逻辑用了4ns,对于时钟周期为10

   ns的电路,内部组合逻辑的最大延时为10-4-Tsetup = 6.(约等于) 当有抖动和偏移的时候,要考虑减去这些不稳定时间。

     则可以用下面的命令对除时钟以外的所有输入端口设置约束:

        set_input_delay 3.5 -clock clk -max [remove_from_collection[all_input]] [get_reports clk]

         (4)路径3(寄存器到输出端口)的约束

     在了解路径1的约束之后,路径3的约束就变的容易理解了,路径3与外部输出电路的电路图如下所示:

      

     当我们已知外部电路的延迟(假设为5.4ns),就可以很容易的计算出留给综合电路输出端口的最大延迟,如下图

     

 

     用set_up_delay命令约束输出路径的延迟,对于上面的电路图有

         set_up_delay -max 5.4 -clock clk [get_ports B ]   

         (5)路径4的约束

       路径4是组合逻辑的路径,组合逻辑的约束可能需要虚拟时钟的概念。组合逻辑可能有两种情况,一种是前面电路中的

       路径4:

       

       模块里面有输入端口到输出端口的组合逻辑外,也有时序逻辑,也就是模块里面有时钟,那么就可以对于路径4,

       就下面的电路模型进行约束:

       

 

       组合逻辑部分F的延时Tf就等于时钟周期T-Tinput_delay-Toutput_delay(时钟周期减去两端),就可以得到中间的

       延时约束了,对于上面的模型,可以如下约束:

           set_input_delay -max 0.4 -clock CLK -add_delay[get_ports B]

           set_output_delay -max 0.2 -clock CLK -add_delay[get_ports D] 

           另外一种是纯的组合逻辑,模块内部没有时钟:

        这种时钟需要用到虚拟时钟。

       

学习笔记,学习资料1、https://www.cnblogs.com/IClearner/p/6624722.html

                                     2、https://wenku.baidu.com/view/d69b8f6fb84ae45c3b358c89.html?sxts=1531923676111

 

        

        

        

     

        

猜你喜欢

转载自blog.csdn.net/qq_33586509/article/details/81110481
今日推荐