【发布时间】:2019-07-31 19:41:30
【问题描述】:
这是一个关于 FPGA 设计的一般问题,而不是关于代码的具体问题。我学习计算机科学,但最近一直在尝试更多地了解硬件。我一直在使用 Xilinx FPGA 来自学 VHDL 和一些有关硬件设计的基础知识,但是我的知识有很多空白,这导致我在项目中遇到了一些很大的障碍。这是最近的一个。
我有一个包含几十个“工人”的设计。设计的部分功能取决于这些工作人员执行计算繁重的任务。为了节省 FPGA 资源,我让工作人员共享计算电路,并使用另一个模块来安排工作人员之间对该电路的访问。逻辑本身工作正常,我已经在模拟器中对其进行了测试,但是当我尝试在 FPGA 本身上实现设计时,它永远无法满足时序要求。看一下 Vivado 中的图表,我发现布局器将所有共享计算电路放在 FPGA 的一侧,而所有工作人员放在另一侧。此外,将数据从工作人员传送到计算电路的路线符合时间要求,但将结果传送回工作人员的路线几乎都失败了。
那么,我的问题是,在硬件设计中通常使用哪些解决方案来解决此类数据传输问题?我知道我可以降低时钟频率,让信号有更多时间移动,但我犹豫是否这样做,因为它会降低我设计的整体性。另一方面,我可以在共享计算电路和工作人员之间放置一些缓冲区(就像移位寄存器一样),但会增加单个工作人员的计算时间。还有哪些其他技术或设计模式可以在 FPGA 中相距很远的点之间移动数据?
【问题讨论】:
-
您似乎没有描述编程问题,也没有提供足够的细节来推荐架构解决方案。
-
我怀疑您的根本问题是您正试图将软件范例(多线程、工作人员)转变为硬件。我们不那样做,我们不做“设计模式”(无论如何程序员都会理解)。规则#1:考虑硬件;寄存器、数据流、简单的功能单元等。您关于在芯片上相距很远的点之间移动数据的具体问题非常专业,不太可能成为您的真正问题。