Мне нужно сделать некоторые вычисления во время компиляции для видеодрайвера. Когда экземпляр модуля создается, определяются параметры WIDTH и HEIGHT. Затем я вычисляю некоторые значения из них.Verilog - вычисления времени компиляции
parameter X_BLOCK = $floor(640/WIDTH);
parameter Y_BLOCK = $floor(480/HEIGHT);
parameter BLOCK = X_BLOCK < Y_BLOCK ? X_BLOCK : Y_BLOCK;
parameter X_SPAN = WIDTH * BLOCK;
parameter Y_SPAN = HEIGHT * BLOCK;
parameter X_START = $floor((640 - X_SPAN)/2);
parameter Y_START = $floor((480 - Y_SPAN)/2);
parameter X_STOP = X_START + X_SPAN;
parameter Y_STOP = Y_START + Y_SPAN;
Эти расчеты должны выполняться во время компиляции, но я получаю ошибки, что $ floor не синтезируется. Я думал, что параметры будут вычисляться во время компиляции, так почему это волнует, если он не может синтезировать $ floor?
Это может быть ограничение с вашим синтезатором. Если я правильно помню, целочисленное деление обычно округляется вниз. Вы также можете попробовать 'параметр X_BLOCK = int '(640/WIDTH);' или 'параметр int X_BLOCK = $ floor (640/WIDTH);' для получения эквивалента '$ floor' – Greg