问答 店铺
热搜: ZYNQ FPGA discuz

QQ登录

只需一步,快速开始

微信登录

微信扫码,快速开始

微信扫一扫 分享朋友圈

已有 11 人浏览分享

开启左侧

第7章 时序例外约束

[复制链接]
11 0
       时序例外约束用于修改时序分析工具对特定路径执行时序分析的方式。在默认情况下,时序分析工具对某些路径的分析可能不满足实际情况的需要,造成时序约束太紧或者太宽松,这就需要使用时序例外约束,让时序分析工具做出正确的分析。对于下面的示例,需要使时序例外约束:
·异步跨时钟域路径应予以忽略。
·通过组合单元的路径为静态路径。
·逻辑单元并不是每个时钟周期都需要采样数据。
       使用时序例外尽可能保持简单,当多个时序例外同时覆盖一条路径时,约束调试将变得复杂;对信号施加约束会阻碍其优化。
使用时序例外必须遵守优先级规则,优先级如下所示:
1、set_false_path
2、set_max_delay/set_min_delay
3、set_multicycle_path
通过合理地使用时序例外约束,可以避免不必要的资源浪费,帮助设计达到时序收敛。


7.1 伪路径约束
       伪路径用来处理非功能路径或没有时序要求的路径,可以减少时序分析工具的运行时间。伪路径约束后,时序分析工具将不再对该路径进行时序分析。伪路径约束的格式如下:
set_false_path [-setup|-hold] -from <node_list> -to <node_list> -through <node_list>
·-from指定有效的起始点列表。
·-to指定有效的结束点列表。
·through指有效的路径节点。
·-setup/-hold表示该命令针对建立时间分析还是保持时间分析。


伪路径一般使用在以下场景:
·两级寄存器跨时钟域处理电路。
·只在上电时写入一次的寄存器。
·复位或测试逻辑。
·实际不存在的路径。
·忽略异步DRAM的写时钟和读时钟之间的路径。
image.jpg
对于上所示的路径,两个数据选择器由相同的信号驱动,因此图中路径不存在,需要使用伪路径约束,约束命令如下:
set_false_path -through [get_pins mux0/I0] -through [get_pins mux1/I1]
       这里使用-through而不使用-from-to,这是因为-through可以将经过节点的任何路径排除,但在使用-through时应避免该命令排除掉预期外的路径。

7.2 多周期约束
       在默认条件下,时序分析工具执行单周期分析,(默认:setup 1 cycle,hold 0 cycle)进行分析,时序分析工具默认分析如图:
image.jpg
       对于某些路径,数据可能需要经过多个周期才能保持稳定,单周期分析就会过于严格,这就需要使用多周期约束命令来放宽要求,以优化系统时序。多周期约束的格式如下:
set_multicycle_path <path_multiplier> [-setup|-hold] [-start|-end] -from <startpoints> \
-to <endpoints> -through <nets|pins|cells>
·<path_multiplier>该参数是必须被指定的,用于设置建立时间分析或保持时间分析的周期数。在建立时间分析中该参数默认为1,保持时间分析中该参数默认为0。
·-setup/-hold用于指定命令是针对建立时间分析还是保持时间分析。
·-start/_end用于指定命令是以源时钟还是目的时钟作为参考。
·-from指定有效的起始点列表。
·-to指定有效的结束点列表。
·through指有效的路径节点。
-start和-end对源时钟和目的时钟的影响如下表所示。对于同频同相时钟来说,使用-start和-end实际分析的结果没有差别。
image.jpg
7.2.1 End Multicycle Setup
image.jpg
set_multicycle_path 设置-setup 参数后,时序分析不仅仅影响 setup 的分析,还会影响 hold 的 分析,如果希望 hold 的分析不受影响需要单独加-hold 的参数命令。
7.2.2 Start Multicycle Setup
image.jpg
set_multicycle_path 的-setup 参数默认是与-end 参数配合的,如果设置-start 的参数后,理论上的分析是按照上图所示的标注,实际时序分析工具按照下图进行分析的。
image.jpg
7.2.3 Start Multicycle Hold
image.jpg
set_multicycle_path 的-hold 参数默认是与-start 参数配合的
7.2.4 End Multicycle Hold
image.jpg
set_multicycle_path 的-hold 参数如果和-end 配合使用,时序工具分析分析理论上是按照上图所示进行的,实际上是按照下图所示进行分析的.
image.jpg
多周期的约束典型应用场景分为以下几类:
  • 单时钟域
  • 有固定相位差的同频时钟
  • 快速时钟到慢速时钟
  • 慢速时钟到快速时钟
7.2.5 同频同相的多周期约束
image.jpg
对于相同时钟域的多周期约束,时序分析工具默认是按照下图的方式来分析的,建立时间需求为1一个时钟周期,保持时间需求为0个时钟周期。
image.jpg
set_multicycle_path 1 -setup -end -from [get_regs REGA] -to [get_clocks get_regs REGB]
set_multicycle_path 0 -hod -start -from [get_regs REGA] -to [get_clocks get_regs REGB]
       对于数据路径延时过长导致数据要多个周期才能被目标寄存器采样的情况,或者时钟带有使能信号的情况,需要使用多周期约束来描述两个寄存器之间的关系。下图所示的波形关系中时钟使能信号每隔2个周期拉高一次,显示了时序分析工具默认分析的结果。
image.jpg
       这种情况下可以让建立时间更宽松一些,晚一个周期采样数据。当我们使用以下命令时,时序分析工具分析的结果如图。建立时间需求为2一个时钟周期,保持时间需求为1个时钟周期,这样虽然建立时间检查宽松了,但保持时间检查过紧,数据需要保持两个时钟周期(对于setup分析来说-end默默可以不写)。
set_multicycle_path 2 -setup -end -from [get_regs REGA] -to [get_clocks get_regs REGB]
       注意多周期约束中hold分析是以setup分析为基础的,对建立时间分析进行多周期约束时,hold会跟着setup进行移动,在如上图的情形下没有对保持时间多周期约束,hold分析的锁存沿会在setup分析的锁存沿的前一个时钟周期。要让保持时间检查更为宽松,需要添加针对保持时间的多周期约束,约束命令如下:
set_multicycle_path 1 -hod -end -from [get_regs REGA] -to [get_clocks get_regs REGB]
7.2.6 同频不同相的多周期约束
       对于同频不同相的时钟域下的路径,目标时钟分为正向偏移和负向偏移两种情况。
image.jpg
       当目标时钟相对源时钟负向偏移时,通常不需要多周期约束也能满足时序要求,除非相移过大,则需要调整发射沿或锁存沿的位置。
image.jpg

       当目标时钟相对源时钟正向偏移时,建立时间约束得过紧,不符合我们的预期,且难以满足时序要求,需要使用多周期约束将目标时钟锁存沿后移一个周期。
image.jpg
       多周期约束命令如下:
set_multicycle_path 2 -setup -from [get_clocks Clock_A] -to [get_clocks Clock_B]
       hold时序约束会自动跟随setup约束进行调整,最终时序分析的结果符合预期。
image.jpg
7.2.7 快时钟域到慢时钟域的多周期约束
       对下面的电路进行分析,fast_clock的频率是slow_clock的3倍,两时钟相位相同。
image.jpg
       时序分析工具默认按照下方波形图进行分析。
image.jpg
       这样的约束实际上建立时间被约束得过紧了,应该通过多周期约束将建立时间检查的发射沿前移2个周期。
set_multicycle_path 3 -setup -start -from [get_clocks fast_clock] -to [get_clocks slow_clock]
image.jpg
       此时保持时间检查的发射沿也会随着前移2个周期,就需要再通过针对保持时间的多周期约束,将保持时间检查的发射沿后移2个周期,注意这里setup和hold的约束都应该使用start参数,之前已经分析过了。约束命令如下:
set_multicycle_path 3 -setup -start -from [get_clocks fast_clock] -to [get_clocks slow_clock]
set_multicycle_path 2 -hold -start -from [get_clocks fast_clock] -to [get_clocks slow_clock]
       添加多周期约束后时序分析工具进行分析的示意图如下:
image.jpg
7.2.8 慢时钟域到快时钟域
       对下面的电路进行分析,fast_clock的频率是slow_clock的3倍,两时钟相位相同。
image.jpg
       时序分析工具默认按照下方波形图进行分析。
image.jpg
       建立时间被约束得过紧了,应该通过多周期约束将建立时间检查的锁存沿后移2个周期。
set_multicycle_path 3 -setup -end -from [get_clocks slow_clock] -to [get_clocks fast_clock]
image.jpg
      此时hold分析的锁存沿也会后移2个周期,需要使用多周期约束让hold回到原位,约束命令如下:
set_multicycle_path 3 -setup -end -from [get_clocks slow_clock] -to [get_clocks fast_clock]
set_multicycle_path 2 -hold -end -from [get_clocks slow_clock] -to [get_clocks fast_clock]
      添加多周期约束后时序分析工具进行分析的示意图如下:
image.jpg

7.3 最大最小延迟约束
最大最小延迟约束通常在以下情景使用:
·不经过任何时序单元的纯组合逻辑路径。
·异步跨时钟域路径。
·代替多周期约束或伪路径约束。
       最大延迟约束的语法如下:
set_max_delay <delay> [-datapath_only] -from [node_list] -to [node_list] -through [node_list]
·<delay>该参数表示延迟的时间,单位为ns。
·-from指定有效的起始点列表。
·-to指定有效的结束点列表。
·through指有效的路径节点。
·-datapath_only表示忽略时钟的偏斜
       最小延迟约束的语法如下:
set_min_delay <delay>  -from [node_list] -to [node_list] -through [node_list]
       对于输出端口到输入端口只有组合逻辑的情况,若端口输入到输出的最大延时为50ns,最小延时为1ns。可以使用如下约束命令:
set_min_delay 1  -from [get_ports din] -to [get_ports dout]
set_max_delay 50  -from [get_ports din] -to [get_ports dout]



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

0

关注

10

粉丝

78

主题
精彩推荐
热门资讯
    网友晒图
      图文推荐
        
        • 微信公众平台

        • 扫描访问手机版