上記の例では、インターフェイス内の信号が入力または出力として記述されなくなっています。インターフェイスが追加される前は、sel
ポートが bottom1
の出力および bottom2
の入力でした。
インターフェイスが追加されると、それが明確ではなくなります。実際、Vivado 合成エンジンではこれらが双方向ポートと考慮されるようになったことに対して警告メッセージは表示されず、階層を使用して生成されたネットリストではこれらが inouts
として定義されます。これは、生成されたロジックの観点からは問題ではありませんが、混乱の原因となります。
方向を指定するには、次のコード例に示すように modport
キーワードを使用します。
interface my_int;
logic sel;
logic [9:0] data1, data2, result;
modport b1 (input result, output sel, data1, data2);
modport b2 (input sel, data1, data2, output result);
endinterface : my_int
bottom モジュールの宣言に次を使用します。
module bottom1 (
my_int.b1 int1,
これで、入力と出力が正しく関連付けられます。