2017/10/14-10/15にかけて、アメリカのボストンにてRISC-Vの学術的なトピックに焦点を当てたワークショップ "CARRV (Computer Architecture Research with RISC-V)" が開催された。 その際の発表資料などは、CARRVのウェブサイトにて見ることが出来る。
この中でUCBの発表した内容(BOOM v2を含め)を中心に見ていたのだが、ちょっとこれまでに聞いたことのない発表が含まれていた。 FPGAを用いてRTLシミュレーションを高速化する、という目的のもとで開発された "MIDAS" という環境だ。
このMIDAS、RTLシミュレーションが遅いのでFPGAを使って加速しようぜ、という話なのだったら特段発表するほどの話ではないのだが、いったい何が新しいのだろうか。
https://carrv.github.io/papers/kim-midas-carrv2017.pdf
ザックリと資料を読んだだけなのだが、基本的なアイデアは正直まだ理解できていない。 FPGAを使ってRTLシミュレーションを高速化した、という話なのだろうが、それのどこが新しいのだろうか。 文献を一生懸命読むと、FPGAで高速化した、という話と、さらにI/O周りのソフトウェア群のAPIを整えて一体化した環境を作った、というところに焦点を当てているように見える。 ただしそれもオレオレ環境を作ればいくらでもそんなものは構築できる話で、何が新しいのかまだ理解できていない。
と思ったら、Github上にこのMIDASの環境が一式置かれていた。どうもREADMEを見た方が分かりやすそうだ。
FPGAシミュレーション用のRTLを生成する (Generate Verilog for FPGA Simulation) どうやらRocket Chipだけでなく、周りの環境も含めてVerilogを生成するのだろうか。これをRTLシミュレーションしますよ、という話になる。
Verilator/VCS でシミュレーションを実行する (Run Verilator/VCS tests) FPGAの環境をVerilator/VCSでシミュレーションする。
FPGA上でRTLを動作させる (Run FPGA Simulation) まだ試していないので良く分かっていないのだが、
For ZC706 with MIG, we generate bitstream midas_wrapper.bit, which will be loaded through JTAG: $ make bitstream [STROBER=1] [BOARD=<zc706_MIG>] [DESIGN=<your design>] [CONFIG=<your config>] To generate boot.bin, which will be copied to the SD card, run: $ make fpga [STROBER=1] [BOARD=<zc706|zedboard|zybo>] [DESIGN=<your design>] [CONFIG=<your config>] To compile the simulation driver, run: $ make zynq [STROBER=1] [DESIGN=<your design>] [CONFIG=<your config>]
うそ、これだけでFPGAにデザインを書き込んでベンチマークプログラムを走らせることが出来るようになるってこと?
どうやらZynqのARMの立ち上げは必要らしいが、ソフトウェア(ARMで動作する)と協調して動作しながらRocket Chipを動かすことが出来る環境なのだろうか。そうすると実作業としては非常に楽になるよね。
- Replay Samples in RTL/Gate-level Simulation
ついでに、Design Compilerで合成したネットとスナップショットを一致させて電力検証もできるらしい。もうわけわからん。
fpgp-zynqの環境とよく似ているということだし、これはうまく使いこなすとかなり便利かもしれない。