【问题标题】:Using typedef with wire in SystemVerilog在 SystemVerilog 中使用带有线的 typedef
【发布时间】:2021-12-31 18:01:00
【问题描述】:

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

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

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

typedef wire[4:0] wire5;

我收到“语法错误”。

这怎么解释?

【问题讨论】:

    标签: verilog typedef system-verilog edaplayground


    【解决方案1】:

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

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

    wire 不是data_type,而reg 和logic 是。 wire 是 net_type。

    【讨论】:

      【解决方案2】:

      typedef 定义了一个数据类型,可以应用于网络或可变对象种类。由于隐式定义,要保持与 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;
      

      您可以同时使用typedef:

      typedef 逻辑 [4:0] uint5;

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

      请注意,模块 input 和 inout 端口将 wire 作为隐式对象类型。 reg 和 logic 也是 4-state 类型的同义词,logic 是首选关键字。 reg 并不总是与 register 相关联。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-09
        • 2020-03-21
        • 1970-01-01
        • 1970-01-01
        • 2022-08-03
        • 1970-01-01
        相关资源
        最近更新 更多