ハードウェアの気になるあれこれスマートフォン用の表示で見るハードウェアの気になるあれこれ技術的に興味のあることを調べて書いてくブログ。2019-09-17desiredNameを使ったChiselのモジュール名の変更ChiselスポンサーリンクChiselのモジュール名は通常宣言したクラス名がそのまま使用されるのだが、これだと問題起こりそうなケースってあるよな、、、って思っていた。そこで今回はこれに関する解決方法が無いかを調査したので紹介したい。Chiselのモジュール名desiredNameクラスパラメータを使ってモジュール名を生成Chiselのモジュール名Chiselのモジュール名は冒頭に書いたとおり、モジュール宣言時のクラス名が使用されるのが基本となる。106:10]endmoduleパラメタライズ機能を持ったモジュールクラスでは入力するパラメータによって同じクラスから複数のRTLのモジュールが生成される場合がある。この場合は”クラス名+シーケンス番号”といった形で、RTL上別モジュールとして認識されるようChiselが処理を行う。120:16]endmoduleこのような仕組みになっているため、RTL化した階層以下に同名のクラスから生成されたモジュールが複数個あってもモジュール名の衝突は起きない。desiredName前項で説明したとおりRTL化した際の最上位階層以下に含まれるモジュール間ではモジュール名の衝突が起きない仕組みではあるのだが、Chiselで作ったデザインを別のシステムに組み込むような場合に問題が起きることがある。自分が経験したのはパッケージ名違いでクラス名が異なるモジュールクラスを作成して、別々にRTL化した後にデザインに組み込んだ際に、モジュール名の衝突が発生したことがあった。このようなケースにおいてはパッケージ名をモジュール名に反映できれば解決することが出来る。いうことで、今回Chiselのソースを再度調査して見つけたのがdesiredNameメソッドだ。this.getClass.getName.split('.').last処理自体は単純で以下のようになる。取得したクラス名を"."で分けてlastで最後の要素を返却ex.)test.sub.MyModuleならlastでMyModuleが返却されるちゃんと今回の自分が考えたようなニーズに応えるためにパブリックなメソッドとして定義されているので、継承したクラス側でオーバーライドすることが可能だ。いうことで早速試してみよう。先程示したメソッドの定義のようにdesiredName自体は引数を持たないが、クラスパラメータを参照することが可能なので、それを使えばモジュール内でインスタンスするモジュール名をクラスパラメータで変更することも可能だ。27:16]endmodule上記のRTLの通りでモジュール名が指定した名前に変更されることが確認できた。これをうまいこと利用すればSeq等でN個のモジュールをパラメタライズして生成するようなケースにおいても、それぞれのモジュールにユニークなモジュール名を付与することが出来そう。技書博2にChisel本を出してきました月別アーカイブはてなブログをはじめよう!diningyo-kpuku-jougekiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。