BOOMメーリングリストで正式リリースのあった、BOOMコアのfpga-zynqリポジトリ対応、面白そうだ。
BOOMというのはRISC-Vのオープンソースアウトオブオーダプロセッサで、GitHubから入手でき、だれでも手を加えることができるプロセッサだ(ただしChiselで記述してあるので、変更は容易ではないが...)。
加えて、fpga-zynqリポジトリというのは、かつてUCBのプロジェクトチームがメインで使用していたRISC-VデザインのFPGA検証用のリポジトリで、ZedBeard, ZC707, ZYBOに対応したFPGAデザインを作成することのできるリポジトリだ。 残念ながら現在はほとんどメンテナンスが行われておらず、ほとんどがAWS F1インスタンス上で動作するFireSimに移行している。しかしZedBoardを持っている私としては、かなり貴重なFPGA検証環境として使わせてもらっている。
これまではfpga-zynqリポジトリは Rocket-Chipデザインにしか対応していなかったのだが、晴れてBOOMにも対応したらしい。さっそくデザインをダウンロードして、合成してFPGAで動かしてみたい。
ちなみに、現在はForkした別のリポジトリで管理されている。
まずはリポジトリをダウンロードして、環境設定を行っていく。
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
合成結果も少しGUI上に表示しているが、タイミングとしては50MHzを超えている模様。あれ?昔はそんなことなかったんだけどな。 FPUがネックになって周波数が伸びないと思っていたのだけれども、改善されたのかな。 もう少し確認してみた方がよい気がする。