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

Может кто-то реализовывал ГОСТ на VHDL. Я написала проект на VHDL, при создании конфигурации

Number of 4 input LUTs: 6,648 out of 4,704 141% (OVERMAPPED)

Number of occupied Slices: 4,024 out of 2,352 171% (OVERMAPPED)

Total Number 4 input LUTs: 7,632 out of 4,704 162% (OVERMAPPED)

Как решить вопрос с перегрузкой? Помогите, плз :help:

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


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

Либо использовать кристалл (микросхему) большей емкости, либо пытаться создать более оптимальную с точки зрения занимаемых ресурсов архитектуру проекта. По первому варианту кристалл подобрать можно, по второму существует естественно некоторый предел, при котором в меньший объем уже не уложиться.

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


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

Так же проверьте какой тип оптимизации стоит в настройках синтезатора, если стоит скорость измените на оптимизацию по занимаемому месту.

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


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

Гость urri

Несколько лет назад делал ГОСТ для Spartan 2E. Частота 160 Мгц. Одновременно 4 слова за 132 такта. Поместилось всё в S2E-50 и осталось еще много места т.к. это был блок в составе хэша. Делал и для Altera Flex10K, но там не так удобно делать блоки замены.

 

Несколько лет назад делал ГОСТ для Spartan 2E. Частота 160 Мгц. Одновременно 4 слова за 132 такта. Поместилось всё в S2E-50 и осталось еще много места т.к. это был блок в составе хэша. Делал и для Altera Flex10K, но там не так удобно делать блоки замены.

Соврал. Непосредственно ГОСТ занимал 36 тактов

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


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

Интересно, как это у Вас 160 МГц в Спартане 2е получилось :07: ? У меня выходило максимум 70 и заоптимизировано было по самое некуда.

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


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

Интересно, как это у Вас 160 МГц в Спартане 2е получилось ?
Присоединяюсь к вопросу! Имхо предел для кристалла для этого алгоритма где-то в районе 90-100 МГц (у меня выходило около 83МГц).

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


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

Гость urri
Интересно, как это у Вас 160 МГц в Спартане 2е получилось :07: ? У меня выходило максимум 70 и заоптимизировано было по самое некуда.

Вечером посмотрю что осталось, бо прошло уже лет 5 и после я уже над этим не работал. Плата осталась, проект по-моему тоже. Над оптимизацией работал очень много.

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


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

BSV

Может под словом частота подразумевалось 160 мбит/с? Тогда, IMHO, результат вполне реальный.

Или конвеерная схема. Но это уже, по ресурсам, как минимум 2 устройства. Два независимых устройства, IMHO, поудобнее будут.

urri

Присоединяюсь к BSV.

Интересно как сложный вычислитель может работать на такой частоте. А то слышал жалобы, что Spartan 2E на 133 МГц работает нестабильно.

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


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

Может кто-то реализовывал ГОСТ на VHDL. Я написала проект на VHDL, при создании конфигурации

Number of 4 input LUTs: 6,648 out of 4,704 141% (OVERMAPPED)

Number of occupied Slices: 4,024 out of 2,352 171% (OVERMAPPED)

Total Number 4 input LUTs: 7,632 out of 4,704 162% (OVERMAPPED)

Как решить вопрос с перегрузкой? Помогите, плз :help:

 

Alice, а вы вообще использовали синхронную реализацию (занимает 33 и более тактов) или это единый асинхронный компонент?

И ещё. В большинстве FPGA есть встроенные блоки DRAM. Их можно применять для ГОСТ-а, например, чтобы упаковать в них ключ - немало экономит остальные ресурсы.

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


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

Вот здесь лежат исходники для ГОСТ 28147-89 для режима простой замены

http://www.sendspace.com/file/haeds8

Режим с обратной связью предлагаю доделать самостоятельно, если он нужен.

 

Я исходники подкорректировал сейчас (поубирал лишнее), так что с некоторой вероятностью могут не заработать - негде проверить.

ЗЫ. Ежели кто присоветует чего - как лучше сделать, то буду только рад. Единственное: ключ хранится в специально выделенном для него блоке DRAM, и это не устранимо. В моём случае.

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


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

Спасибо за исходники.

Но отсутсвует файл с описанием архитектуры компонента gost key_mem.

 

еще объясните пожалуйста как работает компонент gost89_nowkey:

 

непонятно взаимодействие с компонентом LUT4 и что выполняет этот компонент

 

gost89_nowkey.

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


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

gost key_mem - это двухпортовая память, правда с разной разрядностью по портам (названия сигналов полностью отражают их назначение) - на распределенной памяти. Сделано по всей видимости потому, что ключи грузятся по 16-разрядной шине.

 

gost89_nowkey - элемент, преобразующий номер цикла шифрования в номер ключа. При зашифровании в простой замене ключи подаются в порядке 0 1 2 3 ... 7 0 ... 7 0 ... 7 7 ... 0, при расшифровании - в обратном. LUT4 - это look-up-table - элемент, позволяющий построить логическую функцию от 4-х переменных, является основным элементом реализации логических функций в различных ПЛИС (Xilinx и Altera, за остальных не скажу). INIT в данном случае задает таблицу истинности логической функции.

 

Добавлю свои 5 копеек. Шина 64 разряда для загрузки и выдачи результата - зряшнее расходование ресурсов. Достаточно 32 без снижения скорости. (дело в том, что после предпоследнего цикла алгоритма в накопителе N1 лежит младшее 32-разрядное слово результата, а после последнего - старшее, по описанию после последнего цикла они меняются местами.) В предлагаемом варианте совершенно не рассмотрен такой эротичный и каверзный момент, как загрузка узла замены (подстановки). Видимо, предполагается работа с фиксированным узлом замены, однако не всегда это допустимо. Кроме того, что касается выработки адреса для ключа - незачем удлинять дополнительной логикой и без того длинную цепочку (32 разрядный сумматор, две памяти), лучше построить хитрый счетчик, с которого непосредственно и брать адрес для выборки нужной части ключа (если для хранения ключа используется память с регистром на выходе, т.е. синхронная, то пойдет и так). Также, этот участок кода

--  Каждый цикл выполняется это
Datareg1_proc : process (Clk, CalcEn, LongWordIn, Xorer, DataReg1)
begin
if StartDelay = '1' then 
    DataReg1 <= LongWordIn (31 downto  0);
    DataReg2 <= LongWordIn (63 downto 32);
elsif rising_edge(Clk) then
    DataReg1 <= Xorer;
    DataReg2 <= DataReg1;
end if;
end process;

вряд ли будет нормально синтезировано.

А правильно так:

--  Каждый цикл выполняется это
Datareg1_proc : process (Clk)
begin
  if rising_edge(Clk) then
    if StartDelay = '1' then 
      DataReg1 <= LongWordIn (31 downto  0);
      DataReg2 <= LongWordIn (63 downto 32);
    else
      DataReg1 <= Xorer;
      DataReg2 <= DataReg1;
    end if;
  end if;
end process;

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


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

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

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

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

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

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

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

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

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

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