【新型敏捷硬件开发语言——Chisel】


前言

《计算机硬件系统设计》专栏中讲述了使用模拟仿真平台设计一款简易的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语言的特性和功能:

  1. 静态类型系统:Scala是一种静态类型语言,它在编译时进行类型检查,提供类型安全性和编译时错误检测。静态类型系统有助于提高代码的可靠性和性能。

  2. 面向对象编程:Scala是一种面向对象的编程语言,支持类、继承、多态等面向对象的概念。它与Java语言具有良好的互操作性,可以直接使用Java类库和框架。

  3. 函数式编程:Scala也是一种函数式编程语言,它支持高阶函数、匿名函数、不可变数据和模式匹配等函数式编程的概念和特性。函数式编程使得代码更易于理解、测试和并发处理。

  4. 类型推断:Scala具有类型推断功能,它可以根据上下文自动推断变量和表达式的类型,减少了代码中的类型声明,使得代码更加简洁。

  5. 并发编程:Scala提供了内置的并发库和特性,如Actors模型和Futures/Promises。这使得编写并发和并行代码更加容易和安全。

  6. 强大的集合库:Scala拥有丰富的集合库,提供了一系列功能强大的集合操作和函数,使得数据处理和操作变得更加简洁和优雅。

  7. 可扩展性:Scala具有良好的可扩展性,可以轻松地扩展语言本身和库,以适应不同的应用需求。

Scala广泛应用于各种领域,包括大数据处理、Web开发、并发编程、科学计算等。它在工业界和学术界都得到了广泛的应用和认可。

Chisel

Chisel是一种硬件构造语言,它是基于Scala语言的硬件描述领域特定语言(DSL,Domain Specific Language)。

Chisel通过将硬件描述建模为Scala代码,利用Scala语言的特性和表达能力来进行硬件设计。Chisel的设计者旨在提供一种高层次、可重用和可组合的方式来描述和生成硬件电路。使用Chisel,程序员可以利用Scala的面向对象和函数式编程特性,编写高级的硬件构造描述,从而更容易地构建和验证复杂的硬件系统。

Scala语言为Chisel提供了一些关键的功能和特性:

  1. 静态类型系统:Scala具有静态类型检查,可以提供类型安全性和编译时错误检测,有助于减少错误并提高代码的可靠性。

  2. 面向对象编程:Scala是一种面向对象的编程语言,支持面向对象的概念,如类、继承、多态等。这使得Chisel可以利用面向对象的特性,实现模块化和组合性的硬件构造。

  3. 函数式编程:Scala支持函数作为一等公民,提供高阶函数、匿名函数和不可变性等函数式编程特性。这使得Chisel可以利用函数式编程的概念和技术,实现更简洁、可组合和可验证的硬件描述。

  4. 强大的库和工具生态系统:Scala拥有丰富的库和工具生态系统,可以为Chisel提供各种扩展和支持。例如,Scala的集合库和并发库可以用于Chisel设计的数据处理和并行计算。

Chisel作为Scala的硬件描述领域特定语言,借助Scala的功能和特性,提供了一种高级、可组合和灵活的方式来进行硬件设计。使用Chisel和Scala,程序员可以通过编写可重用的硬件构造描述,以更高的抽象级别构建复杂的硬件系统,并借助Scala的工具和库生态系统提供的支持来简化开发过程。

补充

指令式编程(Imperative Programming)和函数式编程(Functional Programming)是两种不同的编程范式,它们有着不同的思维方式和编程风格。

指令式编程是一种基于命令序列的编程方式,其中程序员以指令的形式描述计算机执行的具体步骤和操作。在指令式编程中,程序的执行是按照程序的控制流程顺序执行的,通过改变变量的状态和执行语句来达到目标。常见的指令式编程语言包括C、Java和Python等。指令式编程强调程序的状态和变量的变化,通常使用循环、条件语句和命令式的控制结构来实现程序逻辑。

函数式编程是一种基于数学函数的编程方式,其中程序员通过定义和组合函数来描述计算过程。在函数式编程中,函数被视为一等公民,可以作为参数传递、返回值返回以及赋值给变量。函数式编程强调不可变性和无副作用的函数操作,避免改变状态和共享状态。常见的函数式编程语言包括Haskell、Clojure和Scala等。函数式编程通过高阶函数、递归和不可变数据结构等特性来实现程序逻辑。

两种编程范式都有自己的优势和适用场景:

  • 指令式编程在处理状态变化、控制流程和底层计算机操作等方面具有优势。它通常用于需要对硬件进行直接控制、性能要求较高的系统和与外部环境进行交互的任务。

  • 函数式编程在处理复杂问题、并发编程、并行计算和具有数学推理特性的任务等方面具有优势。它强调可组合性、模块化和容易进行推理和验证的特点,适合于构建可扩展和易于维护的程序。


万事开头难——让代码跑起来

安装Scala

  1. 安装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)
  1. 下载安装Scala

下载链接: Scala

在这里插入图片描述

作者环境选择安装Scala@2.11.12,根据不同操作系统选择安装文件

在这里插入图片描述

使用Scala

  1. 终端中输入“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

  1. 下载安装

作者在Windows10环境下进行Scala项目开发需要安装SBT,在macOS 13中则没有进行SBT的安装就可以进行开发,所以各位读者根据自己的开发环境进行对应工具的安装即可。

下载链接: SBT

在这里插入图片描述

选择安装sbt-1.8.3.msi

  1. 配置

在安装后目录结构为:

  • 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项目配置

  1. 下载项目

在git下载chip-template项目

在这里插入图片描述

下载链接: Chip-Template

  1. 载入项目

在IDEA中打开项目,等待项目完成同步

在这里插入图片描述

  1. 构建

菜单栏中选择【构建】->【构建项目】

在这里插入图片描述

  1. 测试

在窗口下方工具栏中选择【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进行硬件设计。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kiri1001

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值