Я хочу установить размер константы для счетчика:
localparam MAX_COUNT = ((debounce_per_ms * clk_freq)) + 1;
parameter MAX_COUNT_UPPER = $rtoi($floor($log10(MAX_COUNT)/$log10(2)));
Это хорошо работает с XST (ise) и с verilator, но в Icarus у меня есть эта ошибка:
src/button_deb.v:20: error: $rtoi() is not a constant system function.
Я могу решить это, используя "целочисленный" тип:
parameter integer MAX_COUNT_UPPER = $floor($log10(MAX_COUNT)/$log10(2));
Но это дает мне предупреждение в verilator:
$ verilator -cc src/button_deb.v
%Warning-REALCVT: src/button_deb.v:20: Implicit conversion of real to integer
%Warning-REALCVT: Use "/* verilator lint_off REALCVT */" and lint_on around source to disable this message.
%Error: Exiting due to 1 warning(s)
%Error: Command Failed /usr/local/bin/verilator_bin -cc src/button_deb.v
Как вы думаете, есть ли хороший способ сделать это и обеспечить совместимость с Icarus, verilator и Xst?