Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
System verilog 参数化接口的合法语法_System Verilog - Fatal编程技术网

System verilog 参数化接口的合法语法

System verilog 参数化接口的合法语法,system-verilog,System Verilog,我有一个参数化接口的接口定义,如下所示: interface A#(parameter adr=64,parameter data=128,parameter enable=1)(input clk, input rst); endinterface 现在,我可以申报类似的东西吗?这合法吗 A#(,,0) A0(clk,rst); 我在1800-2012 SV LRM中没有发现任何此类示例,因此在联系EDA供应商之前,我想知道这种语法的合法性。一个这样的主要工具供应商工作得非常好,但另一个主

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

interface A#(parameter adr=64,parameter data=128,parameter enable=1)(input clk, input rst);
endinterface
现在,我可以申报类似的东西吗?这合法吗

A#(,,0) A0(clk,rst);
我在1800-2012 SV LRM中没有发现任何此类示例,因此在联系EDA供应商之前,我想知道这种语法的合法性。一个这样的主要工具供应商工作得非常好,但另一个主要供应商对此表示不满——具体错误是
近“,”:语法错误,意外“,”。我不知道这是否合法。两个模拟器拒绝了它,一个没有(可能和你一样)。但你可以

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

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

A #(0) a (.clk, .rst);
ii)使用命名映射:


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

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

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

A #(0) a (.clk, .rst);
ii)使用命名映射:


不能跳过有序列表中的参数替代。根据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_表达式在参数列表中不是可选的,但在端口连接列表中表达式是可选的。

您不能跳过有序列表中的参数重写。根据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_表达式在参数列表中不是可选的,但在端口连接列表中表达式是可选的。

命名映射肯定是一种方法:有序映射是一种错误happen@nguthrie这对于IO来说当然是正确的,对于参数来说当然更好。你为什么不呢?没有一个项目因为打字时间太长而迟到。也许有些人必须按角色付费?或者他们在@nguthrie Named中竞争可能是一条路,但是当您在处理具有数千个声明和不同位置的遗留代码以及项目更改EDA工具时,我更感兴趣的是了解为什么有些东西过去可以工作,而现在却不能,而不是执行sed并替换为命名映射(duh!)。也许“有些人”不会真正满意,除非他们知道原因,而不是在互联网上听到所谓的诙谐评论。谢谢@MatthewTaylor显然,如果我从头开始编写代码,我会坚持命名映射。我只是好奇为什么有些东西过去能工作,现在却不能了,所以我想知道,一个EDA工具是否比另一个更严格地遵循LRM。命名映射肯定是一条路要走:有序映射是一个等待的错误happen@nguthrie这对于IO来说当然是正确的,对于参数来说当然更好。你为什么不呢?没有一个项目因为打字时间太长而迟到。也许有些人必须按角色付费?或者他们在@nguthrie Named中竞争可能是一条路,但是当您在处理具有数千个声明和不同位置的遗留代码以及项目更改EDA工具时,我更感兴趣的是了解为什么有些东西过去可以工作,而现在却不能,而不是执行sed并替换为命名映射(duh!)。也许“有些人”不会真正满意,除非他们知道原因,而不是在互联网上听到所谓的诙谐评论。谢谢@MatthewTaylor显然,如果我从头开始编写代码,我会坚持命名映射。我只是好奇为什么有些东西过去可以工作,现在不行了,所以我想知道是否一个EDA工具比另一个更严格地遵循LRM。你所展示的声明肯定是非法的。你的意思是问
A#(,0)inst()是合法的,很抱歉。我想强调的是连续的(,)。我现在编辑了我的问题。你的陈述绝对是非法的。你的意思是问
A#(,0)inst()是合法的,很抱歉。我想强调的是连续的(,)。我现在编辑了我的问题。谢谢戴夫!你能解释一下BNF吗?这是我第一次听到它。LRM的附录A定义了中可接受的语法。如果不能在BNF中加以压制,那么它是不合法的。然而,事实并非如此;并非所有被接受的语法都是合法的。谢谢Dave!你能解释一下BNF吗?这是我第一次听到它。LRM的附录A定义了中可接受的语法。如果不能在BNF中加以压制,那么它是不合法的。然而,事实并非如此;并非所有公认的语法都是合法的。