[英]Compiler bug, or misunderstanding of SystemVerilog? Undeclared port type works in simulation
我有一個帶有許多input logic
和output 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_trireg
是supply0 | 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 | wor
或tri
,這不是那些。
它可以是interface_port_dec嗎? 好吧, interface_identifier ::= identifier
和enum_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.