stealthisname 8 October 8, 2021 Posted October 8, 2021 (edited) · Report post 19 минут назад, RobFPGA сказал: Ну так DSP может суммировать 3 числа: P = AB+C+PCIN каждое по 48 бит (AB тут не произведение а просто конкатенация входов). на первой схеме у автора темы таких входов нет, есть X1 Y2 и перенос. Есть ли возможность суммировать числа в DSP так, как указано автором темы на первой схеме? Edited October 8, 2021 by stealthisname Quote Share this post Link to post Share on other sites More sharing options...
RobFPGA 58 October 8, 2021 Posted October 8, 2021 · Report post Приветствую! 35 minutes ago, stealthisname said: Есть ли возможность суммировать числа в DSP так, как указано автором темы в на первой схеме? Есть. Фактически X это А, Y это B, перенос это PCIN, Out это либо PCOUT (если к идет переносу) либо P , например // пкрвый вариант A4*B4 + PCIN -> P -----\ +-------\ | A3*B3 PCIN -> PCOUT3 \- AB + C -> P = A1B1+A2B2+A3B3+A4B4 | A2*B2 + PCIN -> P -------------/ +-------\ A1*B1 -> PCOUT1 // втрой вариант A4*B4 + PCIN -> P = A1B1+A2B2+A3B3+A4B4 +-------\ A2*B2 + PCIN -> PCOUT3 +-------\ A2*B2 + PCIN -> PCOUT2 +-------\ A1*B1 -> PCOUT1 Удачи! Rob. Quote Share this post Link to post Share on other sites More sharing options...
stealthisname 8 October 8, 2021 Posted October 8, 2021 · Report post 8 минут назад, RobFPGA сказал: Фактически X это А, Yэто B, перенос это PCIN, Out это либо PCOUT (если к идет переносу) либо P , например спасибо я ошибся, сказав, что такая сумма не возможна на DSP. вычисления у автора темы могут быть реализованы так как указано на первой схеме. но в этой схеме есть незначительная неточность, которая может из-за невнимательности ввести в заблуждение. схема получается такая не считая обозначений входов, все было правильно Quote Share this post Link to post Share on other sites More sharing options...
krux 9 October 8, 2021 Posted October 8, 2021 · Report post Table 2-10: Three-Input ALUMODE Operations DSP Operation: Z + X + Y + CIN и действительно, документация такое описывает. вот только есть момент, что вход PCIN должен быть выходом соседнего блока, иначе PnR не пройдёт. Quote Share this post Link to post Share on other sites More sharing options...
andrew_b 23 October 8, 2021 Posted October 8, 2021 · Report post 7 часов назад, TRILLER сказал: 3. Операнды знаковые или без знаковые? Это вопрос интерпретации. Quote Share this post Link to post Share on other sites More sharing options...
des00 26 October 8, 2021 Posted October 8, 2021 · Report post 10 hours ago, alexPec said: Так в том-то и дело, что даже 8 произведений за такт на ultrascale+ (speedgrade -1) на 150МГц не пролазит. Вот и пытаюсь вручную колдонуть. Ну бог с ним, за такт, я уже морально готов к 3 тактам :) Но ведь не пролезет... А больше 3 мне никак нельзя. Думал может кто знает волшебное слово для вивадо. 256 входов с умножением и сложением не сделать за такое время. Полагаю что там будет где то 30МГц тактовая. Может все же отталкиваться от тактовой? заложить 100МГц, разгонать частоту до 400-500. Ну и на каждом такте последовательно по 4 числа крутить на ДСП ядре. Первый слой - умножение с накоплением, второй-накопление, третий - широкий сумматор (можно на 3-add mode) режиме работы ячеек. Quote Share this post Link to post Share on other sites More sharing options...
blackfin 60 October 8, 2021 Posted October 8, 2021 · Report post 11 hours ago, alexPec said: При синтезе в вивадо получаю в схематике примерно такое: Это примерно то, что нарисовано в PG192: Может умножать на высокой частоте и в каждом такте может умножать два новых вектора, но latency = 256. Ну и можно сконфигурировать в чисто комбинаторном варианте: Тогда и частота будет соответствующая.. Quote Share this post Link to post Share on other sites More sharing options...
Avex 1 October 8, 2021 Posted October 8, 2021 · Report post Суть сложения с накоплением, две операции вместо одной, причем - без потери разрядности, а значит и точности. Если попытаться сделать эту функцию от 256 аргументов по классическому подходу, с переполнениями будет бороться совсем тяжко, либо диапазон чисел получится маленький, меньше 8 бит. Мне кажется, это задача прдходит для сисемы остаточных классов https://habr.com/ru/post/144886/ Quote Share this post Link to post Share on other sites More sharing options...
RobFPGA 58 October 8, 2021 Posted October 8, 2021 · Report post Приветствую! 3 hours ago, Aleх said: Если попытаться сделать эту функцию от 256 аргументов по классическому подходу, с переполнениями будет бороться совсем тяжко Проблем с переполнением тут нет, 48-битная разрядность многое позволяет. Проблемы у TC именно в latency - ему кровь из носу надо уложится в 2-3 такта, и именно это не получается сделать при большом количестве входов у сумматора. Удачи! Rob. Quote Share this post Link to post Share on other sites More sharing options...
alexPec 4 October 8, 2021 Posted October 8, 2021 · Report post 4 минуты назад, RobFPGA сказал: Приветствую! Проблем с переполнением тут нет, 48-битная разрядность многое позволяет. Проблемы у TC именно в latency - ему кровь из носу надо уложится в 2-3 такта, и именно это не получается сделать при большом количестве входов у сумматора. Удачи! Rob. Все верно. Надо попробовать вариант с увеличенной тактовой. Тогда получится контролировать на промежуточных регистрах длину цепочки переноса. Тут может прокатить. Всем спасибо за советы! Quote Share this post Link to post Share on other sites More sharing options...
TRILLER 0 October 8, 2021 Posted October 8, 2021 · Report post Вполне уверенно водится проект на 2 такта и 150МГц, если умножения делать не на dsp, а на логике. Только ресурсов жрёт прилично.src.rar Обязательно запретить использование дсп атрибутом (* use_dsp = "no" *), ну и триггер поставить после попарных сумм 8 элементов. Если Вас устроят 3 такта, то и dsp можно использовать без проблем на эту частоту. То, что Вы хотели бы получить - это очень плохо: Quote Основная проблема использования dsp - это большие времянки на входе и выходе. Сюда ещё добавляется строгая локализация в кристалле. До них банально долго тянуть данные! Поэтому, то, что уже попало в ДСП должно как можно дольше там и оставаться, а после вывода - не заходить снова. Т.е. желательно максималное использование внутренних возможностей и линий ускоренного переноса между блоками. Из моего опыта, оптимальный вариант описания dsp - это отдельный, иерархически изолированный(* keep_hierarchy = "yes" *) модуль, в котором полностью описываются операции 1 или нескольких dsp и их взаимодействие по выделенным линиям. Обязательно, как уже говорилось выше, использование атрибута use_dsp. Ещё вполне рабочий вариант, как уже предлагали, это переход на удвоенную частоту. Но там могут возникнуть проблемы с холдом(хоть и в ряд ли в Вашем случае).. 10 hours ago, andrew_b said: Это вопрос интерпретации. Умножая без знаковые операнды 16 и 8 бит - в результате получаем 24 значащих бита. В случае знаковых операндов - результат умещается в 23. Quote Share this post Link to post Share on other sites More sharing options...
new123 0 October 8, 2021 Posted October 8, 2021 (edited) · Report post Однажды решил заюзать dsp в проекте для умножений. Пока проект маленький, вроде нормально, а по мере роста и заполняемости, пока до него данные дойдут, пока заберешь обратно, вечность проходит. Я бы это тоже учитывал в будущем, если надо так строго в два такта уложиться. Edited October 8, 2021 by new123 Quote Share this post Link to post Share on other sites More sharing options...
alexPec 4 October 8, 2021 Posted October 8, 2021 · Report post 2 часа назад, TRILLER сказал: Вполне уверенно водится проект на 2 такта и 150МГц, если умножения делать не на dsp, а на логике. Только ресурсов жрёт прилично Спасибо! Да, интересный опыт. Но на логике много умножителей и сумматоров делать - в чип не влезет. Quote Share this post Link to post Share on other sites More sharing options...
RobFPGA 58 October 8, 2021 Posted October 8, 2021 · Report post Приветствую! 2 hours ago, alexPec said: Но на логике много умножителей и сумматоров делать - в чип не влезет. На логике можно делать только сумматоры, а умножители (c регистром на выходе) в DSP. Ну и можно поиграться комбинируя сумматор частично в DSP частично в логике выбирая оптимальное распределение задержек между регистрами. Но с этим придется повозится. Удачи! Rob. Quote Share this post Link to post Share on other sites More sharing options...
Doka 5 October 9, 2021 Posted October 9, 2021 · Report post On 10/7/2021 at 9:29 PM, alexPec said: Задача такая: надо за 2 такта умножить много пар чисел и сложить все результаты. Много- это 256. Причем одно число 8 бит, второе 16. В вивадо решил проверить как он это сделает. странно, что до сих пор никто не предложил "обмануть carry-chain" как описывается тут (таймметка 35:07, если ссылка некорректно вставится): Quote Share this post Link to post Share on other sites More sharing options...