ハードウェアの気になるあれこれスマートフォン用の表示で見るハードウェアの気になるあれこれ技術的に興味のあることを調べて書いてくブログ。Verilog-HDLスポンサーリンク前回の記事ではChiselの標準ライブラリに含まれているOneHotエンコードに関するブロックを紹介した。www.tech-diningyo.info今日はChiselのライブラリに用意されている2つのマルチプレクサについて見ていく。Chiselの標準ライブラリマルチプレクサChiselには以下の2つのマルチプレクサが存在している。選択信号がOneHotな信号となることが保証出来る場合に使う。OneHotが前提なのでその分生成される回路は効率のいいものになる。PriorityMux早速サンプルを見ていこう。}使い方としては、以下の様に選択用のビットマップ信号とそれに対応するVecを入れるのが基本的なものとなる。io.in_bits)今回のケースではVec[Bool]が選択用の2bitの信号で、Vec[UInt]が入力のデータとなっている。このサンプルを実行すると以下の出力が得られる。1'b1となるがインデックスの小さいほうが優先されるため、出力がout=20となっている。生成されるRTL一応RTLも確認。_T_39;endmodule前回のOHToUIntと同じような感じで2のべき乗単位で分解して選択したデータの論理和を取っていく感じの模様。Chiselのソースコードソースコードはどうなっているのかも勉強がてら確認。in)}前回のUIntToOHなどと一緒で複数のapplyが定義されている。Vec[Uint])のような組み合わせを入れることも可能なようだ。(TになってるのでChiselのDataであればUIntの部分に適用可能はず)Mux1Hこちらもまずはサンプルをチェック。}こちらは冒頭に書いたとおり、選択用の信号はOneHotであることが前提となっている。そのため、エラーケースに相当する複数ビットが1'b1になっているケースもテストが実行されている。これを実行すると以下の出力が得られる。PASSED結果として見ておくべきなのは後半2つのテストケースだと思う。選択信号が"0"の場合は出力が0になる。複数ビットが立った場合は1'b1となったビットを足し合わせたものになる??生成されるRTL先のエラーケース時の挙動が回路的にどうなっているのかは認識しておきたいのでRTLも見てみよう。エラーケースではあるので本来は上位層でそのような信号が入力されないようにケアをするべきではあるんだけどね。_T_40;endmoduleなるほど、足すは足すでも”論理和”になるということか。Chiselのソースコードソースコードはどうなっているのかも勉強がてら確認。in).orR}こちらは更に一つapplyが増えて4つになっている。選択信号とデータの論理積とって1bitにしたものが戻る、、でいいのか??うーむ、もう少し読めるようにならんと。次回のChiselネタではCounterをサクッと見て、幕間をお終いにする予定。今日は久しぶりにChisel-Bootcamp。技書博2にChisel本を出してきました月別アーカイブはてなブログをはじめよう!diningyo-kpuku-jougekiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。