ハードウェアの気になるあれこれスマートフォン用の表示で見るハードウェアの気になるあれこれ技術的に興味のあることを調べて書いてくブログ。BootcampのModule2.3に入りChiselのwhen/elsewhen/otherwiseについて勉強した。www.tech-diningyo.info今日からは引き続きModule2.3を進めていくが、今日扱うのChiselのWireについてだ。前回の記事で扱ったwhenは”評価時に値を返さない”と書いた。今回出てくるChiselのWireはこの問題に対しての方法の一つとして存在している。Wireは:=を使った接続の際の左辺/右辺のどちらに使ってもよいものとして定義されている。いう風に書いてあるのだが、いまいちピンとこないのでとりあえず早速例を見ていこうWireを使った4つの入力のソート作るものは簡単で4つの入力をソートするモジュールになる。丁寧に図が付いているのでそれも使わせていただいた。以下のように4つの入力が出力される際にソートされるように並べ替える必要がある。図中の線の色は以下の意味を持っている。赤の線:左の値が小さい黒の線:左の値が大きいので、値がスワップされるこれをChiselで実装すると以下のようになる。Sort4))そうか、これまで使ってたのはScalaのvalだった。初期化は出来ても代入が出来ないので今回みたいな処理が出来ないんだ。こないと書いたけどやっと理解できた。上記のコードを実行すると以下のような結果が得られる。単純なassign文ChiselのWire:assign文に3項演算子使って選択した信号を入れるようなケースってくらいの認識でとりあえず大丈夫そう。この辺はどっかのタイミングでVerilog→Chiselの比較表みたいのを作ってみて把握するのが良いかな。テストモジュールの書き換えこのWireのトピックの最後は”この4入力のソートモジュールのテストに使ったテスターはもっといい感じに書き換えれるよ”という話題で締めくくられている。その”いい感じ”のテスターを作るにはScalaのListを使って以下のように書くそうだ。passed!確かに、、、だいぶシンプルになっている。流れとしては、以下の感じ。4までを要素に持つListを作成Listのpermutationsメソッド使ってListの要素を元に順列作ってIteratorを返却permutationsメソッドの詳細については以下のリンクを参照https://www.scala-lang.org/api/2.12.3/scala/collection/immutable/List.html#permutations:Iterator[Repr]2.のIteratorがforeachにわたって、Listのデータがi0-i3にマッピングされるi0-i3をpokeに渡してテスト実行モジュールの機能がソートなので、テストは固定値でOKこういうテストの作り方が出来ると、総当りのテストとかも簡単に作れるのでいいですな。総当りじゃなくても、テストの入力データ&期待値を作っといてそれをループで処理することも出来るし。Module2.3の学習自体はこれで終わりで、残りは練習問題となる。それは次の記事で行うことにして、今日はここまで。ChiselのArbiter前回の記事ではChiselの標準ライブラリからQueueを紹介した。技書博2にChisel本を出してきました月別アーカイブはてなブログをはじめよう!diningyo-kpuku-jougekiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。