У меня есть два обобщения для моей сущности:
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
, поскольку он используется только для вычисления других констант?