То, что вы делаете со своим «подсчетом битов», очень похоже на логарифм (основание 2).
Это обычно используется в VHDL, чтобы выяснить, сколько битов требуется для представления сигнала. Например, если вы хотите хранить до N элементов в ОЗУ, число битов, необходимых для адресации этого ОЗУ, равно ceil(log2(N)). Для этого я использую:
function log2ceil(m:natural) return natural is
begin -- note: for log(0) we return 0
for n in 0 to integer'high loop
if 2**n >= m then
return n;
end if;
end loop;
end function log2ceil;
Обычно вы хотите сделать это во время синтеза с константами, и скорость не имеет значения. Но вы также можете сгенерировать логику FPGA, если это действительно то, что вам нужно.
Как уже упоминалось, цикл for в VHDL просто используется для создания таблицы поиска, которая может быть медленной из-за длинных путей прохождения сигнала, но все же занимает всего один такт. Что может случиться, так это то, что ваша максимальная тактовая частота снижается. Обычно это проблема только в том случае, если вы работаете с векторами размером более 64 бит (вы упомянули 1024 бита) и с тактовой частотой более 100 МГц. Возможно, синтезатор уже сказал вам, что это ваша проблема, в противном случае предлагаю сначала попробовать.
Затем вам нужно разделить операцию на несколько часов и сохранить некоторый промежуточный результат в FF. (Я бы заранее забыл о попытках перехитрить синтезатор, перестроив свой код. Таблица поиска — это таблица. Почему должно иметь значение, как вы генерируете значения в этой таблице? Но обязательно сообщите синтезатору о том, что «все равно». " значения, если они у вас есть.)
Если вам важна скорость, используйте первый такт для параллельной проверки всех 16-битных блоков (независимо друг от друга), а затем используйте второй такт для объединения результатов всех 16-битных блоков в один результат. Если вас беспокоит объем логики FPGA, реализуйте конечный автомат, который проверяет один 16-битный блок в каждом такте.
Но будьте осторожны, чтобы при этом не изобретать ЦП заново.
person
Community
schedule
14.05.2013