编译错误,还是对SystemVerilog的误解?未声明的端口类型适用于模拟

时间:2013-09-10 10:18:06

标签: hardware system-verilog hdl

我有一个包含多个input logicoutput logic端口的模块,以及一个应该是input foo::bar的端口,其中foo是一个包,bar是一个枚举。但是,我离开了input,所以它只是foo::bar。然而,它仍然可用于模拟(测试通过,您可以在波形上看到值正在正确传输)。

the LRM开始,我们有:

inout_declaration ::= 
  inout port_type list_of_port_identifiers 
input_declaration ::= 
  input port_type list_of_port_identifiers 
  | input data_type list_of_variable_identifiers 
output_declaration ::= 
  output port_type list_of_port_identifiers 
  | output data_type list_of_variable_port_identifiers 
interface_port_declaration ::= 
  interface_identifier list_of_interface_identifiers 
  | interface_identifier . modport_identifier list_of_interface_identifiers 
ref_declaration ::= 
  ref data_type list_of_port_identifiers 
port_type ::=  
  [ net_type_or_trireg ] [ signing ] { packed_dimension } 

显然不是inout_dec,input_dec,output_dec或ref_dec。深入了解LRM,net_type_or_triregsupply0 | supply1 | tri | triand | trior | tri0 | tri1 | wire | wand | wortri,而不是那些。

可能是interface_port_dec吗? 好吧,interface_identifier ::= identifierenum_identifier ::= identifier。但是,确定:=不是对称和传递的,所以interface_identifier := enum_identifier不是真的。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:4)

它的开头定义为inout

参见IEEE Std 1800-2012§23.2.2.3确定端口类型,数据类型和方向的规则

  

对于端口列表中的第一个端口:
   - 如果省略了方向,端口类型和数据类型,则应假定端口是非ANSI样式list_of_ports的成员,并且应在端口列表之后声明端口方向和类型声明。
  否则:
   - 如果省略方向,则默认为inout。
   - 如果省略端口类型,则应按以下规定确定。
   - 如果省略数据类型,则默认为逻辑,但没有数据类型的互连端口。

在一些例子之后的同一部分中,LRM州:

  

对于端口列表中的后续端口:
   - 如果省略了方向,端口类型和数据类型,则它们应从前一个端口继承。如果以前的端口是互连端口,则此端口也应是互连端口。
  否则:
   - 如果省略方向,则应从前一个端口继承。
   - 如果省略端口类型,则应按上述规定确定。
   - 如果省略数据类型,除了没有数据类型的互连端口外,它应默认为逻辑。