我是VHDL的新手,通过使用不同的IP核(由不同的提供商提供)可以看到,有时它们会根据它们所占用的空间或时间限制而有很大的不同。
我想知道在VHDL中是否有优化的经验法则(例如,像C中的那样;展开循环,等等)。
这与我使用的合成工具有关(就像不同的编译器在C中使用其他优化方法,所以你需要学习阅读它们返回的反馈asm文件),还是取决于我的编码技能?
发布于 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
在使用行为构造时,了解您的合成工具和目标硬件有助于理解您编写的内容将如何实际实现。例如,如果您描述具有异步复位的存储器元件,则对于具有专用异步复位输入到存储器元件的架构和不具有异步复位输入的架构,硬件实现将是不同的。
合成工具通常会在其参考手册或用户指南中公布所建议的HDL构造的列表,以使用以获得某些期望的实现结果。对于基本情况,它们将是您所期望的。对于更复杂的行为模型(例如,双端口RAM),您可能需要遵循某种形式,以便工具“识别”您所描述的内容。
总之,为了最大限度地利用您的目标设备:
我想知道在VHDL中是否有优化的经验法则。
现在您已经了解了硬件、综合工具和VHDL...假设您想要设计获得最高性能,则应遵循以下概念:
发布于 2015-03-14 00:51:54
虽然合成工具有专注于面积、速度或功率的设计目标,但设计师的选择和技能是输出质量的主要贡献者。设计师应该有一个最大化速度或最小化面积的目标,这将极大地影响他的选择。通过要求工具减少面积,可以使优化速度的设计变得更小,但不会像最初针对面积的相同设计思想那样多。
然而,它比这要复杂得多。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最终,设计者需要知道他想要什么,并且他必须验证合成工具理解他的意图。
https://stackoverflow.com/questions/29036635
复制相似问题