2011-04-28 44 views
3

例如,如何充分利用retiming和/或c-slow来充分利用给定的管道。为fpga实现优化管道吞吐量的最佳实践是什么?

随着重定时,一些模块通过将移位寄存器上的输入得到更好的结果(前向寄存器平衡),而其他模块与输出(向后寄存器平衡)移位寄存器做得更好。

现在我使用下面的方法:

  • 代码HDL(以Verilog)
  • 创建时序约束为 特定模块
  • 合成,地图,放置&路线(使用 ISE 13.1 )
  • 看帖子的地方&路由计时 为模块改进,并在 的最大数量o f逻辑电平。
  • 拿这个数字逻辑电平,并 让一个受过教育的猜测触发器数量 插入。
  • 插入触发器,使能寄存器 平衡,希望最好

因为它的立场,这种方法被击中&错过。有时它会得到相当不错的结果,有时候会是废话。那么,提高重新定时成功率的好方法是什么?

有什么工具可以帮助吗?此外,链接,论文和书籍的建议将不胜感激。

回答

4

听起来像你有正确的想法。基于工具的重新定时可能有点碰运气。有时候把一个额外的2或3个FF放在你认为合适的位置以上会有帮助。

在另一个极端,当我需要将性能推到极限时,我必须手动平衡管道。这可能是一个正确的痛苦,必须将你可读的HDL代码分解成可怕的显式逻辑和寄存器 - 但有时我发现它只需要完成:(需要大量的注释和一个非常好的测试平台,以确保你避免“ t破了它!

最后,还有一个“中途之家”,如果我看一下逻辑层次最多的逻辑路径,想一下代码,我经常发现它只有一个很小(可能只是一行代码),这可以在不“严重损害”模块其余部分的可读性的情况下拉出来,有时将代码拉入自己的实体并将额外的触发器放入该实体中,重新平衡,以更好地工作。

祝你好运!