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

DSP блоки ПЛИС

Всем добрый день.

Есть код полностью на vhdl, состоящий из множества модулей. Довольно часто используется операция сложения "+". Чаще всего ise автоматически использует блоки dsp для реализации сложения.

Вопрос: а как этим процессом управлять? Т.е. я хочу чтобы в конкретном блоке операция сложения реализовывалась на логике, а в другом блоке реализовывалась на блоках dsp.

Такой же вопрос относительно памяти.

Использую ise, но это актуально и в vivado + Virtex6.

Заранее спасибо за ответы.

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


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

Всем добрый день.

Есть код полностью на vhdl, состоящий из множества модулей. Довольно часто используется операция сложения "+". Чаще всего ise автоматически использует блоки dsp для реализации сложения.

Вопрос: а как этим процессом управлять? Т.е. я хочу чтобы в конкретном блоке операция сложения реализовывалась на логике, а в другом блоке реализовывалась на блоках dsp.

Такой же вопрос относительно памяти.

Использую ise, но это актуально и в vivado + Virtex6.

Заранее спасибо за ответы.

 

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

С помощью атрибутов синтезатора можно попробовать "заставить" синтезатор выполнить операцию в DSP блоке, но, если по каким-то причинам это невозможно, то атрибут будет проигнорирован. Кроме того, есть еще нюансы с задержками и прочим, так что лучше так не делать.

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


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

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

С помощью атрибутов синтезатора можно попробовать "заставить" синтезатор выполнить операцию в DSP блоке, но, если по каким-то причинам это невозможно, то атрибут будет проигнорирован. Кроме того, есть еще нюансы с задержками и прочим, так что лучше так не делать.

если в настройках ise стоит использование dsp блоков = авто, то ise упорно использует dsp блоки в качестве умножителей и сумматоров. Но я то хочу отдельные модули реализовать на dsp а отдельные на логике. Как?

Типичная ситуация когда в проекте используются фильтры реализованные на dsp и логика для реализации простых операций суммирования (при небольшой разрядности). Да и dsp блоков может просто не хватать.

А о каких атрибутах Вы говорите?

 

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


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

вам никто не мешает вставлять блоки руками туда куда вам надо. А настройки с авто передвинуть на запрещено.

 

 

еще есть ключики для верилога

(* use_dsp48 = "YES" *)

ставиться на куски кода где надо дсп воткнуть. возможно для vhdl тоже что-то подобное есть.

 

вроде все также

https://www.xilinx.com/support/answers/54778.html

вот там есть по стилям памяти. Где то можно найти весь список и управлять процессом чуть лучше.

 

Но полный контроль это руками размещать ДСП блоки. Другое дело зачем? Ведь он сам начнет пихать логику, когда ДСП кончится, или подменять операции ДСП блоками когда кончится логика. Чтобы уложится в частоту и размер. Какая вам разница как решена задача, если она решена?

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


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

Но полный контроль это руками размещать ДСП блоки. Другое дело зачем? Ведь он сам начнет пихать логику, когда ДСП кончится, или подменять операции ДСП блоками когда кончится логика. Чтобы уложится в частоту и размер. Какая вам разница как решена задача, если она решена?

например, есть проект в котором ЦФ работают на высокой частоте и модуль детектирования (использующий сумматоры, да и умножителя) работающий на низкой частоте. На всех dsp в плис не хватает. При разводке исе разводит сначала модуль детектирования и кушает dsp, а на ЦФ их потом не хватает.

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


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

например, есть проект в котором ЦФ работают на высокой частоте и модуль детектирования (использующий сумматоры, да и умножителя) работающий на низкой частоте. На всех dsp в плис не хватает. При разводке исе разводит сначала модуль детектирования и кушает dsp, а на ЦФ их потом не хватает.

Общее правило примерно такое: если синтезатор находит умножение не на константу и не на степень двойки, то он в это место лепит ДСП блок. Если сразу за операцией умножения идёт сложение, то её тоже пытается заместить в ДСП блок. В остальных случаях синтезатор оценивает оставшийся ресурс умножителей и принимает решение на основании этой информации.Изменить это можно с помощью директив синтезатора. Каких конкретно - зависит от типа синтезатор (в виваде одни, в синплифае чуть другие). Это - самый правильный способ. Есть ещё путь с использованием макросов и низкоуровневых примитивов, но этот путь хуже - теряется платформонезависимость вашего кода. Какой путь выбрать - решать вам.

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


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

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

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

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

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

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

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

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

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

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