【问题标题】:Design patterns for data transfer in an FPGAFPGA中数据传输的设计模式
【发布时间】:2019-07-31 19:41:30
【问题描述】:

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

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

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

【问题讨论】:

  • 您似乎没有描述编程问题,也没有提供足够的细节来推荐架构解决方案。
  • 我怀疑您的根本问题是您正试图将软件范例(多线程、工作人员)转变为硬件。我们不那样做,我们不做“设计模式”(无论如何程序员都会理解)。规则#1:考虑硬件;寄存器、数据流、简单的功能单元等。您关于在芯片上相距很远的点之间移动数据的具体问题非常专业,不太可能成为您的真正问题。

标签: vhdl hardware fpga


【解决方案1】:

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

你也可以:

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

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

【讨论】:

    猜你喜欢
    • 2013-07-11
    • 1970-01-01
    • 1970-01-01
    • 2012-09-15
    • 1970-01-01
    • 2015-12-25
    • 1970-01-01
    • 2012-12-13
    • 1970-01-01
    相关资源
    最近更新 更多