我正在尝试将一些 SystemVerilog 代码移植到 C++/SystemC,并且有点卡在我看到奇怪数组索引的几行上。这是我所看到的简化版本。
typedef enum bit [2:0] {enu_red, enu_blue, enu_green} typ_enum;
typedef struct packed {
bit [3:0] field1;
bit [3:0] field2;
} typ_struct;
...
var int arr_ints[typ_struct];
var int que_ints[$];
typ_struct obj_struct;
typ_enum obj_enum;
int i = 3;
// assume all the declared variables hold valid values at this point
// also assume que_ints[i] is valid
if ((!arr_ints[obj_struct][1]) // these two lines are the problem
&& (que_ints[i][obj_struct])
)
begin
// do something
end
现在,在我移植此代码后,我得到了一些我完全理解的编译器错误,因为原始代码对我来说看起来并不完全正确。在 if 语句的第一行,它看起来像是试图用布尔值索引一个整数类型。在第二个中,它看起来像是试图用枚举值索引一个整数类型。然而,这段代码显然有效。有人可以解释它在做什么吗?