ハードウェアの気になるあれこれスマートフォン用の表示で見るハードウェアの気になるあれこれ技術的に興味のあることを調べて書いてくブログ。2019-04-21Chiselのメモリにファイルのデータをロードする方法Chiselスポンサーリンク今回もChiselのTips的なやつでChiselのメモリにファイルのデータをロードする方法についてを紹介する。内容的にはこのWikiの内容↓github.comじゃあそっち見るわ!!ってなるので、幾つか試してみた結果も載せるつもり。今回のソースコードそんなわけで動かすためのコードを適当に作ってみよう。今回試したコードは以下のリポジトリに置いてあるので、全部見たい方はそちらもどーぞgithub.comメモリ超適当で簡単なメモリ。loadFilePathが存在してる時にのみ、読むようにした方が良かったな、コレ。m(io.addr)}テスト用モジュールこれもすごくシンプルなテスト回路。一応メモリにはライト処理もつけたので、ユニットテスト用のモジュールにはライト用のメソッドが存在してるけど、別にいらなかったことに気づいた。}}とりあえずテストを実行テストも書いたので、早速実行してみる。テスト時に読み込むファイルの中身は以下のように読み込みたいデータが16進文字列で1行毎に書かれているもの。test00_basic.hex0376823735317e4f45e2b5537a5b0217実行すると以下のようにテスト側でファイルからリードした値とメモリのデータが一致しPASSする。因みにだが、今現在この機能がサポートされているバックエンドは、手元で試せる範囲ではtreadleverilatorの2つになるようだ。バックエンドがfirrtlだとメモリにデータが設定されずに試験がFAILする。12:34:39ファイルの形式についてファイルのフォーマットについて少しだけ追加調査をしておく。空行やコメントは許容されないだった。これは上記で実施したテストファイルに空行やコメント(Scalaなので//で試した)を入れてみると簡単に確認できる。確認した時の結果を記載しておく。treadle.executable.MemoryInitializer$$anonfun$treadle$executable$MemoryInitiali内部では入力されたファイルから1行読み取り、それをBigIntで変換しており(後述)、その変換の前に値のチェックが行われていないため、BigIntに変換できないデータは扱えない。Binaryでの読み込みMemoryLoadFileTypeにはHexとBinaryの2つのタイプが用意されている。先の例はMemoryLoadFileType.Hexを使用した場合だがBinaryも試してみよう。いうことで、先ほどのテストクラスにBinary版の試験を追加する。}テスト名で既に出落ちの感があるが、とりあえず読み込むファイルを変更して、ファイルタイプをBinaryに変更してテストを実行。ここで読み込んでいるtest03.binは最初のテスト時に記載した16進文字列データが含まれるものと全く同じになっている。なっているのだが、、何故かこのテストはPASSしてしまう。1今使ってるChisel-3.1.7だとここでannotateの第3引数がデフォルトになっており、外からBinaryを与えても強制的にHex扱いされる。前のだとBinaryを指定するとエラーになってた気がするのでとりあえずHexのみサポートする形にしてるのかしら。}因みにもう少し踏み込むと以下のような実装になってる。このコードはバックエンドが"treadle"の場合の実装(executable/Memory.scalaのMemoryInitilaizer)MemoryLoadFileType.Binaryって"バイナリファイル読める"じゃなくて2進数文字列のファイルを読み込めるってことなのか。HDLのreadmembとかの扱いってことか。(ここまで見てやっと気づいた。)個人的にはバイナリファイルをそのまま読み込めるのも素敵だと思うのだが。}バックエンドをtreadleにした状態でも簡単にメモリの初期値設定が出来るっていうのは自分的には結構使い途がある。verilatorにすると、コンパイルの時間が微妙にネックだったりもするので。頑張ればバイナリファイルをそのまま扱うなんてことも可能な感じなので、そっちもちょっと考えてみたい。技書博2にChisel本を出してきました月別アーカイブはてなブログをはじめよう!diningyo-kpuku-jougekiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。