簡體   English   中英

編譯錯誤,還是對SystemVerilog的誤解? 未聲明的端口類型適用於模擬

[英]Compiler bug, or misunderstanding of SystemVerilog? Undeclared port type works in simulation

我有一個帶有許多input logicoutput logic端口的模塊,以及一個應該input foo::bar端口,其中foo是一個包,bar是一個枚舉。 但是,我沒有input ,所以它只是簡單的foo::bar 然而,它仍然可用於模擬(測試通過,您可以在波形上看到值正在正確傳輸)。

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 | wor supply0 | supply1 | tri | triand | trior | tri0 | tri1 | wire | wand | wor supply0 | supply1 | tri | triand | trior | tri0 | tri1 | wire | wand | wortri ,這不是那些。

它可以是interface_port_dec嗎? 好吧, interface_identifier ::= identifierenum_identifier ::= identifier 但是,確定:=不是對稱和傳遞的,所以interface_identifier := enum_identifier不是這樣。

我在這里錯過了什么?

它開始定義為inout

請參閱IEEE Std1800-2012§23.2.2.3確定端口類型,數據類型和方向的規則

對於端口列表中的第一個端口:
- 如果省略了方向,端口類型和數據類型,則應假定端口是非ANSI樣式list_of_ports的成員,並且應在端口列表之后聲明端口方向和類型聲明。
除此以外:
- 如果省略方向,則默認為inout。
- 如果省略端口類型,則應按以下規定確定。
- 如果省略數據類型,除了沒有數據類型的互連端口外,它應默認為邏輯。

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

對於端口列表中的后續端口:
- 如果省略了方向,端口類型和數據類型,則它們應從前一個端口繼承。 如果以前的端口是互連端口,則此端口也應是互連端口。
除此以外:
- 如果省略方向,則應從前一個端口繼承。
- 如果省略端口類型,則應按上述規定確定。
- 如果省略數據類型,除了沒有數據類型的互連端口外,它應默認為邏輯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM