使用 VHDL 中的函数进行综合

Using functions in VHDL for synthesis

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

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

例如,我读过类似的东西:"The function is synthesized each time it's called !!"。真的是这样吗? (我认为它更像是一个实例化一次的组件,但它的输入和输出可以从设计中的不同地方访问,但我猜这可能是不正确的)。

如果是一次性函数,那么与直接在流程中编写 VHDL 之间会有什么变化? (就 LE 使用而言?)。

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

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

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

也就是说,可以为不同的数据重复使用相同的硬件,但设计人员通常必须明确地创建设计来支持这一点,从而在时间允许的情况下交错不同的数据集。

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

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

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

功能真的很强大,可以帮助您事半功倍地打造更好的硬件。与所有强大的东西一样,您也可以使用函数创建非常糟糕的代码(和糟糕的综合结果)。