FPGA開発日記

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

RoCCを使ったRocket Core拡張方法の調査(4. 独自Acceleratorの作成)

RoCCへの接続方法について、少しずつ分かってきたので、独自Acceleratorを作って、接続してみたい。願わくば、FPGAで動作確認できるところまで行ってみたいな。

RoCC Interfaceについて

RoCCには、いくつかインタフェースが入っているが、大きく分けて使用するのは、

  • io.cmd: Rocket Coreからの発行命令情報など。
  • io.mem: L1キャッシュへのアクセスインタフェース

この2つが制御できれば問題ないと思われる。ここでは、オペランド値1で指定されたアドレスから、オペランド値2で指定されたサイズのデータをL1キャッシュから読み込み、値をすべて加算して返すという回路を作ってみたい。

最終的には、行列積を実行できる回路を作ってみたいが、これはまずは前哨戦。

MemTotal Acceleratorの概要

今回作ってみたいのは、L1キャッシュからデータを読み込んでそれを加算し、結果をRocket Coreに戻す命令。 用途的には全く意味が無いけれども、まずは簡単なものから。

f:id:msyksphinz:20170828225011p:plain

ステートマシンの記述と、L1へのアクセスはサンプルデザインを元に作成した。

これを使ってテストを実行しているのだが、どうも上手く行かない。っていうか、コンパイルとシミュレーションは、しっかりとVerilogでシミュレーションするくらいに時間がかかる。 これならばVerilogを使った方がデバッグも楽だし分かりやすいんじゃ。。。とか思ったら負けなので、継続して試行していく予定。