与经典的硬件描述语言相比,Chisel有什么好处?

时间:2018-10-26 11:30:47

标签: chisel

Chisel是Verilog和VHDL等经典硬件描述语言(HDL)的替代。我在Verilog上的经验及其在行业和学术界的盛行表明,它是一种成熟的成熟语言。

使用Chisel已有一段时间的人可以分享您的经验,并帮助解释Chisel在传统HDL上的实用性吗?

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

  • Verilog在行业中占主导地位,并具有广泛的仿真支持
  • 凿子不支持Verilog支持的所有构造,例如模拟元素
  • 凿子参数化提供与Verilog等效的功能

1 个答案:

答案 0 :(得分:14)

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

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

语言功能/超级答案

考虑以下类似问题,“ Python在C上提供了什么实用程序?” 表示无实用程序的响应可能会提出以下几点:

  1. 我可以用C编写的所有东西都可以用Python编写的。两者都有forwhile等,并且我编写的代码看起来相同:printf("hello\n")print("hello")
  2. C具有Python不喜欢内联汇编的功能
  3. 图灵都完成了

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

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

实际上,从设计生产力和代码重用的角度来看,Python可以被视为一种功能更强大的语言。众所周知,语言力量难以客观评估。保罗·格雷厄姆(Paul Graham)在他的"Beating the Averages" essay中将其描述为“谬论悖论”。格雷厄姆(Graham)的论点是,精通一种功能较弱的语言的工程师无法评估一种功能较强的语言的实用性。

换句话说,上面列出的范例的存在并不强迫您使用它们。因此,完全有可能编写外观和感觉都与C相似的Python(并以此为理由完全消除Python!)。

Chisel是一种领域特定语言(DSL),用于描述嵌入在Scala中的硬件电路。从本质上讲,它提供了与Verilog等效的构造,例如moduleInput / OutputReg等。对于您的问题,这会造成最基本的凿子问题这些示例看起来完全像Verilog,并且使人们可以编写类似于Verilog的Chisel。 这经常被用作驳斥Chisel赞成Verilog的论点。但是,这类似于根据“ Hello World”示例的结构来选择编程语言。

这意味着一个更好的问题是:“如何使用C难以克服的Python构建什么?”

回答这个问题需要案例研究,并且(非常快)不在“ Hello World”比较的范围内。考虑使用C与Python构建机器学习库,例如“如何在C中构建Tensorflow?”由于Tensorflow之类的抽象要求,这将非常困难。

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

由于语言功能/功能以及库的可用性,真正的效用指标变为:

  • 我需要描述几行代码?
  • 该语言允许我构建的抽象功能多么强大?
  • 语言在多大程度上支持代码重用?

对于不受支持的构造,例如负边缘触发的事物和异步重置FIRRTL now supports asynchronous resetChisel will support it soon),Chisel总是通过Verilog黑盒提供逃生孵化功能。但是,所有这些实际上只是寻找开发人员的功能。

硬件编译器答案

Chisel构成了硬件编译器框架的一部分,该框架非常类似于应用于硬件生成的LLVM。 Chisel-to-Verilog流程构成了多阶段编译器的一部分。 “凿子阶段/前端”将凿子编译为称为FIRRTL(RTL的灵活中间表示)的电路 中间表示。然后,“ FIRRTL阶段/中端”优化FIRRTL并应用用户自定义转换。最后,“ Verilog阶段/后端”基于优化的FIRRTL发出Verilog。

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

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

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

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

结论

总而言之,考虑这个问题的一种更好的方法是,“ Chisel可以使超越 Verilog吗?” 这是一个很难回答的难题,需要精简答案。两种语言都提供的一组编程范例。目前,根据我自己的经验,解决此问题的最佳方法是深入研究成熟的Chisel代码库并尝试自己使用它(并保留几个月的判断力)。这些方法的困难在于,这需要时间。此外,在硬件工程师中,读取这些代码库和做出这些类型的判断所必需的技能集并不普遍。硬件工程师通常精通C语言,但可能从未(在任何深度)都了解过面向对象的编程,函数式编程或利用现代软件工程原理编写的复杂项目。这倾向于在人们寻找解雇凿子(或类似语言)的理由而不是使用凿子的理由上造成偏见。

进一步阅读