我对 VHDL 相当陌生,通过使用不同的 IP 核(由不同的提供商提供)可以看到,有时它们根据占用的空间或时序限制存在巨大差异。
我想知道 VHDL 中是否有优化的经验法则(例如,C 中的经验法则;展开循环等)。
它与我使用的综合工具有关(就像不同的编译器在 C 中使用其他优化方法,因此您需要学习阅读它们返回的反馈 asm 文件),还是取决于我的编码技能?
它与我使用的综合工具有关(就像不同的编译器在 C 中使用其他优化方法,因此您需要学习阅读它们返回的反馈 asm 文件),还是取决于我的编码技能?
答案是“是”。当您使用 HDL 进行编码时,您实际上是在描述硬件(见图)。代码不是被转换为机器代码(就像 C 语言那样),而是被合成为逻辑函数(AND、NOT、OR、XOR 等)和存储元素(RAM、ROM、FF...)。
VHDL 可以以多种不同的方式使用。您可以在纯粹的结构意义上使用 VHDL,在基础级别上您可以调用您所针对的底层技术的原语。例如,您实际上实例化了设计中的每个 AND、OR、NOT 和触发器。虽然这可以给您很大的控制权,但在 99% 的情况下这并不能有效利用时间。
您还可以使用VHDL 的行为结构来实现硬件。您无需显式调用每个逻辑元素,而是描述要实现的函数。例如,如果是这样,则执行此操作,否则,执行其他操作。您可以从行为意义上描述状态机、数学运算和存储器。从行为意义上描述硬件有巨大的优势:
使用行为构造时,了解您的综合工具和目标硬件可以帮助您理解您编写的内容将如何实际实现。例如,如果您描述具有异步复位的存储器元件,则对于存储器元件具有专用异步复位输入的架构和不具有专用异步复位输入的架构,硬件中的实现将有所不同。
综合工具通常会在其参考手册或用户指南中发布建议使用的 HDL 构造列表,以获得某些所需的实现结果。对于基本情况,它们将是您所期望的。对于更复杂的行为模型(例如双端口 RAM),您可能需要遵循某种形式,工具才能“识别”您所描述的内容。
总之,为了充分利用目标设备:
我想知道 VHDL 中是否有优化的经验法则
现在您已经了解了硬件、综合工具和 VHDL...假设您想要设计以获得最佳性能,则应遵循以下概念: