VHDL优化技巧

时间:2015-03-13 15:52:13

标签: optimization vhdl

我是VHDL的新手,通过使用不同的IP核(由不同的提供商),可以看到它们有时会根据它们占用的空间或时间限制而大不相同。

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

它与我正在使用的综合工具有关(比如不同的编译器在C中使用其他优化方法,所以你需要学习读取他们返回的反馈asm文件),还是依赖于我的编码技巧?

2 个答案:

答案 0 :(得分:4)

  

它与我正在使用的综合工具有关(比如不同的编译器在C中使用其他优化方法,所以你需要学习读取他们返回的反馈asm文件),还是依赖于我的编码技巧?

答案是肯定的。当您使用HDL进行编码时,您实际上是在描述硬件(参见图)。它不是将代码转换成机器代码(就像用C一样),而是合成逻辑函数(AND,NOT,OR,XOR等)和存储元件(RAM,ROM,FF ......)。

VHDL可以以多种不同方式使用。您可以在纯粹的结构意义上使用VHDL,在基础级别,您可以调用我们所针对的基础技术的基元。例如,您可以在设计中实例化每个AND,OR,NOT和Flip Flop。虽然这可以给你很多控制,但在99%的情况下,它并不能有效利用时间。

您还可以使用VHDL的行为结构实现硬件。您可以描述要实现的函数,而不是显式调用每个逻辑元素。例如,如果是,请执行此操作,否则执行其他操作。您可以在行为意义上描述状态机,数学运算和记忆。在行为意义上描述硬件有很大的优势:

  1. 让人类更容易理解
  2. 人类更容易维持
  3. 在综合工具和目标硬件之间更容易移植
  4. 使用行为结构时,了解您的综合工具您的目标硬件有助于理解您实际编写的内容。例如,如果您描述具有异步复位的存储器元件,则对于具有到存储器元件的专用异步复位输入且没有存储器元件的架构,硬件中的实现将是不同的。

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

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

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

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

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

      • 管道,管道,管道。同步元素之间的逻辑层次越多,制定时间约束/目标就越困难。
      • 管道更多。如果您需要为算法添加更多处理步骤而不影响整体延迟/时间线,那么在将来可以提供额外的寄存器阶段可以提供额外的摆动空间。
      • 在正常结构的边界上操作时要小心。例如,如果与IO引脚,专用乘法或其他特殊硬件接口,您将获得更多重要的定时命中。应在此放置额外的存储元件,以避免形成关键路径。
      • 经常查看您的综合报告和实施报告。您可以经常查看这些报告。例如,如果添加一个新功能,并且您的计时受到了影响,那么您只需介绍一个关键路径。为什么?你怎么能缓解这个问题?
      • 注意您的“全局”结构 - 例如重置。必须在您的设计中广泛分发的逻辑值得特别小心,因为它需要覆盖整个设备。您可能需要特殊的流水线阶段或此类逻辑的时序约束。如果可能的话,避免使用“全局”结构,除非确实需要。

答案 1 :(得分:1)

虽然综合工具的设计目标是关注面积,速度或功率,但设计师的选择和技能是产出质量的主要贡献者。设计师应该有一个目标,即最大化速度或最小化面积,这将极大地影响他的选择。通过要求工具减小面积,可以缩小针对速度进行优化的设计,但不会像首先考虑的区域设计那么多。

然而,它比这更复杂。 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

可能会导致从xyz到b / c的不同路径。最后,设计师需要知道他想要什么,他必须验证综合工具是否理解他的意图。