VHDL是否像C ++或python一样存在开源库?


11

当我用C ++或python处理问题时,有很多库可以使我的代码繁重。我在考虑C ++的GNU GSLBOOST或FFTW,以及python的NumPy或SciPy。在许多方面,这些资源的存在使使用这些相应语言进行编码变得很有价值,因为这些库使您不必从头开始重写所有低级内容。

IEEE标准库似乎仅涵盖非常基本的内容,例如数据类型(类似于C标准库)。

在VHDL中,您似乎可以购买/找到一些可以解决问题的“ IP内核”,而不用使用开源库。在python中,如果我想与串行设备通信,我就import serial完成了。在VHDL中,我要么会被迫从头开始编写串行协议,要么必须在各种存储库中四处搜寻,直到我发现有人制作了类似的作品。然后,我将把一些代码修补到我的项目中,而不是仅仅包含一些东西并调用它。以类似的方式,如果我想执行FFT,我可以通过Google在VHDL中找到FFT的示例,但是找不到像FFTW这样简单的东西。

我可以将任何全面的开源库导入项目吗?为什么每个人似乎都为许多相同的事情滚动自己的代码?


2
您搜索过opencores.org吗?
MarkU

3
有关VHDL验证库,请参见osvvm.org
Jim Lewis

Opencores,您还可以从各种来源购买库。您将花一些时间来处理opencores中的大多数内核,因为大多数文档没有得到很好的记录。
电压峰值

Answers:


14

我是“ The PoC Library ” 的开发人员和维护人员。我们试图提供一个由包(新类型和新功能的集合)和模块组成的库。它带有常见的fifos,算术,交叉时钟组件,低速I / O组件和以太网/ IP / UDP堆栈(下一个版本)。

如@crgrace所述,设计模块非常复杂,其中:

  • 在许多平台上工作
  • 支持大多数供应商工具链
  • 增加/减少开销

我们的库具有内部配置机制(PoC.config),以区分供应商,设备,甚至设备子家族,以选择正确的代码或优化的实现。它还在某些方面区分了综合代码和模拟代码。

例如PoC.fifo_cc_got,具有“公共时钟”(cc)接口的FIFO和放置/接收信号来控制FIFO。FIFO的宽度,深度,填充状态位和实现类型都是可配置的。可以选择基于LUT的RAM或On-Chip-RAM(ocram)实现类型。如果此fifo是用Altera的ocram选项合成的,则使用altsyncram;如果选择了Xilinx,它将使用通用的BlockRAM描述,并通过显式的进位链实例化来实现指针算法(Xilinx XST找不到最佳解决方案,因此是手动完成的)。

还有其他2种具有“相关时钟”(dc)和独立时钟(ic)接口的fifo类型。因此,如果需要从普通fifo切换到跨时钟fifo(PoC.fifo_ic_got),则更改实体名称并添加时钟并为第二个时钟域重置,仅此而已。

我认为,这证明了有可能编写通用的模块,这些模块可以在多个平台上工作并可以使用不同的工具进行编译(Spartan-> Virtex,Cyclone-> Stratix; ISE,Vivado,Quartus)。

除了PoC,还有其他开源库:


GitHub上的“发现自由和开源硅”(FOSSi)项目提供了一个可浏览的数据库,其中包含主要使用或任何其他重要硬件描述语言()的所有GitHub项目。

也可以看看:


+1用于显示您已完成的工作以及其他人已完成的工作。好长的名单。
米斯特先生(MisterMystère)

3

像您描述的那样,开源库对VHDL或Verilog的用处不及对通用编程语言的用处。这是因为如何实现给定的功能在很大程度上取决于您要执行的操作。对ASIC有利的代码可能对ASIC不利,反之亦然。

另外,由于我们在描述硬件,因此执行FFT的功能将需要诸如字宽和时钟以及复位策略之类的细节,以使其束缚您的双手并限制您的整个设计。如果使该函数非常灵活,则将产生巨大的开销。

最后,例如,当您在C中包含许多库时,请查看可执行文件的大小。那里有很多膨胀。对于软件开发(大多数时间)而言,这无关紧要,但对于FPGA尤其是ASIC开发而言,则至关重要。合成不需要的大量开销是没有意义的。

因此,最根本的是没有这样的库,您当前的方法是正确的。


备用(IP)核心生成器还为Scylla和Chabydris提供了供应商锁定并导致膨胀的风险。FPGA和ASIC的容量已经增长到足以支持膨胀的程度,膨胀的标准化(例如AMBA AXI4)有助于膨胀和成本以及测试方面的问题。权衡产品上市时间与整个行业已经做出的“不需要的开销”。系统设计使用构建模块代替硬件设计,后者是VHDL的基础。
user8352'5

您的第三段相当不了解编译器和综合工具的工作方式-工具应该丢弃不需要的东西和未使用的结果,在数字逻辑设置中可能比在高级语言库中可能还存在一些本地语言的情况更是如此。变量和内存分配是库抽象的开销,特别是如果它是动态链接的。
克里斯·斯特拉顿

2

VHDL和Verilog是描述性语言,它们描述硬件块。C ++中的串行驱动程序可能会转换为VHDL / Verilog中的串行IP。

opencores.org是迄今为止最大的开源数据库。

为了简化通过Github进行搜索,下载和代码浏览的过程,您可以使用以下现代界面:

http://freerangefactory.org/cores.html

例如,如果您搜索串行,则可以在这里结束:

http://freerangefactory.org/cores/communication_controller/serial_uart_2/index.html

并直接跳转到GitHub中的代码。在那里,您将看到可以很容易地实例化串行模块并将自己的电路连接到它,并开始发送和接收数据。这和C ++中的串行库一样简单。

我希望这有帮助。


0

我访问此类网站的第一个网站(如@MarkU所述)是opencores.org。

例如,有一个用VHDL编写的参数化FFT引擎,它是在BSD许可下发布的。状态为“测试版”。


那不是OP问的。他或她了解有关opencores.org的知识。参数化FFT引擎与在Python中导入标准数学库并使用它相差甚远。由于开销,在硬件中没有“中间件”之类的东西。
crgrace

0

对于验证,有开源VHDL验证方法(OSVVM)。
OSVVM是一种全面的高级VHDL验证方法,可简化功能覆盖率,受限随机数和智能覆盖率随机化(智能测试平台方法)的实现。它还有助于实现共享脚本文件,错误报告,日志(条件打印)和内存建模的实现。

OSVVM的网站和博客位于http://osvvm.org。软件包也可以在github上找到:https : //github.com/JimLewis/OSVVM

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.