对于Altera FPGA芯片,静态时序分析工具为Timequest。 Timequest静态时序分析的对象包括:
(1)寄存器和寄存器之间的路径;
(2)I/O之间;
(3)I/O和寄存器之间的路径;
(4)异步复位和寄存器之间的路径。
Timequest 根据 Data Arrival Time 和 Data Required Time 计算出时序余量(Slack)。当时序余量为负值时,发生时序违规(Timing Violation)。
由于时序分析是针对时钟驱动的电路进行的,所以分析的对象一定是“寄存器-寄存器对”。在分析涉及到I/O的时序关系对时,看似缺少一个寄存器分析对象,
构不成“寄存器-寄存器对”,其实是穿过 FPGA的 I/O引脚,在FPGA外部虚拟了一个寄存器作为分析对象。
在建立、保持时间检查中,都假设数据从launch edge开始发送,在latch edge被捕获;launch edge和latch
edge是相邻最近的一对时钟沿。在多周期路径检查中,仍然采用launch edge和latch edge的概念,但是launch
edge和latch edge不再是相邻的一对时钟沿,而是间隔一定时钟周期的一对时钟沿,间隔的时钟周期个数由用户指定。
在同步逻辑设计中,通常都是按照单周期关系考虑数据路径的。但是往往存在这样的情况:一些数据不需要在下一个时钟周期就稳定下来,可能在数据发送后几个时
钟周期之后才起作用;一些数据经过的路径太复杂,延时太大,不可能在下一个时钟周期稳定下来,必须要在数据发送后数个时钟周期之后才能被采用。针对这两种
情况,设计者的设计意图都是:数据的有效期在以launch edge为起始到数个时钟周期之后的latch edge。这一设计意图不能够被时序分析工具猜度出来,必须由设计者在时序约束中指定;否则,时序约束工具会按照单周期路径检查的方式执行,往往会误报出时序违规。
不设置多周期路径约束的后果有两种:一是按照单周期路径检查的结果,虚报时序违规;二是导致布局布线工具按照单周期路径的方式执行,虽然满足了时序规范,
但是过分优化了本应该多个周期完成的操作,造成过约束。过约束会侵占本应该让位于其他逻辑的布局布线资源,有可能造成其他关键路径的时序违规或时序余量变
小。
在多周期路径的建立时间(Setup Time)检查中,Timequest会按照用户指定的周期数延长Data Required Time,放松对相应数据路径的时序约束,从而得到正确的时序余量计算结果;在保持时间(Hold Time)检查中,Timequest也会相应地延长Data Required Time,不再按照单周期路径的分析方式执行(不再采用launch edge最近的时钟沿,而是采用latch edge最近的时钟沿),这就需要用户指定保持时间对应的多周期个数。
Timequest缺省的Hold Time检查公式是需要用户修改的——针对Setup Time多周期路径的设置也会影响到Hold
Time的检查。究其原因,多周期路径是为了解决信号传播太慢的问题,慢到一个周期都不够,所以要把Setup
Time的检查往后推几个周期——扩大Setup Time检查的时间窗口。而Hold
Time检查信号是否传播得太快,如果把检查时刻往后推,就缩小了Hold Time检查的时间窗口。
“信号跳变抵达窗口”:对latch寄存器来说,从previous时钟对应的Hold Time开始,到current时钟对应的Setup Time结束。
“信号电平采样窗口”:对latch寄存器来说,从current时钟对应的 Setup Time 开始,到current时钟对应的Hold Time结束。
launch寄存器必须保证驱动的信号跳变到达latch寄存器的时刻恰好处于 “信号跳变抵达窗口”内,才能保证不破坏latch寄存器的“信号电平采样窗口”。
时序检查的目的就是确认信号跳变发生在“信号跳变抵达窗口”内,而不会发生在“信号电平采样窗口”内。 多周期路径的设置是通过延后Setup Time检查的时刻,扩大了“信号跳变抵达窗口”,放松了时序约束。因此,延后Hold Time,就会缩小“信号跳变抵达窗口”。
阅读(8186) | 评论(0) | 转发(0) |