1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

MacでRocket ChipのVerilogを出力するまで

Posted at

概要

オープンな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を吐くだけなら定義さえされていれば良い。

実際の開発時はCONFIGMODELをいろいろ変えることになると思う。もしくは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の設定

  1. 以下の拡張機能がコード補完や定義へのジャンプ等ができて便利。

    https://marketplace.visualstudio.com/items?itemName=scalameta.metals

  2. クローンしたRocket ChipのルートディレクトリをVSCodeにD&Dして開く。

  3. Do you trust...のような警告が出たらYes, I trustを選ぶ。

    以下、ポップアップが消えた場合はVSCodeを再起動するとまた出てくる。

  4. 初回はUnable to find a Java 11...のようなポップアップが右下に出るので、Open SettingsしてExtensions->Metals->Java Homeに/usr/local/opt/openjdk@11を設定してReload windowする。

  5. Multiple build definitions found...のようなポップアップが出たら、sbtを選ぶ。

  6. New sbt workspace detected...のようなポップアップが出たら、import buildを選ぶ。

  7. しばらくするとインデックスができ上がり、警告が大量に出る。

  8. コンソールからmake verilogすると便利。

  9. .gitignoreには以下を追加すると良い。

    --- a/.gitignore
    +++ b/.gitignore
    @@ -13,3 +13,8 @@ docs-target/
     /test_lib/
     /testbuild/
     rocketchip.jar
    +.bloop/
    +.metals/
    +.vscode/
    +project/project/
    +metals.sbt
    
    
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?