Optimization VHDL优化提示

Optimization VHDL优化提示,optimization,vhdl,Optimization,Vhdl,我对VHDL非常陌生,通过使用不同的IP核(由不同的提供商提供),可以看出,有时它们会因占用的空间或时间限制而存在巨大差异 我想知道VHDL中是否有优化的经验法则(例如,像C中的经验法则一样;展开循环等等) 它与我正在使用的合成工具有关(就像不同的编译器正在使用C语言中的其他优化方法,因此您需要学习读取它们返回的反馈asm文件),还是取决于我的编码技能?而合成工具的设计目标是关注面积、速度或功率,设计师的选择和技能是影响输出质量的主要因素。设计师应该有一个最大化速度或最小化面积的目标,这将极大地

我对VHDL非常陌生,通过使用不同的IP核(由不同的提供商提供),可以看出,有时它们会因占用的空间或时间限制而存在巨大差异

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


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

而合成工具的设计目标是关注面积、速度或功率,设计师的选择和技能是影响输出质量的主要因素。设计师应该有一个最大化速度或最小化面积的目标,这将极大地影响他的选择。通过要求工具减小面积,可以使速度优化设计变得更小,但首先不能达到相同的面积设计思想

然而,它比这更复杂。IP核通常针对几种FPGA技术以及ASIC。这只能通过使用通用VHDL构造来实现(或者为每个目标重新编写代码,而非关键IP提供程序不会这样做)。FPGA和ASIC供应商提供的原语在使用时可以提高速度/面积,但如果您编写代码来使用某项技术的原语,这并不意味着如果您更改该技术,生成的代码将得到优化。Xilinx和Altera都有DSP块来加速乘法等,但它们的工作原理并不完全相同,编写充分利用两者潜力的代码是非常具有挑战性的

合成工具因完全按照您的要求执行而臭名昭著,即使更优化的解决方案很简单,例如:

a <= (x + y) + z; -- This is a 2 cascaded 2-input adder
b <= x + y + z; -- This is a 3-input adder
a
它是否与我使用的合成工具有关(就像不同的编译器使用C语言中的其他优化方法一样,因此您需要学习读取它们返回的反馈asm文件),还是取决于我的编码技能

答案是“是的”。当你用HDL编码时,你实际上是在描述硬件(见图)。代码不是被转换成机器代码(就像C一样),而是被合成成逻辑函数(AND、NOT、OR、XOR等)和内存元素(RAM、ROM、FF……)

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

您还可以通过VHDL使用行为构造来实现硬件。不是显式地调用每个逻辑元素,而是描述要实现的函数。比如说这个,做这个,否则,做别的。你可以从行为的角度来描述状态机、数学运算和记忆。从行为角度描述硬件有巨大的优势:

  • 人类更容易理解
  • 人类更容易维护
  • 在合成工具和目标硬件之间更具可移植性
  • 当使用行为构造时,了解您的合成工具和目标硬件可以帮助理解您编写的内容将如何实际实现。例如,如果您描述一个具有异步重置的内存元素,那么对于具有专用异步重置输入到内存元素的体系结构和没有异步重置输入的体系结构,硬件中的实现将有所不同

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

    总之,为了更好地使用目标设备:

  • 了解您的目标设备。可编程元件是如何布置的?查找表中有多少输入和输出?请阅读设备用户手册以了解
  • 了解你的合成引擎。哪些类型的行为结构将被识别,它们将如何实现?请阅读合成工具用户指南或参考手册以了解。此外,通过合成小构造进行实验,看看它是如何实现的(通过RTL或technology viewer,如果可用)
  • 知道VHDL。了解信号和变量之间的差异。能够识别将在设计中生成多层次逻辑的语句
  • 我想知道VHDL中是否有优化的经验法则

    现在您已经了解了硬件、合成工具和VHDL。。。假设您希望设计出最佳性能,则应遵循以下概念:

    • 管道,管道,管道。同步元素之间的逻辑级别越高,就越难制定时间限制/目标
    • 管道更多。如果需要在不影响整体延迟/时间线的情况下向算法添加更多处理步骤,那么拥有额外的寄存器阶段可以在将来提供额外的回旋空间
    • 在正常结构的边界上操作时要小心。例如,如果与IO引脚、专用乘法器或其他特殊硬件接口,您将受到更大的定时影响。应在此放置额外的内存元素,以避免形成关键路径
    • 经常查看您的综合和实施报告。您可以从频繁查看这些报告中学到很多东西。考试