这几天一直改程序,请教师兄帮我解决了一些时序上的问题。
由于现在项目里用的是200M时钟,所以会出现很多时序问题,下面一一举例。
问题1:逻辑级数太高导致Net Delay过高,该问题显示在时许报告的Levels列下,如图1所示。(这里我已经解决了问题,图片只是指出Levels)
图1
导致该问题出现的有两种情况,
第一种是由于程序中自己写的逻辑级数过高,比如:assign a = c * b + d * e ,这种情况在高速时钟下是会导致时序问题。讲一下我自己遇到的问题吧,reg_q <= -fifo_out; 我在一段程序中这样写最终导致时序出错,我的解决方法是对fifo_out打三拍,第一拍对fifo_out取反,第二拍+1’b1(完成对fifo_out取负的功能),在第三拍的时候取出这个信号。
第二种情况是在使用IP核时,选择流水等级太低,在高速时钟下可能会导致时序出错。还是举一个例子吧,比如我调用了一个乘法器IP核,(如图2)

图2
如果选择流水级数为0,乘法器会立刻输出结果,这在实际中可能会导致乘法器内部逻辑级数过高无法满足时序要求,解决方法时增加流水级数即可。
问题2:(Fanout)过高,Fanout在图一中有。
某个信号扇出(Fanout)过高,很有可能的原因是该信号的驱动力不够了。举个我出现的问题,程序中用ip核实现了一个500阶的FIR滤波器,耗费DSP资源约130个,所以FIR滤波器的使能信号需要同时驱动这些DSP资源,显然如果不对该使能信号作处理,它是没有办法驱动这么多资源的,解决方法也很简单,可以在使能信号后加一个BUFG,(BUFG的功能就是增加信号的
vivado时序出错的解决方法
最新推荐文章于 2025-07-23 11:40:23 发布

最低0.47元/天 解锁文章
7626

被折叠的 条评论
为什么被折叠?



