【发布时间】:2015-05-09 21:10:35
【问题描述】:
我需要在编译时为视频驱动程序做一些计算。当模块被实例化时,定义了 WIDTH 和 HEIGHT 参数。然后我从这些计算一些值。
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呢?
【问题讨论】:
-
这可能是您的合成器的限制。如果我没记错的话,整数除法通常会向下取整。您也可以尝试
parameter X_BLOCK = int'(640 / WIDTH);或parameter int X_BLOCK = $floor(640 / WIDTH);获得$floor等效项
标签: parameters system-verilog synthesis