在模块声明中选择接口参数
choose interface parameters in module declaration
假设我有一个参数化接口,例如
interface Foo;
parameter WIDTH=8;
logic [WIDTH-1:0]data;
endinterface
现在我想在模块中使用宽度为(比方说)16 的这些接口之一。我怎样才能做到这一点?我试过了
module foo(Foo #(.WIDTH(16)) in, output logic [15:0]out);
assign out=in.data;
endmodule
但出现错误:
Error (10170): Verilog HDL syntax error at test.sv(6) near text "#"; expecting ")"
当前的 SystemVerilog 语法 BNF 不允许您指定接口端口的参数特化。它将从连接到端口
的实例获取参数化
module foo(Foo in, output logic [in.WIDTH-1:0] out);
assign out = in.data;
endmodule
interface Foo #(
parameter WIDTH=8
);
logic [WIDTH-1:0]data;
endinterface : Foo
module top;
Foo#(.WIDTH(16)) f();
logic [15:0] o;
foo dut(f,o);
endmodule : top
您可以对特定参数化进行详细检查,如果检查失败,将产生编译错误
module foo(Foo in, output logic [in.WIDTH-1:0] out);
if (in.WIDTH != 16) $error("Width not 16");
assign out = in.data;
endmodule
上面的if
语句不是过程语句,是generate-if
块
假设我有一个参数化接口,例如
interface Foo;
parameter WIDTH=8;
logic [WIDTH-1:0]data;
endinterface
现在我想在模块中使用宽度为(比方说)16 的这些接口之一。我怎样才能做到这一点?我试过了
module foo(Foo #(.WIDTH(16)) in, output logic [15:0]out);
assign out=in.data;
endmodule
但出现错误:
Error (10170): Verilog HDL syntax error at test.sv(6) near text "#"; expecting ")"
当前的 SystemVerilog 语法 BNF 不允许您指定接口端口的参数特化。它将从连接到端口
的实例获取参数化module foo(Foo in, output logic [in.WIDTH-1:0] out);
assign out = in.data;
endmodule
interface Foo #(
parameter WIDTH=8
);
logic [WIDTH-1:0]data;
endinterface : Foo
module top;
Foo#(.WIDTH(16)) f();
logic [15:0] o;
foo dut(f,o);
endmodule : top
您可以对特定参数化进行详细检查,如果检查失败,将产生编译错误
module foo(Foo in, output logic [in.WIDTH-1:0] out);
if (in.WIDTH != 16) $error("Width not 16");
assign out = in.data;
endmodule
上面的if
语句不是过程语句,是generate-if
块