Икар не знает, как анализировать массивы 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 делает. Увидеть:
- Как инициализировать параметризованный параметр массива, используя цикл / генерировать в Verilog?
- Как инициализировать массив параметров в Verilog?
Icarus Verilog (iverilog) имеет ограниченную поддержку SystemVerilog. В настоящее время EDAplayground включает Icarus Verilog 0.10.0 от 23.11.14, который не поддерживает распакованные массивные параметры с включенным SystemVerilog. Вы можете попробовать последнюю версию Icarus. Включите SystemVerilog, изменив исчезновение файлов из .v
в .sv
Вам может понадобиться добавить -g2012
опция компиляции.
Если это не сработает, вам нужно будет преобразовать массив в большой вектор. Вы можете нарезать массив с помощью +:
оператор (добавлен в Verilog 2001 и поддерживается с помощью Icarus Verilog. См. Индексирование векторов и массивов с помощью +:). Или перейдите на другой симулятор, который поддерживает SystemVerilog.