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问题示例。real/shortreal不是位流类型,因此不能与$bits一起使用。