概要
オープンなRISC-Vの実装であるRocket ChipのVerilogコードをmacOS上で出力するまでのメモ。シミュレーションやFPGAへの実装等は含まない。
エディタとしてVisual Studio Codeを使う際の設定にも触れる。
必要なソフトウェアのインストール
HomebrewでOpenJDKをインストールする。
$ brew install openjdk@11
ソースの取得とMakefragの編集
Rocket Chipのソースコードをクローンする。
真面目に開発するならforkしてからブランチを切る。
$ git clone https://github.com/chipsalliance/rocket-chip.git
次に、先ほどインストールしたバージョンのOpenJDKが使われるようにする。
PATH
を書き換えても良いが、以下のdiffのようにMakefragファイルを編集した方が楽だと思われる。
(おそらくM1 Macの場合はJavaのパスが違う。/usr/local/optではなく/opt/homebrew以下?)
--- a/Makefrag
+++ b/Makefrag
@@ -25,7 +25,12 @@ EMPTY :=
SPACE := $(EMPTY) $(EMPTY)
COMMA := ,
-SBT ?= java -Xmx$(JVM_MEMORY) -Xss8M -jar $(base_dir)/sbt-launch.jar
+ifeq ($(shell uname -s),Darwin)
+JAVABIN ?= /usr/local/opt/openjdk@11/bin/
+else
+JAVABIN ?=
+endif
+SBT ?= $(JAVABIN)java -Xmx$(JVM_MEMORY) -Xss8M -jar $(base_dir)/sbt-launch.jar
SHELL := /bin/bash
FIRRTL_TRANSFORMS := \
@@ -33,7 +38,7 @@ FIRRTL_TRANSFORMS := \
FIRRTL_TEST_JAR ?= $(base_dir)/firrtl/utils/bin/firrtl-test.jar
-JAVA ?= java -Xmx$(JVM_MEMORY) -Xss8M
+JAVA ?= $(JAVABIN)java -Xmx$(JVM_MEMORY) -Xss8M
FIRRTL ?= $(JAVA) -cp $(ROCKET_CHIP_JAR) firrtl.stage.FirrtlMain
GENERATOR ?= $(JAVA) -cp $(ROCKET_CHIP_JAR) $(PROJECT).Generator
Verilogの出力
以下でデフォルト構成のVerilogが出る。初回は結構時間がかかる。
環境変数RISCV
はツールチェインの場所を指定するものだが、Verilogを吐くだけなら定義さえされていれば良い。
実際の開発時はCONFIG
やMODEL
をいろいろ変えることになると思う。もしくはMakefragファイルのデフォルト値を編集する。
$ cd vsim
$ export RISCV=RISCV
$ make verilog CONFIG=freechips.rocketchip.system.DefaultConfig MODEL=TestHarness
ちなみに、Verilogソースは以下のファイルから構成される。
- vsim/generated-src/freechips.rocketchip.system.DefaultConfig.v
メインの出力ファイル。TestHarness
がトップモジュール。 - vsim/generated-src/freechips.rocketchip.system.DefaultConfig.behav_srams.v
キャッシュメモリのVerilogモデルが含まれる。 - src/main/resources/vsrc/plusarg_reader.v
シミュレーション用のファイル。あまりわかっていない。 - src/main/resources/vsrc/EICG_wrapper.v
ラッチを使用したクロックゲーティングセルのモデル。
Visual Studio Codeの設定
-
以下の拡張機能がコード補完や定義へのジャンプ等ができて便利。
https://marketplace.visualstudio.com/items?itemName=scalameta.metals
-
クローンしたRocket ChipのルートディレクトリをVSCodeにD&Dして開く。
-
Do you trust...のような警告が出たらYes, I trustを選ぶ。
以下、ポップアップが消えた場合はVSCodeを再起動するとまた出てくる。
-
初回はUnable to find a Java 11...のようなポップアップが右下に出るので、Open SettingsしてExtensions->Metals->Java Homeに
/usr/local/opt/openjdk@11
を設定してReload windowする。 -
Multiple build definitions found...のようなポップアップが出たら、sbtを選ぶ。
-
New sbt workspace detected...のようなポップアップが出たら、import buildを選ぶ。
-
しばらくするとインデックスができ上がり、警告が大量に出る。
-
コンソールから
make verilog
すると便利。 -
.gitignoreには以下を追加すると良い。
--- a/.gitignore +++ b/.gitignore @@ -13,3 +13,8 @@ docs-target/ /test_lib/ /testbuild/ rocketchip.jar +.bloop/ +.metals/ +.vscode/ +project/project/ +metals.sbt