ハードウェアの気になるあれこれスマートフォン用の表示で見るハードウェアの気になるあれこれ技術的に興味のあることを調べて書いてくブログ。Verilog-HDLスポンサーリンク前回の記事ではChiselの標準ライブラリに含まれているビット単位の操作を行うブロックをを紹介した。www.tech-diningyo.info今日はChiselからOneHotエンコードのユーティリティを勉強していく。Chiselの標準ライブラリOneHotエンコード・ユーティリティ・ブロックChiselには以下のOneHotデータに関するライブラリが用意されている。OneHotなデータをUInt型に変換UIntToOH早速例を見ていこう。}これまでChiselの標準ライブラリを紹介して来た中で紹介したものしか使われていないので、特に書くこともない。上記を実行すると以下の出力が得られる。PASSEDテスト中のprintlnで出力されている部分を見るとわかると思うが、それぞれpokeを使って入力したUIntのデータがOneHotなデータに変換されているのがわかると思う。生成されるRTLなお、この回路をRTL化すると以下の様になる。_T_10;endmodule、、、まあ、ものすごくシンプルで、そうなるよね。これ使うんなら、ビット幅はパラメタライズして使うかな、多分。Chiselのソースコードこれだけじゃなんだかなぁ。いう気もするので、実際のChiselのソースコードを確認してみよう。}}newが不要だから、そうなんだろうなとは思っていたが、これもobjectで作れられているのね。あと、実はインスタンス時に第二引数でビット幅が指定できるようになってた。所望のビット幅入れとくとそこで切り詰めてくれるみたい。3)にして実行すると以下の様にテストの出力が変わる。PASSEDOHToUInt続いて、OHToUIntだ。これは機能的にはUIntToOHの逆方向なので、サンプルコードで使われるテストも先ほどのテストコードをちょうどひっくり返したようなものになる。}ちょっと異なっているのは、「入力の信号がOneHotじゃ無いものが含まれていた場合にどうなるか」という部分についてを確認するコードが含まれているところか。これを実行すると以下の様になる。PASSEDOneHotじゃ無いデータが来た時の挙動だけ抜粋しておこう。場合:出力は"0"になる複数のビットが0x1の場合:出力はMSB側のビットが優先される一応RTLを確認してみよう。こんな出力が得られた。2のべき乗単位で分解したデータを評価して、重み持たせてる感じ。_T_27;endmoduleChiselのソースコードこちらも実際のChiselのソースコードを確認してみよう。再帰呼出し使って計算するのか。ほんとにこのコードがそのままRTLに変換されてるってことか。}}こっちはapplyが4つもある。バリエーションは以下の通り。Bits):これがサンプルコードで見た使い方。ビット幅も計算してよしなにやってくれる。UIntToOHの場合と同様にビット幅で切り詰め。入力がBool型で構成されたSeqでもOK。Seqの場合は値がひっくり返る模様。まあイメージ的にも合ってるかな。入力がBool型で構成されたVecでもOK今日勉強した2つのライブラリは結構使えそうな気配。レジスタのアドレスをビットマップにするとか、その逆も。いうことで今日はここまで。次はMuxを見ていく。技書博2にChisel本を出してきました月別アーカイブはてなブログをはじめよう!diningyo-kpuku-jougekiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。