count_enable
Feb 11 2015, 16:16
Имеются две однопортовые BRAM 18к каждая, и МАС-блок из DSP48 (синтезирован генератором корок). Задача: по сигналу переключать вход данных DSP48 из одной памяти на вторую. Т.е. если вход 0, то читаем данные из памяти А, а результат операции записываем в память В. Если вход 1, то наоборот.
Задача кажется несложной, но тайминги очень портит.
Если нету мультиплексера и постоянно читаем А: 410 МГц на virtex5.
Если асинхронное мультиплексирование: i_ALU_DIN<=i_DOUT_A when SRCDST='0' else i_DOUT_B; 332 МГц!
Если синхронное мультиплексирование process(clk)...if (SRCDST='0') then...else... 297 МГц!
Можно ли как-то переключаться между банками не утрачивая скорости?
Второй вопрос по насыщенной арифметике. Результат операции 48 бит, память же 18-битная. Абсолютно приемлемо для моей математики насыщение (т.е. если число больше 2^18 -1 то вместо него записываем 2^18 -1, то же для отрицательных чисел). Возможно ли это сделать при помощи DSP48 ? (насколько мне известно, нет). Потому что если я вставляю "насыщатель" перед входом данных памяти, это опять-же довольно сильно портит скорость.
Kuzmi4
Feb 11 2015, 16:21
2 count_enable
касательно скорости - гляньте в P&R и что говорит STA в этих 3х случаях, там всё сразу станет видно.
А так из общих - попробуйте включить регистры на выходе памяти и на входе МАС...
olegras
Feb 11 2015, 16:34
А еще попробуйте (ради эксперимента чтобы сравнить тайминги) на выходе каждой BRAM подключить свой МАС-блок, а мультиплексором переключать только входы разрешения записи BRAM.
count_enable
Feb 11 2015, 16:41
Ситуация 1 память-1 мас даёт такой же тайминг как без роутинга (410 МГц). Подскажите пожалуйста ЧТО именно смотреть в P&R, а то я не очень силён в этом и ничего подозрительного не вижу.
olegras
Feb 11 2015, 16:50
Попробуйте так: даете клоковому сигналу жесткий констрейн. P&R выдаст отрицательный slack, вот там и посмотрите что именно не вписывается в нужный тайминг...
count_enable
Feb 11 2015, 17:04
Извините, немного ошибся: все данные для синтеза, без P&R. Пока еще о размещении речь не идёт.
Спасибо за совет, сейчас допиливаю код чтобы проходил P&R. И в связи с этим следующий вопрос: мне надо сделать кольцо из МАС. Т.е первый МАС в цепочке получает как один из аргументов выход последнего. Для этого использую вход PCIN, который должен специально предусмотрен в DSP48 для подобных случаев. Но вот кажется кольцо не получится сделать: ругается что ERROR:LIT:398 - PCIN bus of DSP48E symbol "firstALU/blk0000000b" can be sourced only by a PCOUT bus of a different DSP48E block.
дак судя по ошибке у Вас на PCIN попал сигнал PCOUT с того же DSP-блока. У Вас как я понял цепочка (кольцо) должно быть из нескольких ДСП, а получилось из одного. Ищите ошибку в подключении сигнала PCOUT.
count_enable
Feb 13 2015, 16:37
Проясняя ситуацию из кольцом DSP48 - на форуме Хилинха мне ответили что DSP48 физически размещены "стопкой", и в самого нижнего PCIN висит в воздухе, т.е. кольцо чисто из PCIN невозможно. Я синтезировал отдельно для первого блока DSP48 с входом С вместо PCIN, в таком виде оно проходит Map. Что касается скорости мультиплексирования то теперь уже мне кажется падение скорости закономерно: мультиплексер должен синхронно переключать 18 бит, и когда делать это на CLB, то для синхронизации утрата производительности неизбежна... Пока что 332 МГц приемлемы для меня.
Но если у кого есть умные соображения на эту тему, буду весьма признателен. Так же рассматриваю переход на 7 семейство - у них счёт DSP и BRAM идёт на тысячи. Посмотрел бегло, конструктивно нужные мне элементы весьма сходны, но в DSP48 есть дополнительный вход D, что снимает вопрос с мультиплексированием входа, оставляя только мультиплексирование выхода для записи результата вычисления в BRAM.
Kuzmi4
Feb 13 2015, 18:03
2 count_enable
Там нужно смотреть на те пути по которым выдаёт эти самые 410 / 332 / 297 МГц.
Так же посмотрите пути от выхода брама до входа в дсп.. Там обычно, если в браме не включать регистры на выход, когда после комбинаторный мукс стоит - тайминги реально падают.
..
Вы бы какую то заготовку-болванку выложили, чтобы можно было оперировать одинаковыми понятиями.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.