skilful 0 8 марта, 2010 Опубликовано 8 марта, 2010 · Жалоба всем привет. Вот схема суммирования на 32 разряда. Как ее сделать максимально быстрой? Предложенный вариант не удовлетворяет по скорости. Спасибо Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dspx 0 8 марта, 2010 Опубликовано 8 марта, 2010 · Жалоба Никак, можно сгенерить корку визардом, чтоб с RPM был сумматор для максимального быстродействия. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Builder 1 8 марта, 2010 Опубликовано 8 марта, 2010 · Жалоба Вот схема суммирования на 32 разряда. Как ее сделать максимально быстрой? Предложенный вариант не удовлетворяет по скорости.Используйте встроенные корки от производителя, которого используете. Должен получиться самый быстрый вариант. Кстати, обычно если написать "+" то автоматически должна использоваться встроенный мегафункция, т.ч. обычно нет необходимости специально вставлять мегафункцию суммирования. Для уверенности посмотрите результаты синтеза. А вообще, приведённый вариант мало о чём говорит, приводите конкретику, если хотите конкретный вариант ответа. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SergeyF 0 8 марта, 2010 Опубликовано 8 марта, 2010 · Жалоба Вот схема суммирования на 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 написал? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 0 8 марта, 2010 Опубликовано 8 марта, 2010 (изменено) · Жалоба a+=a; b+=b; c=a+b; (логика другая - отдельно суммируем по четным/нечетным тактам) Изменено 8 марта, 2010 пользователем Leka Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Des333 0 8 марта, 2010 Опубликовано 8 марта, 2010 · Жалоба А давайте не будем оффтопить на тему высокоуровневых описаний? Итак уже одна тема полный оффтоп, не стоит остальные портить. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 0 8 марта, 2010 Опубликовано 8 марта, 2010 · Жалоба И что, "высокоуровневым" описанием уже испортил эту тему? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SergeyF 0 8 марта, 2010 Опубликовано 8 марта, 2010 · Жалоба a+=a; b+=b; c=a+b; (логика другая - отдельно суммируем по четным/нечетным тактам) Ну вот зачем мне нужны четные/нечетные такты? У меня каждый такт выход. Работа схемы снаружи ничем не отличается от приведенной автором, кроме дополнительной задержки выхода на такт. По сути реализована конвейеризация переноса с выравниванием фронтов данных. А по поводу готовых корок производителя для аккумуляторов/счетчиков и т.д. добавлю. В каждой версии Quartus не проверяю, но пару лет назад попытка задать в мегафункции мультиплексора несколько уровней конвейеризации приводила к синтезу мультиплексора с цепочкой регистров на выходе. Может, сейчас и лучше. Тогда это прогресс. Но покажите мне хоть один автоматизированный тул, который по констрейнам с любого языка так разложит аккумулятор. Тогда я поверю в лучшее будущее синтеза вообще... лет через 10. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Des333 0 8 марта, 2010 Опубликовано 8 марта, 2010 · Жалоба И что, "высокоуровневым" описанием уже испортил эту тему? Читайте тему внимательней. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 0 8 марта, 2010 Опубликовано 8 марта, 2010 · Жалоба Ну вот зачем мне нужны четные/нечетные такты? Просто м/б проще ту-же задачу решить иным способом. Напутал(выпимши), имел в виду: a+=d[чет]; b+=d[нечет]; c=a+b; - если не каждый результат интегратора нужен. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SergeyF 0 8 марта, 2010 Опубликовано 8 марта, 2010 · Жалоба А по поводу готовых корок производителя для аккумуляторов/счетчиков и т.д. добавлю. В каждой версии Quartus не проверяю, но пару лет назад попытка задать в мегафункции мультиплексора несколько уровней конвейеризации приводила к синтезу мультиплексора с цепочкой регистров на выходе. Может, сейчас и лучше. Тогда это прогресс. Сам себя вынужден опровергнуть. Молодцы Альтеровцы. В QII9.1 altaccumulate при задании дополнительной задержки в один такт на выходе примерно так и разложил схему с аналогичным ускорением (пробовал для Cyclone II). И мультиплексор lpm_mux немного загадочно, но все же раскидал триггеры внутри себя. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
skilful 0 9 марта, 2010 Опубликовано 9 марта, 2010 · Жалоба ПЛИС Cyclone EP1C3. Ориентировочно, нужно 200 МГц. А 32-битный сумматор, работающий за такт, все портит - Precision Syntesys и Квартус тоже это сказали :) Пусть хоть за 10 тактов схема работает - место в ПЛИСине еще много, главное частоту выжать сейчас Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 9 марта, 2010 Опубликовано 9 марта, 2010 · Жалоба Пусть хоть за 10 тактов схема работает - место в ПЛИСине еще много, главное частоту выжать сейчас Поставьте на выходе сумматора не один регистр, а два-три последовательно, и включите в квартусе "pipelinig" и "register retiming". Все тогда должно уложиться в частоту, но задержка появления результата станет +1 или +2 такта (сколько регистров конвейеризации поставите). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 8 9 марта, 2010 Опубликовано 9 марта, 2010 · Жалоба По сути реализована конвейеризация переноса с выравниванием фронтов данных. конвейеризации переноса я не увидел. Такая реализация высокоскоростного аккумулятора была у xilinx. XAPP 039.001 Конечно же в конвейере. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dvladim 0 9 марта, 2010 Опубликовано 9 марта, 2010 · Жалоба Вот схема суммирования на 32 разряда. Как ее сделать максимально быстрой? Предложенный вариант не удовлетворяет по скорости. Вот это еще посмотрите. Вроде как самый оптимальный синхронный счетчик для фпга с 4-х входовым лутом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться