【问题标题】:Using functions in VHDL for synthesis使用 VHDL 中的函数进行综合
【发布时间】:2015-03-13 16:54:37
【问题描述】:

我偶尔会在 VHDL 中使用函数,主要是在测试平台中,很少在综合项目中使用,对此我很满意。

但是,我想知道对于将要合成的项目,这是否真的是一个聪明的举动(就主要使用 LE 而言?)我已经在网上阅读了很多关于此的内容,但是我可以'找不到任何令人满意的东西。

例如,我读过类似的内容:“函数在每次调用时都会合成!!”。真的是这样吗? (我认为它更像是一个实例化了一次的组件,但它的输入和输出可以从设计中的各个地方访问,但我想这可能是不正确的)。

例如,对于曾经使用过的函数,与直接在流程中编写 VHDL 之间会有什么变化? (在 LE 使用方面?)。

【问题讨论】:

  • 您可以通过仅调用一次并根据需要通过多路复用器或 FIFO 向它们提供多个输入以交换空间的并行性来防止复杂函数的复制。对于简单的功能,它可能不值得费心。

标签: function vhdl synthesis


【解决方案1】:

硬件中的电路,例如 FPGA,始终在任何地方执行,相比之下,CPU 的程序一次只在一个地方执行。这允许 CPU 上的程序为不同的数据重用程序代码,而硬件中的电路必须有足够的资源来处理所有的数据。

因此,综合工具通常将用 VHDL 编写的电路转换为大规模并行结构,允许所有设计始终同时运行。 VHDL语言是以并发执行为目的而创建的,这与普通的编程语言有很大的不同。

因此,使用函数实现算法的设计与使用不同逻辑实现相同算法的设计将具有完全相同的大小和速度,因为综合工具会将函数扩展为专用逻辑,以便使所需的硬件可用。

话虽如此,可以为不同的数据重用相同的硬件,但设计人员通常必须明确地创建支持这一点的设计,从而在时序允许时交错不同的数据集。

最后,正如可怕的杰夫所指出的那样,使用函数是明智之举,因为在大小或速度方面没有什么可松懈的,而是创建易于管理的设计的所有优势。但请注意,函数不能包含状态,因此只能为触发器之间的组合逻辑创建函数,这通常会限制可能的复杂性以满足时序。

【讨论】:

  • 同意所有这些。回答“这是明智之举吗?”部分,答案是肯定的“是”。如果您有重复的功能,您应该始终尝试为此使用实体、过程或函数,以提高代码的可维护性。如果您将功能复制到许多不同的地方,那么在某些时候,有人会进行更改,忘记更新其中一个实例,从而导致错误。
【解决方案2】:

是的,你应该使用函数和过程。

许多人和公司在可综合代码中使用函数和过程。一些编码风格无缘无故地禁止使用函数。如果您对 VHDL 中的某个构造(在本例中为函数)感到不确定,只需键入一个小示例并检查综合结果。

功能非常强大,它们可以帮助您以更少的努力创建更好的硬件。与所有强大的东西一样,您也可以使用函数创建非常糟糕的代码(以及糟糕的综合结果)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多