我是VHDL的新手,通过使用不同的IP核(由不同的提供商),可以看到它们有时会根据它们占用的空间或时间限制而大不相同。
我想知道在VHDL中是否有优化的经验法则(例如,在C中有例子;展开你的循环等)。
它与我正在使用的综合工具有关(比如不同的编译器在C中使用其他优化方法,所以你需要学习读取他们返回的反馈asm文件),还是依赖于我的编码技巧?
答案 0 :(得分:4)
它与我正在使用的综合工具有关(比如不同的编译器在C中使用其他优化方法,所以你需要学习读取他们返回的反馈asm文件),还是依赖于我的编码技巧?
答案是肯定的。当您使用HDL进行编码时,您实际上是在描述硬件(参见图)。它不是将代码转换成机器代码(就像用C一样),而是合成逻辑函数(AND,NOT,OR,XOR等)和存储元件(RAM,ROM,FF ......)。
VHDL可以以多种不同方式使用。您可以在纯粹的结构意义上使用VHDL,在基础级别,您可以调用我们所针对的基础技术的基元。例如,您可以在设计中实例化每个AND,OR,NOT和Flip Flop。虽然这可以给你很多控制,但在99%的情况下,它并不能有效利用时间。
您还可以使用VHDL的行为结构实现硬件。您可以描述要实现的函数,而不是显式调用每个逻辑元素。例如,如果是,请执行此操作,否则执行其他操作。您可以在行为意义上描述状态机,数学运算和记忆。在行为意义上描述硬件有很大的优势:
使用行为结构时,了解您的综合工具和您的目标硬件有助于理解您实际编写的内容。例如,如果您描述具有异步复位的存储器元件,则对于具有到存储器元件的专用异步复位输入且没有存储器元件的架构,硬件中的实现将是不同的。
综合工具通常会在其参考手册或用户指南中公布建议的HDL结构列表,以便获得一些所需的实施结果。对于基本情况,它们将是您所期望的。对于更复杂的行为模型(例如双端口RAM),可能需要遵循某种形式,以便工具“识别”您所描述的内容。
总之,为了最好地使用目标设备:
我想知道VHDL中的优化是否有经验法则
现在您已了解硬件,综合工具和VHDL ......假设您想要设计以获得最佳性能,应遵循以下概念:
答案 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的不同路径。最后,设计师需要知道他想要什么,他必须验证综合工具是否理解他的意图。