F4PGA

F4PGA 是一个开源项目,它旨在创建一个完全开放的源代码FPGA工具链,使用户能够从RTL(寄存器传输级)设计生成FPGA芯片的位流(即编程文件)。F4PGA 试图为FPGA开发提供类似于GCC或LLVM在软件开发中的作用,这意味着它提供了一个完整的工具链,可以从硬件设计语言编写的源代码生成可以在FPGA上运行的低级机器代码。

核心组件

F4PGA 主要由以下几部分组成:

  1. Yosys - 进行RTL综合,将硬件描述语言(如Verilog)转换为逻辑门级表示。
  2. VTR (Verilog to Routing) - 进一步将综合后的逻辑门级表示转换为针对特定FPGA架构的布局和布线配置。
  3. Project X-Ray, IceStorm, prjtrellis等 - 这些是针对特定FPGA硬件(如Xilinx的7系列,Lattice的iCE40或ECP5)的数据库和工具集合,它们提供有关如何将VTR生成的布局和布线映射到FPGA硬件上的必要信息。

特点

  • 开源:F4PGA 由社区驱动,任何人都可以使用、审查、修改和贡献代码。
  • 多平台支持:设计初衷是支持多种FPGA平台。
  • 自动化:工具链支持从RTL到位流的自动化流程。

使用F4PGA

要开始使用 F4PGA,你可以按照以下步骤:

  1. 安装:从 F4PGA 的 GitHub 存储库或其网站上获取工具链,并按照提供的指导安装。
  2. 了解:阅读文档以了解工具链的使用,包括如何运行综合、执行布局和布线,以及生成位流文件。
  3. 设计:使用硬件描述语言(如 Verilog 或 VHDL)开始你自己的FPGA设计。
  4. 测试:在仿真环境中测试你的设计。
  5. 生成:使用 F4PGA 工具链将你的设计转换成位流文件。
  6. 编程:将位流文件下载到你的 FPGA 板上,并验证设计是否如预期那样工作。

Yosys

Yosys 是一个开源的综合工具,它是用于RTL(寄存器传输级)硬件描述语言如 Verilog 的综合到电路网表的工具。它是由 Clifford Wolf 开发的,是一个框架,专门用于RTL综合工具的研究和实验。Yosys 是在F4PGA工具链中使用的综合工具之一,它能够将硬件描述转换为电路表示,这些电路表示随后可以进一步转换成针对特定FPGA或ASIC的配置。

主要特点

  1. 开源:Yosys 完全开源,可用于商业和非商业项目。
  2. 可扩展性:它允许用户和开发者添加自己的综合传递(passes)和硬件描述语言的前端。
  3. 多后端支持:Yosys 支持多种输出格式,可以生成针对不同目标(如FPGA、ASIC)的网表。
  4. 集成:Yosys 能够与其他开源工具如 Project IceStorm、Arachne-PNR、Nextpnr 等集成,形成完整的FPGA开发流程。

使用Yosys进行综合

在FPGA开发过程中,Yosys 用于将高级硬件描述语言(HDL)转换成一个门级网表。这个门级网表随后被放置和布线工具进一步处理,以适应特定的FPGA架构。以下是使用Yosys的基本步骤:

  1. 编写或获取HDL代码:首先需要一个用Verilog或支持的其他硬件描述语言编写的RTL设计。
  2. 运行Yosys:在命令行中启动Yosys并执行一系列的命令(或script),这些命令会读取RTL源文件,执行综合,并输出网表。
  3. 后处理:综合后的网表可以进一步用于模拟、时序分析或被转换成特定FPGA的位流。

Yosys与F4PGA的关系

在F4PGA工具链中,Yosys 负责前端的RTL综合。它将高级的硬件描述转换成可以被后续工具处理的门级表示。F4PGA工具链中的其他工具(如VTR、Project IceStorm等)则负责将Yosys生成的输出转换为可以加载到具体FPGA硬件的位流。


VTR (Verilog to Routing)

VTR (Verilog to Routing) 是一个开源的FPGA CAD(计算机辅助设计)软件工具链,它涵盖了从高层次硬件描述语言(例如Verilog)的综合,到FPGA上的逻辑块布局(placement)和互连布线(routing)的整个流程。VTR旨在提供研究人员和工业界一个开放和可扩展的平台,用于实验和测试新的FPGA架构概念、CAD算法和流程。

VTR包含多个主要组件,主要有:

  • ODIN II:用于综合,将Verilog代码解析成抽象语法树(AST),然后进一步转换成中间表示形式(Netlist)。
  • ABC:进一步处理ODIN II生成的中间表示形式,进行逻辑优化和技术映射。
  • VPR (Versatile Place and Route):执行布局(placement)和布线(routing),这两个步骤决定了逻辑元素在FPGA上的物理位置以及它们之间如何连接。

整个VTR流程允许开发人员输入Verilog代码,并通过一系列的处理和转换,最终生成一个可以在FPGA硬件上实现的设计。VTR特别适合于那些对FPGA架构和CAD工具研究感兴趣的人,因为它可以配置和调整以适应不同的架构和算法研究。它提供了一个框架来测试新的设计,不仅可以评估它们的性能,还可以探索设计空间和优化策略。


Project IceStorm

Project IceStorm 是开源FPGA社区的一个先驱项目,它是第一个针对一个现代FPGA系列(Lattice iCE40)的完全开源工具链项目。由Clifford Wolf和Mathias Lasser发起,Project IceStorm的主要目标是通过逆向工程了解Lattice iCE40 FPGAs的位流格式。这样的了解对于创建一个完全开源的FPGA工具链至关重要,因为这种工具链可以不依赖于任何专有或闭源的软件。

主要组件

Project IceStorm主要由以下几个组件构成:

  1. icestorm:这是主要的工具集,包含了位流分析工具、位流组装工具以及其他一些辅助工具,这些都是为了让开发者能够生成自己的位流文件而设计的。
  2. icebox:这个工具提供了FPGA位流格式的文档化,以及与其相关的解析和处理功能。
  3. icestorm:这部分工具用于将从FPGA设计转换生成的逻辑网表转换成可以在Lattice iCE40硬件上编程的位流文件。
  4. iceprog:这是一个简单的命令行工具,用于在FPGA上烧录位流文件。

作用和重要性

Project IceStorm在开源硬件领域具有里程碑意义,因为它打破了传统上由FPGA制造商提供闭源工具链的惯例,使得用户能够使用完全开放的工具链来编程FPGA。这对于推动FPGA在教育、研究和业余爱好者领域的使用非常重要,因为它降低了成本和访问门槛。此外,Project IceStorm的成果也鼓励了对其他FPGA系列(例如Xilinx的7系列、Lattice的ECP5系列)的相似项目。

通过这个项目,用户不仅可以生成自定义的位流文件,而且可以更深入地了解FPGA的内部工作原理,从而促进了教育和创新。在Project IceStorm的帮助下,设计者可以更自由地实验和验证他们的FPGA设计,不受专有软件限制。


Arachne-PNR

Arachne-PNR 是一个开源的布局和布线(Place and Route, 简称 PnR)工具,它专门为 Lattice iCE40系列的FPGA设计。Arachne-PNR 被设计来与 Project IceStorm 配套使用,Project IceStorm 提供了对 Lattice iCE40 FPGA系列的低级别的位流文档和辅助工具。

主要特征:

  • 专用:Arachne-PNR 是为 Lattice iCE40 FPGAs 专门设计的,这使得它能够非常高效地为这一系列的设备生成布局和布线解决方案。
  • 简单性:与其它更复杂的PnR工具相比,Arachne-PNR 更轻量级,易于安装和使用,尤其是对于新用户或者简单的项目。
  • 集成:Arachne-PNR 可以直接使用由 Yosys 生成的网表文件,并将其转换为 iCE40 FPGAs 可以使用的位流文件。
  • 开源:它是完全开源的,允许用户自由地修改和分发。

尽管 Arachne-PNR 在功能和性能上可能不如一些商业工具或者新的开源工具如 Nextpnr,它在开源FPGA社区中仍然占有一席之地,因为它是早期针对 iCE40 FPGAs 设备的少数开源PnR工具之一。

使用场景:

Arachne-PNR 主要被用于教育、小型项目或者那些对资源和性能要求不高的场合。对于那些需要更高性能或者对布局和布线结果有更严格要求的项目,可能会倾向于使用 Nextpnr 或者其他更先进的PnR工具。

当前状态:

Arachne-PNR 在Nextpnr发布后,其开发和维护有所减少,因为 Nextpnr 提供了更多的特性和更广泛的设备支持。但是,Arachne-PNR 仍然可以在一些旧的或简单的 iCE40 项目中找到其用武之地。


Nextpnr

Nextpnr 是一个开源的FPGA布局和布线(Place and Route, PnR)工具,它是作为arachne-pnr的替代品而开发的。Nextpnr旨在提供一个通用、可扩展且性能优化的PnR工具,它支持多种不同的FPGA芯片系列。

主要特点:

  • 通用性:与特定于某一芯片系列的arachne-pnr不同,nextpnr旨在支持多个不同的FPGA架构。这种通用性意味着开发人员可以为不同的FPGA平台使用相同的PnR工具。
  • 可扩展性:nextpnr通过其可插拔的架构设计,允许开发者添加对新FPGA芯片系列的支持。
  • 用户友好:nextpnr提供了一个图形用户界面(GUI),以可视化布局和布线过程,这对于新用户理解FPGA布局和布线的复杂性是非常有帮助的。
  • 性能和优化:nextpnr试图提供优于或者至少可比拟的性能和质量结果,相对于商业工具或者其它开源选项。

支持的FPGA系列:

  • Lattice iCE40:通过与Project IceStorm的集成,nextpnr可以支持Lattice iCE40系列FPGA。
  • Lattice ECP5:与Project Trellis集成,支持Lattice ECP5系列FPGA。
  • Xilinx系列:通过与Project X-Ray集成,可以支持Xilinx 7系列FPGA,尽管这通常不是主要的支持点,因为Project X-Ray仍在开发中。
  • 其他FPGA系列:由于其可扩展性,理论上nextpnr可以扩展到支持更多的FPGA系列,这取决于社区的贡献和支持。

开发和使用:

nextpnr是开源项目,其代码托管在GitHub上。开发者可以自由下载源代码,自己编译工具,并为其贡献代码。同时,nextpnr通常与其他开源工具(如Yosys综合工具)一起使用,形成一个完整的开源FPGA开发工具链。

总的来说,nextpnr是FPGA开发领域一个重要的开源工具,它提供了一个替代商业软件的选项,使得开发FPGA变得更加容易和可访问。


prjtrellis

prjtrellis 是一个开源项目,其目标是提供文档和工具来理解 Lattice ECP5 FPGA系列的位流格式。与 Project IceStorm 类似,prjtrellis 通过逆向工程努力,使开发者能够以完全开放和透明的方式编程 ECP5 FPGA。

主要组成部分和特点:

  1. 数据库:prjtrellis 包括一个庞大的数据库,其中包含了关于 ECP5 FPGA位流格式和芯片功能的详细信息。这个数据库是通过逆向工程和社区贡献创建的。
  2. libtrellis:这是 prjtrellis 的核心库,它提供了 API 来编程和操作 ECP5 FPGAs。开发人员可以使用 libtrellis 来生成或解析位流文件,或者执行更低层次的芯片操作。
  3. 集成:prjtrellis 与 Yosys 和 Nextpnr 等工具集成,使得它们能够为 ECP5 FPGAs 生成合适的位流文件。Yosys 负责综合(将 HDL 转换成网表),Nextpnr 负责布局和布线(将网表放置在 FPGA 上并连接),而 prjtrellis 则能够将 Nextpnr 的输出转换成可以在 ECP5 芯片上编程的位流。
  4. 开源:prjtrellis 是完全开源的,意味着任何人都可以使用、研究、修改和分发它。这促进了社区的参与和项目的持续改进。
  5. 适用性:由于 ECP5 FPGAs 是 Lattice 的高性能FPGA系列,prjtrellis 对于需要高速、大量 I/O、或复杂逻辑的开源硬件项目非常重要。

使用场景:

  • 开源硬件开发:prjtrellis 对于希望使用开源工具链的硬件开发者是一个宝贵的资源,特别是那些工作在资源受限或者对开源硬件感兴趣的环境中。
  • 教育和研究:教育界和研究机构可以利用 prjtrellis 来教学和研究,无需依赖商业闭源软件。
  • FPGA爱好者和自由职业者:对于有限预算但希望利用 ECP5 系列 FPGA 功能的爱好者或自由职业者,prjtrellis 提供了一个成本效益高的解决方案。

当前状态:

prjtrellis 是一个活跃的项目,随着 ECP5 FPGA的流行,社区和开发人员继续贡献和完善这个工具集。它是一个关键的组成部分,为Lattice ECP5系列设备提供了一个可靠的开源工具链。


Project X-Ray

Project X-Ray 是一个为 Xilinx 7系列(包括最常见的 Zynq-7000 和 Artix-7, Kintex-7, Virtex-7)FPGA 设计的开源研究项目。该项目旨在通过逆向工程来了解这些设备的位流文件格式。通过这种方式,Project X-Ray 希望揭示这些设备的工作原理,并为其编程提供更多的灵活性和可控性。

主要特点:

  1. 逆向工程:透过对 FPGA 位流格式的逆向工程,项目试图创建一个开放和透明的 Xilinx 7系列 FPGA 硬件数据库。
  2. 文档:Project X-Ray 生成关于 Xilinx 7系列 FPGA 设备结构和功能的详尽文档。
  3. 工具链:与 Project IceStorm 和 prjtrellis 类似,Project X-Ray 的最终目标是提供工具链的一部分,使开发者能够使用完全开源的工具来编程和使用这些FPGA。
  4. 集成:尽管这不是 Project X-Ray 的直接产物,但它的成果通常与 Yosys(用于综合)和 Nextpnr 或 SymbiFlow(用于布局和布线)结合使用,以形成一个完整的开源FPGA工具链。

使用场景:

  • 开源硬件社区:对于希望避免商业闭源工具或希望对其工作有更深层理解的硬件开发者。
  • 教育和学术研究:教育工作者和学者可以使用 Project X-Ray 来教授 FPGA 编程,同时研究 FPGA 设计的内部工作原理。
  • 定制硬件开发:对于需要对 FPGA 设备有深度控制或进行定制设计的开发者。

当前状态:

Project X-Ray 是一个活跃的开源项目,它的进展取决于社区的贡献和参与。由于商业FPGA厂商通常不公开他们的位流格式,这样的项目通常面临很大的挑战。然而,它们对于增加开源硬件工具生态系统的多样性和强度至关重要。Project X-Ray 及其贡献者们通过解锁这些设备的潜力,有助于提升硬件设计的可访问性和透明度。


总结

Yosys

  • 作用:综合器
  • 详细:Yosys 是一个RTL综合工具,用于将高层次的硬件描述语言(如 Verilog)转换为低层次的门级网表。Yosys 是SymbiFlow 工具链中的核心组件之一。

VPR (Versatile Place and Route)

  • 作用:布局(placement)和布线(routing)工具
  • 详细:VPR是用于FPGA布局和布线的工具。它接受Yosys生成的门级网表,并将逻辑块放置到FPGA的物理单元上,并规划逻辑块之间的连接路径。

Project IceStorm

  • 作用:位流格式文档化和工具链
  • 详细:Project IceStorm 是专门为Lattice iCE40 FPGA系列创建的,它提供了必要的工具和文档,使开发者能够生成iCE40设备的位流文件。

Arachne-PNR

  • 作用:布局和布线工具
  • 详细:Arachne-PNR 已经被 Nextpnr 取代,但它曾经是用于Lattice iCE40 FPGA系列的简单布局和布线工具。

Nextpnr

  • 作用:通用布局和布线工具
  • 详细:Nextpnr 是 Arachne-PNR 的现代替代品,支持更多类型的FPGA,并提供更先进的特性和更好的性能。

prjtrellis

  • 作用:Lattice ECP5 FPGA的位流格式文档化和工具链
  • 详细:prjtrellis 提供了必要的库和工具,使开发者能够为Lattice ECP5 FPGA系列生成位流文件。

Project X-Ray

  • 作用:Xilinx Series 7 FPGA的位流格式文档化和工具链
  • 详细:Project X-Ray 是一个类似于 IceStorm 和 prjtrellis 的项目,但专注于文档化和提供工具链,用于Xilinx Series 7 FPGA系列。

SymbiFlow 通过这些工具构成了一个完整的开源FPGA开发工具链。这些工具共同工作,能够从硬件描述语言的代码开始,通过综合、布局和布线,最终生成可以加载到具体FPGA芯片上的位流文件。这个工具链的开源特性使得FPGA开发更加透明,并允许社区自由地使用和改进这些工具。

最后修改:2023 年 11 月 23 日
如果觉得我的文章对你有用,请随意赞赏