Перейти к содержанию
    

как ускорить схему суммирования

всем привет.

 

Вот схема суммирования на 32 разряда. Как ее сделать максимально быстрой? Предложенный вариант не удовлетворяет по скорости.

 

Спасибо

post-16411-1268067599_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Никак, можно сгенерить корку визардом, чтоб с RPM был сумматор для максимального быстродействия.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот схема суммирования на 32 разряда. Как ее сделать максимально быстрой? Предложенный вариант не удовлетворяет по скорости.
Используйте встроенные корки от производителя, которого используете. Должен получиться самый быстрый вариант.

Кстати, обычно если написать "+" то автоматически должна использоваться встроенный мегафункция, т.ч. обычно нет необходимости специально вставлять мегафункцию суммирования.

Для уверенности посмотрите результаты синтеза.

А вообще, приведённый вариант мало о чём говорит, приводите конкретику, если хотите конкретный вариант ответа.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот схема суммирования на 32 разряда. Как ее сделать максимально быстрой? Предложенный вариант не удовлетворяет по скорости.

Вы бы сообщили, для какой ПЛИС синтезируете. А то окажется, что для MAX или CoolRunner.

Если быстродействие синтезируемой реализации или того, что сделает мастер, не устраивает, можно конвейеризовать. Например, как-то так:

module cnt
(
input clk, input rst,
input [31:0] dataa,
output reg [31:0] result
);

reg [15:0] dataaq;
reg [16:0] resloq;

always @ (negedge rst or posedge clk)
begin
	if (!rst)
	begin
		result <= 0;
		dataaq <= 0;
		resloq <= 0;
	end
	else
	begin
		dataaq <= dataa[31:16];
		resloq <= dataa[15:0]+resloq[15:0];
		result[15:0] <= resloq[15:0];
		result[31:16] <= dataaq+result[31:16]+resloq[16];
	end
end

endmodule

 

Задержка выхода будет 2 такта.

 

Пы.Сы. Оффтоп на тему высокоуровневых описаний. Прикрепил схему того, что появилось на бумаге перед HDL. И как бы я это на C написал?

post-8660-1268075238_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

a+=a; b+=b; c=a+b; (логика другая - отдельно суммируем по четным/нечетным тактам)

Изменено пользователем Leka

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А давайте не будем оффтопить на тему высокоуровневых описаний?

Итак уже одна тема полный оффтоп, не стоит остальные портить. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

a+=a; b+=b; c=a+b; (логика другая - отдельно суммируем по четным/нечетным тактам)

Ну вот зачем мне нужны четные/нечетные такты? У меня каждый такт выход. Работа схемы снаружи ничем не отличается от приведенной автором, кроме дополнительной задержки выхода на такт. По сути реализована конвейеризация переноса с выравниванием фронтов данных.

 

А по поводу готовых корок производителя для аккумуляторов/счетчиков и т.д. добавлю. В каждой версии Quartus не проверяю, но пару лет назад попытка задать в мегафункции мультиплексора несколько уровней конвейеризации приводила к синтезу мультиплексора с цепочкой регистров на выходе. Может, сейчас и лучше. Тогда это прогресс.

 

Но покажите мне хоть один автоматизированный тул, который по констрейнам с любого языка так разложит аккумулятор. Тогда я поверю в лучшее будущее синтеза вообще... лет через 10.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И что, "высокоуровневым" описанием уже испортил эту тему?

Читайте тему внимательней.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну вот зачем мне нужны четные/нечетные такты?

Просто м/б проще ту-же задачу решить иным способом.

 

Напутал(выпимши), имел в виду: a+=d[чет]; b+=d[нечет]; c=a+b; - если не каждый результат интегратора нужен.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А по поводу готовых корок производителя для аккумуляторов/счетчиков и т.д. добавлю. В каждой версии Quartus не проверяю, но пару лет назад попытка задать в мегафункции мультиплексора несколько уровней конвейеризации приводила к синтезу мультиплексора с цепочкой регистров на выходе. Может, сейчас и лучше. Тогда это прогресс.

Сам себя вынужден опровергнуть. Молодцы Альтеровцы. В QII9.1 altaccumulate при задании дополнительной задержки в один такт на выходе примерно так и разложил схему с аналогичным ускорением (пробовал для Cyclone II). И мультиплексор lpm_mux немного загадочно, но все же раскидал триггеры внутри себя.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ПЛИС Cyclone EP1C3.

 

Ориентировочно, нужно 200 МГц. А 32-битный сумматор, работающий за такт, все портит - Precision Syntesys и Квартус тоже это сказали :)

 

Пусть хоть за 10 тактов схема работает - место в ПЛИСине еще много, главное частоту выжать сейчас

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пусть хоть за 10 тактов схема работает - место в ПЛИСине еще много, главное частоту выжать сейчас

Поставьте на выходе сумматора не один регистр, а два-три последовательно, и включите в квартусе "pipelinig" и "register retiming". Все тогда должно уложиться в частоту, но задержка появления результата станет +1 или +2 такта (сколько регистров конвейеризации поставите).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По сути реализована конвейеризация переноса с выравниванием фронтов данных.

 

конвейеризации переноса я не увидел.

Такая реализация высокоскоростного аккумулятора была у xilinx. XAPP 039.001

Конечно же в конвейере.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот схема суммирования на 32 разряда. Как ее сделать максимально быстрой? Предложенный вариант не удовлетворяет по скорости.

Вот это еще посмотрите.

Вроде как самый оптимальный синхронный счетчик для фпга с 4-х входовым лутом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...