- •Курсовий проект (пояснювальна записка)
- •Часть 1
- •Алгоритмическое изображение схемы
- •Порядок выполнения работы
- •Верхний используется для выбора адреса памяти, по которому будет осуществлена запись одного из кодов символа исходных данных в блок памяти ram8_16.
- •Ramdp 8_16 – блок памяти, куда записываются и откуда читаются коды символов, подлежащих шифрованию; Power3 – умножитель, выполняющий операцию возведения в 3-ю степень;
- •Cхема проекта
- •Часть 2
- •Алгоритмическое изображение схемы
- •Порядок выполнения работы
- •Дешифрованая информация
- •Листинг программы проекта
- •Конвертирования программных величин
Конвертирования программных величин
library IEEE;
use IEEE.STD_LOGIC_1164.all;
package CONVERTERS is
function CONV (X :STD_LOGIC_VECTOR) return BIT_VECTOR;
function CONV (X :BIT_VECTOR) return STD_LOGIC_VECTOR;
function CONV (X :STD_LOGIC_VECTOR (7 downto 0)) return CHARACTER;
function CONV (X :CHARACTER) return STD_LOGIC_VECTOR;
function CONV (X :STD_LOGIC_VECTOR) return INTEGER;
function CONV8 (X :INTEGER) return STD_LOGIC_VECTOR;
end CONVERTERS;
package body CONVERTERS is
-----------------------------------------------------------------------------
function CONV (X :STD_LOGIC_VECTOR) return BIT_VECTOR is
constant XMAP :BIT :='0';
variable RESULT :BIT_VECTOR (X'RANGE);
begin
for i in RESULT'RANGE loop
case X(i) is
when '0' | 'L' => RESULT(i) := '0';
when '1' | 'H' => RESULT(i) := '1';
when others => RESULT(i) := XMAP;
end case;
end loop;
return RESULT;
end CONV;
------------------------------------------------------------------------------
-- From BIT_VECTOR to STD_LOGIC_VECTOR converter
------------------------------------------------------------------------------
function CONV (X :BIT_VECTOR) return STD_LOGIC_VECTOR is
variable RESULT :STD_LOGIC_VECTOR (X'RANGE);
begin
for i in RESULT'RANGE loop
case X(i) is
when '0' => RESULT(i) := '0';
when '1' => RESULT(i) := '1';
end case;
end loop;
return RESULT;
end CONV;
------------------------------------------------------------------------------
-- From STD_LOGIC_VECTOR to CHARACTER converter
------------------------------------------------------------------------------
function CONV (X :STD_LOGIC_VECTOR (7 downto 0)) return CHARACTER is
constant XMAP :INTEGER :=0;
variable TEMP :INTEGER :=0;
begin
for i in X'RANGE loop
TEMP:=TEMP*2;
case X(i) is
when '0' | 'L' => null;
when '1' | 'H' => TEMP :=TEMP+1;
when others => TEMP :=TEMP+XMAP;
end case;
end loop;
return CHARACTER'VAL(TEMP);
end CONV;
------------------------------------------------------------------------------
-- From CHARACTER to STD_LOGIC_VECTOR (7 downto 0) converter
------------------------------------------------------------------------------
function CONV (X :CHARACTER) return STD_LOGIC_VECTOR is
variable RESULT :STD_LOGIC_VECTOR (7 downto 0);
variable TEMP :INTEGER :=CHARACTER'POS(X);
begin
for i in RESULT'REVERSE_RANGE loop
case TEMP mod 2 is
when 0 => RESULT(i):='0';
when 1 => RESULT(i):='1';
when others => null;
end case;
TEMP:=TEMP/2;
end loop;
return RESULT;
end CONV;
------------------------------------------------------------------------------
-- From STD_LOGIC_VECTOR to unsigned INTEGER converter
------------------------------------------------------------------------------
function CONV (X :STD_LOGIC_VECTOR) return INTEGER is
constant XMAP :INTEGER :=0;
variable RESULT :INTEGER :=0;
begin
for i in X'RANGE loop
RESULT:=RESULT*2;
case X(i) is
when '0' | 'L' => null;
when '1' | 'H' => RESULT :=RESULT+1;
when others => RESULT :=RESULT+XMAP;
end case;
end loop;
return RESULT;
end CONV;
------------------------------------------------------------------------------
-- From INTEGER to 8-bit STD_LOGIC_VECTOR converter
------------------------------------------------------------------------------
function CONV8 (X :INTEGER) return STD_LOGIC_VECTOR is
constant L :INTEGER :=8;
variable RESULT :STD_LOGIC_VECTOR (L-1 downto 0);
variable TEMP :INTEGER;
begin
if X<0 then
TEMP:=(2**RESULT'LENGTH)+X;
else
TEMP:=X;
end if;
for i in RESULT'REVERSE_RANGE loop
case TEMP mod 2 is
when 0 => RESULT(i):='0';
when 1 => RESULT(i):='1';
when others => null;
end case;
TEMP:=TEMP/2;
end loop;
return RESULT;
end;
end CONVERTERS;
В
ременные
диаграммы работы данной программы
ВЫВОДЫ
В данной части проекта я разработала криптографический процессор для выполнения операций шифрования и дешифрования текстовой информации. Для считывания и обработки данных я использовала специальную библиотеку с функциями конвертации. Вторая часть проекта была ревлизована в программе Active HDL. После написания кода программы на языке HDL работа программы была передставлена на временной диаграмме данной схемы.
ЛИТЕРАТУРА:
1. Герасименко В.А. Защита информации в автоматизированных системах обработки данных: в 2-х кн. / Герасименко В.А. - М. Энергоатомиздат, 1994. – 746 с.
2. Угрюмов Е.П. Цифровая схемотехника. – СПб.: БХВ – Петербург, 2000. – 528 с.
3. ДСТУ 3212-95. Микросхемы интегрированные. Классификация и система условных обозначений. Введен в 1994 г.
4. Грушевский Р. и др. Проектирование систем на микросхемах программируемой логики. Учебное пособие – СПб.: БХВ-Петербург, 2002. – 623 с.
5. Корченко А.Г., Тимошенко Н.П. и др., VHDL: Справочное пособие по основам языка. М: «Додэка ХХ1», 2008 – 224 с.: ил.
6. Соловьев В.В. VHDL’92. Новые свойства языка описания аппаратуры. /Пер. с англ./ - М: Радио и связь, 1995. – 256 с.
7. Суворова Е.А., Шейнин Ю.Е. Проектирование цифровых систем на VHDL. Учебное пособие. – СПб.: БХВ-Петербург, 2002. –560 с.
8. Тимошенко Н.П., Щербак Л.Н. и др. Системы автоматизированного проектирования, CD “Віртуальний університет”, ІЗДН, 2005
