count_enable 0 11 февраля, 2015 Опубликовано 11 февраля, 2015 · Жалоба Имеются две однопортовые 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 0 11 февраля, 2015 Опубликовано 11 февраля, 2015 · Жалоба 2 count_enable касательно скорости - гляньте в P&R и что говорит STA в этих 3х случаях, там всё сразу станет видно. А так из общих - попробуйте включить регистры на выходе памяти и на входе МАС... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
olegras 0 11 февраля, 2015 Опубликовано 11 февраля, 2015 · Жалоба А еще попробуйте (ради эксперимента чтобы сравнить тайминги) на выходе каждой BRAM подключить свой МАС-блок, а мультиплексором переключать только входы разрешения записи BRAM. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
count_enable 0 11 февраля, 2015 Опубликовано 11 февраля, 2015 · Жалоба Ситуация 1 память-1 мас даёт такой же тайминг как без роутинга (410 МГц). Подскажите пожалуйста ЧТО именно смотреть в P&R, а то я не очень силён в этом и ничего подозрительного не вижу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
olegras 0 11 февраля, 2015 Опубликовано 11 февраля, 2015 · Жалоба Попробуйте так: даете клоковому сигналу жесткий констрейн. P&R выдаст отрицательный slack, вот там и посмотрите что именно не вписывается в нужный тайминг... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
count_enable 0 11 февраля, 2015 Опубликовано 11 февраля, 2015 · Жалоба Извините, немного ошибся: все данные для синтеза, без 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Krys 2 13 февраля, 2015 Опубликовано 13 февраля, 2015 · Жалоба дак судя по ошибке у Вас на PCIN попал сигнал PCOUT с того же DSP-блока. У Вас как я понял цепочка (кольцо) должно быть из нескольких ДСП, а получилось из одного. Ищите ошибку в подключении сигнала PCOUT. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
count_enable 0 13 февраля, 2015 Опубликовано 13 февраля, 2015 · Жалоба Проясняя ситуацию из кольцом DSP48 - на форуме Хилинха мне ответили что DSP48 физически размещены "стопкой", и в самого нижнего PCIN висит в воздухе, т.е. кольцо чисто из PCIN невозможно. Я синтезировал отдельно для первого блока DSP48 с входом С вместо PCIN, в таком виде оно проходит Map. Что касается скорости мультиплексирования то теперь уже мне кажется падение скорости закономерно: мультиплексер должен синхронно переключать 18 бит, и когда делать это на CLB, то для синхронизации утрата производительности неизбежна... Пока что 332 МГц приемлемы для меня. Но если у кого есть умные соображения на эту тему, буду весьма признателен. Так же рассматриваю переход на 7 семейство - у них счёт DSP и BRAM идёт на тысячи. Посмотрел бегло, конструктивно нужные мне элементы весьма сходны, но в DSP48 есть дополнительный вход D, что снимает вопрос с мультиплексированием входа, оставляя только мультиплексирование выхода для записи результата вычисления в BRAM. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuzmi4 0 13 февраля, 2015 Опубликовано 13 февраля, 2015 · Жалоба 2 count_enable Там нужно смотреть на те пути по которым выдаёт эти самые 410 / 332 / 297 МГц. Так же посмотрите пути от выхода брама до входа в дсп.. Там обычно, если в браме не включать регистры на выход, когда после комбинаторный мукс стоит - тайминги реально падают. .. Вы бы какую то заготовку-болванку выложили, чтобы можно было оперировать одинаковыми понятиями. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться