FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

BOOM(Berkeley Out-Of Order) コアがfpga-zynqに対応したのでFPGAで動かしてみる(1. プロジェクトのビルド)

BOOMメーリングリストで正式リリースのあった、BOOMコアのfpga-zynqリポジトリ対応、面白そうだ。

BOOMというのはRISC-Vのオープンソースアウトオブオーダプロセッサで、GitHubから入手でき、だれでも手を加えることができるプロセッサだ(ただしChiselで記述してあるので、変更は容易ではないが...)。

github.com

加えて、fpga-zynqリポジトリというのは、かつてUCBのプロジェクトチームがメインで使用していたRISC-VデザインのFPGA検証用のリポジトリで、ZedBeard, ZC707, ZYBOに対応したFPGAデザインを作成することのできるリポジトリだ。 残念ながら現在はほとんどメンテナンスが行われておらず、ほとんどがAWS F1インスタンス上で動作するFireSimに移行している。しかしZedBoardを持っている私としては、かなり貴重なFPGA検証環境として使わせてもらっている。

github.com

これまではfpga-zynqリポジトリは Rocket-Chipデザインにしか対応していなかったのだが、晴れてBOOMにも対応したらしい。さっそくデザインをダウンロードして、合成してFPGAで動かしてみたい。

ちなみに、現在はForkした別のリポジトリで管理されている。

github.com

まずはリポジトリをダウンロードして、環境設定を行っていく。

git clone https://github.com/riscv-boom/fpga-zynq.git fpga-zynq-boom
cd fpga-zynq-boom
cd zedboard
make init-submodules

make init-submodulesというのは、fpga-zynqリポジトリに必要なサブモジュールをダウンロードするものだ。

次に、少しややこしいのだがFIRRTLのバージョン互換性を保つために、Rocket-ChipのFIRRTLの処理を行う。これは何をしているのかわからないが、とりあえず必要らしい。

cd ../boom-template/rocket-chip/firrtl
sbt publishLocal

さらにもう一つ変更が必要だった。どうも以下のBuildCoreモジュールは存在しないらしい。 不要なので削ってみると、無事にVerilogを生成することができた。 これは冗長かもしれないから削るようにPRを出してみても良いかもしれない。

--- a/common/src/main/scala/Configs.scala
+++ b/common/src/main/scala/Configs.scala
@@ -5,7 +5,7 @@ import freechips.rocketchip.config.{Parameters, Config}
 import freechips.rocketchip.subsystem._
 import freechips.rocketchip.devices.tilelink.BootROMParams
 import freechips.rocketchip.rocket.{RocketCoreParams, MulDivParams, DCacheParams, ICacheParams}
-import freechips.rocketchip.tile.{RocketTileParams, BuildCore, XLen}
+import freechips.rocketchip.tile.{RocketTileParams, XLen}
 import testchipip._

 class WithBootROM extends Config((site, here, up) => {

次に、私はVivadoの最新版である2018.3しかインストールしていないので、スクリプトのバージョン番号を差し替える。

diff --git a/zedboard/src/tcl/zedboard_bd.tcl b/zedboard/src/tcl/zedboard_bd.tcl
index 7a29d77..2c222f7 100644
--- a/zedboard/src/tcl/zedboard_bd.tcl
+++ b/zedboard/src/tcl/zedboard_bd.tcl
@@ -20,7 +20,7 @@ set script_folder [_tcl::get_script_folder]
 ################################################################
 # Check if script is running in correct Vivado version.
 ################################################################
-set scripts_vivado_version 2018.2
+set scripts_vivado_version 2018.3
 set current_vivado_version [version -short]

 if { [string first $scripts_vivado_version $current_vivado_version] == -1 } {

これで準備は完了となる。ZedBoardのディレクトリに移動し、makeを実行するとすべて自動実行でVerilogの生成とFPGAの合成が始まる。

ビルドが完了するとデザインが生成されるので、VivadoのGUIを立ち上げて内容を確認してみる。

make vivado
f:id:msyksphinz:20190305003153p:plain
BOOM on fpga-zynqのImplementation結果。

合成結果も少しGUI上に表示しているが、タイミングとしては50MHzを超えている模様。あれ?昔はそんなことなかったんだけどな。 FPUがネックになって周波数が伸びないと思っていたのだけれども、改善されたのかな。 もう少し確認してみた方がよい気がする。