3

例如,如何充分利用重定时和/或 c-slow 来充分利用给定的管道。

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

现在我使用以下方法:

  • 代码 hdl(在 verilog 中)
  • 为特定模块创建时序约束
  • 合成、映射、布局和路由(使用 ISE 13.1)
  • 查看待改进模块的布局布线时序,以及最大逻辑电平数。
  • 取这个数量的逻辑电平,并对要插入的触发器的数量进行有根据的猜测。
  • 插入触发器,启用寄存器平衡,希望最好

就目前而言,这种方法是命中注定的。有时它会得到很好的结果,有时它是垃圾。那么,有什么好的方法可以提高这种重定时的成功率呢?

有什么工具可以帮助解决这个问题吗?此外,链接、论文和书籍推荐将不胜感激。

4

2 回答 2

4

听起来你有正确的想法。基于工具的重定时可能有点偶然。有时,在您认为好的范围内多放 2 或 3 个 FF 会有所帮助。

在另一个极端,当我需要将性能推到极限时,我必须手动平衡管道。这可能是一种痛苦,不得不将你可读性很好的 HDL 代码拆分为糟糕的显式逻辑和寄存器——但有时我发现它确实必须完成 :( 需要大量注释和一个非常好的测试平台来确保你没有' t打破它!

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

祝你好运!

于 2011-04-28T07:53:32.957 回答
0

不是工具,但您可能会欣赏我关于高性能 FPGA 设计艺术的博客文章。 http://www.fpgacpu.org/log/aug02.html#art

快乐黑客!

于 2011-06-27T21:36:54.180 回答