AlexZabr 0 8 декабря, 2007 Опубликовано 8 декабря, 2007 · Жалоба На одном из этапов проэкта будет операции возведения в степень входных данных, степень дробная. (Это гамма-коррекция 8 bit RGB потока). Как такое реализуется в FPGA ? Можно предположить что FPGA дает несколько встроенных multipliers 18х18. Как кодируется (VHDL) и как оно выполняется в железе ? Нужно понять насколько трудоемкая эта операция и сколько времени отнимает. Данные, входной поток идет со скоростью примерно 12 MHz т.е. примерно 12 MB/sec. Нужно понять какая должна быть скорость FPGA перемножения что-б попытаться уложиться в реальное время, т..е без согласующего буфера. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexf 0 9 декабря, 2007 Опубликовано 9 декабря, 2007 · Жалоба На одном из этапов проэкта будет операции возведения в степень входных данных, степень дробная. (Это гамма-коррекция 8 bit RGB потока). Как такое реализуется в FPGA ? Можно предположить что FPGA дает несколько встроенных multipliers 18х18. Как кодируется (VHDL) и как оно выполняется в железе ? Нужно понять насколько трудоемкая эта операция и сколько времени отнимает. Данные, входной поток идет со скоростью примерно 12 MHz т.е. примерно 12 MB/sec. Нужно понять какая должна быть скорость FPGA перемножения что-б попытаться уложиться в реальное время, т..е без согласующего буфера. Умножитель тут не сильно помогает, но 8 бит это 256 значений в таблице. Считается заранее и пишется в BRAM. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexZabr 0 9 декабря, 2007 Опубликовано 9 декабря, 2007 · Жалоба Умножитель тут не сильно помогает, но 8 бит это 256 значений в таблице. Считается заранее и пишется в BRAM. Аа, т.е. считаем заранее гамма-коррекцию на каждое возможное значение входа из 256 возможных и храним их в LUTе ? Затем, делаем что-то типа декодера который читает из таблицы LUTа согласно входному данному в качестве адреса в таблице ? Хорошая идея, спасибо. А что такое BRAM ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Singer 0 9 декабря, 2007 Опубликовано 9 декабря, 2007 (изменено) · Жалоба Аа, т.е. считаем заранее гамма-коррекцию на каждое возможное значение входа из 256 возможных и храним их в LUTе ? Затем, делаем что-то типа декодера который читает из таблицы LUTа согласно входному данному в качестве адреса в таблице ? Хорошая идея, спасибо. А что такое BRAM ? BRAM - накристальная блочная память, каждый блок такой памяти может содержать если я не ошибаюсь, 18 кбит информации (для Вёртексов). Всего блоков на кристалле может быть до нескольких сотен. Из такой памяти можно считывать-записывать 2 адреса за такт (она двухпортовая). Вобще, возведение в произвольную дробную степень на FPGA довольно таки муторная задача, т.е. реализовать можно в академических целях, но нужно ли? Так что поддерживаю идею насчет таблицы. Изменено 9 декабря, 2007 пользователем Singer Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Stas 1 9 декабря, 2007 Опубликовано 9 декабря, 2007 · Жалоба Аа, т.е. считаем заранее гамма-коррекцию на каждое возможное значение входа из 256 возможных и храним их в LUTе ? Затем, делаем что-то типа декодера который читает из таблицы LUTа согласно входному данному в качестве адреса в таблице ? Хорошая идея, спасибо. А что такое BRAM ? Храним не в LUT, а в встроенных блоках памяти типа M4K, M512, MRAM (для Altera). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexZabr 0 9 декабря, 2007 Опубликовано 9 декабря, 2007 · Жалоба Да, спасибо всем. Хорошее решение, да и экономит кучу времени написания кода. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
anubix 0 19 декабря, 2007 Опубликовано 19 декабря, 2007 · Жалоба Только не забывайте что BRAM нужно заполнять значениями после старта ПЛИС так как она после старта содержит по идее мусор. А вообще перемножать с помощью таблицы ИМХО можно до 16-17 разрядного входного операнда. Правда если все же разрядность будет существенно больше можно дойти до такого момента когда от подсчета степени через вычисление ряда уже будет не отвертеться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexZabr 0 19 декабря, 2007 Опубликовано 19 декабря, 2007 · Жалоба Только не забывайте что BRAM нужно заполнять значениями после старта ПЛИС так как она после старта содержит по идее мусор. А вообще перемножать с помощью таблицы ИМХО можно до 16-17 разрядного входного операнда. Правда если все же разрядность будет существенно больше можно дойти до такого момента когда от подсчета степени через вычисление ряда уже будет не отвертеться. Ну в моем случае все проще: на входе 6 бит на данное, выход тоже ожидает 6 бит. Правда тут уже кажется погрешность будет немалая после возведения в степень... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Stas 1 19 декабря, 2007 Опубликовано 19 декабря, 2007 · Жалоба Только не забывайте что BRAM нужно заполнять значениями после старта ПЛИС так как она после старта содержит по идее мусор. А вообще перемножать с помощью таблицы ИМХО можно до 16-17 разрядного входного операнда. Правда если все же разрядность будет существенно больше можно дойти до такого момента когда от подсчета степени через вычисление ряда уже будет не отвертеться. На этапе разработки делается файл заполнения блока памяти, ставится мегафункция ROM (Quartus II)и "после старта ПЛИС" блок памяти будет проинициализирован нужными значениями... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexZabr 0 19 декабря, 2007 Опубликовано 19 декабря, 2007 · Жалоба На этапе разработки делается файл заполнения блока памяти, ставится мегафункция ROM (Quartus II)и "после старта ПЛИС" блок памяти будет проинициализирован нужными значениями... Хмм, сорри за ламеркий вопрос, что за файл заполнения блока памяти ? Да и я работаю с Latticeом, не с Альтерой... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Voloshchenko 0 20 декабря, 2007 Опубликовано 20 декабря, 2007 · Жалоба Попробуйте еще один метод - "цифра за цифрой", он же "digit by digit", а также Cordic. Там используется x^y = exp(y ln x). Зато можно получить длинные (приемлемые) разрядности результата. Книг много, одна из них здесь: http://electronix.ru/forum/index.php?showtopic=17849 Там есть сравнение разных методов, в том числе с табличными. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться