简介:从20世纪90年代开始,利用硬件描述语言和综合技术设计实现复杂数字系统的方法已经在集成电路设计领域得到普及。随着集成电路集成度的不断提高,传统硬件描述语言和设计方法的开发效率低下的问题越来越明显。近年来逐渐崭露头角的敏捷化设计方法将把集成电路设计带入一个新的阶段。与此同时,集成电路设计也需要一种适应敏捷化设计方法的新型硬件开发语言。本书从实用性和先进性出发,较全面地介绍新型硬件开发语言Chisel和数字系统敏捷化设计方法。全书分两篇。第一篇共10章,主要内容包括Chisel语言简介、Chisel的数据类型、Chisel的模块与硬件类型、Chisel常用的硬件原语、如何将Chisel代码转换生成Verilog HDL代码及基本测试方法、Chisel的黑盒、用Chisel实现多时钟域设计、Chisel的函数应用及其他议题等。第二篇共9章,介绍编写Chisel需要掌握的Scala语言编程基础知识。读者可以根据自身情况,跳过第二篇Scala基础部分,直接学习Chisel的硬件开发功能。本书提供配套的课后练习参考答案、仿真程序代码等。本书可作为集成电路科学与工程、电子信息类、计算机类等相关专业的高年级本科生及研究生的教学用书,也可供从事集成电路设计的工程人员和EDA专业人员学习、参考。
0.为什么选择本书
进一步学习CPU时,我们发现很多资源都是使用chisel语言设计的,仅仅使用verilog也许很难支撑我们的进阶学习。因此,学习一门更加有利于快速实现的语言是有必要的。本书是市面上唯一一本成体系地讲解Chisel和Scala地书籍,具有很强的参考价值。由于笔者自己之前并没有java和scala基础,所以这个学习路径势必是比较陡峭的,所以我的学习思路可以适应零基础的入门学习路线。从零开始的Chisel,从这里开始!
1.Scala与Chisel入门概述
本章主要解决的就是一个问题,Chisel为什么选择Scala,以及我们为什么选择Chisel。对于笔者这样的电子专业的小白来说,并没有学习过java,使用的编程语言大多数是C和Python,C++使用都很少。所以固然,也没有听说过Scala。
Why Scala?
-
Scala基于JVM(Java虚拟机)运行,其语法更强大,形式更简单,代码量更少。
-
Scala是面向对象的函数式语言,C/C++、Python,Java都是指令式编程。
-
Scala是一门可以自由伸缩的语言,能够裁剪已有的系统类库,也可以扩展自定义库。它的学习曲线并不平滑,而是阶梯式的。
-
Scala由于其强大语法特性,成为了一种优秀的"宿主"语言,可以便捷地开发出一门新语言。
-
Scala比Python更简洁,抽象程度比C++更高。
看到这些特性,笔者简直是已经按耐不住一探究竟的狂热心情,这么好的语言我之前怎么没学习过!
Why Chisel?
verilog诞生的历史悠久,它是C语言时代的产物。随着软件各种语言开发效率的巨大进步,硬件开发语言显得无法跟上潮流。关于这个问题的讨论并非近年才开始,而是早已持续数年。主张改进verilog的一派开发了systemverilog,但它仍有很多不足,主要应用于验证领域。主张重构新语言的C++派开发了systemC,但它并没有受到广泛的支持。主张Java的一派直到近年才推出了Chisel,它推动了硬件设计的敏捷开发。它可以通过Firrtl编译器转换为Verilog HDL或VHDL,它实际上仍然会生成verilog代码,借助verilog间接生成电路,因此不存在EDA方面的限制。
Chisel为硬件电路设计引入了面向对象特性,减少了很多不必要的语法,改进了有瑕疵的语法。它生成的verilog都是可综合的,消除了一些歧义语法,利用模式匹配、特质混入、类继承等特性能够快速改变电路结构。
由于Chisel是建构在Scala之上的,因此本书安排了前后两部分内容,第一部分介绍Chisel的语法与实战,第二部分介绍Scala的语法与实战。由于我们是零基础入门,所以需要首先学习Scala的语法。我们从第二部分开始学习。
2.Scala语言编程基础
2.1 Scala的运行
为了更遍历地使用Scala和各种编译链,我们最好在Linux环境下进行学习。这里我使用Windows11的Ubuntu子系统进行学习,使用虚拟机也可以。关于如何在Windows11上运行Ubuntu子系统,可以查阅其他资料,在这里不赘述。
环境:ARM64 Windows11 MatebookEGo Snapdragon (TM) 8cx Gen 3 @ 3.0 GHz 3.00 GHz Ubuntu22.04 WSL2
官方网站:Install | The Scala Programming Language
以我的执行环境为例,介绍安装过程:
首先需要安装java环境,我的ubuntu中没有自带java环境。
javascript
sudo apt install default-jdk
之后执行这条指令:
javascript
curl -fL https://github.com/VirtusLab/coursier-m1/releases/latest/download/cs-aarch64-pc-linux.gz | gzip -d > cs && chmod +x cs && ./cs setupsudo apt install default-jdk
这时scala已经被成功安装,但我们需要重启Ubuntu,对我而言我重启了命令行。之后我们用下面的语句测试:
javascript
scala -version
如果能正确显示版本号,没有WARNNING则说明已经安装完成。这时直接输入scala便可进入scala编译器,可以开始执行程序了。
Scala
jia@J-MateBookEGo:~$ scala
Welcome to Scala 3.6.2 (21.0.5, Java OpenJDK 64-Bit Server VM).
Type in expressions for evaluation. Or try :help.
scala> 1+2
val res0: Int = 3
如果我们希望使用图形化界面编程,可以安装IDEA,网上教程很多,在这里不多说明了。