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


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


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

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

А что такое BRAM ?

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

А что такое BRAM ?


Храним не в LUT, а в встроенных блоках памяти типа M4K, M512, MRAM (для Altera).
Саша Z
Да, спасибо всем. Хорошее решение, да и экономит кучу времени написания кода.
AnubiX
Только не забывайте что BRAM нужно заполнять значениями после старта ПЛИС так как она после старта содержит по идее мусор.

А вообще перемножать с помощью таблицы ИМХО можно до 16-17 разрядного входного операнда. Правда если все же разрядность будет существенно больше можно дойти до такого момента когда от подсчета степени через вычисление ряда уже будет не отвертеться.
Саша Z
Цитата(AnubiX @ Dec 19 2007, 20:30) *
Только не забывайте что BRAM нужно заполнять значениями после старта ПЛИС так как она после старта содержит по идее мусор.

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


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

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


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


Хмм, сорри за ламеркий вопрос, что за файл заполнения блока памяти ?
Да и я работаю с Latticeом, не с Альтерой...
Волощенко
Попробуйте еще один метод - "цифра за цифрой", он же "digit by digit", а также Cordic.
Там используется x^y = exp(y ln x). Зато можно получить длинные (приемлемые) разрядности результата. Книг много, одна из них здесь: http://electronix.ru/forum/index.php?showtopic=17849
Там есть сравнение разных методов, в том числе с табличными.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.