我的实体上有两个属相。
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
声明本身并不直接导致任何合成的逻辑。 因此,写出来的代码并没有什么效率低下的地方。