Icarus не умеет анализировать массивы localparam?

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

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 — это строки, в которых расположены два верхних массива.

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


person user1806687    schedule 02.06.2017    source источник


Ответы (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.

person Greg    schedule 02.06.2017