Правда об асинхронном сбросе
Частенько на вопрос “Почему вы выбрали асинхронную схему сброса для своих модулей?” в ответ можно услышать, что такая схема требует меньше логических ресурсов для своей реализации. В целом это, конечно, правильно. Однако не всегда. И в этом посте мне хотелось бы привести наглядный пример обратной ситуации.
В наличии имеются: голова, руки, FPGA семейства Xilinx Spartan 3E и пакет Xilinx ISE 9.2.
Поскольку у Spartan 3E есть встроенные DSP-блоки, то пишем незамысловатый код (не заморачиваясь со специальными алгоритмами перемножения чисел):
module mult
(
input CLK,
input RSTn,
input signed [07:00] mx,
input signed [07:00] my,
output reg signed [15:00] result
);
always @(posedge CLK or negedge RSTn)
begin
if (!RSTn)
result <= 16'h0;
else
result <= mx * my;
end
endmodule
Синтезируем наш модуль в ISE и получаем вполне предсказуемый результат:
Advanced HDL Synthesis Report
Macro Statistics
# Multipliers : 1
8×8-bit multiplier : 1
# Registers : 16
Flip-Flops : 16
Открываем Technology Schematic и убеждаемся: да, действительно, один встроенный перемножитель и 16 триггеров.
А теперь изменим схему сброса на синхронную (удалим “or negedge RSTn” из заголовка процесса) и запустим синтез еще раз. Вуаля!
Advanced HDL Synthesis Report
Macro Statistics
# Multipliers : 1
8×8-bit multiplier : 1
Снова открываем Technology Schematic и видим, что 16-ти триггеров как не бывало. Мистика?
Ларчик открывается просто: перемножитель MULT18X18SIO уже имеет на борту вывод RSTP (см. технологическую схему) для синхронного сброса выхода перемножителя, который синтезатор задействовал по своему прямому назначению. В случае с асинхронным сбросом вход RSTP синтезатором не задействован и логично подключен к “земле”.
Кстати, заменив логику сигнала сброса с инверсной на прямую, вы сможете сэкономить дополнительно одну LUT, что тоже не может не радовать.
Подводя итог, можно сказать, что выбор схемы сброса при проектировании для FPGA полезно делать, исходя из структуры ее логических блоков, а не с бухты-барахты.
P.S. Хотите интересно и с пользой провести время? Тогда попробуйте синтезировать наш перемножитель в двух вариантах для FPGA от Altera (Cyclone II например)
.

Последние комментарии