Chisel提供的优于传统硬件描述语言有哪些优势?

Eri*_* Wu 13 chisel

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

使用Chisel一段时间的人可以分享您的经验并帮助解释Chisel对经典HDL的效用吗?

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

  • Verilog在工业中占据主导地位,并拥有广泛的仿真支持
  • Chisel不支持Verilog所做的所有构造,例如模拟元素
  • 凿子参数化为Verilog提供了相同的功能

sel*_*dge 21

出于多种原因,这是一个难以置信的难题.Chisel社区正在尝试统一一个易于理解的具体答案.主要有两个角度:

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

语言特写答案

想想以下类似的问题,"Python提供什么实用程序?" 表示没有效用的响应可能会带来以下几点:

  1. 一切我可以用Python写的,我可以在C.写两者都有for,while等我写的代码看起来是一样的:printf("hello\n")print("hello")
  2. C具有Python不喜欢内联汇编的功能

这种推理的问题在于它忽略了Python提供新的编程范例这一事实,这些范例允许您提高工作效率:

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

这些范式的存在并不会迫使你使用它们.因此,完全有可能编写外观和感觉就像C一样的Python.

Chisel是一种领域特定语言(DSL),用于描述Scala中嵌入的硬件电路.通过它的本质来说,它提供了相当于构造到VERILOG一样module,Input/ Output,Reg等问题在于你的问题,这将导致这两个最基本的凿例子看起来就像Verilog和还让不让人写凿,看起来就像Verilog的.这通常被用来作为驳斥Chisel以支持Verilog的论据.但是,这类似于根据"Hello World"示例的结构选择编程语言.

这意味着一个更好的问题是:"我可以用Python构建什么,这对C来说是难以克服的?"

回答这个问题需要案例研究,并且(很快)超出"Hello World"比较的范围.考虑在C与Python中构建机器学习库,例如,"我将如何在C中构建Tensorflow?" 由于像Tensorflow这样的抽象需要,这将是非常困难的.

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

由于语言功能和库,实际的实用程序指标变为:

  • 我需要多少行代码来描述一些组件?
  • 该语言是否支持编写和重用代码?

对于不受支持的构造,如负边缘触发事物和异步重置,Chisel总是通过Verilog黑盒提供逃生舱口.但是,所有这些都只是寻找开发人员的功能.

硬件编译器答案

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

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

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

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

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

结论

总而言之,思考这个问题的一个更好的方法是,"凿子能够超越 Verilog?" 这是一个困难的问题,没有精辟的答案,需要比较两种语言提供的编程范例集.目前,根据我自己的经验,解决这个问题的最佳方法是在成熟的Chisel代码库上进行深度潜水,并尝试自己使用它(并扣留几个月的判断).这些方法的困难在于需要时间.此外,阅读这些代码库并做出这些类型的判断所必需的技能组合在硬件工程师中并不普遍.硬件工程师通常非常精通C,但可能从未见过(在任何深度)面向对象编程,函数编程或利用现代软件工程原理编写的复杂项目.这倾向于设置偏见,人们正在寻找解雇Chisel(或类似语言)的理由而不是使用它的理由.

进一步阅读

  • 这是一个很棒的答案,我们应该将其添加到Wiki (4认同)
  • Verilog、VHDL 等的可综合子集共享过程语言 (C) 和低级语言(汇编)的特性。这使得它们无法解决经典的硬件设计问题:设计重用(我们一遍又一遍地编写相同的模块)和专业化(针对不同的 FPGA、ASIC 工具链、VLSI 技术)。当然,这并不是说你不能用 Verilog 或 VHDL 构建复杂的东西,只是有现有的软件工程范式可以促进这一点。我正在使用激发这些想法的其他人的一些参考来更新答案。 (2认同)