FPGA開発日記

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

CQ出版のインターフェース6月号に「Rustで作る命令セット・シミュレータ」を寄稿しました

f:id:msyksphinz:20200423135931p:plain

インターフェースを毎号買って読んでいる方なら「おいおいこの話は先月号に載せるべき話じゃないのかい?」と言うことに気が付くと思います。私もそう思います。が、どうやら編集担当さんによりページ数のミスが発生した模様(本当かどうかは知りませんが)で、なぜか私の記事が吹っ飛ばされて次号に掲載となりましたとさ。なんじゃそりゃ。

CQ出版さんの雑誌インターフェースの6月号「Rustで作る命令セット・シミュレータ」として原稿を寄稿させて頂きました。ちなみに6月号はどんな特集の内容なのか私も把握していないので、どういう話の流れでRustの特集が挿入されるのか全く知りません。たぶん単発記事として前後に関係なく載るのでしょう。

正直私はRustについてまだまだ初心者で、とても原稿を書けるような技術力の持ち主ではないのですが、C++をメインに使っている人間がRustに移行するために色々と試行錯誤した話だととらえて頂ければちょうど良いかもしれません。

文字数の関係上記事には書けなかったけど、C++版を発展させた形でいくつかこだわりを持って実装をしています。

  • 命令デコーダは全自動生成。JSONファイルで定義したRISC-Vの命令エンコーディングから、Rustの命令デコーダを自動生成しているので、拡張性が高い。
  • CPU設計時に検証用シミュレータとして使うことを想定しているので、デバッグ機能が豊富。1命令毎にかなりの量のデバッグ情報を出力できる。
  • Rustのマクロを多用して命令毎の動作記述をかなり省略して記述している。

ちなみに数年前に開発したC++で作ったRISC-Vシミュレータはこちら。Linuxもブートできます。

github.com

そして以下がRustで作っているRISC-Vシミュレータ。一応RV64とRV32の両方テストベンチは通っているかな?Compressed命令はやる気が無くてまだ実装してません。

github.com


昨年の頭くらいからもともとC++で作っていたRISC-VシミュレータをRustに移植し始めたのですが、クオリティとしては中途半端になっていました。それを少しずつ修正していき、昨年の中頃くらいにオープンソースとしてGitHubに公開していたのですが特に反応もなく。。。あまり気にせず放置していました。

が、今年の2月頃の段階で突然インターフェースの編集部の方から「記事にしてもらうことはできないだろうか」という話をもらい、慌てて修正を加えて記事として昇華させた次第です。

  • 編集「Rustの話を10ページくらい(つまり15,000字程度)で記事になりませんかね」
  • 私「突然ですね。締め切りいつですか?」
  • 編集「1か月後です」
  • 私「」

というやり取りのあった後にまさかの1か月遅延で発行されたので、なんかちょっと悲しいですね。急いで準備して、締め切りに余裕をもって寄稿したのにこれはいったい何だったのか...

ちなみに、Rustマスターである @dalance 様に簡単なレビューをして頂き細かいニュアンスを修正しました。 @dalance 様、ありがとうございました。

ここ最近、Rustに限らずRISC-Vシミュレータを作る人がどっと増えた気がします。私としては仲間が増えてうれしい限りですが、ライバルも増えたので大変。数年前にすでにC++版でLinuxを立ち上げていたとはいえ、すごい勢いで追い上げられているので私もRust版を完成させなければ。