как получить размер параметра / числа в битах? - PullRequest
0 голосов
/ 30 марта 2020

Я хочу создать массив в Verilog с размером, основанным на ряде параметров. Я пробовал этот код в ModelSim, но я получил следующую ошибку:

Значение параметра должно быть постоянным.

localparam a = 250;
localparam b = 480;
localparam m = a * 100 / (b * 2);
localparam s = $bits(2 * m);

Ответы [ 2 ]

1 голос
/ 31 марта 2020

Чтобы рассчитать количество битов, необходимых для хранения значения в verilog, вы можете использовать функцию $clog2. что-то вроде следующего обеспечит количество бит для 2 * m. Единственное предостережение, когда m == 0. Вам нужен хотя бы один бит для хранения 0.

localparam s = m == 0 ? 1 : $clog2(2 * m);
0 голосов
/ 31 марта 2020

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

module top;
   localparam a  = 250;
   localparam b      = 480;
   localparam m      = a * 100 / (b * 2);
   localparam s      = $bits(2 * m);
endmodule

vlog file.v

$bits не определено в Verilog, поэтому компилятор считает, что это определенная пользователем функция времени выполнения. Вы не получите эту ошибку, если вы измените расширение файла на .sv.

...