当前位置:   article > 正文

vivado时序出错的解决方法_vivado如何解决时序爆红

vivado如何解决时序爆红

这几天一直改程序,请教师兄帮我解决了一些时序上的问题。
由于现在项目里用的是200M时钟,所以会出现很多时序问题,下面一一举例。
问题1:逻辑级数太高导致Net Delay过高,该问题显示在时许报告的Levels列下,如图1所示。(这里我已经解决了问题,图片只是指出Levels)
![图1](https://img-blog.csdnimg.cn/20200731162557381.png图1图1
导致该问题出现的有两种情况,
第一种是由于程序中自己写的逻辑级数过高,比如:assign a = c * b + d * e ,这种情况在高速时钟下是会导致时序问题。讲一下我自己遇到的问题吧,reg_q <= -fifo_out; 我在一段程序中这样写最终导致时序出错,我的解决方法是对fifo_out打三拍,第一拍对fifo_out取反,第二拍+1’b1(完成对fifo_out取负的功能),在第三拍的时候取出这个信号。
第二种情况是在使用IP核时,选择流水等级太低,在高速时钟下可能会导致时序出错。还是举一个例子吧,比如我调用了一个乘法器IP核,(如图2)
图2
图2
如果选择流水级数为0,乘法器会立刻输出结果,这在实际中可能会导致乘法器内部逻辑级数过高无法满足时序要求,解决方法时增加流水级数即可。
问题2:(Fanout)过高,Fanout在图一中有。
某个信号扇出(Fanout)过高,很有可能的原因是该信号的驱动力不够了。举个我出现的问题,程序中用ip核实现了一个500阶的FIR滤波器,耗费DSP资源约130个,所以FIR滤波器的使能信号需要同时驱动这些DSP资源,显然如果不对该使能信号作处理,它是没有办法驱动这么多资源的,解决方法也很简单,可以在使能信号后加一个BUFG,(BUFG的功能就是增加信号的驱动能力)。具体操作可以用TCL命令,也可以用原语,(推荐原语)。如图3所示,类似例化IP核。
图3
图3
问题3:切换时钟
我这里是自己的问题,欲要实现一个功能,某个模块将输出数据写入RAM中(时钟为50MHZ),在另外一个模块中读出这些数据(时钟是200MHZ),我原来的方法是使用组合逻辑实现时钟切换,实现出现了严重错误,经过师兄的点醒,用异步RAM(Simple Dual Port RAM)不久完了嘛,哈哈蠢了蠢了

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/857676
推荐阅读
相关标签
  

闽ICP备14008679号