首页 文章

优化fpga实现的管道吞吐量的最佳实践是什么?

提问于
浏览
3

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

通过重新定时,一些模块通过将移位寄存器置于输入(正向寄存器 balancer )上获得更好的结果,而其他模块在输出上使用移位寄存器(向后寄存器 balancer )时效果更好 .

现在我使用以下方法:

  • 代码hdl(在verilog中)

  • 为特定模块创建时序约束

  • 综合, Map ,地点和路线(使用ISE 13.1)

  • 查看待改进模块的后置位置和路径时序,以及最大逻辑电平数 .

  • 取这个逻辑电平的数量,并对要插入的触发器的数量做出有根据的猜测 .

  • 插入触发器,启用寄存器 balancer ,希望最好

就目前而言,这种方法很受欢迎 . 有时它会得到相当不错的结果,有时它会变废话 . 那么,提高这种重定时成功率的好方法是什么?

有没有什么工具可以帮助解决这个问题?此外,非常感谢链接,论文和书籍建议 .

2 回答

  • 4

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

    快乐的黑客!

  • 0

    听起来你有正确的想法 . 基于工具的重新定时可能有点突破 . 有时候将额外的2或3个FF放在你认为好的之上会有所帮助 .

    另一方面,当我需要将性能提升到极限时,我必须手动 balancer 管道 . 这可能是一个正确的痛苦,不得不将你的可读性很好的HDL代码分成可怕的显式逻辑和寄存器 - 但有时我发现它只需要完成:(需要很多评论和一个非常好的测试平台,以确保你避风港'打破了它!

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

    祝好运!

相关问题