lincolndsp 0 27 сентября, 2007 Опубликовано 27 сентября, 2007 · Жалоба Реализовал проект алгоритма ГОСТа 28147 в режиме простой замены, пока только зашифрования данных на VHDL в среде Xilinx ISE+QuestaSim. Эталонный результат не получен в результате моделирования. При внимательном разборе временных диаграм увидел, что не срабатывает при переходе с 0-го цикла на 1-й запись из сумматора по мод2 SM2в нако N1, ну и соответственно прис ледуещем цикле из N1 в N2. При дальнейшей работе последовательность считывания и записи правильная. В проекте использовались ключ KEY_IN (256 бит) и блок данных (64 бит)DATA_IN(нули), при этом должна былы получится зашифрованная последовательность DAFE3AD9FA67E757. Я приложил архив с исходниками и скриншотом тестбенча, поясняющего то,что я только что описал. Подскажите , что нужно изменить. vhdl_source.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BSV 0 27 сентября, 2007 Опубликовано 27 сентября, 2007 · Жалоба Блин, ну это уже хамство натуральное!!! Другим больше заняться нечем, как Вашу работу делать. Будьте так любезны - разберитесь сами как работает (должно работать) управление и переделайте его сами. Epikur и так сделал для Вас больше, чем следовало. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Epikur 0 27 сентября, 2007 Опубликовано 27 сентября, 2007 · Жалоба lincolndsp Всё, что я могу сказать, это то, что предложенный мой код проходит тесты и является 100% рабочим. Ищи ошибку у себя. Зы. Архив пустой. Зыы. Читай предыдущую запись. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lincolndsp 0 1 октября, 2007 Опубликовано 1 октября, 2007 · Жалоба получилось реализовать простую замену. Вопрос: результирующий блок данных считывается в каком цикле и в каком цикле записывается новый блок данных в накопители N1 и N2? то есть какая очередность? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BSV 0 1 октября, 2007 Опубликовано 1 октября, 2007 · Жалоба получилось реализовать простую замену. Вопрос: результирующий блок данных считывается в каком цикле и в каком цикле записывается новый блок данных в накопители N1 и N2? то есть какая очередность? Рад за Вас. :) В принципе, ничего не мешает делать это одновременно, все зависит от того, как реализовано управление алгоритмом. Как только накопитель не участвует в выработке очередной порции данных - в него можно записывать очередной входной блок. Вы данные грузите и считываете по 64 разряда или, как я советовал, по 32? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lincolndsp 0 2 октября, 2007 Опубликовано 2 октября, 2007 · Жалоба пока на начальных стадиях я блок данных храню в виде 64 битного блока, а затем уже считываю в накопители по 32 бита Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BSV 0 2 октября, 2007 Опубликовано 2 октября, 2007 · Жалоба Перед началом работы нужно загрузить блок данных в N1, N2. Цикл 0: N1 <- N2 xor SH11(SUBST((KEY0 + N1) mod 32)); N2 <- N1 Цикл 1: N1 <- N2 xor SH11(SUBST((KEY1 + N1) mod 32)); N2 <- N1 ... Цикл 30: N1 <- N2 xor SH11(SUBST((KEY1 + N1) mod 32)); N2 <- N1 Цикл 31: N1 <- N2 xor SH11(SUBST((KEY0 + N1) mod 32)); N2 <- INPUT32; OUTPUT32 <- N1 (Во время 31 цикла можно выдать 32 - разрядный блок и загрузить очередной входной блок) Цикл 32: N1 <- N2; N2 <- INPUT32; OUTPUT32 <- N1 (Аналогично - во время 32 цикла) Цикл 0: ... и т.д. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lincolndsp 0 8 октября, 2007 Опубликовано 8 октября, 2007 · Жалоба бьюсь над реализацией режима гаммирования, но все никак из-за сложностей реализации первоначального этапа работы с синхропосылкой и предустановок т.д не получается перед тем как перейти к повтрояюющемуся фрагменту алгоритма. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lincolndsp 0 9 октября, 2007 Опубликовано 9 октября, 2007 · Жалоба как можно реализовать участок алгоритма любого,где определенный участок кода с определенными переменными нужно совершить один раз, а дальше выполнять уже другой участок кода с теми же переменными, который повторяется? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Epikur 0 9 октября, 2007 Опубликовано 9 октября, 2007 · Жалоба lincolndsp >>как можно реализовать участок алгоритма любого,где определенный участок кода с определенными переменными нужно совершить один раз, а дальше выполнять уже другой участок кода с теми же переменными, который повторяется? Либо при помощи конечного автомата, либо с внешним микроконтроллерным управлением. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lincolndsp 0 9 октября, 2007 Опубликовано 9 октября, 2007 · Жалоба Epikur, а как вы решали жту проблему, при реализации участка кода инициализации в режиме гаммирования? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Epikur 0 10 октября, 2007 Опубликовано 10 октября, 2007 · Жалоба У меня FPGA является ведомым устройством, которое управляется при помощи контроллера. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lincolndsp 0 23 октября, 2007 Опубликовано 23 октября, 2007 · Жалоба удалось реализовать ГОСТ в режиме гаммирования. При этом и ключ и тестовый вектор данных хранился прямо в коде. Хочу сейчас поработать с хранением ключа в памяти. Подскажите пожалуйста как это сделать, а то создаю я Distributed Memory в LogicCore, а на третьем этапе требует коэффициенты какие-то и дальше стрелка неактивна, запутался я. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BSV 0 23 октября, 2007 Опубликовано 23 октября, 2007 · Жалоба Забейте на LogiCore. Синтезируйте распределенную память 32х16 сами - это около десятка строчек. Запись ключа реализуйте по отдельной шине (можно сделать любой ширины кратной 8: 8, 16, 32 - чем шире, тем быстрее будет грузиться ключ). Адрес записи выбирайте тем же счетчиком, что и при шифровании. Нужно будет предусмотреть специальный режим (ветку управляющего автомата) для загрузки ключа. Можно еще использовать двухпортовую блочную память - синтезируется так же просто (примеры есть в Language Templates ISE). В этом случае запись можно выполнять по другому порту. При выполнении операций шифрования нужный ключ выбирать старшими битами адреса. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lincolndsp 0 23 октября, 2007 Опубликовано 23 октября, 2007 · Жалоба Забейте на LogiCore. Синтезируйте распределенную память 32х16 сами - это около десятка строчек. Запись ключа реализуйте по отдельной шине (можно сделать любой ширины кратной 8: 8, 16, 32 - чем шире, тем быстрее будет грузиться ключ). Адрес записи выбирайте тем же счетчиком, что и при шифровании. Нужно будет предусмотреть специальный режим (ветку управляющего автомата) для загрузки ключа. Можно еще использовать двухпортовую блочную память - синтезируется так же просто (примеры есть в Language Templates ISE). В этом случае запись можно выполнять по другому порту. При выполнении операций шифрования нужный ключ выбирать старшими битами адреса. спасибо за ответ :a14: ....хочу спросить, какое различие распределенной и двухпортовой блочной памяти, как организуется запись и считывание данных. Просто я еще не работал с памятью, а нагляднее было бы, если посмотреть на примерчик. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться