function - 使用 VHDL 中的函数进行综合

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

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

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

例如,在使用一次函数的情况下,这与直接在流程中编写 VHDL 之间会有什么变化? (就 LE 使用而言?)。

最佳答案

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

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

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

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

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

https://stackoverflow.com/questions/29037842/

相关文章:

ruby-on-rails - 在哪里使用依赖 : :destroy

c - 为什么 scanf 在按下 Enter 键时将控制权返回给程序?

html - 绝对定位图像上的 100% 宽度

angularjs - Angular.js 将参数传递给指令

.net - Streams 及其在 .Net 中的用途

maven - Jenkins 部署 WAR/EAR 选项不可用

java - 为什么以不同的顺序将三个 double 值相乘会得到不同的答案?

jsf - p :dialog is not calling controller method 内

r - 带 Kernlab 的内核 PCA 和结肠癌数据集的分类

html - 使 HTML 中的图像变大且不模糊