参数化接口的法律语法

时间:2018-06-06 22:11:18

标签: system-verilog

我有一个参数化界面的接口定义,如下所示:

window.onunload

现在,我能宣布一些类似的东西吗?这合法吗?

interface A#(parameter adr=64,parameter data=128,parameter enable=1)(input clk, input rst);
endinterface

我在1800-2012 SV LRM中没有找到任何这样的例子,所以在我联系EDA供应商之前,我想知道这种语法的合法性。一个这样的主要工具供应商工作得很好,但另一个主要供应商抱怨这个 - 错误具体 靠近“,”:语法错误,意外','。

2 个答案:

答案 0 :(得分:2)

我不知道它是否合法。两个模拟器拒绝它,一个没有(可能和你一样)。但你可以

i)重新排列参数的顺序:

interface A#(parameter enable=1, parameter adr=64,parameter data=128)(input clk, input rst);
endinterface

A #(0) a (.clk, .rst);

ii)使用命名映射

A #(.enable(0)) a (.clk, .rst);

答案 1 :(得分:1)

您不能跳过有序列表中的参数覆盖。根据BNF,这是非法语法:

list_of_parameter_assignments ::=
    ordered_parameter_assignment { , ordered_parameter_assignment }
  | named_parameter_assignment { , named_parameter_assignment }
ordered_parameter_assignment ::= param_expression

将此与端口连接的有序列表进行对比:

list_of_port_connections29 ::=
    ordered_port_connection { , ordered_port_connection }
  | named_port_connection { , named_port_connection }
ordered_port_connection ::= { attribute_instance } [ expression ]

param_expression在参数列表中不是可选的,但在端口连接列表中表达式是可选的。