在SystemVerilog中有没有办法分析打包结构并确定它的总体大小?
typedef struct packed unsigned {
logic [15:0] field_1;
logic [7:0] field_2;
logic [15:0] field_3;
logic [4:0] field_4;
} my_struct;
例如,我希望能够以程序化的方式确定上述结构的大小为45。
我查看了IEEE 1800-2012 SystemVerilog Language Reference Manual的“聚合数据类型”部分(第7章),但没有看到这样的内容。
这可能吗?如果是这样,怎么样?
使用来自$bits()
的IEEE 1800-2012§20.6.2表达式大小系统函数:
$bits
系统函数返回将表达式保存为位流所需的位数。
来自LRM的直接示例:
......鉴于声明:
typedef struct { logic valid; bit [8:1] data; } MyType;
表达式
$bits(MyType)
应返回9,即MyType类型变量所需的数据位数。