他言語組み込み
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");