Перейти к содержанию
    

Look-Up Table

Что-то не соображу, как лучше сделать.

 

Допустим, есть ситуация: на вход подаём адрес (от 0 до 600), на выходе получаем какое-то абстрактное 48-битное число. Тут всё понятно. Делаем Look-UP Table, проще говоря, ROM, которая заполняется из заранее заготовленного HEX-файла. Всё просто.

 

А теперь наоборот. Требуется по содержимому определить адрес! Всё. Я на этом застрял. Перебирать все 600 значений в цикле? Не готится - медленно. Транспонировать таблицу? Вы представляете, какой объём она займёт, если данные 48-разрядные? Ну и кто что придумает?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как я понимаю, Вы хотите сделать CAM (ассоциативную память) в общем виде.

Почитайте на эту тему http://en.wikipedia.org/wiki/Content-addressable_memory http://pagiamtzis.com/cam/camintro.html

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если зависимости содержимого ячейки от ее номера нет, то только перебором, иначе посмотреть в сторону хеширования (по крайней мере не придется все 600 значений перебирать)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я, возможно, не совсем корректно описал. Вся эта песня делается для совместимости старой и новой системы. Устройство - генератор частот. От 0 до 600 - это частота. В старой системе, зная частоту, вычисляли данные, которые надо передать и эти данные поступали в устр-во. Чтобы сохранить совместимость, я должен принять данные в старом формате, определить, какой частоте они соответствуют, и дальше уже потом заработают все остальные модули.

 

Это значит, что данные не повторяются и однозначно соответствуют частоте. Кроме того, сформированные данные подчиняются системе. Т.е., существует алгоритм перевода из частоты в дату. Однако, алгоритм довольно сложный, поэтому у меня есть сейчас просто таблица соответствий. Можно в этой таблице поискать закономерность и построить что-то типа дешифратора, но тут есть такая проблема, что если потом обнаружится, что в таблице была ошибка, я умру всё это переделывать.

Надо как-то эту таблицу попытаться загнать в HEX-файл, и уже на его основе сделать дешифратор. Но вот как это сделать - чёрт его знает!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что-то не соображу, как лучше сделать.

 

Допустим, есть ситуация: на вход подаём адрес (от 0 до 600), на выходе получаем какое-то абстрактное 48-битное число. Тут всё понятно. Делаем Look-UP Table, проще говоря, ROM, которая заполняется из заранее заготовленного HEX-файла. Всё просто.

 

А теперь наоборот. Требуется по содержимому определить адрес! Всё. Я на этом застрял. Перебирать все 600 значений в цикле? Не готится - медленно. Транспонировать таблицу? Вы представляете, какой объём она займёт, если данные 48-разрядные? Ну и кто что придумает?

 

Будем рассуждать логически ;) Если транспонировать таблицу, то в ней будет не 2^48 элементов, а те же 601(602), просто таблица будет разряженной. Если используется LUT4, то для декодирования потребуется 12+3+1=16 элементов *48=1024 LUT + шифратор 150+38+10+3+1=202. Т.е. всего 1230 LUT. Это верхняя оценка. В реальности оно, наверное, ужмется сильнее за счет оптимизации. Плюс надо навставлять триггеров для конвееризации.

Если крутить в цикле, то хорошо подумав можно сделать алгоритм, который даст латентность 600, но позволит подавать данные на каждом такте. Правда есть сомнение, что он окажется компактнее чем предыдущий. Скорее даже наоборот ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это значит, что данные не повторяются и однозначно соответствуют частоте. Кроме того, сформированные данные подчиняются системе. Т.е., существует алгоритм перевода из частоты в дату. Однако, алгоритм довольно сложный, поэтому у меня есть сейчас просто таблица соответствий. Можно в этой таблице поискать закономерность и построить что-то типа дешифратора, но тут есть такая проблема, что если потом обнаружится, что в таблице была ошибка, я умру всё это переделывать.

Надо как-то эту таблицу попытаться загнать в HEX-файл, и уже на его основе сделать дешифратор. Но вот как это сделать - чёрт его знает!

 

Еще можно таблицу отсортировать (или в ней самой по себе уже по возрастанию/убыванию значения идут?), разбить на диапазоны (анализировать сколько-то старших бит) и вести итеративный поиск внутри полученного диаразона. Это будет некая комбинация двух ранее описанных подходов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всё, сделал!

alexadmin, всё верно. Так и поступил. Несмотря на хитрый алгоритм расчёта данных, проанализировать сами данные оказалось не очень сложной задачей. Выделил биты, которые не изменяются, нашёл блоки, которые закономерно повторяются. В результате у меня получилась не огромная таблица 600 значений на 48 бит, а две маленькие: 6x6 бит и 4x4 бита.

В случае чего, эти таблицы легко поменять или исправить.

 

Спасибо всем!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это и называется хешированием :), т.е. способ представления чего-то большого более мелким ...http://ru.wikipedia.org/wiki/%D0%A5%D0%B5%D1%88%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...