Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Возможно ли?
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Математика и Физика
Adv
Уважаемые Знатоки!
Есть следующая задача:
имеются четыре восьмиразрадных числа, которые образуют уникальное сочетание (адрес, например),
над каждым из них может быть выполненна табличная операция по кодированию в 36-ти (или в 32-х) битное число,
далее ВОПРОС:
какие математические действия необходимо произвести над полученными (или исходными) числами, чтоды однозначно убедиться, что это то самое уникальное сочетание четырех восьмиразрадных чисел? Какой (и существует ли) алгоритм такой операции?

ЗЫ: Что такое дешифратор мне известно....
scifi
Попробуйте выразить это математическими терминами. Они более или менее общеприняты, из-за чего будет понятно, о чём идёт речь. Возьмите для примера книгу по математике. В нынешнем виде постановка задачи совсем непонятна (мне, по крайней мере).
Или не секретничайте выдайте жизненную ситуацию, в которой возникла эта задача. Так тоже будет понятнее.
stells
Цитата(Adv @ Aug 1 2009, 17:09) *
какие математические действия необходимо произвести над полученными (или исходными) числами, чтоды однозначно убедиться, что это то самое уникальное сочетание четырех восьмиразрадных чисел?

действительно непонятно... исходные они и есть исходные, а над полученными - провести обратную табличную операцию
Adv
Цитата(scifi @ Aug 1 2009, 16:58) *
Попробуйте выразить это математическими терминами. Они более или менее общеприняты, из-за чего будет понятно, о чём идёт речь. Возьмите для примера книгу по математике. В нынешнем виде постановка задачи совсем непонятна (мне, по крайней мере).
Или не секретничайте выдайте жизненную ситуацию, в которой возникла эта задача. Так тоже будет понятнее.


Так я про дешифратор-то не зря написал.... И с постановкой задачи , вроде, корректно....
И так, повторяю, есть адрес. Надо убедиться, что он действительный (требуемый для срабатывания системы в дальнейшем, для пропуска данных в обработку, например). Сделать надо аппаратно. Маски большого размера неприемлимы - у меня их негде хранить (адрес может быть более 4-х восьми разрядных чисел, скажем, 6 или 10) . Есть ли математическое решение (разделить, умножить, сложить, вычесть, закодировать исходные числа перед математическими операциями и т.п.) этой задачи?
Пропустил важное - в ходе решения результат должен выдаваться как бит. ВСЕ ЧЕТЫРЕ ЧИСЛА ПРАВИЛЬНЫЕ и их ПОРЯДОК (1-ое,2-ое,3-ие,4-ое правильная; 1-ое,3-ие,2-ое,4-ое - неправильная) правильный.
scifi
Цитата(Adv @ Aug 1 2009, 18:30) *
И так, повторяю, есть адрес.

Почтовый адрес?

Цитата(Adv @ Aug 1 2009, 18:30) *
Надо убедиться, что он действительный

То есть прогнать этот адрес по полному списку всех действительных почтовых адресов?

Я же говорю, непонятно. Тут телепатов нет, чудес не ждите.
Adv
Цитата(scifi @ Aug 1 2009, 17:44) *
Почтовый адрес?.


Да хоть адрес для ОЗУ. Разница-то какая?? Адрес - он и есть адрес.
В нём НЕТ признаков любого кодирования.


Цитата(scifi @ Aug 1 2009, 17:44) *
То есть прогнать этот адрес по полному списку всех действительных почтовых адресов?.


Нет. По списку ДЛЯ КОНКРЕТНОГО УСТРОЙСТВА ОТБОРА (т.е моего устройства)

Цитата(scifi @ Aug 1 2009, 17:44) *
Я же говорю, непонятно. Тут телепатов нет, чудес не ждите.


Не жду. Потому спрашиваю. Известно ли для этого математическое решение или я просто зря в это ввязался.
Это дешифратор адреса, по сути. И у меня в распоряжении только операции табличного преобразования входных чисел и математические операции.
scifi
Цитата(Adv @ Aug 1 2009, 18:53) *
Да хоть адрес для ОЗУ. Разница-то какая?? Адрес - он и есть адрес.

Разница огромная. Такие понятия, как "адрес" и "действительный адрес" могут быть сильно разными.
К примеру, IP-адрес. Это 4 числа от 0 до 255, разделённые точками. "Действительным" IP-адресом можно считать любой IP-адрес, не попадающий в один из известных диапазонов "приватных" IP-адресов (можно придумать ещё пару простых правил). То есть задача определения "действительного адреса" может быть очень простой.
Если же речь идёт о почтовых адресах, то тут, к примеру, можно считать "действительным адресом" такой адрес, который входит в КЛАДР (Классификатор адресов России). Это довольно большая таблица, и её хранение и поиск по ней может быть довольно накладным.
Поэтому и спрашиваю. У задачи в такой расплывчатой формулировке общего решения быть не может.
Надо определиться, что такое "адрес" и что такое "действительный адрес".
Adv
Это протосто входной адрес.
Пример того, что я хотел бы получить (сильно упрощённый, но точный).
Допустим, есть дешифратор адреса 8-ми разрядного кода. На выходе 255 шин ДА\НЕТ. Используются 1, 3, 8, 23, 46, 74, 124, 234, 245 шины. Такое - только математически, и только для требуемых шин.
scifi
Цитата(Adv @ Aug 1 2009, 19:37) *
Это протосто входной адрес.
Пример того, что я хотел бы получить (сильно упрощённый, но точный).
Допустим, есть дешифратор адреса 8-ми разрядного кода. На выходе 255 шин ДА\НЕТ. Используются 1, 3, 8, 23, 46, 74, 124, 234, 245 шины. Такое - только математически, и только для требуемых шин.

Вы всё время что-то недоговариваете. Есть дешифратор, понятно. А дальше что? В чём состоит задача?
Adv
Цитата(scifi @ Aug 1 2009, 18:48) *
Вы всё время что-то недоговариваете. Есть дешифратор, понятно. А дальше что? В чём состоит задача?


Простите, чего недоговариваю-то??
Ранее написано - используются ОПРЕДЕЛЁННЫЕ комбинации из множества входных кодов адреса -1, 3, 8, 23, 46, 74, 124, 234, 245 шины.
Аппаратно это просто. А возможно ли математически??
Или ещё пример - есть ОЗУ с 8-ми битным входным адресом в котором при поступлении на вход адресов 1, 3, 8, 23, 46, 74, 124, 234, 245 на выходе будет еденица (ДА). Для остальных адресов -ноль (НЕТ).
scifi
Цитата(Adv @ Aug 1 2009, 19:53) *
Простите, чего недоговариваю-то??
Ранее написано - используются ОПРЕДЕЛЁННЫЕ комбинации из множества входных кодов адреса -1, 3, 8, 23, 46, 74, 124, 234, 245 шины.
Аппаратно это просто. А возможно ли математически??

То есть это что-то похожее на кодовой замок, где отпирающий код - это последовательность определённого числа (неповторяющихся) 8-разрядных чисел, введённых в определённом порядке?
И нужно работу такого замка описать операциями табличного преобразования и арифметическими операциями на неком (пока неизвестном) языке программмирования?

Предположим, речь идёт о кодовом замке, где код - это 4 8-разрядных числа.
Делаем так. При вводе первого 8-разрядного числа (условно 0xAA) табличным преобразованием делаем из него 32-разрядное число 0xAA000000. При вводе второго 0xBB делаем из него 0x00BB0000. Потом 0x0000CC00 и 0x000000DD. Потом полученные 4 32-разрядных числа складываем и получаем 0xAABBCCDD. Далее сравниваем с верным кодом и говорим "да" или "нет".
Для примера таблица первого преобразования очень простая:
0x00 -> 0x00000000
0x01 -> 0x01000000
0x02 -> 0x02000000
...
0xFF -> 0xFF000000 (всего 256 строк)
Adv
Цитата(scifi @ Aug 1 2009, 19:05) *
То есть это что-то похожее на кодовой замок, где отпирающий код - это последовательность определённого числа (неповторяющихся) 8-разрядных чисел, введённых в определённом порядке?
И нужно работу такого замка описать операциями табличного преобразования и арифметическими операциями на неком (пока неизвестном) языке программмирования?

Предположим, речь идёт о кодовом замке, где код - это 4 8-разрядных числа.
Делаем так. При вводе первого 8-разрядного числа (условно 0xAA) табличным преобразованием делаем из него 32-разрядное число 0xAA000000. При вводе второго 0xBB делаем из него 0x00BB0000. Потом 0x0000CC00 и 0x000000DD. Потом полученные 4 32-разрядных числа складываем и получаем 0xAABBCCDD. Далее сравниваем с верным кодом и говорим "да" или "нет".
Для примера таблица первого преобразования очень простая:
0x00 -> 0x00000000
0x01 -> 0x01000000
0x02 -> 0x02000000
...
0xFF -> 0xFF000000 (всего 256 строк)


И храним длинную маску 0xAABBCCDD. Если правильных кодов много - то и массив масок большой и громоздкий. Для этого у меня нет ресурсов.
Это тот же самый ПРОСТОЙ, или ПРЯМОЙ, дешифратор. Можно прямо введённый код дешифровать, без сложения, байтам просто вес присваивается - первому - старший, второму - третий, третьему - второй ну и четвёртому младший. Тот же 32-х разрядный адрес, что и Вы сформировали.
ВОПРОС есть ли какая-нибудь последовательность действий ТИПА (возможны любые, но МАТЕМАТИЧЕСКИЕ):
- кодирование первого числа
- кодирование второго числа
- кодирование третьегочисла
- кодирование четвёртого числа
- сумма первое + второе + третье + четвёртое
- деление на костанту
- XOR байтов остатка
- результат (ДА или НЕТ)

число операций может быть другим , действия - тоже.
НО тут не должно быть МАСОК (и устройтв для их хранения) Допускается наличие нескольких констант.
scifi
Цитата(Adv @ Aug 1 2009, 20:35) *
ВОПРОС есть ли какая-нибудь последовательность действий ТИПА (возможны любые, но МАТЕМАТИЧЕСКИЕ):
- кодирование первого числа
- кодирование второго числа
- кодирование третьегочисла
- кодирование четвёртого числа
- сумма первое + второе + третье + четвёртое
- деление на костанту
- XOR байтов остатка
- результат (ДА или НЕТ)

число операций может быть другим , действия - тоже.
НО тут не должно быть МАСОК (и устройтв для их хранения) Допускается наличие нескольких констант.

Если я правильно понял условия задачи, то это невозможно. Ведь если верный код - это 4 ПРОИЗВОЛЬНЫХ 8-разрядных числа, то они требуют 32 бита для хранения. Если таких кодов много, то и битов для их хранения нужно много.
Однако, если набор верных кодов доступа известен заранее (перед составлением алгоритма декодирования), то теоретически можно попытаться использовать это знание, чтобы упростить алгоритм декодирования (но только для этих известных заранее кодов). Но это в общем случае весьма нетривиальная задача, наверное. Есть над чем подумать...
Adv
Цитата(scifi @ Aug 1 2009, 19:49) *
Если я правильно понял условия задачи, то это невозможно. Ведь если верный код - это 4 ПРОИЗВОЛЬНЫХ 8-разрядных числа, то они требуют 32 бита для хранения. Если таких кодов много, то и битов для их хранения нужно много.
Однако, если набор верных кодов доступа известен заранее (перед составлением алгоритма декодирования), то теоретически можно попытаться использовать это знание, чтобы упростить алгоритм декодирования (но только для этих известных заранее кодов). Но это в общем случае весьма нетривиальная задача, наверное. Есть над чем подумать...


Коды известны заранее. Это именно так. Не тривиальная... потому и обратился к народу....
Если что-то прийдёт на ум - не сочтите за труд, известите. Мне пока не пришло, к сожалению.
Благодарен всем кто откликнулся.
С уважением Adv.
scifi
Цитата(Adv @ Aug 1 2009, 20:52) *
Коды известны заранее. Это именно так. Не тривиальная... потому и обратился к народу....

Тогда подскажите, какие арифметические операции доступны и над какими операндами. Вы упоминали +,-,*,/,XOR,табличное преобразование, некую маску (с неким ограничением по число битов?). Есть ли ограничение на число операций? Поскольку, похоже, недоступны ветвления (типа IF-THEN-ELSE), то нужны какие-то "нелинейные" операции типа побитового OR или AND. Табличные преобразования могут делать почти всё, но опять же, какие есть ограничения, связанные с ними?
Adv
Цитата(scifi @ Aug 1 2009, 20:00) *
Тогда подскажите, какие арифметические операции доступны и над какими операндами. Вы упоминали +,-,*,/,XOR,табличное преобразование, некую маску (с неким ограничением по число битов?). Есть ли ограничение на число операций? Поскольку, похоже, недоступны ветвления (типа IF-THEN-ELSE), то нужны какие-то "нелинейные" операции типа побитового OR или AND. Табличные преобразования могут делать почти всё, но опять же, какие есть ограничения, связанные с ними?


Табличное преобразование - макс. ОБЩИЙ объём памяти для ВСЕХ преобразований (В СУММЕ) 64 кбайта. Арифметические - любые, над любым операндом. Сдвиг любой. В приципе не оговаривается число самих операций, но хотелось бы по-менее (аппаратура не резиновая, к сожалению). Для начала рассмотрим ЛЮБОЕ количество операций. IF-THEN-ELSE - нет. Побитовые логические - любые.
scifi
Как насчёт такого варианта:
Берём введённый код 0xAABBCCDD и наклыдываем на него при помощи XOR первый код доступа (32 бита). В результате - ноль, если числа совпали, а иначе - не ноль. Далее то же самое с вторым кодом доступа, третьим и т.д. В результате получаем набор чисел, и если одно из них - ноль, то есть одно совпадение. Перемножив все эти числа, получаем 0, если одно из них 0, а иначе в произведении будет не ноль.
Подойдёт?
Adv
Цитата(scifi @ Aug 1 2009, 20:51) *
Как насчёт такого варианта:
Берём введённый код 0xAABBCCDD и наклыдываем на него при помощи XOR первый код доступа (32 бита). В результате - ноль, если числа совпали, а иначе - не ноль. Далее то же самое с вторым кодом доступа, третьим и т.д. В результате получаем набор чисел, и если одно из них - ноль, то есть одно совпадение. Перемножив все эти числа, получаем 0, если одно из них 0, а иначе в произведении будет не ноль.
Подойдёт?


Нет. Все коды доступа надо хранить. Это опять простая дешифрация при помощи масок (кодов доступа). Они известны, но в качестве масок прямого поиска использованы быть НЕ могут. Только для формирования чего-ль то в табличных преобразованиях и то - не на аппаратуре пользователя. Только при прграммировании устройства.
30 лет работаю - такое попало впервые....
scifi
Цитата(Adv @ Aug 1 2009, 22:13) *
Нет. Все коды доступа надо хранить. Это опять простая дешифрация при помощи масок (кодов доступа). Они известны, но в качестве масок прямого поиска использованы быть НЕ могут. Только для формирования чего-ль то в табличных преобразованиях и то - не на аппаратуре пользователя. Только при прграммировании устройства.
30 лет работаю - такое попало впервые....

Я опять запутался. Значит, есть аппаратура пользователя и есть устройство, которое надо программировать. А где происходит дешифрация? И почему нельзя использовать маски прямого поиска? Чтобы пользователь не раскрыл код, что ли? А ещё говорите, что всё договариваете...
Как говорила Алиса, "Curiouser and curiouser!"
Adv
Цитата(scifi @ Aug 1 2009, 21:31) *
Я опять запутался. Значит, есть аппаратура пользователя и есть устройство, которое надо программировать. А где происходит дешифрация? И почему нельзя использовать маски прямого поиска? Чтобы пользователь не раскрыл код, что ли? А ещё говорите, что всё договариваете...
Как говорила Алиса, "Curiouser and curiouser!"


Естественно - дешифрация происходит в аппаратуре пользователя. Хотя в моём случае - это тоже весьма условное понятие (Один чип программирует другой, причём есть разное программирование стартовое или текущее - "на лету").
И я не умею НЕ договаривать. Молчать - умею. Проверяли. И не надо на эту тему (не договаривания) далее. Скажу ВСЁ, что поможет делу.

По существу - формирование таблиц для табличных преобразований выполняется ВНЕ устройства (чипа) во втором устройстве (чипе) при старте системы из этих двух (и других, разумеется ) чипов. В устройство (чип) выполняющий эту математическую "дешифрацию" (назовём это так) можно достучаться только при старте. Поэтому и все данные туда могу попасть только при старте. Ресурсы чипа - ограничены крайне (в известном смысле - для кого-то их там ну просто завались на первый взгляд 15000 ячеек), а дешифрировать надо 12-18 тысяч ключей (масок). И памяти - нет (достаточной....).
scifi
Если за это время мы не нашли решение, то дальше продолжать смысла не вижу.
Может быть, кто-то ещё подключится.
Удачи!
Adv
Цитата(scifi @ Aug 1 2009, 21:49) *
Если за это время мы не нашли решение, то дальше продолжать смысла не вижу.
Может быть, кто-то ещё подключится.
Удачи!


Спасибо.
тау
Сорри за идиотизм с моей стороны, но почему бы не разделить входное адресное пространство на 2 одинаковых половины по 2^31 комбинаций. За валидность отвечает какой-нить бит, хоть первый хоть последний хоть средний.

Требований то по криптозащите нетути никаких.
Adv
Цитата(тау @ Aug 1 2009, 22:07) *
Сорри за идиотизм с моей стороны, но почему бы не разделить входное адресное пространство на 2 одинаковых половины по 2^31 комбинаций. За валидность отвечает какой-нить бит, хоть первый хоть последний хоть средний.

Требований то по криптозащите нетути никаких.


Допустим, а далее??
тау
Что далее? проще не бывает же. Сообщаете на старте некоему приемному контроллеру что 3-й (например) бит будет служить выходной величиной "1-Да, 0-нет" и автоматом любые адреса с установленным в 1 -цу третьим битом оказываются "своими" , остальные "чужимим". И всё.

Слишком примитивно? Ну так Вы же не сказали сколько "своих" значений а сколько "чужих " и в какой пропорции из множества 2^32 возможных комбинаций. Криптозащиты никакой. Но она вам ,похоже, и не нужна.
А если нужна - опишите как-нибудь.
Adv
Цитата(тау @ Aug 1 2009, 22:40) *
Что далее? проще не бывает же. Сообщаете на старте некоему приемному контроллеру что 3-й (например) бит будет служить выходной величиной "1-Да, 0-нет" и автоматом любые адреса с установленным в 1 -цу третьим битом оказываются "своими" , остальные "чужимим". И всё.

Слишком примитивно? Ну так Вы же не сказали сколько "своих" значений а сколько "чужих " и в какой пропорции из множества 2^32 возможных комбинаций. Криптозащиты никакой. Но она вам ,похоже, и не нужна.
А если нужна - опишите как-нибудь.


Простите, но выше по теме я указал количество ПРАВИЛЬНЫХ ключей - 12000-18000..... Значения - любые из возможных в 32-х битном коде.
Как вы говорите, сорри за идиотизм но разъясните твердолобому что Вы предлагаете?
тау
Цитата(Adv @ Aug 1 2009, 23:48) *
Простите, но выше по теме я указал количество ПРАВИЛЬНЫХ ключей - 12000-18000..... Значения - любые из возможных в 32-х битном коде.

предположим Вам нужно 16536==2^14 валидных ключей с простейшей механикой определения из множества всех 32 битных входных величин.
Вырабатываете маску , в которой любые 14 бит из 32-х имеющихся устанавливаете в 1-цу. Это получится некое число M.
Сообщаете приемному контроллеру эту маску на старте. при поступлении входных величин (32 разряда) приемник тупо делает AND с инверсией маски М. Анализируете результат операции AND . Если не равен 0 - входная переменная не соответсвует критерию отбора , то есть на выходе ЛОЖЬ. Таким образом приемник выдаст на выход ИСТИНА только для тех комбинаций , где после AND получится 0. Замаскированные 14 бит при этом представляют подмножество валидных ключей, точное значение каждого из которых уже Вас и Ваш приемный контроллер вроде и не интересуют. А если интересуют - то дальше можно по сжатой таблице с 14 разрядным адресом 1 битных результатов или 11 разрядным адресом 8-битных результатов , взятых из под бит маски из входной величины, получить уникальное значение для каждого девайса , если эту таблицу в девайсах прописывать на старте.

Это если я Вас правильно понял.
asdf
Цитата(Adv @ Aug 1 2009, 23:48) *
Простите, но выше по теме я указал количество ПРАВИЛЬНЫХ ключей - 12000-18000..... Значения - любые из возможных в 32-х битном коде.
Как вы говорите, сорри за идиотизм но разъясните твердолобому что Вы предлагаете?

Может быть я тоже не правильно понял задачу, но почему нельзя в качестве маски или ключа использовать какие нибудь последовательности, генерируемые аппаратно, например М - последовательности, или расширенные?
Adv
Цитата(тау @ Aug 1 2009, 23:25) *
предположим Вам нужно 16536==2^14 валидных ключей с простейшей механикой определения из множества всех 32 битных входных величин.
Вырабатываете маску , в которой любые 14 бит из 32-х имеющихся устанавливаете в 1-цу. Это получится некое число M.
Сообщаете приемному контроллеру эту маску на старте. при поступлении входных величин (32 разряда) приемник тупо делает AND с инверсией маски М. Анализируете результат операции AND . Если не равен 0 - входная переменная не соответсвует критерию отбора , то есть на выходе ЛОЖЬ. Таким образом приемник выдаст на выход ИСТИНА только для тех комбинаций , где после AND получится 0. Замаскированные 14 бит при этом представляют подмножество валидных ключей, точное значение каждого из которых уже Вас и Ваш приемный контроллер вроде и не интересуют. А если интересуют - то дальше можно по сжатой таблице с 14 разрядным адресом 1 битных результатов или 11 разрядным адресом 8-битных результатов , взятых из под бит маски из входной величины, получить уникальное значение для каждого девайса , если эту таблицу в девайсах прописывать на старте.

Это если я Вас правильно понял.


Т.е если я правильно разобрался, в каждом из таблично мною запрограммированных числах должен быть указан один из 14-ти битных кодов?
Если во всех 4-х числах этот код один и тотже, то число в 14 бит валидное, соответсвует принятому адресу и может подлежать сокращённой дешифровке? Так?

Цитата(asdf @ Aug 1 2009, 23:32) *
Может быть я тоже не правильно понял задачу, но почему нельзя в качестве маски или ключа использовать какие нибудь последовательности, генерируемые аппаратно, например М - последовательности, или расширенные?


Беда - в повторениях, или ложных срабатываниях дешифратора. Понимаете, для ОДНОГО И ТОГОЖЕ ВХОДНОГО ЧИСЛА НЕЛЬЗЯ поставить ДВА РАЗНЫХ КЛЮЧА ( доп. числа, и проч. подобное). Т.е. есть код FF AA 00 22, это одна комбинация(адрес), 00 AA 77 11 - вторая, но внё входит одно и тоже число AA. Разумеется такое возможно не только для двух адресов - для намного большего количества. Выше я приводил точную аналогию с ОЗУ. Адреса - любые.....

ЗЫ. Для ОРИГИНАЛЬНЫХ (в которых ни один байт не порвторяется с другими адресами, подлежащими дешифрации) адресов такое прекрасно работает.
тау
Что значит " во всех 4-х числах этот код один и тот же " ?
Я принял как факт что на входе у вас 32 разряда, то есть 4 байта по 8 бит. Все вместе 32 этих бита используются в операции с заранее переданной маской М в приемнике. Тогда 14 бит сразу после AND говорят - попали во множество валидных ключей или нет. А потом уже, если надо, делаете доп дешифровку или по маленькой табличке (если выходных переменных много , как у Вас выходов мультиплексора) либо простым сравнением с другим ,уникальным для девайса, 14-битным числом.
Adv
Цитата(тау @ Aug 1 2009, 23:54) *
Что значит " во всех 4-х числах этот код один и тот же " ?


Это после предполагаемого табличного кодирования 8-ми разрядного числа в 32-х разрядное. Хотя, я уже вижу , что не понял Вас правильно в этом месте.

Цитата(тау @ Aug 1 2009, 23:54) *
Я принял как факт что на входе у вас 32 разряда, то есть 4 байта по 8 бит. Все вместе 32 этих бита используются в операции с заранее переданной маской М в приемнике. Тогда 14 бит сразу после AND говорят - попали во множество валидных ключей или нет. А потом уже, если надо, делаете доп дешифровку или по маленькой табличке (если выходных переменных много , как у Вас выходов мультиплексора) либо простым сравнением с другим ,уникальным для девайса, 14-битным числом.


Ключи (адреса) я не задаю, требуется определить (точно) пришедший адрес из списка, или нет. АДРЕСА МОГУТ БЫТЬ ЛЮБЫЕ. Их в 14 разрядов не впихнёшь. Подчёркиваю - ЛЮБЫЕ, и в ЛЮБОМ СОЧЕТАНИИ и 12000 - 18000 адресов. А было бы здорово , если это было возможно....
И это несколько в сторону от вопроса - "математического дешифратора"
Это уже простой двухступенчатый дешифратор
(хотя, правды ради он делается немного по-другому: компаратарами дешифрируются несколько десятков (до сотни, больше трудно впихнуть не используя память, у меня же её и нет) старших 16-ти бит адреса, а потом полная дешифрация оставшихся 16-ти бит, но это уже серьёзное ограничение на парамерты дешифрации)
требующий ресурсов (хоть и меньше, но достаточно много). Да, в ряде случаев - это решение. Но не в этом. Посмотрите исходные для задачи и задачу в начале темы.
Огурцов
Цитата(Adv @ Aug 1 2009, 15:53) *
Или ещё пример - есть ОЗУ с 8-ми битным входным адресом в котором при поступлении на вход адресов 1, 3, 8, 23, 46, 74, 124, 234, 245 на выходе будет еденица (ДА). Для остальных адресов -ноль (НЕТ).

Сделайте неполный дешифратор, делов-то. Не более 8 инверторов, 9 восьмивходовых элементов И, и один девятивходовый элемент ИЛИ. После оптимизации логического выражения (возможно) получится еще меньше. Если входные коды могут быть произвольными, то можно целенаправленно подобрать их так, что результирующее логическое выражение будет наиболее простым. Но часто лучше оптимизировать сразу схему, скажем, по числу корпусов, а не логическое выражение.
тау
Цитата(Adv @ Aug 1 2009, 21:40) *
Табличное преобразование - макс. ОБЩИЙ объём памяти для ВСЕХ преобразований (В СУММЕ) 64 кбайта.

Цитата(Adv @ Aug 2 2009, 01:13) *
АДРЕСА МОГУТ БЫТЬ ЛЮБЫЕ. Их в 14 разрядов не впихнёшь. Подчёркиваю - ЛЮБЫЕ, и в ЛЮБОМ СОЧЕТАНИИ и 12000 - 18000 адресов. А было бы здорово , если это было возможно....


Теперь ясно , что Вы не можете влиять на генерацию входных ключей, для Вас они случайные 32-битные числа.
Но есть возможность использовать таблицу 64кБ. Это тоже самое что в таблицу вы можете запихнуть 16к 32 битных величин . Ну так и запишите в нее все допустимые ключи. При приеме сравниваете поступившую комбинацию с содержимым всей заполненной таблицы. При совпадении с одним из табличных - на выход 1-цу.
Adv
Цитата(тау @ Aug 2 2009, 08:54) *
Теперь ясно , что Вы не можете влиять на генерацию входных ключей, для Вас они случайные 32-битные числа.
Но есть возможность использовать таблицу 64кБ. Это тоже самое что в таблицу вы можете запихнуть 16к 32 битных величин . Ну так и запишите в нее все допустимые ключи. При приеме сравниваете поступившую комбинацию с содержимым всей заполненной таблицы. При совпадении с одним из табличных - на выход 1-цу.


Спасибо. Вы предложили неплохое решение. Но у него есть (как и у всего) недостаток - как и любой поиск по маске (а это ВСЁ ТОТЖЕ ПОИСК ПО МАСКЕ) требует ресурсов, причём правильной конфигурации (ОЗУ 16К х 32 бит). Аппаратно у меня их НЕТ. Из-за этого я вылез с темой-то!! 64К - это память с разрядностью 1 бит . Она может быть переконфигурирована в любую из списка: 8кх8, 4Кх16, 2Кх32(36) если использовать и бит паритета. это блоки М9К Алтеры. А задача поставлена была вообще классно - получить МАКСИМАЛЬНО ВОЗМОЖНОЕ количество ключей, это потом одумались хоть сократили... Послушав всех прихожу к выводу, что кроме ступенчатой дешифрации решенй для задачи нет.
Но всё равно - спасибо всем, кто откликнулся.

ЗЫ. Но здорово было бы узнать, так есть ли МАТЕМАТИЧЕСКОЕ решение для задачи, а не применение только комбинации схемотехнических?? Последние сильно ограничивает возможности поиска, из-за наложения ограничений на совместно используемые ключи (адреса). Надеюсь, для Вас, тау это тоже не безинтересно....
тау
Как уже правильно Вам сказал scifi, решение задачи невозможно , у Вас слишком ограниченные ресурсы.
Вы мечтаете ужать совершенно случайную информацию объемом 64 килобайта до размеров ваших ресурсов, которые заведомо меньше. А это невозможно. Никакая арифметика тут не поможет. Белый шум (ваши ключи) , если он действительно белый , если бы можно было сжимать без потерь, то был бы сурьезный прорыв в науках. А его нет.
lead_seller
Делите свой 4-х байтный код на две части по 2 байта. 1 - ю часть для валидного кода назначаете (т.о. у вас будет 32+ тысячи валидных кодов). 2 - ю часть вычисляете по какому нибудь алгоритму (главное обратимому) из первой части, например инвертируете все разряды. Т.о. если применить обратный алгоритм кодирования к второй части валидного адреса (кода) первая и вторая половина совпадут, если же код не валиден то вероятность совпадения достаточно мала.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.