从泛型 vhdl 中高效地派生参数

Efficiently derive parameter from generics vhdl

我的实体上有两个泛型:

clk_freq, io_delay: integer

据此,我想计算 io_delay 所需的周期数,以毫秒为单位。我还想将这个计数器值存储在一个无符号变量中,这样我就不会在整数类型上浪费大量资源。所以我实施了以下操作:

constant COUNT_MAX_I: integer := integer(ceil(real(io_delay) * 0.001 * real(clk_freq)));
constant COUNTER_WIDTH: integer := integer(ceil(log2(real(COUNT_MAX_I))));
constant COUNT_HIGH: integer := unsigned(COUNTER_WIDTH - 1 downto 0) := to_unsigned(COUNT_MAX_I, COUNTER_WIDTH);

不过,单看效率极低。所以我的问题是:

是否有更有效的方法来做到这一点,综合工具是否会摆脱 COUNT_MAX_I 因为它只用于计算其他常量?

一般来说 constant 声明本身不会直接导致任何综合逻辑。因此,编写的代码没有任何低效之处。