赞
踩
1.扇出太多引起的时许问题。
信号驱动非常大,扇出很大,需要增加驱动能力,如果单纯考虑驱动能力可以尝试增加buffer来解决驱动能力,但在插入buffer的同时增加了route的延时,容易出现时序报告评分问题。
解决该问题常用方法为进行驱动信号逻辑复制,即对扇出很大的信号产生逻辑进行多次复制,生成多路同频同相的信号去驱动下级逻辑电路。保证了时延同时也增大了驱动能力。但是该方法在使用过程中可以和buffer一起使用,平衡资源利用率和时延,防止资源分配不均或者时序考虑不周。
解决该问题常用方法为进行驱动信号逻辑复制,即对扇出很大的信号产生逻辑进行多次复制,生成多路同频同相的信号去驱动下级逻辑电路。保证了时延同时也增大了驱动能力。但是该方法在使用过程中可以和buffer一起使用,平衡资源利用率和时延,防止资源分配不均或者时序考虑不周。
2.对于时钟频率要求较高导致的上升沿下降沿对不同的寄存器操作的问题。
首先分析该问题产生原因,如果上升沿下降沿都使用,就相当于是电平触发,电平触发比时钟沿触发更容易受到干扰,所以一般不同时对一个时钟的上升沿和下降沿分别对不同的寄存器操作。
1)将时钟通过MMC或者PLL产生180相移产生新的时钟,新的始终的上升沿就是原时钟的下降沿,从而实现都为上升沿触发。
2)使用全局时钟资源中的INV实现对原时钟信号取反,然后新的时钟信号的上升沿就是原时钟的下降沿。
另外对于其他方法要思考,比如对原时钟信号进行倍频实现上升沿下降沿均为上升沿,这个方法直接提升系统时钟速率一倍,如果不是时钟速度太高这个上升沿下降沿问题也不会出现了,故,该方法暂不考虑。还有就是对于时钟的使用一定要使用PLL或者MMC这些专门的时钟内核生成。
另外对于其他方法要思考,比如对原时钟信号进行倍频实现上升沿下降沿均为上升沿,这个方法直接提升系统时钟速率一倍,如果不是时钟速度太高这个上升沿下降沿问题也不会出现了,故,该方法暂不考虑。还有就是对于时钟的使用一定要使用PLL或者MMC这些专门的时钟内核生成。
3.布局太差导致的布线延迟太高问题
布线延迟太高问题一般有两种情况:
1)一种是布线扇出太多导致的问题,另外再对扇出太多补充一点,扇出太多而增加buffer提高驱动能力,而普通I/O信号或片内信号进入BUFG到从BUFG输出,有大约10ns的固定时延,但是BUFG到片内所有单元的延时可以忽略为0ns。这个问题在上篇中已经给出了解决方案,也就是通过逻辑复制的方法解决。
2)就是今天要说的问题,就是本身各种信号扇出并不多,逻辑时间也不是很大,但是布线延迟很大,这种问题就是布局太差的问题。
相应的解决方案有:通过ISE布局工具中调整布局的努力程度(effort level),特别努力程度(extra effort),MPPR选项,实在不行的话就尝试使用Flootplanner相对区域约束重新对设计进行布局规划。
4.就是出现逻辑级数过多情况
也就是逻辑计算时间比较大,这种情况一般不属于时序问题,而属于程序编写问题,尽量不要嵌套IF ELSE语句或者CASE语句嵌套,能用CASE语句尽量不用IF ELSE语句,还有就是在使用IF 语句和CASE语句时注意防止产生不必要的锁存器。
先说明一下亚稳态问题:
D触发器的原理图和程序:
相应的解决方案有:通过ISE布局工具中调整布局的努力程度(effort level),特别努力程度(extra effort),MPPR选项,实在不行的话就尝试使用Flootplanner相对区域约束重新对设计进行布局规划。
D触发器的原理图和程序:
D触发器有个明显的特征就是建立时间(setup time)和保持时间(hold time)
参照上图的下方,如果输入信号在建立时间和保持时间发生变化,则可能产生亚稳态,如果在时钟上升沿也就是D触发器采样期间,输入点评判断为1则输出为1,如果是0则输出为0,另外一种情况就是在时钟上升沿时,D在发生变化,在中间思考跳转很久,但不知道Dinput跳到0还是1(此状态出现概率非常低,但会出现)到下一个时钟还没有思考好是0还是1,没有出现稳定状态,这就是亚稳态。[1]
总结:在FPGA系统中,如果数据传输中不满足触发器的Tsu和Th不满足,或者复位过程中复位信号的释放相对于有效时钟沿的恢复时间(recovery time)不满足,就可能产生亚稳态,此时触发器输出端Q在有效时钟沿之后比较长的一段时间处于不确定的状态,在这段时间里Q端在0和1之间处于振荡状态,而不是等于数据输入端D的值。这段时间称为决断时间(resolution time)。经过resolution time之后Q端将稳定到0或1上,但是稳定到0或者1,是随机的,与输入没有必然的关系。[2]
总结亚稳态问题产生场景:1)跨时钟域的信号传输,由于源信号时钟与目的信号时钟的相移未知,可能导致保持时间和建立时间条件不满足,从而产生亚稳态现象。2)异步信号,最常见的为异步复位信号,由于异步信号不与触发器同步时钟同步,所以可能导致保持时间和建立时间条件不满足,产生亚稳态现象。
(建立时间保持时间条件:数据在建立时间和保持时间保持稳定)
亚稳态导致的后果:
一般情况下亚稳态产生的后果为产生不可预知的数据,或者在前面所述亚稳态第三种情况可能导致系统崩溃。在数据表现方面来说会产生毛刺、突变等现象。影响系统后续的逻辑判断和程序整体运行走向。
一般FPGA的建立时间和保持时间加起来为1ns左右,所以可以根据概率论来计算亚稳态产生的概率,也就是同步时钟周期的倒数。
亚稳态的串扰,也就是D触发器处于震荡状态时会影响后续触发器的状态,一般来说如果震荡状态不超过同步时钟周期,也就不会串扰下一个触发器导致下一个触发器也产生振荡,一般工程上来讲串两至三个触发器基本就可以保证不串扰。(是可能不串扰,不是一定不串扰,串扰的可能性很小)
针对上述的亚稳态问题,常见的解决方法:
1)通过对异步信号边沿提取实现异步信号同步处理,在边沿提取过程中也要防止亚稳态串扰,进行多寄存器缓存减小亚稳态串扰的可能性。
2)通过FIFO实现异步信号同步处理。
3)对于异步时钟通过异步复位同步释放的方法实现亚稳态大可能的消除:
always @ (posedge clk, negedge rst_async_n)
if (!rst_async_n) begin
rst_s1 <= 1’b0;
rst_s2 <= 1’b0;
end
else begin
rst_s1 <= 1’b1;
rst_s2 <= rst_s1;
end
作者:Facalon_
来源:CSDN
原文:https://blog.csdn.net/u011327754/article/details/79800804
版权声明:本文为博主原创文章,转载请附上博文链接!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。