реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> DSP блоки ПЛИС, использование блоков умножения
Anton1990
сообщение Jun 16 2017, 16:07
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 118
Регистрация: 26-04-12
Пользователь №: 71 584



Всем добрый день.
Есть код полностью на vhdl, состоящий из множества модулей. Довольно часто используется операция сложения "+". Чаще всего ise автоматически использует блоки dsp для реализации сложения.
Вопрос: а как этим процессом управлять? Т.е. я хочу чтобы в конкретном блоке операция сложения реализовывалась на логике, а в другом блоке реализовывалась на блоках dsp.
Такой же вопрос относительно памяти.
Использую ise, но это актуально и в vivado + Virtex6.
Заранее спасибо за ответы.
Go to the top of the page
 
+Quote Post
Tausinov
сообщение Jun 16 2017, 17:07
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 112
Регистрация: 19-10-13
Пользователь №: 78 795



Цитата(Anton1990 @ Jun 16 2017, 19:07) *
Всем добрый день.
Есть код полностью на vhdl, состоящий из множества модулей. Довольно часто используется операция сложения "+". Чаще всего ise автоматически использует блоки dsp для реализации сложения.
Вопрос: а как этим процессом управлять? Т.е. я хочу чтобы в конкретном блоке операция сложения реализовывалась на логике, а в другом блоке реализовывалась на блоках dsp.
Такой же вопрос относительно памяти.
Использую ise, но это актуально и в vivado + Virtex6.
Заранее спасибо за ответы.


По моему опыту, если использовать в лоб операцию сложения, то в железе всегда получим реализацию на логике.
С помощью атрибутов синтезатора можно попробовать "заставить" синтезатор выполнить операцию в DSP блоке, но, если по каким-то причинам это невозможно, то атрибут будет проигнорирован. Кроме того, есть еще нюансы с задержками и прочим, так что лучше так не делать.
Go to the top of the page
 
+Quote Post
Anton1990
сообщение Jun 16 2017, 17:38
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 118
Регистрация: 26-04-12
Пользователь №: 71 584



Цитата(Tausinov @ Jun 16 2017, 20:07) *
По моему опыту, если использовать в лоб операцию сложения, то в железе всегда получим реализацию на логике.
С помощью атрибутов синтезатора можно попробовать "заставить" синтезатор выполнить операцию в DSP блоке, но, если по каким-то причинам это невозможно, то атрибут будет проигнорирован. Кроме того, есть еще нюансы с задержками и прочим, так что лучше так не делать.

если в настройках ise стоит использование dsp блоков = авто, то ise упорно использует dsp блоки в качестве умножителей и сумматоров. Но я то хочу отдельные модули реализовать на dsp а отдельные на логике. Как?
Типичная ситуация когда в проекте используются фильтры реализованные на dsp и логика для реализации простых операций суммирования (при небольшой разрядности). Да и dsp блоков может просто не хватать.
А о каких атрибутах Вы говорите?
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jun 16 2017, 18:39
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 4 210
Регистрация: 17-02-06
Пользователь №: 14 454



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


еще есть ключики для верилога
(* use_dsp48 = "YES" *)
ставиться на куски кода где надо дсп воткнуть. возможно для vhdl тоже что-то подобное есть.

вроде все также
https://www.xilinx.com/support/answers/54778.html
вот там есть по стилям памяти. Где то можно найти весь список и управлять процессом чуть лучше.

Но полный контроль это руками размещать ДСП блоки. Другое дело зачем? Ведь он сам начнет пихать логику, когда ДСП кончится, или подменять операции ДСП блоками когда кончится логика. Чтобы уложится в частоту и размер. Какая вам разница как решена задача, если она решена?
Go to the top of the page
 
+Quote Post
Anton1990
сообщение Jun 17 2017, 13:34
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 118
Регистрация: 26-04-12
Пользователь №: 71 584



Цитата(Golikov A. @ Jun 16 2017, 21:39) *
Но полный контроль это руками размещать ДСП блоки. Другое дело зачем? Ведь он сам начнет пихать логику, когда ДСП кончится, или подменять операции ДСП блоками когда кончится логика. Чтобы уложится в частоту и размер. Какая вам разница как решена задача, если она решена?

например, есть проект в котором ЦФ работают на высокой частоте и модуль детектирования (использующий сумматоры, да и умножителя) работающий на низкой частоте. На всех dsp в плис не хватает. При разводке исе разводит сначала модуль детектирования и кушает dsp, а на ЦФ их потом не хватает.
Go to the top of the page
 
+Quote Post
Bad0512
сообщение Jun 19 2017, 02:23
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 785
Регистрация: 11-05-07
Из: Томск
Пользователь №: 27 650



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

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

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd September 2017 - 03:55
Рейтинг@Mail.ru


Страница сгенерированна за 0.01371 секунд с 7
ELECTRONIX ©2004-2016