2017-07-05 2 views
1

AがインスタンスであるBモジュールがあるとします。これらのポート名の問題はBlackBoxに定義されています

class B extends Module { 
    … 
    val u_A = Module(new A) 
    // the way to hook u_A’s port is the issue 
} 

Aモジュールの説明:

class A extends Module { 
    val io = IO(new Bundle{ 
    val a = Output(Bool()) 
    }) 
    io.a := true.B 
} 

AのBlackBoxの宣言:あなたはIO_の接頭辞でBlackBoxの中でポート名を定義しなければならない

class A extends BlackBox { 
    val io = IO(new Bundle{ 
    val io_a = Output(Bool()) // HAVE to define port name with io_* prefix otherwise ... 
    }) 
} 

そうでない場合に生成されたポートリストB RTLはAモジュールと一致しません。 は、モジュールのインスタンス化のため、u_Aのポートをフックする方法はBlackBoxのインスタンス化のための

u_A.io.a 

で、u_Aのポートをフックする方法は

u_A.io.io_a 

は、あなたがより多くな便利があるかどうかについて教えてENLIGHTでしたです方法?

答えて

1

BlackBoxとモジュール間のミスマッチは、ChiselデザイナーがVerilogをほとんど制御できないVerilog IPとの統合性向上のためのレガシーAPIです。私たちは、接頭辞を落とすような「目に見えない」バンドルを扱うための、より明示的で構造化された方法について考えています。

質問にお答えするには、より便利な方法があります。モジュールの内部でIO(...)を複数回使用してポートを作成できる「マルチIOモジュール」と呼ばれるものを試しています。ここには実際にその機能は必要ありませんが、​​の代わりにchisel3.experimental.ExtModuleが表示されます。 ExtModuleはプレフィックスを静かにドロップしないので、​​の代わりに拡張に切り替えると、望ましい動作が得られます。

+0

私はchisel3.experimentalがこれらの新しい実験のパッケージだと頼むことがありますか? –

+0

はい、私たちは 'chisel3.experimental'に新機能を追加し、変更の対象となる新しいAPIを導入していることを明確にしています。これらのAPIを変更するつもりはない* – jkoenig

関連する問題