在 Quartus Prime 的 SystemVerilog 中使用 $ceil 定义参数

Using $ceil to define a parameter in SystemVerilog in Quartus Prime

正在尝试这样做

parameter integer PRECHARGE_CLOCKS = $ceil(PRECHARGE_NS / CLOCK_PERIOD_NS);

然后在比较中使用该值

if(InitPrechargeCounter < PRECHARGE_CLOCKS - 1)

但是出现这个错误

Error (10174): Verilog HDL Unsupported Feature error at Ram.sv(23): system function "$ceil" is not supported for synthesis

有没有办法解决这个问题,以便我在编译时获得计算值?
使用一些不同的语言结构而不是 parameter?

试试这个:

参数整数PRECHARGE_CLOCKS = ((PRECHARGE_NS + CLOCK_PERIOD_NS -1) / CLOCK_PERIOD_NS);

它应该像 $ceil 那样四舍五入。

我最终使用以下宏解决了这个问题,这创建了 2 个额外的参数以进行四舍五入,但这是迄今为止我找到的最佳解决方案。 这不限于整数参数并且适用于实数。 我已经用 Quartus 和 Modelsim

测试过了
`define Ceil(ParamName, Expression) \
 parameter ParamName``_F = Expression;\
 parameter integer ParamName``_R = ParamName``_F;\
 parameter integer ParamName = (ParamName``_R == ParamName``_F || ParamName``_R > ParamName``_F) ? ParamName``_R : (ParamName``_R + 1);

然后代替

 parameter integer AUTOREFRESH_CLOCKS = $ceil(UTOREFRESH_NS/CLOCK_PERIOD_NS);

您将调用宏

`Ceil(AUTOREFRESH_CLOCKS, UTOREFRESH_NS/CLOCK_PERIOD_NS)

而且这不能在 Quartus 中综合并在 Modelsim 中工作