RISC-V Rocket chipを壊す
Iori (@ioriveur) YONEJI
RISC-Vとは
UC-berkeleyが(また)作ったアーキテクチャ
RISC-Vとは
UC-berkeleyが(また)作ったアーキテクチャ
⇒ RV32, RV64, (RV128 in some future)
Rocket coreとは
scalaで書かれたRISC-Vの実装
.oO(available on github)
Rocket chipとは
scala? how?
Chisel library
scala? how?
import Chisel._
class LEDModule extends Module {
val = io = new Bundle {...} //IO definition
:
:
} ⇐ implementable module
scala? how?
import Chisel._
class LEDTest(c: LEDModule) extends Tester(c){
:
} ⇐ testing module
scala? how?
scalaVersion := "2.10.2"
addSbtPlugin("com.github.scct" % "sbt-scct" % "0.2.1")
libraryDependencies += "edu.berkeley.cs" %% "chisel" % "latest.release"�
scala? how?
Chisel library
⇒ code generator to Verilog
⇒ code generator to C++ (emulator)
ビルド方法
README.mdを読め
そして動かない
そして動かない
_人人人人人人人人人_
> std::bad_alloc <
 ̄Y^Y^Y^Y^Y^Y^Y^Y ̄
そして動かない
4800行を越える初期化メソッドを始めとする
まったくもって意味不明な自動生成された 387505行のC++コード!
そして動かない
てかmain関数どこ!
そして動かない
てかmain関数どこ!
⇒ 上のディレクトリのcsrc/にあった。
そして動かない
てかmain関数どこ!
⇒ 上のディレクトリのcsrc/にあった。
⇒ 手書き
手書きC++の安心感
_人人人人人人人人人人_�> 4GBのnew char[sz] <� ̄Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
手書きC++の安心感
手書きC++の安心感
_人人人人人人人人人人人人_
> メモリサイズ決め打ち <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
直した。
./emulator +dramsim +memsize=8589934592 :
:...
⇒ OK
プルリクはこちら
https://github.com/ucb-bar/rocket-chip/pull/3
シミュレーション
C0: 0 [0] pc=[00000002000]
W[r 0=0000000000000048][0] R[r13=00000000003741c8] R[r28=36f000000000006c] inst=[a3c6f23b] DASM(a3c6f23b)
シミュレーション
お前どっから来た?
シミュレーション
お前どっから来た?
⇒ dpath.scala
シミュレーション
scalaコードに謎のprintf
シミュレーション
scalaコードに謎のprintf
⇒ 生成されるC++コードに埋め込まれる (そのままではなく、うまくハンドルするっぽい)
シミュレーション
で、そのログはなになんなの?
⇒ printf("C%d: %d [%d] pc=[%x] W[r%d=%x][%d] R[r%d=%x] R[r%d=%x] inst=[%x] DASM(%x)\n",� io.host.id, pcr.io.time(32,0), io.ctrl.retire, wb_reg_pc,� Mux(wb_wen, wb_waddr, UInt(0)), wb_wdata, wb_wen,� wb_reg_inst(19,15), Reg(next=Reg(next=ex_rs(0))),� wb_reg_inst(24,20), Reg(next=Reg(next=ex_rs(1))),� wb_reg_inst, wb_reg_inst)�
シミュレーション
write_back stageの情報が吐かれている
シミュレーション
write_back stageの情報が吐かれている
シミュレーション
こいつはクロックごとに実行されます
⇒ 刺さってるモジュールに書けば必ず出てくる
シミュレーション
こいつはクロックごとに実行されます
⇒ 刺さってるモジュールに書けば必ず出てくる
順序は知らん
ところで、
Instruction.scala
ところで、
ところで、
ところで、
ctrl.scala
どの
object <hoge> extends DecodeConstants
に書こうが、
どうせ ++= してるんやから一緒や、好きにかけ
新しい命令を追加するには
以上二つを適当に書き加えてから
適宜実装したい機能に合わせてゴニョる。
参考文献
いつか書く