ハードウェアの気になるあれこれスマートフォン用の表示で見るハードウェアの気になるあれこれ技術的に興味のあることを調べて書いてくブログ。2019-09-15MultiIOModuleを使ったデバッグ用ポートについての作成Chiselスポンサーリンク今回はデバッグ用にポートを作る場合の方法について、今の時点の知識で考えなおしてみた。案1:traitにしといてMix-in(結果→失敗でした)もう少し粘ってみる案2:ポートのビット幅0にして最適化で消してもらう(こちらは成功)案1:traitにしといてMix-in(結果→失敗でした)以下の様にMultiIOModuleを使うことでMix-in出来るかと思ったけど、無理だった。以下のようにMix-inでポートを足したかった。}}コメントに書いたとおりでBundleを継承したクラス内で、デバッグ用のポートを宣言してその中でIOに包んだポートを作成してしまおうとした。これが出来ればモジュール生成時にデバッグ用のパラメータを見てデバッグ論理をインスタンスできそうなんだけど。記載した通りでこれはChiselの仕組み上、うまく行かなくて以下の様に2つのエラーが発生する。21:06:17ひとつは「Bundle内ではIOを使うことが出来ないということ」で、もうひとつは「Moduleの派生クラスにBundleを継承したクラスはミックスイン出来ない」ということだ。粘ってみるふと思ったけどBundleを継承する必要無い気がした。いうことで素のtraitにして再トライ。}}以下がエラボレートの際のログ。10:28:10おっ、通った!!でもこれならMix-inする必要ないわ。いうことで、debugで囲ってデバッグ用のポートはベタ書きにする。}}ところが、上記にするとポートの名前が拾えなくてエラーになる。10:46:26どうもif文でくくったため、名前が維持できずにエラーになっている様子。@chiselName入れても結果は一緒。DebugWithMultiIOModule@0案2:ポートのビット幅0にして最適化で消してもらう(こちらは成功)デバッグポートは以下のようにビット幅0にしとくと接続の記述だけにすることが出来る。q.io.count}上記のようにするとFIRRTLの最適化のタイミングで、ポートのビット幅が0のポートは削除されるのでif式を使った記述にしなくても良くなる。以下は実際にdebugの信号を切り替えて試してみたFIRRTLの結果。iotesters.Driverでtreadleを使ってシミュレーションを行うと"<モジュール名>.fir"と"<モジュール名>.lo.fir"の2つのファイルが作成されていて、"*.lo.fir"が最適化&展開済みのFIRRTL記述となっている。この"*.lo.fir"はほぼVerilog-HDLのRTLと一対一対応するレベルで、こちらからはデバッグ用のポートが消えているのが確認できた。32:17:@64.4]ということで、すこし半端だけどデバッグ用のポートについてはOption型(ここではSomeのこと)を使うよりはビット幅0にしたほうが、余計なif式のブロックやgetを使ったアクセス等が消えるし、RTL的にも接頭辞がdbg_になるしでコード的にもすっきりしていいと思ったという話でした。技書博2にChisel本を出してきました月別アーカイブはてなブログをはじめよう!diningyo-kpuku-jougekiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。