从泛型 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
声明本身不会直接导致任何综合逻辑。因此,编写的代码没有任何低效之处。
我的实体上有两个泛型:
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
声明本身不会直接导致任何综合逻辑。因此,编写的代码没有任何低效之处。