Types 将结构转换为位数组:位流类型错误

Types 将结构转换为位数组:位流类型错误,types,casting,system-verilog,bitstream,Types,Casting,System Verilog,Bitstream,在systemverilog LRM中,有一个示例代码来解释强制转换。 当我尝试这段代码时,出现了一个错误 typedef struct { bit isfloat; union { int i; shortreal f; } n; // anonymous type } tagged_st; // named structure typedef bit [$bits(tagged_st) - 1 : 0] tagbits; tagged_st a [7:0]; // unpack

systemverilog LRM
中,有一个示例代码来解释强制转换。 当我尝试这段代码时,出现了一个错误

typedef struct {
   bit isfloat;
   union { int i; shortreal f; } n; // anonymous type
} tagged_st; // named structure

typedef bit [$bits(tagged_st) - 1 : 0] tagbits;
tagged_st a [7:0]; // unpacked array of structures
tagbits t = tagbits'(a[3]); / convert structure to array of bits
a[4] = tagged_st'(t); // convert array of bits back to structure
  • 首先,对于
    $bits()
    函数,编译器说
    系统函数调用的参数不是位流类型。
  • 第二,当为
    a[3]
    分配类型转换为
    tagbits
    时,它表示
    位流转换的目标源不是位流类型的

    我的理解是,结构和解包数组也是位流类型。
    希望知道我遗漏了什么。
    (cadence 18.09-006)
未打包的联合不是位流类型。来自LRM

默认情况下,联合是未打包的,这意味着不需要 表示如何存储工会成员


这意味着您无法知道表示了多少位

是的,在LRM中,有您的答案,但在上面的示例中,也有描述“以位为单位的联合的大小是其最大成员的大小”。这是一个报告的LRM问题示例。real/shortreal不是位流类型,因此不能与$bits一起使用。