Chisel与经典硬件描述语言相比有什么优势


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

使用Chisel一段时间的人能分享你的经验并帮助解释Chisel相对于经典HDL的实用性吗?

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

  • Verilog在行业中占据主导地位,并拥有广泛的模拟支持
  • Chisel不支持Verilog的所有结构,例如模拟元件
  • Chisel参数化提供了与Verilog等效的功能

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

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

语言功能/电源应答

思考以下类似的问题,"Python在C上提供了什么实用程序?">如果响应表明没有实用程序,则可能会提出以下几点:

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

这条推理路线的问题在于,它忽略了Python提供了新的编程范式这一事实,使您能够更高效:

  • 面向对象编程
  • 功能性编程
  • 图书馆

实际上,从设计生产力和代码重用的角度来看,Python可以被视为功能更强大的语言。众所周知,语言能力难以客观评估。保罗·格雷厄姆(Paul Graham)在他的《打破平均值》(Beating the Averages)一文中将其描述为"Blub Paradox"。格雷厄姆的论点是,精通一门功能较弱的语言的工程师无法评估一门功能较强的语言的效用。

换句话说,上面列出的范式的存在并不会迫使你使用它们。因此,编写看起来和感觉都像C的Python是完全可能的(并以此为理由完全忽略Python!)。

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

这意味着一个更好的问题是:"我可以用Python构建什么,而用C构建它的难度是不可估量的?">

回答这个问题需要案例研究,而且(很快)超出了"你好世界"的比较范围。考虑用C与Python构建机器学习库,例如,"我将如何用C构建Tensorflow?"这将非常困难,因为像Tensorflow这样的东西需要抽象。

您可以通过查看成熟的Chisel项目来考虑类似的示例比较。两个突出的例子是火箭芯片和外交。前者是任意片上系统(SoC)设计的生成器。Rocket Chip使用后者来处理参数协商---在任意SoC中,我希望将我连接在一起的N组件的参数作为我连接的内容的函数(例如,地址宽度、内部逻辑、一致性协议)。至关重要的是,Rocket Chip和Diplomacy都可以用作库(有些困难将在未来解决)。具体来说,这意味着用户非常接近于能够"只导入RISC-V微处理器",就像他们"只导入图库"一样。

由于语言功能/能力与库可用性相结合,真正的效用指标变成:

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

对于不受支持的构造,如负边缘触发的东西和异步重置(FIRRTL和Chisel现在都支持异步重置),Chisel总是通过Verilog黑盒提供一个转义填充拼凑。然而,所有这些实际上只是寻找开发人员的功能。

硬件编译器答案

Chisel是硬件编译器框架的一部分,它看起来非常像应用于硬件生成的LLVM。Chisel到Verilog过程是多阶段编译器的一部分。"Chisel阶段/前端"将Chisel编译为电路中间表示,称为FIRRTL(RTL的灵活中间表示)。"FIRRTL阶段/中端"然后优化FIRRTL并应用用户自定义转换。最后,"Verilog阶段/后端"基于优化的FIRRTL发出Verilog。

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

  • 前端和后端是解耦的,这意味着其他前端和后台都可以写入。Verilog前端通过Yosys存在,其他语言可以直接针对FIRRTL,例如,Magma是Python中自己的类似Chisel的语言,可以针对FIRRTL。新的前端可以获得现有中端优化和可用后端的所有好处。也可以编写新的后端,例如,VHDL后端只需要一个有动机的开发人员来编写
  • 电路IR的引入实现了电路的自动化专业化/转换。这已被用来将电路转换为FPGA优化版本,该版本比未优化版本(Midas和FireSim)运行得更快,启用硬件断点/断言(Dessert),并添加运行时可配置的故障注入功能(Chiffre)。直接在Verilog上进行这些优化将是极其复杂和脆弱的

从这个角度来看,问题更接近于"C++和LLVM在手动编写的汇编语言上提供了什么实用程序?">

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

结论

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

进一步阅读

  • Adam Izreevitz等人,可重用性是FIRRTL基础:硬件构造语言、编译器框架和转换,ICCAD,2017
  • Paul Graham,击败平均水平,在线,2001年4月

最新更新