首页 > 解决方案 > FPGA中数据传输的设计模式

问题描述

这更像是关于 FPGA 设计的一般问题,而不是关于代码的特定问题。我学习计算机科学,但最近一直在尝试更多地了解硬件。我一直在使用 Xilinx FPGA 自学 VHDL 和一些有关硬件设计的基础知识,但我的知识有很多空白,这导致我在项目中遇到了一些相当大的障碍。这是最近的一个。

我有一个有几十个“工人”的设计。设计的部分功能取决于这些工作人员执行计算量大的任务。为了节省 FPGA 资源,我让工作人员共享计算电路,并使用另一个模块来安排工作人员之间对该电路的访问。逻辑本身工作正常,我已经在模拟器中对其进行了测试,但是当我尝试在 FPGA 本身上实现设计时,它永远无法满足时序要求。看一下 Vivado 中的图表,我发现布局器将所有共享计算电路放在 FPGA 的一侧,而所有工作人员放在另一侧。此外,将数据从工作人员传送到计算电路的路线符合时间要求,但将结果传送回工作人员的路线几乎都失败了。

所以,我的问题是,在硬件设计中通常使用哪些解决方案来解决此类数据传输问题?我知道我可以降低时钟频率以让信号有更多时间移动,但我犹豫是否这样做,因为它会降低我设计的整体性。另一方面,我可以在共享计算电路和工作人员之间放置一些缓冲区(就像移位寄存器一样),但会增加单个工作人员的计算时间。还有哪些其他技术或设计模式可用于在 FPGA 中相距很远的点之间移动数据?

标签: vhdlhardwarefpga

解决方案


实际上,您提出的减少时序违规的解决方案是权利,也是最常见的。

你也可以 :

  • 修改 Vivado 中的综合和实现指令,使其更倾向于时序优化,而不是资源利用率计算时间(综合和实现的)。
  • 重做您的计算单元,以确保在完成所有逻辑之后有一个缓冲区。实际上,您有不同的方法在顺序部分和组合部分之间分割您的计算单元。
  • 自行布局和布线设计的关键部分。我从来没有这样做过,但我知道这是可能的(至少在.xdc中设置位置约束)。

关于在关键路径上添加缓冲区:如果你可以做一个流水线架构,你只会添加一个延迟时钟周期(确保你的设计能够正常工作并不是很高的成本)。


推荐阅读