我的一个朋友需要在硬件中实现一些统计计算。她希望使用 VHDL 来完成。
(我的心,我没有用VHDL写过一行代码,对它的微妙之处一无所知)
特别是,她需要直接模拟 MATLAB 的betainc
功能。
是否有一个很好的软件包可以做到这一点?任何有关实施的提示也受到高度赞赏。如果这根本不是一个好主意,也请告诉我。
非常感谢!
我的一个朋友需要在硬件中实现一些统计计算。她希望使用 VHDL 来完成。
(我的心,我没有用VHDL写过一行代码,对它的微妙之处一无所知)
特别是,她需要直接模拟 MATLAB 的betainc
功能。
是否有一个很好的软件包可以做到这一点?任何有关实施的提示也受到高度赞赏。如果这根本不是一个好主意,也请告诉我。
非常感谢!
Xilinx 工具集中没有一个内核可以执行不完整的 beta 功能。我不能代表其他可用的工具集,尽管我怀疑是否存在这样的东西。
Xilinx 提供的是一组信号处理模块,例如乘法器、加法器和 RAM 模块(其中包括滤波器、FFT),它们可以一起用于实现各种自定义信号变换。
为了做到这一点,需要完全了解要应用的转换的内部工作原理。
一个好的第一步是在 matlab 中“手动”实现函数作为概念证明:
您的朋友可以尝试仅使用乘法器和加法器等基本运算符来实现该函数,而不是使用 matlab 中的内置函数。
可以将结果与内置函数生成的结果进行比较以进行验证。
然后可以使用提供的构建块将该概念转移到 VHDL。
对不完整的 beta 函数执行此操作并不适合胆小的人,但可以做到。
据我所知,没有允许 VHDL 和 matlab 接口的工具。
但是VHDL和C的接口相当简单,所以如果你可以用C实现你的代码(MATLAB的betainc函数),那么它可以很容易地用FLI(外语接口)来完成。
如果您使用的是 modelsim,下面的链接可能会有所帮助。
首先提醒一句,如果您之前没有做过任何 VHDL/FPGA 工作,这可能不是最好的起点。使用 VHDL(和其他 HDL 语言),您基本上是在描述硬件,而不是在处理器上执行的连续命令行(就像使用 C/C++ 等一样)。因此,在进行 FPGA 开发时,您需要完全不同的技能和思维方式。仅仅因为可以用 VHDL 编写某些东西,并不意味着它实际上可以在 FPGA 芯片中工作(它是可合成的)。
话虽如此,Xilinx(FPGA 芯片和开发工具的主要制造商之一)确实提供了System Generator包,它与 Matlab 接口,可以自动生成用于 FPGA 芯片的代码。我自己没有使用过它,所以我不确定它是否适用于你朋友的情况——但这可能是一个很好的起点。
System Generator 用户指南(链接位于先前链接的页面上)还简要介绍了 FPGA 芯片的一般情况,以及将其与 Matlab 一起使用的情况。
你可以自己写。但是,不完全 beta 函数是一个积分。对于参数的许多值(只要两者都大于 1),它的表现相当好。但是,当任一参数小于 1 时,端点就会出现奇点,使问题变得有点棘手。关键是,除非你在数值分析方面有扎实的背景,否则不要自己写。
无论如何,C 中肯定有很多版本可用。Netlib 必须有一些东西,或者查看 Numerical Recipes。或者从 MATLAB 编译它。然后按照 nav_jan 的建议将其链接。
作为 VHDL 的替代方案,您可以使用MyHDL编写和测试您的 beta 功能 - 它可以从后端生成可合成的(即可以进入 FPGA 芯片)VHDL(或您希望的 Verilog)。
MyHDL 是 Python 之上的一组额外模块,允许对硬件进行建模、验证和生成。Python 将是一个比 VHDL 更熟悉的编写验证代码的环境(它缺少许多您在编程语言中可能认为理所当然的抽象数据类型)。
被测代码仍然必须以“硬件思维方式”编写,但这通常是比测试环境更小的一段代码,因此在某些方面比弄清楚如何解决 VHDL 的验证限制更容易。