Костян 0 13 июня, 2013 Опубликовано 13 июня, 2013 · Жалоба Дело под вечер... Не могу сообразить, как сделать красиво многовходовой синтезируемый сумматор (на минимальное число строк на HDL). Кол-во входов 128 (на каждом входе новые данные), разрядность 16 бит. Нужно просумировать все входы. Конвеерность не важна, хоть все 128 тактов. Критично лишь минимизация логики. Есть идеи ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Postoroniy_V 0 13 июня, 2013 Опубликовано 13 июня, 2013 · Жалоба Дело под вечер... Не могу сообразить, как сделать красиво многовходовой синтезируемый сумматор (на минимальное число строк на HDL). Кол-во входов 128 (на каждом входе новые данные), разрядность 16 бит. Нужно просумировать все входы. Конвеерность не важна, хоть все 128 тактов. Критично лишь минимизация логики. Есть идеи ? в том в чём будет работать есть dsp блоки? если да то.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Костян 0 13 июня, 2013 Опубликовано 13 июня, 2013 · Жалоба в том в чём будет работать есть dsp блоки? если да то.... Да пожалуйста...сколько угодно. Но речь про краткость кода. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
FatRobot 3 13 июня, 2013 Опубликовано 13 июня, 2013 · Жалоба если задача минимизировать логику (а не количество строк), и есть возможность обработки за несколько (много) тактов, то я бы использовал аккумулятор, на вход которого последовательно через мультиплексор (в котором можно сделать pipeline) подавал бы 128 значений. Это решение можно разбить на 2 блока по 64 входа и т.д. а краткость кода.. это какое-то запредельное требование.. комбинаторный always @( * ), в котором в цикле все значения суммируете. Синтезатор найдет способ, как реализовать это хозяйство. потом пишите временные ограничения для этого комбинаторного оковалка, и ура-ура. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Postoroniy_V 0 13 июня, 2013 Опубликовано 13 июня, 2013 · Жалоба Да пожалуйста...сколько угодно. Но речь про краткость кода. ну полный исходник писать мне лень и к тому же то что написал это для DSP48 xilinx input[63:0][15:0] inputA, input[63:0][15:0] inputB, input clock, input reset, ..... always@(posedge clk) begin if (start) begin a<= inputa[counter]; b<= inputb[counter]; dsp_clr<=0; end else if(done) out<=P;// выход с dsp48 dsp_clr<=0; else dsp_clr<=1; end assign sel_oper=oper_sum_AB_P; dsp_operation A+B+P ну или в генерате подключить все входа ко входам dsp48(с операцией A+B+PCIN), pcout к pcin, итог будет - 64 dsp блока (либо A+B+C+PCIN не уверен что dsp48 такое умеет) масштабираемо :))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 1 13 июня, 2013 Опубликовано 13 июня, 2013 · Жалоба Дело под вечер... Не могу сообразить, как сделать красиво многовходовой синтезируемый сумматор (на минимальное число строк на HDL). Кол-во входов 128 (на каждом входе новые данные), разрядность 16 бит. Нужно просумировать все входы. Конвеерность не важна, хоть все 128 тактов. Критично лишь минимизация логики. Есть идеи ? http://forum.ixbt.com/topic.cgi?id=48:1629:2575#2575 Собственный код лень разбирать... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bad0512 2 13 июня, 2013 Опубликовано 13 июня, 2013 · Жалоба Дело под вечер... Не могу сообразить, как сделать красиво многовходовой синтезируемый сумматор (на минимальное число строк на HDL). Кол-во входов 128 (на каждом входе новые данные), разрядность 16 бит. Нужно просумировать все входы. Конвеерность не важна, хоть все 128 тактов. Критично лишь минимизация логики. Есть идеи ? Имхо нет ничего сложного - два цикла, один суммирует попарно в каждой ступени, другой увеличивает количество ступеней до двоичного логарифма от количества слагаемых первой ступени. Это - решение "в лоб". DSP блоки тут нафиг не нужны, имхо "из пушки по воробьям". Если хотите оптимизации по ресурсу - покурите доки на тему трёхвходовых сумматоров по ключевому слову "ternary adder". Во всех вышеперечисленных рассуждениях подразумевается, что работаем на предельной частоте, т.е. финты с аккумуляторами невозможны. Если это не так (условия позволяют немного пооверклочить), то ещё туча вариантов для оптимизации. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 1 13 июня, 2013 Опубликовано 13 июня, 2013 · Жалоба http://forum.ixbt.com/topic.cgi?id=48:1629:2575#2575 Собственный код лень разбирать... Отменяется, там другая задачка решается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 13 июня, 2013 Опубликовано 13 июня, 2013 · Жалоба Конвеерность не важна, хоть все 128 тактов. Критично лишь минимизация логики. Я бы поставил двухпортовку. По одному входу данные записывались бы, а по другому - считывались бы в сумматор... Собственно и нужно: один сумматор, счетчик адресов на чтение и формирователь стробов... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Postoroniy_V 0 13 июня, 2013 Опубликовано 13 июня, 2013 · Жалоба Имхо нет ничего сложного - два цикла, один суммирует попарно в каждой ступени, другой увеличивает количество ступеней до двоичного логарифма от количества слагаемых первой ступени. Это - решение "в лоб". DSP блоки тут нафиг не нужны, имхо "из пушки по воробьям". Если хотите оптимизации по ресурсу - покурите доки на тему трёхвходовых сумматоров по ключевому слову "ternary adder". Во всех вышеперечисленных рассуждениях подразумевается, что работаем на предельной частоте, т.е. финты с аккумуляторами невозможны. Если это не так (условия позволяют немного пооверклочить), то ещё туча вариантов для оптимизации. если есть дсп блоки то не использовать их крайне странное решение тем более что такое решение будет занимать меньше всего логики и работать будет на высокой частоте, чем в той же логике Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Костян 0 14 июня, 2013 Опубликовано 14 июня, 2013 · Жалоба Во всех вышеперечисленных рассуждениях подразумевается, что работаем на предельной частоте Кстати, совсем забыл про такой важный факт, что необходима предельно возможная частота синтеза и один тактовый сигнал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bad0512 2 15 июня, 2013 Опубликовано 15 июня, 2013 · Жалоба если есть дсп блоки то не использовать их крайне странное решение тем более что такое решение будет занимать меньше всего логики и работать будет на высокой частоте, чем в той же логике Тут ключевое слово "если есть". Просто обычный сумматор можно сделать легко и на логике, а вот умножитель (при условии что множитель и множимое - не константы) достаточно проблематично. В случае 16-битных данных, кстати, не факт, что DSPшный сумматор будет быстрее. P.S. В качестве пруфа последнего утверждения собрал проект с двумя 16-битными сумматорами, один - на логике, другой - на DSP блоке. У DSP блока задействованы все регистры для повышения быстродействия. Так вот, у DSP сумматора времянка валится уже на 550 МГц, в то время как обычный сумматор бодр и весел аж на 625МГц - при дальнейшем повышении частоты начинают уже валиться ограничения на период клока в BUFG, хотя сам сумматор может молотить и быстрее. ПЛИС XC7K325TFFG676-1. Синтезатор - синплифай (хотя это в данном случае непринципиально). Разводил в ISE 14.5. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Postoroniy_V 0 15 июня, 2013 Опубликовано 15 июня, 2013 · Жалоба Тут ключевое слово "если есть". Просто обычный сумматор можно сделать легко и на логике, а вот умножитель (при условии что множитель и множимое - не константы) достаточно проблематично. В случае 16-битных данных, кстати, не факт, что DSPшный сумматор будет быстрее. P.S. В качестве пруфа последнего утверждения собрал проект с двумя 16-битными сумматорами, один - на логике, другой - на DSP блоке. У DSP блока задействованы все регистры для повышения быстродействия. Так вот, у DSP сумматора времянка валится уже на 550 МГц, в то время как обычный сумматор бодр и весел аж на 625МГц - при дальнейшем повышении частоты начинают уже валиться ограничения на период клока в BUFG, хотя сам сумматор может молотить и быстрее. ПЛИС XC7K325TFFG676-1. Синтезатор - синплифай (хотя это в данном случае непринципиально). Разводил в ISE 14.5. 1)на мой ключевой вопрос был дан ключевой ответ - да полно 2)ТС хотел не 2-а 16 битных сумматора а это многовходовой синтезируемый сумматор...Кол-во входов 128 как вы такое смогли развести я не очень понимаю ->16х128. можно взглянуть на собраный вами проект? 3) если же суммировать все 128 16 битных чисел то Вам не кажется что 16 битного сумматора не хватит? 4) проект в исе я не собирал конечно. ибо... проверял в синплифае вот его оценку и привожу ниже(камень XC7K410TFFG900-2) 4.1) тот исходник что тут приводил немного подправленный с 1 dsp48 - 802LUT 500MHz(около того). 4.2) та же функциональность(теже такты на подсчёт) что и 4.2 но на логике 858LUT 325MHz . 5)умножитель не может быть проблематичным если вы слышали про алгоритма Бута(Booth) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bad0512 2 16 июня, 2013 Опубликовано 16 июня, 2013 · Жалоба 1)на мой ключевой вопрос был дан ключевой ответ - да полно 2)ТС хотел не 2-а 16 битных сумматора а это многовходовой синтезируемый сумматор...Кол-во входов 128 как вы такое смогли развести я не очень понимаю ->16х128. можно взглянуть на собраный вами проект? 3) если же суммировать все 128 16 битных чисел то Вам не кажется что 16 битного сумматора не хватит? 4) проект в исе я не собирал конечно. ибо... проверял в синплифае вот его оценку и привожу ниже(камень XC7K410TFFG900-2) 4.1) тот исходник что тут приводил немного подправленный с 1 dsp48 - 802LUT 500MHz(около того). 4.2) та же функциональность(теже такты на подсчёт) что и 4.2 но на логике 858LUT 325MHz . 5)умножитель не может быть проблематичным если вы слышали про алгоритма Бута(Booth) 1. В данном конкретном случае DSP блоки никак проблему не решают, более того, могут ещё и ухудшить тайминги. 2. В чём проблема перейти от двухвходового сумматора к структуре типа 64 сумматора в первой ступени - 32 сумматора во второй ступени - и т д ? Вы полагаете такое будет трудно развести? Естественно каждая ступень сумматоров защёлкивается в регистры, схема работает по принципу конвеера. 3. Вполне хватит 23-битного сумматора. Но это увеличение разрядности будет в очень небольшом числе сумматоров. Грубо говоря на выходе 1 ступени - 17 бит (64 сумматра), на выходе 2 ступени - 18 бит (32 сумматора) и т д. 4. Не стОит доверять отчётам синплифая по времянке, некоторые вещи там не учитываются. И всё-таки я так и не понял, как вы умудряетесь ОДНИМ сумматором на DSP48 складывать 128 чисел КАЖДЫЙ такт? Видимо сипользуете какие-то скрытые способности DSP блока? 5. Я не утверждал что умножитель на логике сделать нельзя, я утверждаю что это крайне накладно по ресурсу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bad0512 2 16 июня, 2013 Опубликовано 16 июня, 2013 · Жалоба Кстати, совсем забыл про такой важный факт, что необходима предельно возможная частота синтеза и один тактовый сигнал. Вот держите - простецкое дерево сумматоров. Быстродействие определяется быстродействием самого последнего сумматора в цепи (в вашем случае получается 23-битный сумматор). Конвеерная задержка равна двоичному логарифму от количества входных операндов. Это в вашем случае 7. Операндов может быть произвольное число (не обязательно степень двойки). Ширина входных данных и количество слагаемых настраивается входными параметрами. Можно также порулить и выходной шириной, но лучше этого не делать - она внутри считается оптимально. Сюда ещё можно добавить строб для входа и выхода, а также работу по clock enable дабы сэкономить немного потребляемой мощности в случаях когда данные на входе меняются редко. adder_tree.v Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться