vhdl - FPGA中数据传输的设计模式
问题描述
这更像是关于 FPGA 设计的一般问题,而不是关于代码的特定问题。我学习计算机科学,但最近一直在尝试更多地了解硬件。我一直在使用 Xilinx FPGA 自学 VHDL 和一些有关硬件设计的基础知识,但我的知识有很多空白,这导致我在项目中遇到了一些相当大的障碍。这是最近的一个。
我有一个有几十个“工人”的设计。设计的部分功能取决于这些工作人员执行计算量大的任务。为了节省 FPGA 资源,我让工作人员共享计算电路,并使用另一个模块来安排工作人员之间对该电路的访问。逻辑本身工作正常,我已经在模拟器中对其进行了测试,但是当我尝试在 FPGA 本身上实现设计时,它永远无法满足时序要求。看一下 Vivado 中的图表,我发现布局器将所有共享计算电路放在 FPGA 的一侧,而所有工作人员放在另一侧。此外,将数据从工作人员传送到计算电路的路线符合时间要求,但将结果传送回工作人员的路线几乎都失败了。
所以,我的问题是,在硬件设计中通常使用哪些解决方案来解决此类数据传输问题?我知道我可以降低时钟频率以让信号有更多时间移动,但我犹豫是否这样做,因为它会降低我设计的整体性。另一方面,我可以在共享计算电路和工作人员之间放置一些缓冲区(就像移位寄存器一样),但会增加单个工作人员的计算时间。还有哪些其他技术或设计模式可用于在 FPGA 中相距很远的点之间移动数据?
解决方案
实际上,您提出的减少时序违规的解决方案是权利,也是最常见的。
你也可以 :
- 修改 Vivado 中的综合和实现指令,使其更倾向于时序优化,而不是资源利用率或计算时间(综合和实现的)。
- 重做您的计算单元,以确保在完成所有逻辑之后有一个缓冲区。实际上,您有不同的方法在顺序部分和组合部分之间分割您的计算单元。
- 自行布局和布线设计的关键部分。我从来没有这样做过,但我知道这是可能的(至少在.xdc中设置位置约束)。
关于在关键路径上添加缓冲区:如果你可以做一个流水线架构,你只会添加一个延迟时钟周期(确保你的设计能够正常工作并不是很高的成本)。
推荐阅读
- python - 不能在 python 中同时使用 opencv 和 Gdk
- python - Django 频道睡眠
- javascript - 使用Javascript根据单元格值设置Material UI Table单元格背景颜色?
- node.js - 从使用 brew 安装的 Node 切换到使用 n 安装的 Node
- swift - 如何通过 Swift 从图像中读取 EXIF 数据?
- g++ - 链接器选项/命令显示“未定义对 vtable 的引用 ...”错误的原因
- r - 如何在 R 中优化此代码(将字符串拆分为列)
- php - Laravel 8 不显示新图像
- xpages - Notes 11 升级后我无法调试数据库给 apache poi 库错误
- javascript - 我可以通过 react-google-maps/api 使用 Google 地方信息吗?