Vinnetu 0 27 декабря, 2006 Опубликовано 27 декабря, 2006 · Жалоба Что-то не соображу, как лучше сделать. Допустим, есть ситуация: на вход подаём адрес (от 0 до 600), на выходе получаем какое-то абстрактное 48-битное число. Тут всё понятно. Делаем Look-UP Table, проще говоря, ROM, которая заполняется из заранее заготовленного HEX-файла. Всё просто. А теперь наоборот. Требуется по содержимому определить адрес! Всё. Я на этом застрял. Перебирать все 600 значений в цикле? Не готится - медленно. Транспонировать таблицу? Вы представляете, какой объём она займёт, если данные 48-разрядные? Ну и кто что придумает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 229 27 декабря, 2006 Опубликовано 27 декабря, 2006 · Жалоба Как я понимаю, Вы хотите сделать CAM (ассоциативную память) в общем виде. Почитайте на эту тему http://en.wikipedia.org/wiki/Content-addressable_memory http://pagiamtzis.com/cam/camintro.html Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nixon 4 27 декабря, 2006 Опубликовано 27 декабря, 2006 · Жалоба Если зависимости содержимого ячейки от ее номера нет, то только перебором, иначе посмотреть в сторону хеширования (по крайней мере не придется все 600 значений перебирать) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vinnetu 0 27 декабря, 2006 Опубликовано 27 декабря, 2006 · Жалоба Я, возможно, не совсем корректно описал. Вся эта песня делается для совместимости старой и новой системы. Устройство - генератор частот. От 0 до 600 - это частота. В старой системе, зная частоту, вычисляли данные, которые надо передать и эти данные поступали в устр-во. Чтобы сохранить совместимость, я должен принять данные в старом формате, определить, какой частоте они соответствуют, и дальше уже потом заработают все остальные модули. Это значит, что данные не повторяются и однозначно соответствуют частоте. Кроме того, сформированные данные подчиняются системе. Т.е., существует алгоритм перевода из частоты в дату. Однако, алгоритм довольно сложный, поэтому у меня есть сейчас просто таблица соответствий. Можно в этой таблице поискать закономерность и построить что-то типа дешифратора, но тут есть такая проблема, что если потом обнаружится, что в таблице была ошибка, я умру всё это переделывать. Надо как-то эту таблицу попытаться загнать в HEX-файл, и уже на его основе сделать дешифратор. Но вот как это сделать - чёрт его знает! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexadmin 0 27 декабря, 2006 Опубликовано 27 декабря, 2006 · Жалоба Что-то не соображу, как лучше сделать. Допустим, есть ситуация: на вход подаём адрес (от 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, но позволит подавать данные на каждом такте. Правда есть сомнение, что он окажется компактнее чем предыдущий. Скорее даже наоборот ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexadmin 0 27 декабря, 2006 Опубликовано 27 декабря, 2006 · Жалоба Это значит, что данные не повторяются и однозначно соответствуют частоте. Кроме того, сформированные данные подчиняются системе. Т.е., существует алгоритм перевода из частоты в дату. Однако, алгоритм довольно сложный, поэтому у меня есть сейчас просто таблица соответствий. Можно в этой таблице поискать закономерность и построить что-то типа дешифратора, но тут есть такая проблема, что если потом обнаружится, что в таблице была ошибка, я умру всё это переделывать. Надо как-то эту таблицу попытаться загнать в HEX-файл, и уже на его основе сделать дешифратор. Но вот как это сделать - чёрт его знает! Еще можно таблицу отсортировать (или в ней самой по себе уже по возрастанию/убыванию значения идут?), разбить на диапазоны (анализировать сколько-то старших бит) и вести итеративный поиск внутри полученного диаразона. Это будет некая комбинация двух ранее описанных подходов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vinnetu 0 27 декабря, 2006 Опубликовано 27 декабря, 2006 · Жалоба Всё, сделал! alexadmin, всё верно. Так и поступил. Несмотря на хитрый алгоритм расчёта данных, проанализировать сами данные оказалось не очень сложной задачей. Выделил биты, которые не изменяются, нашёл блоки, которые закономерно повторяются. В результате у меня получилась не огромная таблица 600 значений на 48 бит, а две маленькие: 6x6 бит и 4x4 бита. В случае чего, эти таблицы легко поменять или исправить. Спасибо всем! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nixon 4 27 декабря, 2006 Опубликовано 27 декабря, 2006 · Жалоба Это и называется хешированием :), т.е. способ представления чего-то большого более мелким ...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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться