人気ブログランキング | 話題のタグを見る

雑多な趣味の記録帳

tom01h.exblog.jp

RISC-V マイコン Z-scale/V-scale について


[追記 Verilog で MMU 無の RISC-V を使いたければ、2017 年時点では このブログでも扱っていた zero-riscy が使いやすいと思います。もっと新しい事は調べていないのでわかりません。]

V-scale に関して今持っている知識をまとめてみる。
V-scale は U.C.バークレーの実装したマイコン級の RISC-V です。U.C.バークレーは、速い方から BOOM、rocket、Z-scale/V-scale の3種類のコアを実装しています。そこら辺の話は ここ が詳しいです。V-scale 以外は、やはり U.C.B. の開発した言語 Chisel で記述されています。V-scaleZ-scale の Verilog 記述という位置付けです。Chisel から Verilog への変換ツールが提供されているのですが、V-scale は自動生成の Verilog という事ではないみたいで、手で書いた Verilog に見えます。
あまり詳しいことは書いていないですが、こんな資料 が公開されています。
では特徴。
  1. 対応するアーキテクチャは RV32IM で、特権レベルはマシンモードとユーザモードに対応。ただし、最新のアーキテクチャには追い付いていない。
  2. 3段パイプ、インオーダのシングルスカラパイプライン構成。演算結果の書き戻しは WB ステージの最後で、1ステージで演算の終わる命令は、 WB ステージから EX ステージにバイパスされます。
  3. 分岐予測機構は持たず、分岐発生時は1サイクルストールします。
  4. メモリアクセスポートは命令とデータに分かれた2本の口を持っていて、シミュレーション環境では1個のデュアルポートメモリに接続しています。
  5. 乗算と除算は1サイクルに1ビットの計算をします。演算中は、ハザードがなくてもびしっとパイプを全部止めます。
また、例外に関しては途中で投げ出したのか、受け側(パイプライン側)の実装は完了していますが、発生側は illegal instruction, illegal CSR access 以外は未実装か間違っている。上記のような贅沢なメモリでしか検証していないのか、メモリアクセスウェートでバグあり、挙句の果てにメモリモデルにまで… 話がそれた。
とまぁ、問題はいろいろあるのですが、少々手を入れて CoreMark を測ってみました。メモリは上記の理想的すぎるメモリです。計測結果は以下。3段パイプのくせに遅すぎると思って、32+αサイクルかかる乗算を4サイクルに変更してみました。もちろん、この場限りのいい加減な記述ですが…
  • 遅い乗算器 IPC=0.45 1.48CMK/MHz
  • 4サイクル乗算器 IPC=0.77 2.54CMK/MHz
3段パイプなんだから、これくらい出て欲しいよね。でも、もし計測間違っていたらごめんなさい。
こんな感じの V-scale を育ててみようと思ったのが これ です。Windows insider + Bash on Windows + ModelSim という特殊な環境用なので参入障壁高めですが。しかもまだ手を付けたばかりなのに、すでに減速気味です…

by tom01h | 2016-12-21 00:00