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

 
 
 
Reply to this topicStart new topic
> Возведение в степень в FPGAе ?, Как кодируется и выполняется ?
Саша Z
сообщение Dec 8 2007, 21:30
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822



На одном из этапов проэкта будет операции возведения в степень входных данных, степень дробная.
(Это гамма-коррекция 8 bit RGB потока).
Как такое реализуется в FPGA ? Можно предположить что FPGA дает несколько встроенных multipliers 18х18.
Как кодируется (VHDL) и как оно выполняется в железе ? Нужно понять насколько трудоемкая эта операция и сколько времени отнимает. Данные, входной поток идет со скоростью примерно 12 MHz т.е. примерно 12 MB/sec. Нужно понять какая должна быть скорость FPGA перемножения что-б попытаться уложиться в реальное время, т..е без согласующего буфера.
Go to the top of the page
 
+Quote Post
alexf
сообщение Dec 9 2007, 08:44
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 420
Регистрация: 22-12-04
Пользователь №: 1 608



Цитата(Саша Z @ Dec 8 2007, 13:30) *
На одном из этапов проэкта будет операции возведения в степень входных данных, степень дробная.
(Это гамма-коррекция 8 bit RGB потока).
Как такое реализуется в FPGA ? Можно предположить что FPGA дает несколько встроенных multipliers 18х18.
Как кодируется (VHDL) и как оно выполняется в железе ? Нужно понять насколько трудоемкая эта операция и сколько времени отнимает. Данные, входной поток идет со скоростью примерно 12 MHz т.е. примерно 12 MB/sec. Нужно понять какая должна быть скорость FPGA перемножения что-б попытаться уложиться в реальное время, т..е без согласующего буфера.


Умножитель тут не сильно помогает, но 8 бит это 256 значений в таблице. Считается заранее и пишется в BRAM.
Go to the top of the page
 
+Quote Post
Саша Z
сообщение Dec 9 2007, 08:55
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822



Цитата(alexf @ Dec 9 2007, 12:44) *
Умножитель тут не сильно помогает, но 8 бит это 256 значений в таблице. Считается заранее и пишется в BRAM.


Аа, т.е. считаем заранее гамма-коррекцию на каждое возможное значение входа из 256 возможных и храним их в LUTе ? Затем, делаем что-то типа декодера который читает из таблицы LUTа согласно входному данному в качестве адреса в таблице ?
Хорошая идея, спасибо.

А что такое BRAM ?
Go to the top of the page
 
+Quote Post
Singer
сообщение Dec 9 2007, 09:05
Сообщение #4


Участник
*

Группа: Свой
Сообщений: 52
Регистрация: 13-11-07
Пользователь №: 32 296



Цитата(Саша Z @ Dec 9 2007, 11:55) *
Аа, т.е. считаем заранее гамма-коррекцию на каждое возможное значение входа из 256 возможных и храним их в LUTе ? Затем, делаем что-то типа декодера который читает из таблицы LUTа согласно входному данному в качестве адреса в таблице ?
Хорошая идея, спасибо.

А что такое BRAM ?

BRAM - накристальная блочная память, каждый блок такой памяти может содержать если я не ошибаюсь, 18 кбит информации (для Вёртексов). Всего блоков на кристалле может быть до нескольких сотен. Из такой памяти можно считывать-записывать 2 адреса за такт (она двухпортовая).
Вобще, возведение в произвольную дробную степень на FPGA довольно таки муторная задача, т.е. реализовать можно в академических целях, но нужно ли? Так что поддерживаю идею насчет таблицы.

Сообщение отредактировал Singer - Dec 9 2007, 09:11
Go to the top of the page
 
+Quote Post
Stas
сообщение Dec 9 2007, 09:09
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 464
Регистрация: 1-10-04
Из: Челябинск
Пользователь №: 751



Цитата(Саша Z @ Dec 9 2007, 13:55) *
Аа, т.е. считаем заранее гамма-коррекцию на каждое возможное значение входа из 256 возможных и храним их в LUTе ? Затем, делаем что-то типа декодера который читает из таблицы LUTа согласно входному данному в качестве адреса в таблице ?
Хорошая идея, спасибо.

А что такое BRAM ?


Храним не в LUT, а в встроенных блоках памяти типа M4K, M512, MRAM (для Altera).
Go to the top of the page
 
+Quote Post
Саша Z
сообщение Dec 9 2007, 09:19
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822



Да, спасибо всем. Хорошее решение, да и экономит кучу времени написания кода.
Go to the top of the page
 
+Quote Post
AnubiX
сообщение Dec 19 2007, 16:30
Сообщение #7


Участник
*

Группа: Новичок
Сообщений: 29
Регистрация: 3-05-07
Из: Москва
Пользователь №: 27 487



Только не забывайте что BRAM нужно заполнять значениями после старта ПЛИС так как она после старта содержит по идее мусор.

А вообще перемножать с помощью таблицы ИМХО можно до 16-17 разрядного входного операнда. Правда если все же разрядность будет существенно больше можно дойти до такого момента когда от подсчета степени через вычисление ряда уже будет не отвертеться.
Go to the top of the page
 
+Quote Post
Саша Z
сообщение Dec 19 2007, 16:51
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822



Цитата(AnubiX @ Dec 19 2007, 20:30) *
Только не забывайте что BRAM нужно заполнять значениями после старта ПЛИС так как она после старта содержит по идее мусор.

А вообще перемножать с помощью таблицы ИМХО можно до 16-17 разрядного входного операнда. Правда если все же разрядность будет существенно больше можно дойти до такого момента когда от подсчета степени через вычисление ряда уже будет не отвертеться.


Ну в моем случае все проще: на входе 6 бит на данное, выход тоже ожидает 6 бит. Правда тут уже кажется погрешность будет немалая после возведения в степень...
Go to the top of the page
 
+Quote Post
Stas
сообщение Dec 19 2007, 17:17
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 464
Регистрация: 1-10-04
Из: Челябинск
Пользователь №: 751



Цитата(AnubiX @ Dec 19 2007, 21:30) *
Только не забывайте что BRAM нужно заполнять значениями после старта ПЛИС так как она после старта содержит по идее мусор.

А вообще перемножать с помощью таблицы ИМХО можно до 16-17 разрядного входного операнда. Правда если все же разрядность будет существенно больше можно дойти до такого момента когда от подсчета степени через вычисление ряда уже будет не отвертеться.


На этапе разработки делается файл заполнения блока памяти, ставится мегафункция ROM (Quartus II)и "после старта ПЛИС" блок памяти будет проинициализирован нужными значениями...
Go to the top of the page
 
+Quote Post
Саша Z
сообщение Dec 19 2007, 20:06
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822



Цитата(Stas @ Dec 19 2007, 21:17) *
На этапе разработки делается файл заполнения блока памяти, ставится мегафункция ROM (Quartus II)и "после старта ПЛИС" блок памяти будет проинициализирован нужными значениями...


Хмм, сорри за ламеркий вопрос, что за файл заполнения блока памяти ?
Да и я работаю с Latticeом, не с Альтерой...
Go to the top of the page
 
+Quote Post
Волощенко
сообщение Dec 20 2007, 06:39
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 347
Регистрация: 16-02-06
Из: г.Николаев, Украина
Пользователь №: 14 377



Попробуйте еще один метод - "цифра за цифрой", он же "digit by digit", а также Cordic.
Там используется x^y = exp(y ln x). Зато можно получить длинные (приемлемые) разрядности результата. Книг много, одна из них здесь: http://electronix.ru/forum/index.php?showtopic=17849
Там есть сравнение разных методов, в том числе с табличными.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 07:03
Рейтинг@Mail.ru


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