Vhdl FPGA中数据传输的设计模式

Vhdl FPGA中数据传输的设计模式,vhdl,hardware,fpga,Vhdl,Hardware,Fpga,这是一个关于FPGA设计的一般性问题,而不是关于代码的具体问题。我学的是计算机科学,但最近一直在努力学习更多关于硬件的知识。我一直在使用XilinxFPGA自学VHDL和一些关于硬件设计的基础知识,但我的知识有很多差距,这导致我在项目中遇到了一些相当大的障碍。这是最近的一次 我有一个有几十个“工人”的设计。设计的部分功能取决于这些执行繁重计算任务的工人。为了节省FPGA资源,我让工作人员共享计算电路,并安排另一个模块在工作人员之间访问该电路。逻辑本身工作良好,我已经在模拟器中对其进行了测试,但是

这是一个关于FPGA设计的一般性问题,而不是关于代码的具体问题。我学的是计算机科学,但最近一直在努力学习更多关于硬件的知识。我一直在使用XilinxFPGA自学VHDL和一些关于硬件设计的基础知识,但我的知识有很多差距,这导致我在项目中遇到了一些相当大的障碍。这是最近的一次

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


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

实际上,您建议的减少时序冲突的解决方案是权限和最常见的

您还可以:

在Vivado中修改合成和实现指令,使其更喜欢时间优化,而不是资源利用率或合成和实现的计算时间。 重新设计计算单元,以确保在所有逻辑之后都有一个缓冲区。实际上,在顺序部分和组合部分之间划分计算单元有不同的方法。 自行放置和布置设计的关键部分。我从未这样做过,但我知道至少可以在.xdc中设置位置约束。
关于在关键路径上添加缓冲区:如果您可以使用流水线架构,那么您只需添加一个延迟时钟周期。确保您的设计正常工作的成本并不高

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