Если у меня есть 2D-очередь целых, я бы ожидал, что смогу объявить ее встроенной, например:
int my_queue[$][$] = {{1, 2}, {3, 4}};
Я также видел
typedef int int_queue[$];
int_queue my_queue[$] = {{1, 2}, {3, 4}};
Вместо этого, когда я во время компиляции VCS выдает ошибку «Несовместимый комплексный тип»:
Type of source expression is incompatible with type of target expression.
Mismatching types cannot be used in assignments, initializations and
instantiations. The type of the target is 'int$[$][$]', while the type of
the source is 'bit[63:0]'.
. Это означает, что VCS ожидает правильного преобразования правой части уравнения. Обходной путь, который я использовал:
typedef int int_queue[$];
typedef int_queue int_queue_of_queues[$];
int_queue_of_queues my_queue = int_queue_of_queues'{{1, 2}, {3, 4}};
Но это добавляет N дополнительных typedefs и строк для N измерений, и я бы предпочел сделать это в одну строку. Если бы у меня был способ привести правую часть объявления без typedef, то это было бы просто, но я не знаю, возможно ли это.