Массив параметров в системверилоге - PullRequest
0 голосов
/ 26 сентября 2019

Я пытаюсь создать экземпляр массива параметров, например,

module top();
    parameter array_size = 10;
    parameter par_array [array_size] = '{array_size{12}};

    initial begin
        $display("%d",par_array[array_size-1]);
    end
endmodule

Но когда я пытаюсь скомпилировать этот модуль в questasim, я получаю такую ​​ошибку

- Компиляцияверхняя часть модуля ** Ошибка: (vlog-13069) parameters_array.sv (3): рядом с "[": синтаксическая ошибка, неожиданный '[', ожидающий ';'или ','.

Поиск по этой теме привел меня к теме , следующей за , и ответчик сказал, что systemverilog допускает такую ​​конструкцию.
Я действительно не могуЯ хочу использовать длинный параметр вектора, потому что это приводит к новым трудностям, и эта конструкция компилируется в Vivado (но для проверки мне нужно использовать Questa).

Ответы [ 3 ]

0 голосов
/ 27 сентября 2019

Попробуйте определить тип динамического массива где-нибудь:

typedef int int_arr_t[];

Затем используйте новый тип определения в вашем модуле

module #(parameter array_size =12,
                  parameter int_arr_t par_array = '{array_size{12}})
0 голосов
/ 27 сентября 2019

Для параметра распакованного массива требуется тип данных.

parameter int par_array [array_size] = '{array_size{12}};

Без указания типа данных и диапазона можно указывать только простой интегральный параметр.

Сделайте себе одолжение и никогда не полагайтесьна неявных типах данных в любом месте.

0 голосов
/ 26 сентября 2019
Массивы параметров

поддерживаются только в system verilog.Итак, убедитесь, что вы компилируете в режиме системного verilog (расширение файла .sv или любые другие квалификаторы, которые вам нужны).

Также вам лучше сделать int в вашем случае:

parameter int par_array [array_size] = '{array_size{12}};`
----------^^^
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...