Главная > FPGA Programming > Правда об асинхронном сбросе

Правда об асинхронном сбросе


Частенько на вопрос “Почему вы выбрали асинхронную схему сброса для своих модулей?” в ответ можно услышать, что такая схема требует меньше логических ресурсов для своей реализации. В целом это, конечно, правильно. Однако не всегда. И в этом посте мне хотелось бы привести наглядный пример обратной ситуации.

Задача: перемножить два 16-ти разрядных числа.

В наличии имеются: голова, руки, 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 например) ;) .

 

Рубрики:FPGA Programming Метки: ,

Добавить комментарий

Fill in your details below or click an icon to log in:

Логотип WordPress.com

You are commenting using your WordPress.com account. Log Out / Изменить )

Фотография Twitter

You are commenting using your Twitter account. Log Out / Изменить )

Фотография Facebook

You are commenting using your Facebook account. Log Out / Изменить )

Connecting to %s

Follow

Get every new post delivered to your Inbox.