Chiselを学ぼう #1
Chiselとはハードウェアを設計するためのハードウェア構築言語として利用可能な言語(正確にはScalaのDSL?)。
ドキュメントがユーザに優しくないことで知られるChiselだが、一応日本語の資料もいくつかあるため、今回は備忘録として「Chiselで始めるデジタル回路設計」(著:マーチン・シェーベル、訳:Chisel研究会、第2版)を自分なりにまとめておく。いつか誰かの役に立てばいいな。
章ごとにまとめる予定。
第一章 はじめに
JDK、sbtのインストールは必須。それ以外にも役立つパッケージのインストールを本書では推奨していた。今回はubuntu環境で以下のように行った。エディタはIntelliJを選択した。
JDK (JDK8) and 役立つパッケージ
JDKのバージョンが21以上だと何故か動かないため、LTSなら17以下を推奨。
$ sudo apt install openjdk-8-jdk git make gtkwave
sbtのインストール
$ 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
IntelliJのインストール
学生なら、Ultimate版が無償で利用できるのでおすすめ。
IntelliJのインストールはこちらから
さぁ、Chiselを動かしてみよう!
兎にも角にも動かしてみないことには環境構築が十分かどうか確かめられない。ハードウェア設計の「Hello,world!」、Lチカをしてみよう。
本書ではgithubリポジトリが配布されている。Lチカはその中のhello-worldディレクトリ内のbuild.sbtを選択し、プロジェクトとして展開することで実行できる。
プロジェクトを展開後、Hello.scala内を確認すると、以下のようなソースコードとなっているはず。
/*
* This code is a minimal hardware described in Chisel.
*
* Blinking LED: the FPGA version of Hello World
*/
import chisel3._
/**
* The blinking LED component.
*/
class Hello extends Module {
val io = IO(new Bundle {
val led = Output(UInt(1.W))
})
val CNT_MAX = (50000000 / 2 - 1).U
val cntReg = RegInit(0.U(32.W))
val blkReg = RegInit(0.U(1.W))
cntReg := cntReg + 1.U
when(cntReg === CNT_MAX) {
cntReg := 0.U
blkReg := ~blkReg
}
io.led := blkReg
}
/**
* An object extending App to generate the Verilog code.
*/
object Hello extends App {
(new chisel3.stage.ChiselStage).emitVerilog(new Hello())
}
確認後、以下のコマンドを入力するか、IntelliJの場合はobjectの左の再生ボタン▷を押すことで中間ファイル(.fir)とHDLファイル(.v)を取得できる。HDLファイルをVivadoをはじめとした論理合成ツールでFPGAに書き込んでやる。
$ sbt run
......無事Lチカ達成したでしょうか。
ちなみにChiselはmainディレクトリ内にハードウェアコンポーネントを、testディレクトリに各テストベンチを配置します。sbt test
でHelloTest.scalaの内容に基づいてHello.scalaのテストを行うことができますが、文法がよく分かっていない状態ですし、追々学んでいくこととします。
Discussion
現在、
RISC-VとChiselで学ぶはじめてのCPU自作
を以下の環境で写経していますが、一応エラーなくビルドはできてます(書籍は色々古いバージョンでの記載のため、手を加えながら進めてます)。ただ、
scalatest
でriscv-tests
を通すところまでではありますが・・・。ご参考までに