关于多周期路径约束

一、什么是多周期路径约束?

不管是quartus中还是在Vivado中,默认的建立时间和保持时间的检查都是单周期的,如图1所示,也就是说如果A时刻发送,B时刻捕获,这两者之间相差一个时钟周期,也就是很多文献所说的current launch和current latch,但是某些情况下,这两者之间并不一定只是一个时钟周期,比如加上一个捕获使能信号,或者跨时钟域的情况,两者时钟有相位差的情况,此时就需要设置多周期。
图1
**

二、如何理解多周期路径约束?

**
首先要理解一个数据的发送流程,如图2所示:
图2
这里的数据在发送以后,并不是理想状态下,瞬间达到下一个寄存器,二是包括Tskew时钟偏斜,Tdelay传输延迟,Tco源寄存器的输出延迟,Tsu和Th寄存器需要的建立保持时间等时间延迟,slack就是时间余量,理想的情况自然是slack为0,但是这是不可能达到的,因此要使得slack>0,有以下式子:

setup slack = (current latch edge - current launch edge ) + Tskew - (Tdelay + Tco + Tsu) 

            = T + Tskew - (Tdelay + Tco + Tsu)  

hold  slack  = Tdelay + Tco - (Th + previous latch edge - current launch edge)

             = Tdelay + Tco - Th

根据上式可以看出来,由于Tskew、Tco、Tdelay、Tsu、Th都是固定的,也就是跟实际硬件代码书写布局布线等相关,一旦这些都确定了,就是无法改变的,所以当在工程时序检查建立时间和保持时间出现问题,这些数据是无法改变的,只能改变 latch和 launch的沿的位置,这就是多周期路径约束的本质。

那么为什么约束形式是这样的?set_multicycle_path -from [get_clocks clk1] -to [get_clocks clk2] -setup -end 3
这是由于改变了建立时间和保持时间检查的位置,实际上就改变了 latch和 launch的沿的位置,处于人机交互的便利和理解,采取了这种语言。

三、实例讲解

假设A时刻发送一个数据,那么默认情况下就是单周期路径,B就是捕获沿,也就是上文所提到的latch edge和 launch edge。红色箭头起点和重点也就是代表了current launch edge和current latch edge,此时,如果加入了一个使能信号,如果仍然在B时刻作为current latch edge,那么建立时间余量就会比较紧张(悲观),当然实际的不是在这里捕获的,只是时序分析工具默认是在这里的,那么往后移动一个时钟周期,current latch edge就在C时刻了,此时的检查时间就是比较充裕的。再看保持时间的检查,如果并不设置采取默认情况,那么应该是1线,B为previous latch edge时刻,也是next launch edge。
根据原则:
1)当前发起沿发送的数据不能被前一个捕捉沿捕捉。
2)下一发起沿发送的数据不能被当前捕捉沿捕捉。

显然,A时刻发送的数据也就是current launch edge时可能被B时刻捕获的,不满足第一个条件,于是需要往前调一个周期。如图4
图3
图4
同样的分析方法,此时的满足上述原则的。

四、总结

当时序检查报告中出现建立时间或者保持时间出现违规的情况,就需要考虑进行多周期路径约束。

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值