他言語組み込み
embed 宣言
embed 宣言により他言語をコードに埋め込むことができます。embed 宣言の第一引数は埋め込み方法です。以下の方法がサポートされています。
inline: コードをそのまま展開するcocotb: cocotb テストとして扱う
コードブロックは lang{{{ で始まり、}}} で終わります。以下の lang 指示子がサポートされています。
sv: SystemVerilogpy: Python
embed (inline) sv{{{
module ModuleSv;
endmodule
}}}
inline かつ sv 指定された embed 宣言はモジュール宣言、インターフェース宣言及びパッケージ宣言の中に配置することができます。これはSystemVerilogテストベンチとの統合に使用できます。
#[allow(unused_variable)]
interface bus_monitor_if {
var clk : clock ;
var ready : logic ;
var valid : logic ;
var payload: logic<8>;
embed (inline) sv{{{
clocking monitor_cb @(posedge clk);
input ready;
input valid;
input payload;
endclocking
}}}
}
Verylコード内で定義された識別子は embed コードブロック内に \{ と \} を用いて記述することができます。これらの識別子はコンパイル時に解決され、解決された名前がその場所に挿入されます。
module Module47A {}
module Module47B::<V: u32> {}
module Module47C {
inst u_a: Module47A;
embed (inline) sv{{{
bind u_a \{ Module47B::<32> \} u_b32 ();
bind u_a \{ Module47B::<64> \} u_b64 ();
}}}
}
include 宣言
include 宣言により他言語のファイルを含めることができます。include 宣言の第一引数は embed 宣言と同じです。第二引数はソースコードからの相対ファイルパスです。
include(inline, "module.sv");