Эффективно получить параметр из обобщенных VHDL - PullRequest
0 голосов
/ 01 мая 2020

У меня есть два обобщения для моей сущности:

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

1 Ответ

1 голос
/ 01 мая 2020

Вообще говоря, сами объявления constant не приводят напрямую к синтезированным логам c. Таким образом, в написанном коде нет ничего неэффективного.

...