磨刀不误砍柴工,Chisel+VS Code+Ubuntu/WSL2开发环境搭建与使用
既然是学Chisel语言,那肯定得先把环境配置好,磨刀不误砍柴工嘛。
而且有个测试环境的话,在后期的学习过程中自己去试运行代码段可以加深学习效果。
操作系统选择
这里推荐使用Ubuntu或者基于WSL2(Windows Subsystem Linux 2)的Ubuntu,本人使用的是WSL2上的Ubuntu 20.04.3 LTS,在使用体验上与Ubuntu几乎没有区别,且能同时使用Windows提供的诸多便利。
如果想要选择其他操作系统,请参照官网提供的Chisel环境配置README,这个文件提供了Ubuntu Linux、Arch Linux、Windows和Mac OS X上的安装指引。但是同时也指出了Windows原生不支持Verilator,但可以通过WSL或Cygwin来解决这个问题。
WSL2的安装参照微软官方文档安装 WSL | Microsoft Docs,对Windows系统的要求是 Windows 10 版本 2004 及更高版本(内部版本 19041 及更高版本)或 Windows 11。
操作系统或WSL的安装配置不在本文的讨论范围之内,下面直接开始Chisel的环境配置。
Chisel运行依赖环境配置
安装Java
首先Chisel是基于Scala的,而Scala又是在JVM上运行的,所以首先得安装Java,命令如下:
sudo apt-get install default-jdk
安装sbt
这个sbt是Scala的构建工具,全称Simple Build Tool,类似于Java中的Maven或Gradle,安装了这个sbt就可以很方便地构建Chisel项目了,命令如下:
echo "deb https://repo.scala-sbt.org/scalasbt/debian all main" | sudo tee /etc/apt/sources.list.d/sbt.list
echo "deb https://repo.scala-sbt.org/scalasbt/debian /" | sudo tee /etc/apt/sources.list.d/sbt_old.list
curl -sL "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x2EE0EA64E40A89B84B2DF73499E82A75642AC823" | sudo apt-key add
sudo apt-get update
sudo apt-get install sbt
sbt更换国内源
这一步非常重要,不然会因为众所周知的原因各种下载失败,非常影响学习效率!
换源步骤如下:
-
创建
.sbt
文件夹:cd ~ mkdir .sbt cd .sbt
-
创建repository文件:
touch repository vi repository
内容如下:
[repositories] local aliyun: https://maven.aliyun.com/repository/central/ sbt-plugin-repo: https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]
-
修改配置文件:
sudo vi /usr/share/sbt/conf/sbtopts
在文件最后添加一行:
-Dsbt.override.build.repos=true
安装Verilator
这个Verilator是一个开源的Verilog仿真器,我们可以通过源代码来编译安装,官方建议版本是Verilator version 4.016,安装步骤如下:
-
安装编译所需依赖:
sudo apt-get install git make autoconf g++ flex bison
-
将Verilator源码clone到本地:
git clone http://git.veripool.org/git/verilator
-
进入Verilator源码文件夹,checkout为指定版本:
cd verilator git pull git checkout v4.016
-
编译Verilator并安装:
unset VERILATOR_ROOT # unset是bash里面使用的,如果是csh的话就用unsetenv autoconf # 创建./configure脚本 ./configure # 运行./configure脚本 make -j($nproc) # 编译,-j($nproc)是指定使用当前可用的处理器核数量来编译 sudo make install # 安装
测试Chisel运行环境配置是否成功
Scala测试
-
创建一个Scala源文件:
mkdir test cd test touch test.scala vi test.scala
内容如下:
object HelloScala extends App { println("Hello Scala") }
-
运行:
sbt run
-
结果如下表示成功:
Chisel测试
-
将官方测试源码clone到本地:
git clone https://github.com/schoeberl/chisel-examples.git
-
运行Hello World
cd chisel-examples/hello-world make # 这里等价于sbt run
结果如下表示成功:
-
运行Hello World测试
sbt test
结果如下表示成功:
VS Code环境配置
VS Code的安装不在本文讨论范围之内,可以参照微软官方网站Visual Studio Code - Code Editing. Redefined,WSL2上直接在命令行输入:
code
即可安装,本文只讨论Chisel和Scala相关内容。
插件安装
在VS Code中按住Ctrl + Shift + X
可以进入插件安装界面,直接搜索安装以下三个插件:
Scala(Metals)换国内源
这一步同样非常重要,不然会因为众所周知的原因各种下载失败,非常影响学习效率!
-
在VS Code中按住
Ctrl + ,
,进入设置页面; -
在搜索栏输入
Metals: Custom Repositories
,找到该设置,点击“添加项”; -
输入
https://maven.aliyun.com/repository/central
并点击确定; -
设置完成的界面如下:
到这里,VS Code的环境就算是配置完成了。
Chisel-template使用和VS Code环境测试
这里测试我们用到的是Chisel官方提供的chisel-template: A template project for beginning new Chisel work (github.com)。
记住这个Chisel-template非常重要,以后我们不管是测试代码还是写自己的Chisel项目,都基于这个模板!
Chisel-template使用步骤
方法一(推荐,在GitHub上生成自己的仓库)
你可以使用GitHub上的Use this template
功能,用该模板在自己的账号下创建一个仓库,记得不要勾选“Include all branches”选项:
然后点击“Create repository from template”,就创建完成了:
接下来我们就可以将这个生成的自己的仓库clone到本地:
git clone https://github.com/你的账号/你的仓库.git
方法二(在本地创建自己的仓库)
-
将
chisel-template
源码clone至本地:git clone https://github.com/freechipsproject/chisel-template.git
-
复制模板到
OhMyChisel
文件夹(你也可以不复制直接在模板上操作):cp -r chisel-template OhMyChisel # 名字自己起
-
清除原有Git相关信息并初始化仓库:
cd OhMyChisel # 名字自己上一步中自己起的 rm -rf .git git init
成功后会提示你:
Initialized empty Git repository in XXXXXXXXX
到这里我们就有本地的Chisel-template仓库了,我们每次写代码都会基于这个仓库,可以完成上面的设置之后保留一个备份,每次要用的时候复制该文件夹即可。
在VS Code中使用和测试Chisel-template
为方便期间,假设上一步我们创建的本地仓库叫作OhMyChisel
,那么首先在该文件夹启动VS Code:
cd OhMyChisel
code .
这时右下角会提示:
选择“sbt”即可。
这时候它又会提示你:
点击“Import build”即可,这一步是为了保证Metals提供的代码提示和跳转功能可以正常使用。
Import完了之后可能会提示你:
点击“Don’t show again”或者叉掉就行,那个“More information”点了一点用也没有,这个提示也不会影响我们的使用。
那么现在代码文件在src/main/scala/gcd
和src/test/scala/gcd
这两个文件夹下,以.scala
结尾的就是。
而项目配置文件是build.sbt
,里面指定了构建项目所需要的版本号和相关插件,这个文件也很重要。
我们可以使用Metals的格式化文档功能,将源代码格式变规整统一,比如在GCD.scala
文件中右键,选择“格式化文档”,会弹出提示:
点击“Create .scalafmt.conf”即可,再次右键执行“格式化文档”就可以了。
如果我们在项目中添加了新的包,但是没有代码提示了,那么需要重新“Import build”,点击VS Code左侧的Metals图标,然后在“Build COMMANDS”中点击“Import build”即可。
运行和测试依然在命令行中进行,只不过这次是在VS Code内嵌的终端中运行指令:
sbt test
输出如下即表示成功:
如果运行sbt run
的话被报错如下:
这是因为main
文件夹只定义了几个电路生成器类,并没有可运行的代码,所以这是正常的不用担心。
到这里我们的配置就完成了!恭喜你可以开始Chisel的学习之旅了!