2

当使用typedef声明用户定义类型时, EDA Playground接受这两种形式:

typedef reg[4:0] reg5;
typedef logic[4:0] logic5;

但是,如果根据类型做类似的事情wire,那么这种格式会失败:

typedef wire[4:0] wire5;

我得到“语法错误”。

这怎么解释?

4

2 回答 2

2

根据 IEEE Std 1800-2017,typedef用类型声明 a 是非法的。wire请参阅第 6.18 节用户定义类型

type_declaration ::=                // from A.2.1.3 
typedef data_type type_identifier { variable_dimension } ;

Awire不是 a data_type,而reglogic是。Awire是一个net_type

于 2021-12-31T18:18:04.147 回答
1

Atypedef定义了可应用于网络或变量对象种类的数据类型。由于隐式定义,保持与 Verilog 的向后兼容性令人困惑。

当你看到

logic [4:0] v;

这是一个隐含的变量声明a,具有显式的 5 位 4 状态打包数组数据类型。

var logic [4:0] v;

当你看到

wire [4:0] w;

这是一个显式的a带有 5 位隐式 4 状态打包数组数据类型的网络声明。

wire logic [4:0] w;

您可以同时使用 a typedef

typedef 逻辑 [4:0] uint5;

var  uint5 v; // var can be implicit
wire uint5 w;

请注意,模块inputinout端口具有wire隐式对象类型。也是4-state 类型的同义词,reg是首选关键字。A并不总是与寄存器相关联。logiclogicreg

于 2021-12-31T21:20:28.813 回答