繁体   English   中英

系统 Verilog 中基于参数的 typedef

[英]parameter based typedef in system Verilog

我想在 System Verilog 中参数化 typedef 结构。

例如,代替 8 位和 16 位复杂数据的单独定义,我可以为复杂数据类型参数化 typedef 吗?

typedef struct {logic [7:0] i, q;} complex_datatype_8b;
typedef struct {logic [15:0] i, q;} complex_datatype_16b;

没有参数化的 typedef 构造,但是您可以将参数化的 typedef 作为参数化模块、接口、类等的一部分...

module mod #(int A = 1, int B = 1)();
  typedef struct packed {logic [A-1:0] i, q;} t1;
  typedef struct packed {logic [B-1:0] i, q;} t2;
  ...
endmodule

在测试平台中表达参数化类型定义的典型方法是使用类:

class cl #(parameter C = 1);
  typedef struct packed {logic [C-1:0] i, q;} tp;
endclass

module mod1();
  cl#(7)::tp t;
  ..
endmodule

实际上,您可以使用任何参数来代替 typedef 中的常量。

参数化 typedef 是不可能的,但我们需要做一些调整以达到类似的结果。 这里我们使用宏。

    `define MY_STRUCT_STAGE(NAME) \
       my_struct_t_``NAME``
     
    `define MY_STRUCT_STAGE_DEFINE(NAME, CNTR_TBL_ADDR_W, CNTR_TBL_DATA_W) \
     typedef struct { \
                     logic [CNTR_TBL_ADDR_W-1``:0] address; \
                     logic [CNTR_TBL_DATA_W-1:0] data; \
        } `MY_STRUCT_STAGE(NAME)

module module_struct #(parameter int ADDR = 3, parameter int DATA=2);
  `MY_STRUCT_STAGE_DEFINE(struct1,ADDR,DATA)
  `MY_STRUCT_STAGE(struct1)
endmodule

module top ();
  module_struct ms1(); // by default ADDR = 3 and DATA=2 with this structure is created
  module_struct #(5,6) ms2(); // struct is created with ADDR=5 and DATA=6
endmodule

我参考了 - https://verificationacademy.com/forums/systemverilog/parameterized-struct-systemverilog-design post

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM