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

Думаю, что это ничего не даст, т.к. по-прежнему остается узел замены (подстановки) после сумматора и XOR для получения промежуточного результата. Более того, при использовании оного 32-разрядного сумматора будет синтезирована одна цепочка элементов ускоренного переноса, а при 32-х одноразрядных (если я правильно Вас понял и имеется в виду сумматор, прибавляющий один бит к 32-х разрядному числу) будет аж 32 таких цепочки переноса, что положительно не сможет сказаться на производительности.

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


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

Подскажите кнонить можно ли реализовать ГОСТ на Altera MAX3000 с задаваемыми извне S-box-ами (из внешнего ПЗУ)

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


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

У кого-нибудь остались исходники ГОСТ 28147-89? Желательно на verilog'e. Очень нужно для диплома!!! :help::help: :help:

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


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

Реализовал я ГОСТ2814789 с использованием регистовой памяти, теперь мне нужно написать реализацию с использованием блочной памяти... Только вот я даже не знаю с чего начать, в интернете вообще ничего нет по этому поводу... Не подскажете с чего начать?

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


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

Реализовал я ГОСТ2814789 с использованием регистовой памяти, теперь мне нужно написать реализацию с использованием блочной памяти... Только вот я даже не знаю с чего начать, в интернете вообще ничего нет по этому поводу... Не подскажете с чего начать?
С того, что такое блочная память и как она работает.

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


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

С того, что такое блочная память и как она работает.

Ну это ежу понятно, мне бы примеры посмотреть, только вот нигде не могу найти... :smile3046:

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


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

Вы же Альтеру применяете, если я правильно помню - так и смотрите в хэндбуке по используемому семейству. Для начала этого вполне достаточно.

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


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

Доброе время суток! Плз, помогите :blush: Неправильно обрабатываются данные в таблице замен (не могу понять почему). Подскажите, плз, что я неправильно делаю/пишу. Просьба сильно не пинать, я не очень давно работаю с VHDL, но очень хочу разобраться :blush: . Всем спасибо за любой совет :) .

test_1.vhd

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


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

А что надо было сделать-то? В смысле какой режим реализовать и какие возможности (загрузка ключа, например) обеспечить? Текста много, понятного мало. Например, я вообще не понял зачем нужна ф-ия S_block.

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


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

Загружается ключ и два 32-битовые блоки информации. Используется режим простой замены. S_block - поблочная замена (я немного переписала :blush: )

function S_Block (x: in STD_LOGIC_VECTOR(31 downto 0)) return STD_LOGIC_VECTOR is

variable m_bit, z_bit: unsigned(31 downto 0);

variable m, z1,z2,z3,z4,z5,z6,z7,z8: STD_LOGIC_VECTOR(3 downto 0);

variable z : STD_LOGIC_VECTOR(31 downto 0);

begin

m_bit:= unsigned(x);

m_bit:= m_bit srl 28;

m:= std_logic_vector(m_bit);

z1:= S1(m);

 

m_bit:= unsigned(x);

m_bit:= m_bit sll 4;

m_bit:= m_bit srl 28;

m:= std_logic_vector(m_bit);

z2:= S2(m);

 

m_bit:=unsigned(x);

m_bit:= m_bit sll 8;

m_bit:= m_bit srl 28;

m:= std_logic_vector(m_bit);

z3:= S3(m);

 

m_bit:=unsigned(x);

m_bit:= m_bit sll 12;

m_bit:= m_bit srl 28;

m:= std_logic_vector(m_bit);

z4:= S4(m);

 

m_bit:=unsigned(x);

m_bit:= m_bit sll 16;

m_bit:= m_bit srl 28;

m:= std_logic_vector(m_bit);

z5:= S5(m);

 

m_bit:=unsigned(x);

m_bit:= m_bit sll 20;

m_bit:= m_bit srl 28;

m:= std_logic_vector(m_bit);

z6:= S6(m);

 

m_bit:=unsigned(x);

m_bit:= m_bit sll 24;

m_bit:= m_bit srl 28;

m:= std_logic_vector(m_bit);

z7:= S7(m);

 

m_bit:=unsigned(x);

m_bit:= m_bit sll 28;

m_bit:= m_bit srl 28;

m:= std_logic_vector(m_bit);

z8:= S8(m);

 

z:=z1&z2&z3&z4&z5&z6&z7&z8;

 

return z;

end S_Block;

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


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

S_block - поблочная замена (я немного переписала :blush: )

Понял, тогда присутствующая в исходнике ф-ия S выглядит гораздо лучше и должна делать ровно то же самое, что и ваша S_Block.

 

В приложенном файле мой вариант реализации ядра ГОСТ (без управления) с фиксированным узлом замены. Весь Ваш УЗ вбивать было лень, поэтому первая подстановка повторена 8 раз.

Как управлять:

  • Загрузка исходных данных в накопители - 2 такта (R2_SEL = R1_SEL = '1'; R2_WE = R1_WE = '1')
  • Собственно, преобразование - 31 такт (R2_SEL = R1_SEL = '0'; R2_WE = R1_WE = '1', KEY_SEL = 0..70..70..77..0) после этого в R1 будет лежать младшее слово результата.
  • 32-й такт преобразования - 1 такт (R2_SEL = R1_SEL = '0'; R2_WE = R1_WE = '1') после этого в R1 будет лежать старшее слово результата.
  • При загрузке ключа нужно выбрать соответствующий подключ сигналом KEY_SEL и выставить один из сигналов KEY_WE.
Для расшифрования порядок подключей обратный.

Для реализации управления Вам понадобится автомат (state machine), счетчик (циклов), подстановка (память, ROM 16x3) для выбора подключа.

 

Кроме того, неплохо бы Вам ознакомиться с этой темой, для уяснения сущности HDL-языков.

gost_core_sfix.vhd

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


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

BSV, сделал ядро ГОСТа похожее на ваше - спасибо за пример красивого описания. У Вас не возникало проблемы с задержками - когда сигнал управления входом регистра N1 (или N2) запаздывал по отношению к клоку, по которому в свою очередь, происходила загрузка в регистр N1 (или N2) - получалось что нужно отслеживать количество тактов (это для случая когда загружаем в накопители данные - два такта. первый такт из text_in32 в N2, второй такт тотже что и первый плюс из N2 в N1) ?

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


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

Выкладываю на линч свою реализацию (по сути модификацию). Делалось с оглядкой на вариант предложенный BSV.

Производительность - 4 такта на 33Мгц (115 МБит/с) на спартане 6. Ресурсов, естественно, потребуется больше.

gost_core_2.vhd

Изменено пользователем Niklv

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


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

Выкладываю на линч свою реализацию (по сути модификацию). Делалось с оглядкой на вариант предложенный BSV.

Производительность - 4 такта на 33Мгц (115 МБит/с) на спартане 6. Ресурсов, естественно, потребуется больше.

 

Что-то не понял, у вас все 32 цикла шифрования выполняются за 4 такта или это один цикл?

Просто моя реализация выполняется за 32 такта + 1 такт на изменение таблицы/ключа. Ну и все стадии выполняются по тактовой, т.е синхронно.

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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