ハードウェアの気になるあれこれスマートフォン用の表示で見るハードウェアの気になるあれこれ技術的に興味のあることを調べて書いてくブログ。Verilog-HDLスポンサーリンク前回の記事ではChiselの標準ライブラリからArbiterを紹介した。www.tech-diningyo.info今日も引き続きChiselの標準ライブラリを紹介していく。今日はChiselのユーティリティブロックからいくつかのモジュールを勉強する。Chiselの標準ライブラリビット単位のユーティリティ・ブロックここではバス信号をビット単位で操作するライブラリを紹介していく。前回の最後に書いたとおり"ステートレス"な処理なので、全て組み合わせ回路で実現されることには留意しておきたい。PopCount入力したUInt型の入力を1ビットずつチェックして、0x1になっていたビットの数を返却するモジュール。}前回、前々回と同様にテスト用のドライバに直接テスト用にPopCountを使った回路を入力している。モジュールの中身はとってもシンプルで、以下の入出力の関係になっている。出力:入力のUIntデータをPopCountに入力して得られた結果また、テストではpokeを使って適当な値を入力している。ここでは2進数の文字列をInteger.parseIntを使ってInt型に変換したデータを与えるようになっている。以下が実行結果となる。PASSED見ての通りで、入力した2進数文字列の1の数がoutとして得られた。RTLに変換するとこれもモジュールなので当然RTLを生成可能だ。_T_23};endmodule回路的には単純にビット単位にデータを分解してそれぞれを足し合わせる、という回路になるようだ。そのためビット数が多い場合には注意が必要な気がする。Reverseお次はReverseだ。これは簡単に処理も推測できると思うが、そのまんまで入力したUInt型のデータをビット単位で逆にして出力するものだ。}先ほどのPopCountと同様にInteger.parseintを使って2進数文字列を整数に変換して入力している。出力はビット単位で反転しているのがわかりやすくなるようにtoBinaryStringで2進数の文字列に変換したものをそれぞれ表示している。PASSEDRTLに変換するとこちらもRTLを見ておこう。_T_39;endmoduleあんまり真面目には追ってないけど、シフトと&と|を使ってビットをずらしていってる感じ。こちらもテストのコードを見てもわかる通り、組み合わせ回路で構成される。この通りに真面目に回路にするとそれなりの段数になりそうなので、ビット幅の大きなバスで使う場合には適当なビット単位でバラして処理とかを考えたほうが良い気がする。いうことでとても駆け足ではあるが、ビット単位の操作を行うライブラリを2つ勉強した。次回もChiselの標準ライブラリを確認していくつもりで、OneHotなエンコードを行うモジュールを見ていくつもりだ。技書博2にChisel本を出してきました月別アーカイブはてなブログをはじめよう!diningyo-kpuku-jougekiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。