转载一篇18年6月的旧文

众所周知,近来开源处理器项目RISC-V在半导体业界掀起了一片新的潮流。这股潮流同时带来的,还包括了敏捷芯片开发。

“敏捷开发”对于IC设计工程师来说似乎比较陌生,事实上它已经在软件开发中占有重要地位,主要是指开发团队在面对多变的需求时,能快速实现版本迭代,以精干的团队在短时间内快速提交高质量的代码。

事实上,芯片开发周期过长已经是阻碍半导体数字设计快速发展的重要瓶颈。Verilog HDL能实现完整的数字电路开发,但是其代码密度低,许多团队为了加速开发还必须配合团队约定的coding style自行开发非标准的Perl/Python脚本以完成部分代码编写的自动化,然而这种方式的可移植性存在问题。之前EDA业界也在尝试把C代码直接编译成Verilog的高级语言综合(high-level synthesis),但是该尝试目前仅仅在FPGA领域获得了有限的成功。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吧。客观地说chisel没打算取代verilog或者systemverilog,而只是希望在这个基础之上做一个高层次的构建语言,所以我们实际上可以把chisel叫做Hardware construction language,要明白这和高层次综合(HLS)并无半点关系。(但是你也可以在chisel的基础上构建HLS,这是另一码事。)

聊到chisel,很多前端工程师就会想到Java和Scala,这是比较常见的误区,所以不如先聊聊Scala吧。

Scala:天生适合做"新语言"的"高级玩具"

先想象下你有一盒含有MindStorm套件的乐高积木,用它来做了一辆遥控车。Scala就是这样的"高级玩具"。

Scala是由洛桑联邦理工学院的Martin Odersky 精心设计的一门多范式、函数式和面向对象的编程语言。我们可以不用太关心前面的定语,我们只要记住,Scala很适合做领域特定语言(DSL),这一定程度上是设计出来的,而非偶然。当然,”函数式“这个属性必须得提一下,因为函数式编程语言往往和硬件模块存在一些等价转换关系。

DSL意味着他可以像橡皮泥或者积木一样被组合或者塑造成为新的语言,一个经典的案例就是把Scala捏成BASIC语言。(有兴趣的读者可以参见这个Github Repo: https://github.com/fogus/baysick)

看到了么,因为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工具的要求。还有更重要的一点,它是开源和免费的。

RISC-V和Chisel的小故事

所以当Berkeley的Krste教授和他的学生们决定要去做一些研究的时候(比如下一代数据中心的CPU架构、后摩尔定律时代的CPU架构或是AI加速处理器的时候),他们当然希望反馈环足够短啊!尽早评估、快速迭代对一个研究者来说太重要了啊。

差不多在同一时间,Berkeley的Joseph Whitworth教授也正好开始了Chisel的研究和开发工作,那他们自然就要决定联合起来做些有趣的事情。当他们决定做他们的第五代RISC CPU指令集的时候,他们需要设计一个真实的CPU来评估他们设计指令集过程中的每一个选择。所以他们从头用Chisel写了CPU,因为chisel面向对象的一些属性,他们能用很少的时间就把设计做好并且评估,chisel只要几十秒就可以生成verilog或者C++model,然后直接扔进仿真器里去跑benchmark。

就这样他们没用多少年就做了一个全新的开源指令集RISC-V,这个指令集有多好呢?我说你肯定不信,我引用一段最近David Ditzel采访里的话。Dave在Sun参与过SPARC ISA的设计,后面创立了全美达(Transmeta)曾经让Intel也胆战心惊。他最近成立了一家新的公司做RISC-V的高性能CPU。以下是采访内容:

RISC-V wasn't even on the shopping list of alternatives, but the more Esperanto's engineers looked at it, the more they realized it was more than a toy or just a teaching tool. “We assumed that RISC-V would probably lose 30% to 40% in compiler efficiency [versus Arm or MIPS or SPARC] because it’s so simple,” says Ditzel. “But our compiler guys benchmarked it, and darned if it wasn't within 1%.”

“RISC-V最开始甚至不在我们可考虑范围之内,但是我们Esperanto的工程师越深入的了解它,就越发现RISC-V不仅仅是个玩具或者教学用的工具。我们还假定说RISC-V在编译器效率上相比Arm/MIPS/SPARC会损失30%到40%左右,因为它实在是太简单了。但我们的编译器工程师对他进行了评测,发现只损失了可恨的不到1%。”Ditzel如是说

基于这几个事实我得出的推论就是,当我能够更快的评估我的硬件时,我就能更快的改进它,也就是能比别人更早的靠近不断变化中的有效边界。

这里其实引出了一个更有意义话题,如果没有Chisel这样的工具,RISC-V作为一个标准,能够如此快的成熟并且达成诸多成就么?(如:短短几年内就被Linux/GNU Toolchain/LLVM/Qemu... 等并入主线)

Chisel的未来

当我们看待一件新事物的时候,千万不要用他现有的状态去预测它的未来。你一定得想想,Chisel未来会发展成什么样。

Chisel仍然是一门不断发展和进化中的项目,我能够看到的一个重要的节点就是chisel开始分离成为两个项目,chiselfirrtl。简单讲,如果把chisel理解为把chisel代码转化为verilog的话,那么这个步骤被分为了两步:

  1. 从chisel到firrtl(一种硬件描述中间表达)

  2. 从firrtl到verilog

在笔者看来这个思路就是LLVM的思路,熟悉编译器的朋友或许知道,LLVM设计了一种描述清楚的中间表达llir,编译器前端可以将任何语言转化为llir,而所有的中间优化步骤会一级级的处理llir,优化过的内容仍然是llir表达的,最终的llir会被编译器后端(Backend)转化为到目标机器汇编代码。我们可以说几乎大部分编译器都是这样工作的,但是当llir足够开放并且易于被他使用的时候,就会有更多的人来加入这个阵营,发挥他们各自的专业优势来实现更好的编译器PASS。这也是为什么LLVM本质上是编译器基础设施(compiler infrastructure)而非仅仅是编译器软件。

所以请允许我用下面的图不专业的理解一下LLVM所做的事的话。

那么让我再次发挥一下想象力,想像一下chisel+firrtl想要做的。

这里我不想解释太多,但我会问个问题:如果RISC-V会抹平过去高昂的CPU授权费,那么昂贵的EDA工具这个山头谁来抹平呢?

不要小看开源的力量!

请保持开放的心态

冷静的看待chisel的话,我认为这是就是未来或者是未来路上的一站,原因是它能提高生产力,我们也必须抱着同样包容的心态去看待其他类似的方法和途径。谁也看不清未来是怎样的,但是你要明白,当未来到来的时候,要想领先别人,你现在就得去做些什么对自己未来有利的事情。

事实上,在John Hennessy and David Patterson最新的图灵奖演讲上,同时提到了"DSA"和"Agile Chip Development",而chisel,或许就是开启这个新黄金时代的先锋。

所以,当你和我抱怨chisel是scala写的,我不会scala的时候,看我的大白眼!

systemverilog硬件设计及建模_Chisel引领敏捷硬件开发浪潮相关推荐

  1. systemverilog硬件设计及建模_3D建模和渲染都吃什么硬件?设计师该如何选购电脑...

    对电脑性能有特殊要求的群体,比如图形设计人员,亦或者是游戏玩家,往往对电脑性能越来越关心,以为配置决定工作效率和游戏流畅度体验.对于学设计的同学,常常会在选择电脑的时候纠结一个问题,3D建模和3D渲染 ...

  2. systemverilog硬件设计及建模_UVM方法学与设计模式(一):从OOP的本质,设计模式到设计原则...

    面向对象编程(OOP)是业界使用非常广泛的一种编程范式.以C++的OOP为例,其包含通常我们所说的OOP三大要素:继承.封装和多态. C++ OOP 组成 C++的OOP内容相对来说比SystemVe ...

  3. 计算机网络系统硬件设计,计算机监控系统网络拓扑结构、硬件组成及软件设计分析...

    随着计算机及网络技术的迅速发展,计算机应用已深入到很多行业中.对于电力系统中普遍应用的电站监控系统来说,网络信息技术更是极大地推进它向自动化,网络化的发展. 电站是电力系统中的电能供给方,根据它的实际 ...

  4. Forrester 最新报告:阿里云稳居领导者地位,引领云原生开发浪潮

    来源 | 阿里巴巴云原生公众号 日前,国际权威研究机构 Forrester 发布了<The Forrester Wave: Public Cloud Development And Infras ...

  5. Forrester最新报告:阿里云稳居领导者地位,引领云原生开发浪潮

    日前,国际权威研究机构Forrester发布了<The Forrester Wave: Public Cloud Development And Infrastructure Platforms ...

  6. “无实物尝百味”通过控制微电流刺激产生味觉—1.硬件设计篇

    简介:人类在进食的时候,舌头味蕾会产生相应的生物电,并传到大脑,让大家食而知其味,本期将利用此原理通过不同的电流和温度刺激,来产生一些原始的味道,比如说酸甜苦咸. 一."参数"与& ...

  7. 放大招!百味勺子硬件设计篇

    百味勺子 一.背景介绍 2013年,新加坡国立大学实验室的研究人员公开了一款合成味觉的交互设备原型,它可以通过电流和温度来模拟人类几种原始味觉. 原来,人类在进食的时候,舌头味蕾会产生相应的生物电,并 ...

  8. 【国产虚拟仪器】基于Zynq的雷达10Gbps高速PCIE数据采集卡方案(二)硬件设计

    3.1 引言 采集卡的硬件设计是实现采集功能的基础,良好的硬件设计可以使采集功能更容 易实现,方便软件开发.本章基于第二章的硬件设计方案来详细介绍采集卡硬件设计. 包括载卡和子卡的芯片的选型.配置和具 ...

  9. 蓝牙模块硬件设计参考

            一   简介 该文基于某款蓝牙模块的硬件设计经验总结,仅作硬件设计参考之用. 二 天线设计 2.1  PIFA 天线设计 2.1.1  尺寸要求 该天线是经过调频特性的理论计算得出的尺 ...

最新文章

  1. php symfony框架,PHP-Symfony2全栈框架的停用组件
  2. Vim命令之查找和替换
  3. 箭头函数中的this的使用
  4. 理解HTTP协议中的multipart/form-data
  5. 玩够了没,开始奋斗吧?
  6. mysql linux 还原_linux下java还原mysql数据库
  7. c语言双向链表 快速排序,双向链表的快速排序(swift版本)
  8. HTML 5 学习笔记之 canvas 标签
  9. 上位机与下位机的通讯
  10. memset,calloc的区别
  11. linux 查找文件是否含有某个字符串
  12. linux 4g 拨号,4G模块Linux PPP拨号说明
  13. Matlab 实用代码集
  14. Vulnhub靶场题解
  15. 耶路撒冷圣城起源笔记
  16. CSS vw vh详解
  17. Linux下Redis安装与配置 (yum 软件源下载安装)
  18. 使用element ui + vue时出现vue.runtime.esm.js:1737 TypeError: Cannot read property ‘$options‘ of undefined
  19. Linux之重启reboot命令
  20. http的部分知识点

热门文章

  1. CTF-密码学-攻防世界-幂数加密(云影加密)解密脚本
  2. Python内置函数教程
  3. Python 5种不为人知的高级特征
  4. python高阶函数的使用
  5. 深入浅析Python 函数注解与匿名函数
  6. python获取列表的最后一个元素
  7. php pdo 数组,php – 使用PDO更新数组
  8. 放置奇兵 算法 月度活动 破碎时空记录 第五关 丁丁(瓦伦丁)+杰赫拉
  9. python 查看PIL包下的 Image.py 模块时 import _builtin__显示 python version 3.6 does not have module __builtin__
  10. PAT甲级题目翻译+答案 AcWing(动态规划)