VHDL 优化技巧

Riz*_*ias 2 optimization vhdl

我对 VHDL 相当陌生,通过使用不同的 IP 核(由不同的提供商提供)可以看到,有时它们根据占用的空间或时序限制存在巨大差异。

我想知道 VHDL 中是否有优化的经验法则(例如,C 中的经验法则;展开循环等)。

它与我使用的综合工具有关(就像不同的编译器在 C 中使用其他优化方法,因此您需要学习阅读它们返回的反馈 asm 文件),还是取决于我的编码技能?

Jos*_*osh 6

它与我使用的综合工具有关(就像不同的编译器在 C 中使用其他优化方法,因此您需要学习阅读它们返回的反馈 asm 文件),还是取决于我的编码技能?

答案是“是”。当您使用 HDL 进行编码时,您实际上是在描述硬件(见图)。代码不是被转换为机器代码(就像 C 语言那样),而是被合成为逻辑函数(AND、NOT、OR、XOR 等)和存储元素(RAM、ROM、FF...)。

VHDL 可以以多种不同的方式使用。您可以在纯粹的结构意义上使用 VHDL,在基础级别上您可以调用您所针对的底层技术的原语。例如,您实际上实例化了设计中的每个 AND、OR、NOT 和触发器。虽然这可以给您很大的控制权,但在 99% 的情况下这并不能有效利用时间。

您还可以使用VHDL 的行为结构来实现硬件。您无需显式调用每个逻辑元素,而是描述要实现的函数。例如,如果是这样,则执行此操作,否则,执行其他操作。您可以从行为意义上描述状态机、数学运算和存储器。从行为意义上描述硬件有巨大的优势:

  1. 更容易被人类理解
  2. 人类更容易维护
  3. 综合工具和目标硬件之间更可移植

使用行为构造时,了解您的综合工具目标硬件可以帮助您理解您编写的内容将如何实际实现。例如,如果您描述具有异步复位的存储器元件,则对于存储器元件具有专用异步复位输入的架构和不具有专用异步复位输入的架构,硬件中的实现将有所不同。

综合工具通常会在其参考手册或用户指南中发布建议使用的 HDL 构造列表,以获得某些所需的实现结果。对于基本情况,它们将是您所期望的。对于更复杂的行为模型(例如双端口 RAM),您可能需要遵循某种形式,工具才能“识别”您所描述的内容。

总之,为了充分利用目标设备:

  1. 了解您的目标设备。可编程元件是如何布局的?查找表中有多少个输入和输出?阅读设备用户手册即可找到答案。
  2. 了解您的合成引擎。哪些类型的行为结构将得到认可以及它们将如何实施?请阅读综合工具用户指南或参考手册以找出答案。此外,通过合成小型结构进行实验,看看它是如何实现的(通过 RTL 或技术查看器,如果可用)。
  3. 了解 VHDL。了解信号和变量之间的差异。能够识别将在设计中生成多个逻辑级别的语句。

我想知道 VHDL 中是否有优化的经验法则

现在您已经了解了硬件、综合工具和 VHDL...假设您想要设计以获​​得最佳性能,则应遵循以下概念:

  • 管道,管道,管道。同步元素之间的逻辑级别越多,实现时序约束/目标的难度就越大。
  • 管道更多。如果您需要在算法中添加更多处理步骤而不影响整体延迟/时间线,那么拥有额外的寄存器阶段可以在将来提供额外的回旋空间。
  • 在正常织物的边界上操作时要小心。例如,如果与 IO 引脚、专用乘法器或其他特殊硬件连接,您将遭受更严重的时序影响。应在此放置额外的存储元件以避免形成关键路径。
  • 经常审查您的综合和实施报告。通过经常查看这些内容,您可以学到很多东西。例如,如果您添加了一项新功能,而您的时间安排受到了影响,那么您只是引入了一条关键路径。为什么?如何缓解这个问题?
  • 请注意您的“全局”结构——例如重置。必须在设计中广泛分布的逻辑值得特别关注,因为它需要覆盖整个设备。您可能需要特殊的管道阶段,或此类逻辑的时序限制。如果可能的话,避免“全局”结构,除非确实有要求。