関数
関数は function
キーワードで宣言できます。引数は ()
内に書き、戻り値の型を ->
の後に書きます。
関数が戻り値を持たない場合、->
は省略できます。
module ModuleA {
let a: logic<10> = 1;
var b: logic<10>;
function FunctionA (
a: input logic<10>,
) -> logic<10> {
return a + 1;
}
function FunctionB (
a: input logic<10>,
) {}
assign b = FunctionA(a);
initial {
FunctionB(a);
}
}
インターフェースのmodportは引数の型としても使用できます。与えられたmodportはSystemVerilog生成時にVerilogポートに展開されます。
interface InterfaceA::<W: u32> {
var ready: logic ;
var valid: logic ;
var data : logic<W>;
modport master {
ready: input ,
valid: output,
data : output,
}
modport slave {
..converse(master)
}
}
module ModuleA {
inst a_if: InterfaceA::<8>;
inst b_if: InterfaceA::<8>;
function FunctionA (
a_if: modport InterfaceA::<8>::slave ,
b_if: modport InterfaceA::<8>::master,
) {
a_if <> b_if;
}
always_comb {
FunctionA(a_if, b_if);
}
}