Я пытаюсь перенести некоторый код 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 это похоже на попытку проиндексировать целочисленный тип с логическим значением. Во втором это похоже на попытку проиндексировать целочисленный тип перечислимым значением. Тем не менее, этот код, по-видимому, работает. Может кто-нибудь объяснить, что он делает?
true
? - person dwikle   schedule 11.12.2012