有人预言,RISC-V或将是继Intel和Arm之后的第三大主流处理器体系。欢迎访问全球首家只专注于RISC-V单片机行业应用的中文网站
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
不论在半导体圈内圈外,RISC-V 可谓火爆异常,从阿里平头哥发布高性能 RISC-V 处理器到 ARM 频繁的改变市场策略,RISC-V 掀起了一股新的潮流。和这股潮流同时到来的,还有敏捷芯片开发。
“敏捷开发”对于 IC 设计工程师来说似乎比较陌生,但事实上它已经在软件开发中占有重要地位,它源自早期美国和日本对于精益生产的理论和实践,迭代和增量式的开发方法是敏捷的核心思想,在 2001 年“敏捷软件开发宣言”发布。之后,“敏捷”开发方法已经被应用到了各个行业和领域。
事实上,芯片开发周期过长已经是阻碍半导体数字设计快速发展的重要瓶颈。Verilog HDL 能实现完整的数字电路开发,但是其代码密度低,许多团队为了加速开发还必须配合团队约定的 coding style 自行开发非标准的 Perl/Python 脚本以完成部分代码编写的自动化,然而这种方式的可移植性存在问题。之前 EDA 业界也在尝试把 C 代码直接编译成 Verilog 的高级语言综合(High-Level Synthesis),但该尝试目前仅获得了有限的成功。U.C. Berkeley 在设计和开发 RISC-V 标准和 Core 的过程中,引入了 Chisel 这样的开发工具,并且很大程度上反哺和改进了 Chisel。那么,U.C. Berkeley 这么做的原因是什么?给整个数字 IC 设计领域会带来哪些改变呢?
先摆事实再讲道理,让我们先跳过过程看下结果吧。
SiFive 作为 Berkeley 孵化出的高科技公司,几乎所有的研发均使用 chisel rocket-chip 项目在 Github 上做为标志性的 chisel 项目,包含一个可定制型很强的 CPU 和总线等其他 IP rocket-chip 项目到 2018 年 6 月有接近 6000 次提交 2017 年,SiFive 在众筹网站 CrowdSupply 上发布了 Hifive1,板子上搭载的芯片就是基于 rocket-chip 并添加其他第三方 IP 的 FE310 芯片,工艺为 TSMC 180nm,这是一块 Arduino 兼容的开发板 2018 年,SiFive 又在 CrowdSupply 上发布了其 4+1 核心的可以运行 Linux 操作系统的 HiFive Unleashed 开发板,芯片代号 FEU540,工艺为 TSMC 28nm,这款 SoC 芯片依然是基于 rocket-chip 的。
所以在我看来,为什么用 chisel 而不用其他语言自然是因为人家觉得好用,Berkeley 可以称得上是在诸多大学里非常接地气的大学了,他们似乎除了提出超前的概念之外,更有能力去让这些想法落地,去看看人家孵化出多少硅谷项目(Spark,Unix/BSD)就知道了。
客观地说 chisel 没打算取代 verilog 或者 systemverilog,而只是希望在这个基础之上做一个高层次的构建语言,所以我们实际上可以把 Chisel 叫做 Hardware Construction Language,要明白这和高层次综合(HLS)并无半点关系。(但是或许也可以在 Chisel 的基础上构建 HLS,这是另一码事。)
聊到 chisel,很多前端工程师就会想到 Java 和 Scala,这是比较常见的误区,所以不如先聊聊 Scala 吧。
Scala:天生适合做"新语言"的"高级玩具" 先想象下你有一盒含有 MindStorm 套件的乐高积木,用它来做了一辆遥控车。Scala 就是这样的"高级玩具"。
Scala 是由洛桑联邦理工学院的 Martin Odersky 精心设计的一门多范式、函数式和面向对象的编程语言。我们可以不用太关心前面的定语,我们只要记住,Scala 很适合做领域特定语言(DSL),这一定程度上是设计出来的,而非偶然。当然,”函数式“这个属性必须得提一下,因为函数式编程语言往往和硬件模块存在一些等价转换关系。
看到了么,因为 Scala 中几乎所有的元素都是对象,并且都能够被赋予新的功能,同时配合大量的语法糖,所以这个无聊的小哥用它来实现了一门新的语言,而且只用了 300 行。(有兴趣的读者可以参考 Code: https://git.io/vhMmO)
Chisel 要解决什么问题? 请允许我举一个非常不恰当的栗子,我们以设计一个 CPU 为例吧。
你本科熬了几年图书馆,挤破了头进入国内某微电子学院做了研究生,老师进来和你说我有个很好的想法,能够有效的改进指令效率或者多核性能或者功耗。
老师说你做个 5 级流水线 CPU 把,还要把 cache、总线、外设之类也做了(没缓存搞什么多核?)。好吧,我承认你很聪明,不出几个月你把 CPU 写的差不多了,然后 cache、总线、外设这些大头还远着呢。又过了几个月你天天啃《量化研究方法》,然后终于把 cache 实现了。然后你写了个 GPIO,又挂了个 SRAM,好吧,你终于实现了一个小的 CPU 了。为了降低难度,你用了学术界最爱的 MIPS 体系结构,用了最土的 wishbone 总线。然后你开始了撸软件了,因为用了 MIPS,你的难度已然降低了很多,而且你不用考虑编译器的问题了,你又吭哧了好几个月,写了个巨土的 bootloader,终于把程序加载了。尽管后面可能还要在 FPGA 上跑起来,要发顶作的同学还要去申请经费流个片,这估计又要好久好久。但到目前为止你终于可以开始评估下你的设计的好坏了。
你跑了一堆 benchmark,得出了一些结果,然后你才开始把导师的 idea 应用到你的设计中。然后,然后,你就硕士毕业了,放心吧,你的这个摊子,你的学弟们会接锅的。
这里尽管很多东西不那么真实,但是不得不说大学教授的很多项目,都是好几届学生慢慢做才做下来的,而且做归做,评估归评估。做完了哪里不好还得继续改进,因为有了架构,离实现到最后变成芯片还远着呢。更何况,评估一个设计好坏这件事本身或许难度更大。
以上的故事暴露了一个问题,对于改进硬件架构这件事,反馈环实在太长了。
所以扯了半天,我其实就想说一句话,硬件设计太耗时,Verilog 写的蛋疼,需求要是变一点,那些个接口就得跟着变。要是速度上不去了,我要是想换个架构,又要花好久。
的确,SystemVerilog 这些问题也都有类似的解决方案,但似乎 chisel 的代码密度更高,面向对象和高级语言特性支持的更好。和 SystemVerilog 提供的一步到位相比,Chisel 首先生成通用的 Verilog,然后交由后端处理的方式,降低了对 EDA 工具的要求。还有更重要的一点,它是开源和免费的。
|