Икар не знает, как анализировать массивы localparam?

Я использую v10 Icarus Verilog, Windows 8.1 и у меня возникают проблемы при компиляции 1D-массивов, например:

localparam [15:0] A[0:5]  = {
    0,
    10920, 
    21840,
    32760,
    43680,
    54600
};

или 2D массив, например:

localparam [1:0] B[0:5][0:2] = {
    {2'b00, 2'b10, 2'b01},
    {2'b10, 2'b00, 2'b01},
    {2'b10, 2'b01, 2'b00},
    {2'b00, 2'b01, 2'b10},
    {2'b01, 2'b00, 2'b10},
    {2'b01, 2'b10, 2'b00}
};

Когда я пытаюсь скомпилировать это с помощью iverilog внутри командной строки, как: iverilog -o tb.vvp ".v files here" Я получаю следующие ошибки:

tb.v:39: syntax error
tb.v:39: error: syntax error localparam list.
tb.v:54: syntax error
tb.v:54: error: syntax error localparam list.

Строки 39 и 54 - это линии, в которых расположены два верхних массива.

Что не так и как я могу исправить эту нелепую ошибку?

1 ответ

Решение

Verilog не поддерживает распакованные массивные параметры / локальные параметры; SystemVerilog делает. Увидеть:

Icarus Verilog (iverilog) имеет ограниченную поддержку SystemVerilog. В настоящее время EDAplayground включает Icarus Verilog 0.10.0 от 23.11.14, который не поддерживает распакованные массивные параметры с включенным SystemVerilog. Вы можете попробовать последнюю версию Icarus. Включите SystemVerilog, изменив исчезновение файлов из .v в .sv Вам может понадобиться добавить -g2012 опция компиляции.

Если это не сработает, вам нужно будет преобразовать массив в большой вектор. Вы можете нарезать массив с помощью +: оператор (добавлен в Verilog 2001 и поддерживается с помощью Icarus Verilog. См. Индексирование векторов и массивов с помощью +:). Или перейдите на другой симулятор, который поддерживает SystemVerilog.

Другие вопросы по тегам