ハードウェアの気になるあれこれスマートフォン用の表示で見るハードウェアの気になるあれこれ技術的に興味のあることを調べて書いてくブログ。Scalaスポンサーリンク前回のChiselの記事では今更ではあるがChiselでデザインしたハードウェアをVerilogのRTLに変換するためにやることについてをまとめた。www.tech-diningyo.info今日はついでなので、前回の続きというかその前の段階とかに位置しているはずのChiselで作っているハードウェアをそのままChiselのテスト機能でテストする方法をまとめてみる。自分的な位置づけは前回の続きのネタなので、前回作った加算器のプロヘクトをそのまま流用することにする。Top.scala変換するChiselのコードが書かれたファイル上記に記載したChiselのソースコードは説明の都合上、ちょっと変化させたものにしようと思う。いうことで以下のようなモジュールにした。変更点はただ単に演算結果が入力に対して1サイクル遅れて出力されるようにレジスタを追加しただけ。32))}とりあえず上記の回路を前回同様にsbtで実行すると回路のエラボレートが走り、以下のようなVerilogのRTLが生成される。endendmoduleChiselのテスト・ハーネスの設定ChiselにはChisel本体とは別にテスト・ハーネスのライブラリが存在しており、これを使うことでテスト・ハーネスが提供する機能とScalaのコードを使って作成したChiselモジュールのテストを実施することが可能だ。github.comこのテスト・ハーネスはChisel3本体とパッケージ空間自体は一緒だが、別のライブラリとして提供されているため、使用する際にはsbtの設定の追加が必要になる。いうことで前回使ったbuild.sbtを変更していく。"[1.2.5,1.3-SNAPSHOT["なんとなくわかるとは思うがsbtではlibraryDependenciesにライブラリを追加すると、そのライブラリをsbtコマンド実行前に自動的にダウンロードしてくれるようになっている。build.sbtの修正内容はsbtコマンド実行時にチェックが入り、必要に応じてアップデートがかかるようになっている。そのため上記のように今回使用したいchisel-iotestersとそのバージョン指定を追加すればそれでOKだ。テスト用のメイン関数の追加これでchisel.iotestersを使用する準備が完了したので次はこれを使ってテストを作っていく。1ファイルに収まっていたほうが、わかりやすい気がするのでそのままTop.scalaにテスト用のメイン関数を追加してそれをsbtで選択して実行することにする。追加するテスト用のコードiotestersのインポートまずはiotestersのインポート処理から。Top.scalaの先頭のimport宣言に追加する形で、以下の宣言を追加する。次はテスト用のメイン関数を作成していく。Array[String])という関数を作るとそれがメイン関数となる。Appをミックスインすることで省略したのが、前回作ったElaborateオブジェクトとなっている。Appをミックスインしてテスト用のオブジェクトTestを作成しよう。}}テストの際の一般形は以下のようなものになる。}}これでものすごく簡単なテストは完成だ。同一のsbtプロジェクト内に複数のメイン関数が存在する状態になっているので、実行時にはrunMainを指定して実行する。前回と同様にrunのみを実行することも可能だが、その際にはsbtがElaborateとTestの2つを検出するため、どちらのメインを実行するかを聞かれるようになる。成功すると、”成功した”といってあっさり終わるので比較のためにFAILした時のログも一緒に載せておく。23:08:26テストの改良ここまでで基本的なテストの形を見たので、少しテストを改良してみよう。やることは以下の2つだ。専用のテストクラスを作成する場合にはPeekPokeTesterを継承してクラスを作成すればOKだ。${peek(c.io.out)}")}Top用のテスターを作ったので、Testオブジェクトで呼び出すテスターを作成したものに変更する。続いてテストの改良だ。作成したTopTesterはPeekPokeTesterを継承してChisel用のテスト関数が使えるだけ、通常のScalaのクラスなので、クラス内に各種関数を実装することも可能だ。いうことで関数を定義して、テストをランダム化してみよう。先ほど定義したTopTesterを以下のように変更する。100回実行されるため、最初と最後だけ抜粋。0:21:15まとめ結構長くなりましたが、まとめを。最後に今回作ったコードを全部貼っておきますので興味があれば試してみてください。技書博2にChisel本を出してきました月別アーカイブはてなブログをはじめよう!diningyo-kpuku-jougekiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。