gpt4 book ai didi

functional-programming - VHDL 或 Verilog 中的高阶函数

转载 作者:行者123 更新时间:2023-12-04 08:41:49 25 4
gpt4 key购买 nike

我一直在使用更函数式风格的语言进行编程,并且开始欣赏诸如元组和高阶函数(例如映射和折叠/聚合)之类的东西。 VHDL 或 Verilog 是否具有这些类型的构造?

例如,有没有办法做一些简单的事情,比如

divByThreeCount = count (\x -> x `mod` 3 == 0) myArray

myArray2 = map (\x -> x `mod` 3) myArray

或者更好的是让我用这两种语言中的任何一种递归地定义我自己的更高级别的结构?

最佳答案

我认为你是对的,HDL 的命令式风格与组合电路的更多功能方面之间存在冲突。用本质上是线性的语言来描述并联电路很奇怪,但我认为功能完备的 HDL 将是一场灾难。

函数式语言的问题(我发现)是很容易编写占用大量资源的代码,无论是时间、内存还是处理能力。那是他们的力量;他们可以非常简洁地表达复杂性,但这样做是以资源管理为代价的。将其放入 HDL 中,我认为综合后您将拥有许多大型、耗电的设计。

以 map 为例:

myArray2 = map (\x -> x `mod` 3) myArray

您希望如何合成?对我来说,您已经为数组的每个元素描述了一个模运算符。忽略模数并不便宜的事实,这是您的意图,如果不是,您将如何更改它?如果我开始以某种方式分解该函数以便我可以说“实例化一个运算符并多次使用它”,我就失去了函数式语言的很多功能。

...然后我们得到了保留状态。保留状态在硬件中无处不在。你需要它。您当然不会使用纯函数式语言。

就是说,不要丢弃您的功能设计模式。组合过程 (VHDL) 和“始终 block ”(Verilog) 可以被视为将自身应用于在其输入处呈现的数据的函数。管道可以被视为功能链。通常,构 build 计的方式看起来很实用,并且可以与 Erlang 中流行的“Actor”设计模式共享很多内容。

那么函数式编程有什么值得学习的吗?当然。我希望 VHDL 和 Verilog 从函数式语言中汲取更多吗?有时。问题是函数式语言的水平太高太快了。如果我无法区分“多次使用 f() 的一个实例”和“使用 f() 的多个实例”,那么它就不会执行硬件描述语言必须执行的操作...描述硬件。

关于functional-programming - VHDL 或 Verilog 中的高阶函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12765688/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com