近日 Jserv 在期 2023 年度課程中仿效 UC Berkeley 的課程, 計劃透過課程 Lab 引導學生學習 Chisel 來實作 RISC-V 核心
為此他高度簡化了原本 UC Berkeley 的教程, 建立一個新的 Lab, 目標是帶領學生實作 5-stage pipeline RISC-V processor
在 Lab 3 的 Hackmd 頁面上可以看到幾個章節:
- Install sbt
- Chisel Tutorial
- Chisel Bootcamp & Chisel 介紹
- Single-cycle RISC-V CPU
這篇文章的重點是放在建立可攜式的 Scala Build Tool 環境, 由於並非每個人都想在日常使用環境與這類開發環境混在一起, 希望儘可能保持系統的單純與乾淨程度. 所以還是選擇透過 Apptainer 這個 rootless 的 container 技術來建立環境. Apptainer 的安裝相當簡單, 在官網的 Installation 頁面可以找到個別 Linux Distro 的安裝方式. 至於 Apptainer 的使用方式則可以參考個人先前的介紹文.
對於 SBT 於 Linux 上的安裝, 在官網提供了兩個方式, 分別是透過 SDKMAN 與 debian-based repository 的方裝方式, 由於使用 apptainer, 所以我們可以選擇透過 debian-based repository 的方式.
經嘗試後, 下列為建立 apptainer sandbox 的 script
#!/bin/sh
export SANDBOX=chisel_env
rm -rf $SANDBOX
rm -rf $SANDBOX-overlay
apptainer build --fakeroot --sandbox $SANDBOX docker://ubuntu:latest
apptainer exec --fakeroot --writable $SANDBOX apt update
apptainer exec --fakeroot --writable $SANDBOX apt dist-upgrade -yqq
apptainer exec --fakeroot --writable $SANDBOX apt install openssh-client openjdk-11-jre-headless openjdk-11-jdk-headless ca-certificates-java apt-transport-https curl gnupg -yqq
apptainer exec --fakeroot --writable $SANDBOX sh -c "echo 'deb https://repo.scala-sbt.org/scalasbt/debian all main' | tee /etc/apt/sources.list.d/sbt.list"
apptainer exec --fakeroot --writable $SANDBOX sh -c "echo 'deb https://repo.scala-sbt.org/scalasbt/debian /' | tee /etc/apt/sources.list.d/sbt_old.list"
apptainer exec --fakeroot --writable $SANDBOX sh -c "curl -sL 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x2EE0EA64E40A89B84B2DF73499E82A75642AC823' | gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/trusted.gpg.d/scalasbt-release.gpg --import"
apptainer exec --fakeroot --writable $SANDBOX chmod 644 /etc/apt/trusted.gpg.d/scalasbt-release.gpg
apptainer exec --fakeroot --writable $SANDBOX apt update
apptainer exec --fakeroot --writable $SANDBOX apt install sbt graphviz -yqq
mkdir $SANDBOX-overlay
# testing sbt
apptainer exec --overlay $SANDBOX-overlay $SANDBOX sbt --version
完成後可以看到如下的字串
sbt version in this project: 1.9.7
sbt script version: 1.9.7
後續使用方式並不難, 只要提供 overlay 與 sandbox 的路徑即可, 所以可以宣告絕對路徑來使用, 假設 sandbox 與 overlay 的目錄為 ~/workspace/ca2023/ 下, 那麼可以如下先建立環境變數:
$ export SANDBOX_PATH=~/workspace/ca2023/chisel_env
$ export SANDBOX_OVERLAY=~/workspace/ca2023/chisel_env-overlay
如此可以透過下列指令在 chisel-tutorial 來執行 sbt run
$ apptainer exec --overlay $SANDBOX_OVERLAY $SANDBOX_PATH sbt run
當然也可以先執行下列指令, 得到建立環境的 shell 後切到 chisel-tutorial 目錄執行 sbt run
$ apptainer shell --overlay $SANDBOX_OVERLAY $SANDBOX_PATH
Apptainer> cd chisel-tutorial/
Apptainer> sbt run
[info] Loading project definition from /home/champ/workspace/ca2023/chisel-tutorial/project
[info] Loading settings for project chisel-tutorial from build.sbt ...
[info] Set current project to chisel-tutorial (in build file:/home/champ/workspace/ca2023/chisel-tutorial/)
[info] running hello.Hello
[info] [0.001] Elaborating design...
[info] [0.054] Done elaborating.
Computed transform order in: 208.3 ms
Total FIRRTL Compile Time: 261.5 ms
End of dependency graph
Circuit state created
[info] [0.000] SEED 1699679987261
test Hello Success: 1 tests passed in 6 cycles taking 0.008084 seconds
[info] [0.002] RAN 1 CYCLES PASSED
[success] Total time: 2 s, completed Nov 11, 2023, 5:19:48 AM
Apptainer>
如此就建立好可以使用的 container, 需要清除也很簡單, 刪除 chisel_env 與 chisel_env-overlay 即可
最後對於 Chisel 語言的學習提供的材料是 Chisel Bootcamp, Lab 3 中提供的是 GitHub 上面的兩個方式 - Docker 與 Local Install.
然而 Chisel Bootcamp 的安裝設定, 並不是 Lab 的主要重點, 個人最建議的方式是直接使用在其 GitHub 主頁面上的 Get Started 一段中提供的 "Try it out HERE! No local installation required!", 如此可以省下安裝設置 Docker 或是 local 安裝 jupyter 碰到各種問題的時間.