前言
《计算机硬件系统设计》专栏中讲述了使用模拟仿真平台设计一款简易的CPU,距离真实的处理器仍有很多细节未能设计,故此欲求向着更高峰攀登。
文章开始撰写时,整体的思路还不算明确,只能且行且思。如果有机会希望开启新的征途,探寻计算机的奥妙。
有善始者实繁,能克终者盖寡。
工欲善其事必先利其器——Chisel和Scala
现如今,硬件描述语言Verilog HDL开发效率低下的问题愈发明显。相反,软件开发效率随着各种高级语言的迭代更新水涨船高,先进的设计方法以及科学的验证促进软件开发的成长。反观硬件设计仍停留原地。
历史上也有对HDL的改进,主要分为三派:一派主张改进Verilog HDL,另两派主张将HDL移植到软件语言,其中一派主推C++,另一派则主推Java。文章关注Java派系的发展——Chisel(Constructing Hardware In a Scala Embedded Language)。
Scala
“如果今天让我在Java之外选一门语言,我会选Scala” ——James Gosling,Java之父
Scala是一门基于JVM(Java Virtual Machine,Java虚拟机)运行的语言,兼容现有Java程序
Scala是一种多范式的编程语言,它结合了面向对象编程和函数式编程的特性。Scala的设计目标是提供一种高度可扩展、类型安全且具有表达力的编程语言,同时能够与Java语言完全兼容。
Scala语言的特性和功能:
-
静态类型系统:Scala是一种静态类型语言,它在编译时进行类型检查,提供类型安全性和编译时错误检测。静态类型系统有助于提高代码的可靠性和性能。
-
面向对象编程:Scala是一种面向对象的编程语言,支持类、继承、多态等面向对象的概念。它与Java语言具有良好的互操作性,可以直接使用Java类库和框架。
-
函数式编程:Scala也是一种函数式编程语言,它支持高阶函数、匿名函数、不可变数据和模式匹配等函数式编程的概念和特性。函数式编程使得代码更易于理解、测试和并发处理。
-
类型推断:Scala具有类型推断功能,它可以根据上下文自动推断变量和表达式的类型,减少了代码中的类型声明,使得代码更加简洁。
-
并发编程:Scala提供了内置的并发库和特性,如Actors模型和Futures/Promises。这使得编写并发和并行代码更加容易和安全。
-
强大的集合库:Scala拥有丰富的集合库,提供了一系列功能强大的集合操作和函数,使得数据处理和操作变得更加简洁和优雅。
-
可扩展性:Scala具有良好的可扩展性,可以轻松地扩展语言本身和库,以适应不同的应用需求。
Scala广泛应用于各种领域,包括大数据处理、Web开发、并发编程、科学计算等。它在工业界和学术界都得到了广泛的应用和认可。
Chisel
Chisel是一种硬件构造语言,它是基于Scala语言的硬件描述领域特定语言(DSL,Domain Specific Language)。
Chisel通过将硬件描述建模为Scala代码,利用Scala语言的特性和表达能力来进行硬件设计。Chisel的设计者旨在提供一种高层次、可重用和可组合的方式来描述和生成硬件电路。使用Chisel,程序员可以利用Scala的面向对象和函数式编程特性,编写高级的硬件构造描述,从而更容易地构建和验证复杂的硬件系统。
Scala语言为Chisel提供了一些关键的功能和特性:
-
静态类型系统:Scala具有静态类型检查,可以提供类型安全性和编译时错误检测,有助于减少错误并提高代码的可靠性。
-
面向对象编程:Scala是一种面向对象的编程语言,支持面向对象的概念,如类、继承、多态等。这使得Chisel可以利用面向对象的特性,实现模块化和组合性的硬件构造。
-
函数式编程:Scala支持函数作为一等公民,提供高阶函数、匿名函数和不可变性等函数式编程特性。这使得Chisel可以利用函数式编程的概念和技术,实现更简洁、可组合和可验证的硬件描述。
-
强大的库和工具生态系统:Scala拥有丰富的库和工具生态系统,可以为Chisel提供各种扩展和支持。例如,Scala的集合库和并发库可以用于Chisel设计的数据处理和并行计算。
Chisel作为Scala的硬件描述领域特定语言,借助Scala的功能和特性,提供了一种高级、可组合和灵活的方式来进行硬件设计。使用Chisel和Scala,程序员可以通过编写可重用的硬件构造描述,以更高的抽象级别构建复杂的硬件系统,并借助Scala的工具和库生态系统提供的支持来简化开发过程。
补充
指令式编程(Imperative Programming)和函数式编程(Functional Programming)是两种不同的编程范式,它们有着不同的思维方式和编程风格。
指令式编程是一种基于命令序列的编程方式,其中程序员以指令的形式描述计算机执行的具体步骤和操作。在指令式编程中,程序的执行是按照程序的控制流程顺序执行的,通过改变变量的状态和执行语句来达到目标。常见的指令式编程语言包括C、Java和Python等。指令式编程强调程序的状态和变量的变化,通常使用循环、条件语句和命令式的控制结构来实现程序逻辑。
函数式编程是一种基于数学函数的编程方式,其中程序员通过定义和组合函数来描述计算过程。在函数式编程中,函数被视为一等公民,可以作为参数传递、返回值返回以及赋值给变量。函数式编程强调不可变性和无副作用的函数操作,避免改变状态和共享状态。常见的函数式编程语言包括Haskell、Clojure和Scala等。函数式编程通过高阶函数、递归和不可变数据结构等特性来实现程序逻辑。
两种编程范式都有自己的优势和适用场景:
-
指令式编程在处理状态变化、控制流程和底层计算机操作等方面具有优势。它通常用于需要对硬件进行直接控制、性能要求较高的系统和与外部环境进行交互的任务。
-
函数式编程在处理复杂问题、并发编程、并行计算和具有数学推理特性的任务等方面具有优势。它强调可组合性、模块化和容易进行推理和验证的特点,适合于构建可扩展和易于维护的程序。
万事开头难——让代码跑起来
安装Scala
- 安装Scala之前确保操作系统已经具备Java环境。
>java -version
java version "11.0.18" 2023-01-17 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.18+9-LTS-195)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.18+9-LTS-195, mixed mode)
- 下载安装Scala
下载链接: Scala
作者环境选择安装Scala@2.11.12,根据不同操作系统选择安装文件
使用Scala
- 终端中输入“scala”命令进入Scala解释器。
>scala
Welcome to Scala 2.11.12 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_221).
Type in expressions for evaluation. Or try :help.
scala> 1+2
res0: Int = 3
安装SBT
- 下载安装
作者在Windows10环境下进行Scala项目开发需要安装SBT,在macOS 13中则没有进行SBT的安装就可以进行开发,所以各位读者根据自己的开发环境进行对应工具的安装即可。
下载链接: SBT
选择安装sbt-1.8.3.msi
- 配置
在安装后目录结构为:
- sbt
– bin
– conf
在conf文件夹中,编辑sbtconfig.txt,在行末追加
-Dsbt.log.format=true
-Dsbt.boot.directory=D:/SBT/.sbt/boot
-Dsbt.ivy.home=D:/SBT/.ivy2
-Dsbt.global.base=D:/SBT/.sbt
-Dsbt.repository.config=D:/SBT/conf/repository.properties
创建新文件repo.properties,填写内容
[repositories]
local
Nexus osc : http://maven.oschina.net/content/groups/public/
Nexus osc thirdparty : http://maven.oschina.net/content/repositories/thirdparty/
typesafe: http://repo.typesafe.com/typesafe/ivy-releases/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext], bootOnly
typesafe2: http://repo.typesafe.com/typesafe/releases/
sbt-plugin: http://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/
sonatype: http://oss.sonatype.org/content/repositories/snapshots
uk_maven: http://uk.maven.org/maven2/
ibibli: http://mirrors.ibiblio.org/maven2/
repo2: http://repo2.maven.org/maven2/
IDEA项目配置
- 下载项目
在git下载chip-template项目
下载链接: Chip-Template
- 载入项目
在IDEA中打开项目,等待项目完成同步
- 构建
菜单栏中选择【构建】->【构建项目】
- 测试
在窗口下方工具栏中选择【sbt shell】,等待完成初始化后,输入“test”
显示内容:
[info] Suites: completed 1, aborted 0
[info] Tests: succeeded 1, failed 0, canceled 0, ignored 0, pending 0
[info] All tests passed.
[success] Total time: 6 s, completed 2023-5-25 12:45:55
总结
初步学习Scala与Chisel,了解HDL发展历史,同时也熟悉了项目的部署过程。
后面的部分将正式进入Chisel的学习,了解如何使用Chisel进行硬件设计。