FPGA:为什么开放硬件的开源驱动程序如此之少?

2020-06-11 23:00:16

如果这对您来说还不够,您可以考虑Alveo系列,例如Alveo U250,它有1.3个MLUT,在INT8操作中的峰值吞吐量为33个TOP和64 GB的DDR4内存(77 GB/s带宽)。对于内存带宽需求设计,Alveo U280提供了8 GB HBM2内存(460 GB/s带宽)和32 GB DDR4内存(38 GB/s带宽),代价是“只”拥有24.5个INT8顶层和1M LUT。这两种型号都可以在易趣上以3000美元的价格买到,用过的。真划算:D!

Linux现在确实得到了业界主要参与者的支持。Xilinx的支持是第一位的(2005),而Altera是在2009年加入俱乐部的。然而,两者都是臃肿的定义,工具链重达数GB(Altera大约6 GB,而Xilinx高达27 GB)!

IceStorm项目为Lattice的40个FPGA创建了一个全功能、全开源的工具链。其规则的结构使得逆向工程和工具链的编写变得更加容易。从那时起,更复杂的Lattice ECP5 FPGA得到了全面支持,Xilinx的7系列正在进行中。所有这些项目现在都在Symbenlow的保护伞下进行,目标是成为FPGA的GCC。

VHDL/Verilog容易出错,不会使自己陷入复杂的参数化。这降低了模块的可重用性。相反,Python语言擅长元编程,而Mogen提供了一种从相对简单的Python构造生成verilog的方法。

在Migen之上,Litex提供易于使用和节省空间的模块,在不到一小时的时间内创建您自己的片上系统(SoC)!它已经支持16个以上的流行板卡,为您生成verilog、构建和加载比特流。然而,文档非常稀少,但是如果您想了解更多,我建议您阅读Litex for Hardware EngineersGuide(Litex For Hardware EngineersGuide)。

对于复杂的算法,Migen/VHDL/Verilog不是最有效的语言,因为它们太低级,类似于用汇编语言编写图像识别应用程序。

相反,高级综合可以用C语言编写不定时的设计模型,并将其转换为高效的Verilog/VHDL模块。这使得验证模型变得很容易,并且可以使用相同的代码瞄准多个FPGA供应商,而无需昂贵的模块重写。此外,算法或延迟要求的改变不需要昂贵的重写和重新验证。对我来说听起来太棒了!

缺点是,大多数与C/C++兼容的HLS工具都是专有的,而开源工具要么基于Scala(Chisel,SpinalHDL),要么看起来像是学术玩具项目。不过我希望我是错的,所以我需要更多地调查他们,因为前景太好了,不能错过!在评论中让我知道哪些项目是你最喜欢的!

最初,FPGA只由大量的门/LUT构成,设计将完全使用它们来实现。然而,一些功能可以更好地实现为快速高效的固定功能:块存储器、串行器/解串器(并行到串行,反之亦然,通常称为SerDes)、PLL(时钟发生器)、存储器控制器、PCIE、…。

这些固定功能块称为硬IP,而使用FPGA Isby扩展的可编程部分实现的部分称为软IP。硬IP过去是为高端部件保留的,但现在大多数FPGA上都有硬IP,除了最便宜和最小的那些专为低功耗和自力更生而设计的。

例如,前面提到的100美元部分包括足以实现HDMI 1.4兼容的多个SERDE、一个带4通道块的PCIe 2.0和一个DDR3内存控制器。这足以实现具有多个输出和输入的显示控制器,如NeTV2开放硬件板上所示。

硬IP也可以作为专有软IP的基础。例如,Xilinx销售使用SERDES硬IP的HDMI 1.4/2.0接收器IP,以获得实现HDMI合规性所需的必要18 Gb/s带宽。

有人可能会问,为什么要使用FPGA来实现CPU。事实上,非常便宜和性能更好的物理CPU可以简单地与FPGA一起安装!那么,为什么要在CPU上浪费LUT呢?这篇文章比我更好地解决了这个问题,但是它的要点是,它们确实很好地完成了面向较少延迟的部分的固定逻辑,并且提供了很大的价值。不方便的是,SoC需要额外的固件,但这与拥有外部CPU没有什么不同。

已经有相当多的用于FPGA的开源玩具软CPU,也有一些专有的供应商提供的。问题是他们的工具链经常不在树上,和/或Linux不能在他们身上运行。随着RISC V的引入,这一点真正改变了,它非常高效,在主线Linux和GCC中都得到了支持,甚至可以舒适地安装在Altera和Xilinx的最小的FPGA中。有什么不爱的呢?

所以,FPGA和他们的社区中的所有这些很好的改进都很棒,但如果不是对于所有使用它们的创新设计的廉价开放硬件板来说,它就不会那么有吸引力了:

Fomu(50美元):一个基于ice40的FPGA,适合您的USB端口,使用全开源工具链可以很好地使用RISC V和几个iOS!

破冰者(69美元):一个更传统的基于ice40的主板,面向iOS,低成本,并且是一个完全开源的工具链。

ULX3S(115-200美元):基于ECP5的终极主板?它可用作功能齐全的手持或静态游戏机(包括无线控制器)、USB/无线显示控制器、与Arduino兼容的家庭自动化网关(包括监控摄像头)。所有这些都是通过一个完全开源的工具链实现的。

NeTV2:面向视频的平台,具有2个HDMI输入和2个HDMI输出,可以作为具有USB和以太网连接的独立设备运行,也可以作为使用PCIe 2.0 4x接口的加速器运行。最昂贵的主板有足够的闸门进入真正的计算能力,这可以用来创建一个速度很慢的GPU,带有一个相当不错的显示控制器!作为Xilinx的基于Artix7的工具,开源工具链还没有完成,但是当您完成设计实现时,我相信工具链已经准备好了!

归根结底,这些版块为任何类型的项目提供了一个很好的平台,进一步降低了进入爱好/市场的成本,并提供了现成的设计来整合到您的项目中。硬件方面看起来都很不错,那么为什么我们不围绕一个提供Arduinos灵活性但具有Raspberry-PI类功能集的主板来创建一个巨大的社区呢?

我们已经看到,电路板的可用性、工具链、语言、速度和价格都在限制着业余爱好者从事硬件设计。所以,一定要有开放的街区,可以融入到设计中,对吧?

答案是响亮的“是”!我想谈的第一个项目是Litex,它是一种包含电池的HDL语言(如Python)。以下是它提供的不同区块的精简版本:

Litex Wishbone总线:支持软CPU或通过不同总线(PCIE、USB、以太网、…)访问不同IP。

LiteDRAM:用于Xilinx的DDR/LPDDR/DDR2/DDR3/DDR4硬IP或用于ECP5的DDR3的SDRAM控制器软IP或包装器。

LiteEth:10/100/1000以太网软IP,还允许您通过它访问Wishbonebus!

LiteSATA/LiteSD卡:用于访问SATA驱动器/SD卡的软IP,为您的软CPU提供广泛的存储功能。

使用Litex,人们可以在几个小时内创建一个完整的芯片系统。添加块就像向SoC添加两行代码一样简单:一行用于实例化块(就像实例化对象一样),另一行用于通过Wishbone总线公开它。如果这还不够,看看新的Open WiFi项目,或者OpenCores项目,它似乎拥有几乎所有你所希望的东西。

我们已经看到,具有功能强大的FPGA和有用的IO的开放式硬件主板即使对于业余爱好者来说也是负担得起的。我们也看到创建SoC可以在几个小时内完成,那么为什么我们不为所有的SoC都提供驱动程序呢?

我的意思是,我们有一个FPGA子系统,它专注于在引导时加载比特流,甚至支持动态重新配置FPGA。我们支持大多数硬IP,但仅当通过某些FPGA的集成ARM处理器访问时才支持。那么,为什么我们没有软IP的驱动程序呢?会不会是他们的开发人员不想要ToupStream驱动程序,因为该块的接口和基地址可能会发生变化?看起来确实很像!

但是,如果我们可以创建一个接口来列出这些块、它们接口的当前版本以及它们的基地址,会怎么样呢?这基本上类似于设备树,但不需要将您创建的SoC的网表发送给每个用户。这将允许为所有版本的软IP和所有使用它们的板创建一个通用的上游驱动程序,从而使开源的软IP更容易使用。

消除对开放内核中ABI不稳定的恐惧是我的新项目LiteDIP的核心。为了证明其有效性,我想展示NeTV 2(HDMI输入/输出、10/100以太网、SD卡读卡器、风扇、温度、电压)和ULX3S(HDMI输入/输出、WIFI、蓝牙、SD卡读卡器、LED、GPIO、模数转换器、按钮、音频、FM/AM收音机、…)上可用的所有硬件。使用相同的驱动程序。用户可以挑选模块,根据自己的喜好进行配置,不需要更改驱动程序。这听起来雄心勃勃,但似乎也是一个有价值的挑战!我不仅可以享受一种新的爱好,还可以将软件和硬件开发人员聚集在一起,使用一种尺寸适合所有开放硬件板的现代风格的计算机或加速器。

我是唯一一个对前景感到兴奋的人吗?敬请关注项目的最新消息!