与经典的硬件描述语言相比,Chisel 有哪些优势?

What benefits does Chisel offer over classic Hardware Description Languages?

Chisel 是 Verilog 和 VHDL 等经典硬件描述语言 (HDL) 的替代品。我使用 Verilog 的经验及其在工业界和学术界的流行表明它是一种发展良好的成熟语言。

是否可以使用 Chisel 一段时间的人分享您的经验并帮助解释 Chisel 相对于经典 HDL 的实用性?

作为一名 IC 设计本科生,我目前的经历包括:

由于多种原因,这是一个非常难以回答的问题。 Chisel 社区正试图统一一个易于理解的具体答案。主要有两个角度:

  • 通过新的语言功能和库的可用性提高了工作效率
  • 由于硬件编译器结构改进了专业化

语言Feature/Power答案

思考以下类似问题,"What utility does Python provide over C?" 表示无实用性 的响应可能会提出以下几点:

  1. 我能用 C 写的所有东西我都能用 Python 写。两者都有 forwhile 等,我写的代码看起来一样:printf("hello\n")print("hello")
  2. C 具有 Python 不喜欢内联汇编的特性
  3. 两者都是图灵完备的

这种推理的问题在于它忽略了一个事实,即 Python 提供了 新的编程范例 让你更有效率:

  • 面向对象编程
  • 函数式编程
  • 图书馆

实际上,从设计生产力和代码重用的角度来看,Python 可以被视为一种 更强大的 语言。众所周知,语言 的力量 很难客观评价。 Paul Graham 在他的 "Beating the Averages" essay 中将其描述为 "Blub Paradox"。 Graham 的论点是精通功能较弱的语言的工程师无法评估功能更强大的语言的效用。

换句话说,上面列出的范例的存在并不强迫您使用它们。因此,完全有可能编写出看起来和感觉起来都像 C 的 Python(并以此为理由完全否定 Python!)。

Chisel 是一种领域特定语言 (DSL),用于描述嵌入在 Scala 中的硬件电路。从本质上讲,它提供了与 Verilog 等效的结构,例如 moduleInput/OutputReg 等。对于您的问题来说,这会导致最基本的 Chisel示例看起来与 Verilog 完全一样,还允许人们编写看起来就像 Verilog 的 Chisel。 这通常被用作驳回 Chisel 而支持 Verilog 的论据。 然而,这类似于根据 "Hello World" 示例的结构来选择编程语言。

这意味着更好的问题是:"What can I build with Python that is insurmountably hard with C?"

回答这个问题需要案例研究,并且(很快)超出了 "Hello World" 比较的范围。考虑用 C 与 Python 构建机器学习库,例如 "How would I build Tensorflow in C?" 由于像 Tensorflow 这样的东西需要抽象,这将非常困难。

您可以通过查看成熟的 Chisel 项目来考虑类似的范例比较。两个突出的例子是 Rocket-Chip and Diplomacy。前者是任意片上系统 (SoC) 设计的生成器。后者被Rocket Chip用来处理参数协商的问题---在任意SoC中我想要N组件的参数我' m 连接在一起是我正在连接的功能(例如,地址宽度、内部逻辑、一致性协议)。至关重要的是,Rocket-Chip 和 Diplomacy 都可以用作库(将来会解决一些困难)。具体来说,这意味着用户非常接近能够 "just import a RISC-V microprocessor",就像他们 "just import a graph library"。

由于语言 feature/power 加上图书馆的可用性,实际效用指标变为:

  • 描述某个组件需要多少行代码?
  • 该语言允许我构建的抽象有多强大?
  • 该语言在多大程度上支持代码重用?

对于不受支持的构造,例如下降沿触发的东西 和异步重置 (两者 FIRRTL and Chisel 现在都支持异步重置),Chisel 始终通过 Verilog 黑盒提供逃生舱口.然而,所有这些实际上只是寻找开发人员的功能。

硬件编译器答案

Chisel 构成硬件编译器框架的一部分,看起来非常像应用于硬件生成的 LLVM。 Chisel-to-Verilog 过程构成多阶段编译器的一部分。 "Chisel stage/front-end" 将 Chisel 编译为 circuit 中间表示 称为 FIRRTL(RTL 的灵活中间表示)。 "FIRRTL stage/mid-end" 然后优化 FIRRTL 并应用用户自定义转换。最后 "Verilog stage/back-end" 基于优化的 FIRRTL 发出 Verilog。

这个编译器结构虽然微妙,但可以实现以下功能:

  • 前后端解耦意味着其他前后端可以写。 Verilog 前端通过 Yosys and other languages can directly target FIRRTL, e.g., Magma 存在,它是 Python 中自己的类似 Chisel 的语言,可以针对 FIRRTL。新的前端可以获得现有中端优化和可用后端的所有好处。也可以编写新的后端,例如,一个 VHDL 后端只需要一个有动力的开发人员来编写它。
  • 电路 IR 的引入实现了电路的自动化 specialization/transformation。这已被用来将电路转换为 FPGA 优化版本,运行 比未优化版本 (Midas and FireSim), enable hardware breakpoints/assertions (Dessert), and to add run-time configurable fault injection capabilities (Chiffre) 更快。直接在 Verilog 上进行这些优化将非常复杂和脆弱。

从这个角度看,问题更接近于"What utility does C++ and LLVM provide over manually written assembly language?"

在讨论编译器时,通常会出现 Chisel(一种 硬件构造语言 )与高级综合 (HLS) 的问题。这里的区别因素是,从根本上说,Chisel 仍然是一种用于描述 电路 的强大语言,而 HLS 是将 程序 转换为 [=66] 的途径=]电路.

结论

总而言之,思考这个问题的更好方法是,"What does Chisel enable beyond Verilog?" 这是一个没有简洁答案的难题,需要比较两种语言的编程范式集提供。目前,根据我自己的经验,解决这个问题的最好方法是深入研究成熟的 Chisel 代码库并尝试自己使用它(并在几个月内保留判断)。这些方法的困难在于这需要时间。此外,阅读这些代码库和做出这些类型的判断所需的技能组合在硬件工程师中并不普遍。硬件工程师通常非常精通 C,但可能从未(在任何深度)见过面向对象编程、函数式编程或利用现代软件工程原理编写的复杂项目。这往往会造成偏见,人们正在寻找解雇 Chisel(或类似语言)的理由,而不是使用它的理由。

进一步阅读