alexPec 1 October 7, 2021 Posted October 7, 2021 · Report post Всем доброго дня. Задача такая: надо за 2 такта умножить много пар чисел и сложить все результаты. Много- это 256. Причем одно число 8 бит, второе 16. В вивадо решил проверить как он это сделает. Код такой (схематично): input [15:0] X [8]; input [7:0] Y[8]; reg [23:0] mult_data [8]; reg [31:0] sum; assign s0=mult_data[0]+mult_data[1]; assign s1=mult_data[2]+mult_data[3]; assign s2=mult_data[4]+mult_data[5]; assign s3=mult_data[6]+mult_data[7]; assign s4=s0+s1; assign s5=s2+s3; always @(posedge clk) begin sum = s4+s5; for (i=0;i<8;i++) begin mult_data[i] = x[i]*y[i]; end end Суть думаю понятна: хочу за один такт сделать умножение, за второй все сложить. Причем сложить хочу сначала попарно, затем результат опять попарно, затем результат опять попарно, чтобы сократить цепочку логики от регистра до регистра, примерно так: При синтезе в вивадо получаю в схематике примерно такое: Т.е. он все 8 суммирований производит последовательно через перенос в DSP. Понятно, что это дольше чем в первом рисунке. Хотя и расход DSP блоков меньше. Вопрос: как заставить вивадо последовательную цепочку ограничить, например до 2-х ? Quote Share this post Link to post Share on other sites More sharing options...
krux 5 October 7, 2021 Posted October 7, 2021 · Report post у DSP блока вход PCIN (бит переноса старшего разряда) однобитный в вашем видении там 2 бита должно быть Quote Share this post Link to post Share on other sites More sharing options...
RobFPGA 8 October 7, 2021 Posted October 7, 2021 · Report post Приветствую! На сколько помню в Vv нет опций синтеза для контроля длинны каcкскада DSP. Зато есть опция -cascade_dsp управляющая как реализовывать дерево сумматоров - на встроенных сумматорах или деревом на обычной логике. Так что единственный путь вручную в RTL управлять структурой умножителей/сумматоров либо через атрибуты на сигналах (типа keep, ...) либо (что IMHO надежнее) через использование примитивов DSP/DSP_MACRO. Но стоит ли это делать вручную вопрос? Вам ведь надо получить функционал и не важно как автоматом Vv реализует это. Главное чтобы во времянку уложилось. А выделенные цепи переноса между DSP обычно быстрее чем при обычной коммутации через матрицу и если сумматоры в каскаде укладываются во времянку то и хорошо. Так что попробуйте сначала реализовать ваш полный сумматор на 256 входов и оценить полученные рабочие частоты. Но кажется мне что для полного 256 входов сумматора 24-битных значений за один такт вы много MHz не получите (еще бы - длина крит. цепочки переноса как минимум 24+8+7). Удачи! Rob. Quote Share this post Link to post Share on other sites More sharing options...
alexPec 1 October 7, 2021 Posted October 7, 2021 · Report post Цитата у DSP блока вход PCIN (бит переноса старшего разряда) однобитный в вашем видении там 2 бита должно быть В схематике показывает, что перенос 48бит. 16 минут назад, RobFPGA сказал: Так что попробуйте сначала реализовать ваш полный сумматор на 256 входов и оценить полученные рабочие частоты. Но кажется мне что для полного 256 входов сумматора 24-битных значений за один такт вы много MHz не получите (еще бы - длина крит. цепочки переноса 24*8+7). Удачи! Rob. Так в том-то и дело, что даже 8 произведений за такт на ultrascale+ (speedgrade -1) на 150МГц не пролазит. Вот и пытаюсь вручную колдонуть. Ну бог с ним, за такт, я уже морально готов к 3 тактам :) Но ведь не пролезет... А больше 3 мне никак нельзя. Думал может кто знает волшебное слово для вивадо. Quote Share this post Link to post Share on other sites More sharing options...
TRILLER 0 October 7, 2021 Posted October 7, 2021 · Report post Несколько вопросов: 1. Входные триггеры, от которых такты считать, можно расположить в ДСП? А выходные? 2. Сколько ДСП можно использовать и какую частоту(150?) нужно получить? 3. Операнды знаковые или без знаковые? Quote Share this post Link to post Share on other sites More sharing options...
krux 5 October 7, 2021 Posted October 7, 2021 · Report post https://www.xilinx.com/support/documentation/user_guides/ug479_7Series_DSP48E1.pdf вариантов имплементации умножителя-сумматора в DSP-блок два - когда он упаковывает A[24:0]*B[17:0]+C[47:0] (там возможна вставка промежуточных регистров после умножителя и/или после сумматора), либо когда он упаковывает A[24:0]*B[17:0]+PCIN[0:0] посмотрите на размерность входов DSP на вашей последней стадии сложения. предыдущие результаты имеют разрядность 48 бит и 48 бит. а 48-разрядный вход у DSP-блока только один нужно повнимательнее посмотреть на расширение разрядности при ваших данных, возможно обрезать старшие биты, в соучае если на ваших данных они никогда не будут использованы Quote Share this post Link to post Share on other sites More sharing options...
alexPec 1 October 7, 2021 Posted October 7, 2021 · Report post 41 минуту назад, TRILLER сказал: Несколько вопросов: 1. Входные триггеры, от которых такты считать, можно расположить в ДСП? А выходные? 2. Сколько ДСП можно использовать и какую частоту(150?) нужно получить? 3. Операнды знаковые или без знаковые? 1.Умножитель с регистром на выходе (внутри ДСП), выходной регистр за пределами ДСП. 2. ДСП можно использовать 256. Частота нужна максимальная. Сейчас сложение 7 произведений укладывается в 150МГц, 8 произведений - порядка 130МГц 3. Знаковые Цитата нужно повнимательнее посмотреть на расширение разрядности при ваших данных, возможно обрезать старшие биты, в соучае если на ваших данных они никогда не будут использованы Результат всей суммы укладывается в 36 бит - это по мат. модели. Quote Share this post Link to post Share on other sites More sharing options...
krux 5 October 7, 2021 Posted October 7, 2021 · Report post я бы попробовал запихнуть в первый такт s1 <= X[0]*Y[0] + X[1]*Y[1] s2 <= X[2]*Y[2] + X[3]*Y[3] s3 <= X[4]*Y[4] + X[5]*Y[5] s4 <= X[6]*Y[6] + X[7]*Y[7] во второй такт sum <= s1+s2+s3+s4 первый такт полностью уложится на внутренние умножители, сумматоры и регистры DSP второй такт ляжет на LUT+FF Quote Share this post Link to post Share on other sites More sharing options...
RobFPGA 8 October 7, 2021 Posted October 7, 2021 · Report post Приветствую. 1 hour ago, krux said: вариантов имплементации умножителя-сумматора в DSP-блок два На самом деле вариантов 3. Для US+ еще возможна комбинация P = A*B + C + PCIN. 1 hour ago, alexPec said: 2. ДСП можно использовать 256. Частота нужна максимальная. Сейчас сложение 7 произведений укладывается в 150МГц, 8 произведений - порядка 130МГц Сделайте сумматор на 4 входа (с развязками регистрами на входе и выходе), разведите в маленьком тестовом дизайне. Посмотрите какие задержки получаются на одном сумматоре и на связях между этим сумматором и следующим. А затем умножьте на 8 (число слоев сумматоров для 256 входов). Получите прогноз задержек и частоты, и скорее всего это будет лучший прогноз (сильно лучший), в заполненном дизайне задержки могут быть хуже (если не предпринимать определенных действий). А потом сравните с требуемыми вам 6.6 ns, если не влезет пробуйте "разбит" цепочку на 2-е по 4 добавив регистр в середину. Если и тут не получится то увы за 2-3 такта на -1 speed grade такое не сделать. Удачи! Rob. Quote Share this post Link to post Share on other sites More sharing options...
stealthisname 7 October 7, 2021 Posted October 7, 2021 · Report post 1 час назад, alexPec сказал: Результат всей суммы укладывается в 36 бит - это по мат. модели. в схеме, которую Вы предлагаете реализовать, не укладываются входы DSP на последней стадии сложения если перенос с достаточной разрядностью для суммирования в DSP всего один, то такая схема не реализуемая Quote Share this post Link to post Share on other sites More sharing options...
RobFPGA 8 October 8, 2021 Posted October 8, 2021 · Report post Приветствую! 8 minutes ago, stealthisname said: если перенос с достаточной разрядностью для суммирования в DSP всего один, то такая схема не реализуемая Что значит "не укладываются входы DSP на последней стадии сложения"? Удачи! Rob. Quote Share this post Link to post Share on other sites More sharing options...
stealthisname 7 October 8, 2021 Posted October 8, 2021 · Report post Только что, RobFPGA сказал: Что значит "не укладываются входы DSP на последней стадии сложения"? "Результат всей суммы укладывается в 36 бит - это по мат. модели. " на последней DSP при таком суммировании будет приходить два сигнал с разрядностью 35 бит, а в блоке DSP только один сигнал переноса, который может вместить такую разрядность. 4 минуты назад, RobFPGA сказал: Удачи! Rob. Вам тоже, удачи! Quote Share this post Link to post Share on other sites More sharing options...
RobFPGA 8 October 8, 2021 Posted October 8, 2021 · Report post Приветствую! Just now, stealthisname said: на последней DSP при таком суммировании будет приходить два сигнал с разрядностью 35 бит, а в блоке DSP только один сигнал переноса, который может вместить такую разрядность. Ну так DSP может суммировать 3 числа: P = AB+C+PCIN каждое по 48 бит (AB тут не произведение а просто конкатенация входов). Успехов! Rob. Quote Share this post Link to post Share on other sites More sharing options...
krux 5 October 8, 2021 Posted October 8, 2021 · Report post как у PCIN может быть разрядность в 48 бит я ума не приложу. надо будет попробовать собрать. ultrascale+ говорите? Quote Share this post Link to post Share on other sites More sharing options...
RobFPGA 8 October 8, 2021 Posted October 8, 2021 · Report post Приветствую! 5 minutes ago, krux said: как у PCIN может быть разрядность в 48 бит я ума не приложу. Очень просто - PCIN это P выход предыдущего DSP в каскаде. А просто перенос (однобитный) это CARRYIN/CARRYCASCIN То есть может быть и так P = AB+C+PCIN+CARRYIN Удачи! Rob. Quote Share this post Link to post Share on other sites More sharing options...