Перейти к содержанию
    

Мультиплексирование шины данных между BRAM и DSP48

Имеются две однопортовые 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 ? (насколько мне известно, нет). Потому что если я вставляю "насыщатель" перед входом данных памяти, это опять-же довольно сильно портит скорость.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 count_enable

касательно скорости - гляньте в P&R и что говорит STA в этих 3х случаях, там всё сразу станет видно.

А так из общих - попробуйте включить регистры на выходе памяти и на входе МАС...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А еще попробуйте (ради эксперимента чтобы сравнить тайминги) на выходе каждой BRAM подключить свой МАС-блок, а мультиплексором переключать только входы разрешения записи BRAM.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ситуация 1 память-1 мас даёт такой же тайминг как без роутинга (410 МГц). Подскажите пожалуйста ЧТО именно смотреть в P&R, а то я не очень силён в этом и ничего подозрительного не вижу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробуйте так: даете клоковому сигналу жесткий констрейн. P&R выдаст отрицательный slack, вот там и посмотрите что именно не вписывается в нужный тайминг...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Извините, немного ошибся: все данные для синтеза, без 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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проясняя ситуацию из кольцом DSP48 - на форуме Хилинха мне ответили что DSP48 физически размещены "стопкой", и в самого нижнего PCIN висит в воздухе, т.е. кольцо чисто из PCIN невозможно. Я синтезировал отдельно для первого блока DSP48 с входом С вместо PCIN, в таком виде оно проходит Map. Что касается скорости мультиплексирования то теперь уже мне кажется падение скорости закономерно: мультиплексер должен синхронно переключать 18 бит, и когда делать это на CLB, то для синхронизации утрата производительности неизбежна... Пока что 332 МГц приемлемы для меня.

 

Но если у кого есть умные соображения на эту тему, буду весьма признателен. Так же рассматриваю переход на 7 семейство - у них счёт DSP и BRAM идёт на тысячи. Посмотрел бегло, конструктивно нужные мне элементы весьма сходны, но в DSP48 есть дополнительный вход D, что снимает вопрос с мультиплексированием входа, оставляя только мультиплексирование выхода для записи результата вычисления в BRAM.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 count_enable

Там нужно смотреть на те пути по которым выдаёт эти самые 410 / 332 / 297 МГц.

Так же посмотрите пути от выхода брама до входа в дсп.. Там обычно, если в браме не включать регистры на выход, когда после комбинаторный мукс стоит - тайминги реально падают.

..

Вы бы какую то заготовку-болванку выложили, чтобы можно было оперировать одинаковыми понятиями.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...