首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VHDL优化技巧

VHDL优化技巧
EN

Stack Overflow用户
提问于 2015-03-13 23:52:13
回答 2查看 3K关注 0票数 2

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

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

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

EN

回答 2

Stack Overflow用户

发布于 2015-03-14 01:06:44

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

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

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

您还可以使用VHDL语言使用行为构造来实现硬件。您可以描述一个要实现的函数,而不是显式地调用每个逻辑元素。例如,如果执行此操作,则执行此操作,否则执行其他操作。您可以从行为的角度描述状态机、数学运算和内存。从行为的角度描述硬件有很大的优势:

可在合成工具和目标硬件之间轻松移植understand

  • Easier for maintain

  • More

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

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

总之,为了最大限度地利用您的目标设备:

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

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

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

  • Pipeline,管道,管道。同步元素之间的逻辑层次越多,使定时命中( constraint/goal.
  • Pipeline )的难度就越大。如果您需要在不影响整体latency/timeline.
  • Be的情况下向算法添加更多处理步骤,则具有附加级寄存器的将来可以提供额外的回旋余地。例如,如果与IO引脚、专用乘法器或其他特殊硬件接口,您将获得更显著的定时命中。应该在这里放置额外的内存元素,以避免频繁查看综合和实现报告的关键路径。你可以从频繁查看这些内容中学到很多东西。例如,如果您添加了一个新功能,并且您的计时受到了影响,那么您只是引入了一条关键路径。为什么?你如何通过你的“全局”结构--比如重置--来减轻这种issue?
  • Take的影响呢?逻辑必须广泛分布在你的设计中,它需要覆盖整个设备,因此需要特别的关注。您可能需要特殊的流水线阶段,或者此类逻辑的时序约束。如果可能的话,避免使用“全局”结构,除非是真正的requirement.
票数 5
EN

Stack Overflow用户

发布于 2015-03-14 00:51:54

虽然合成工具有专注于面积、速度或功率的设计目标,但设计师的选择和技能是输出质量的主要贡献者。设计师应该有一个最大化速度或最小化面积的目标,这将极大地影响他的选择。通过要求工具减少面积,可以使优化速度的设计变得更小,但不会像最初针对面积的相同设计思想那样多。

然而,它比这要复杂得多。IP核通常以多种FPGA技术和ASIC为目标。这只能通过使用通用的VHDL构造来实现(或者为每个目标重写代码,这是非关键的IP提供商所不做的)。FPGA和ASIC供应商都有原语,可以在使用时提高速度/面积,但如果你编写代码来使用一种技术的原语,这并不意味着如果你改变了技术,结果代码就会得到优化。Xilinx和Altera都有DSP模块来加速乘法和诸如此类的事情,但它们的工作方式并不完全相同,编写充分利用两者潜力的代码非常具有挑战性。

合成工具是臭名昭著的,因为它完全按照你的要求去做,即使一个更优化的解决方案是简单的,例如:

代码语言:javascript
复制
a <= (x + y) + z; -- This is a 2 cascaded 2-input adder
b <= x + y + z; -- This is a 3-input adder

最终,设计者需要知道他想要什么,并且他必须验证合成工具理解他的意图。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29036635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档