|
|
  |
Возведение в степень в FPGAе ?, Как кодируется и выполняется ? |
|
|
|
Dec 9 2007, 08:44
|
Местный
  
Группа: Свой
Сообщений: 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.
|
|
|
|
|
Dec 9 2007, 08:55
|
Знающий
   
Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822

|
Цитата(alexf @ Dec 9 2007, 12:44)  Умножитель тут не сильно помогает, но 8 бит это 256 значений в таблице. Считается заранее и пишется в BRAM. Аа, т.е. считаем заранее гамма-коррекцию на каждое возможное значение входа из 256 возможных и храним их в LUTе ? Затем, делаем что-то типа декодера который читает из таблицы LUTа согласно входному данному в качестве адреса в таблице ? Хорошая идея, спасибо. А что такое BRAM ?
|
|
|
|
|
Dec 9 2007, 09:05
|
Участник

Группа: Свой
Сообщений: 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
|
|
|
|
|
Dec 9 2007, 09:09
|
Местный
  
Группа: Свой
Сообщений: 464
Регистрация: 1-10-04
Из: Челябинск
Пользователь №: 751

|
Цитата(Саша Z @ Dec 9 2007, 13:55)  Аа, т.е. считаем заранее гамма-коррекцию на каждое возможное значение входа из 256 возможных и храним их в LUTе ? Затем, делаем что-то типа декодера который читает из таблицы LUTа согласно входному данному в качестве адреса в таблице ? Хорошая идея, спасибо.
А что такое BRAM ? Храним не в LUT, а в встроенных блоках памяти типа M4K, M512, MRAM (для Altera).
|
|
|
|
|
Dec 19 2007, 17:17
|
Местный
  
Группа: Свой
Сообщений: 464
Регистрация: 1-10-04
Из: Челябинск
Пользователь №: 751

|
Цитата(AnubiX @ Dec 19 2007, 21:30)  Только не забывайте что BRAM нужно заполнять значениями после старта ПЛИС так как она после старта содержит по идее мусор.
А вообще перемножать с помощью таблицы ИМХО можно до 16-17 разрядного входного операнда. Правда если все же разрядность будет существенно больше можно дойти до такого момента когда от подсчета степени через вычисление ряда уже будет не отвертеться. На этапе разработки делается файл заполнения блока памяти, ставится мегафункция ROM (Quartus II)и "после старта ПЛИС" блок памяти будет проинициализирован нужными значениями...
|
|
|
|
|
Dec 19 2007, 20:06
|
Знающий
   
Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822

|
Цитата(Stas @ Dec 19 2007, 21:17)  На этапе разработки делается файл заполнения блока памяти, ставится мегафункция ROM (Quartus II)и "после старта ПЛИС" блок памяти будет проинициализирован нужными значениями... Хмм, сорри за ламеркий вопрос, что за файл заполнения блока памяти ? Да и я работаю с Latticeом, не с Альтерой...
|
|
|
|
|
Dec 20 2007, 06:39
|
Местный
  
Группа: Свой
Сообщений: 347
Регистрация: 16-02-06
Из: г.Николаев, Украина
Пользователь №: 14 377

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