
- •Курсовий проект (пояснювальна записка)
- •Часть 1
- •Алгоритмическое изображение схемы
- •Порядок выполнения работы
- •Верхний используется для выбора адреса памяти, по которому будет осуществлена запись одного из кодов символа исходных данных в блок памяти ram8_16.
- •Ramdp 8_16 – блок памяти, куда записываются и откуда читаются коды символов, подлежащих шифрованию; Power3 – умножитель, выполняющий операцию возведения в 3-ю степень;
- •Cхема проекта
- •Часть 2
- •Алгоритмическое изображение схемы
- •Порядок выполнения работы
- •Дешифрованая информация
- •Листинг программы проекта
- •Конвертирования программных величин
Алгоритмическое изображение схемы
Порядок выполнения работы
Шифруемая информация:
Klepach Olga 431
Операции шифрования/дешифрования согласно заданию:
шифрующая операция – возведение в степень и определение остатка ;
дешифрующая операция возведение в другую степень и определение остатка.
Входные порты:
сlk - тактовый сигнал;
clk2 – тактовый сигнал, для вывода информации на выходные порты;
rd_da_fa – сигнал разрешения чтения данных из файла;
wr_da_fa – сигнал разрешения записи дешифрованных данных в файл;
Выходные порты:
shufr_r – закодированная (зашифрованная) информация в формате real;
deshufr_ch – декодированная (расшифрованная информация) в формате character.
Исходная шифруемая информация и информация о шифрующих ключах размещается в массивах определяемых пользователем, размеры которых соответствуют объему хранимой в них информации.
В теле архитектуры программы используются несколько внутренних переменных, которые используются в процессе конвертирования данных из массивов в процессах их шифрования и расшифровывания. В проекте используется библиотека пользователя WORK. Она используется только в пределах этого проекта. В этой библиотеке находятся пакеты, содержащие конвертирующие функции различных вариаций.
Исходная шифруемая информация и информация о шифрующих ключах хранится в файлах операционной системы (ОС). Информация, хранимая в файлах ОС, проинициализирована массивам, объявленным пользователем в теле проекта.
В
теле архитектуры программы используются
несколько внутренних переменных, которые
используются в процессе конвертирования
данных из массивов в процессах их
шифрования и расшифровывания.
В проекте используется библиотечный пакет TEXTIO, в котором определен специальный файловый тип TEXT, дающий возможность получать доступ к текстовой информации, а также выполнять над этими файлами операции READ, WRITE, APPEND.
Дешифрованая информация
Листинг программы проекта
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use std.textio.all;
USE IEEE.STD_LOGIC_TEXTIO.ALL;
library work;
use work.converters.all;
entity lr22 is
port( clk : in STD_LOGIC;
clk_out : in STD_LOGIC;
rd_da_fa : in STD_LOGIC;
wr_da_fa : in STD_LOGIC;
cod : out string (1 to 32));
end lr22;
architecture lr22_arch of lr22 is
type masiv_int is array (1 to 32) of integer;
type mas_std is array (1 to 32)of std_logic_vector(0 to 7);
signal mas1_inf : string (1 to 32);
signal s_data_char: string (1 to 32);
signal s_decod_mess_char, s_cod_mess_char: string (1 to 32);
signal s_data_int : masiv_int;
signal s_data_vec, s_shifr_vec, s_data_vec2 : mas_std;
signal s_cod_mess_int: masiv_int ;
signal s_decod_int: masiv_int ;
signal cod_r_num, cod_l_num : masiv_int;
-------------------------------------
-- Функц³я шифрування----------------
-------------------------------------
function codfunc (X: integer; Y: integer ) return integer is
variable tmp : integer ;
begin
for i in 1 to Y-1 loop
if i = 1 then
tmp := X**2;
else
tmp := X*tmp;
tmp := tmp mod 35;
end if;
end loop ;
return tmp;
end codfunc;
-------------------------------------
function decodfunc (X: integer; Y: integer ) return integer is
variable tmp : integer ;
begin
for i in 1 to Y-1 loop
if i = 1 then
tmp :=
X**2;
else
tmp := X*tmp;
tmp := tmp mod 35;
end if;
end loop ;
return tmp;
end decodfunc;
-------------------------------------
begin
read_proc: process(clk)
variable read_buf1 : string(1 to 32);
variable wid1 : natural;
file read_cont_data : TEXT open READ_MODE is "message.txt";
begin
if clk'event and clk ='1' and rd_da_fa ='1' then
FILE_OPEN(read_cont_data,"message.txt", READ_MODE);
READ(read_cont_data, read_buf1, wid1);
mas1_inf <= read_buf1;
end if;
FILE_CLOSE(read_cont_data);
end process;
process(clk)
variable text_int, kluch_int, tmp,tmp2,tmp3, kod_tmp : integer ;
variable r_num, l_num, conv_temp : integer ;
variable r_num2, l_num2, cod_r_num2, cod_l_num2, conv_temp2 : integer ;
begin
if clk'event and clk = '1' then
s_data_char <= mas1_inf;
for i in 1 to 32 loop
s_data_vec(i) <= CONV(s_data_char(i));
s_data_int(i) <= CONV (s_data_vec(i));
conv_temp := s_data_int(i);
r_num := conv_temp mod 16;
l_num := (conv_temp - r_num)/16;
cod_r_num(i)<= codfunc(r_num, 5) ;
cod_l_num(i)<= codfunc(l_num, 5) ;
s_cod_mess_int(i) <= cod_l_num(i)*16+ cod_r_num(i);
s_shifr_vec(i) <= CONV8(s_cod_mess_int(i));
s_cod_mess_char(i) <= CONV (s_shifr_vec(i));
end loop ;
cod <= s_cod_mess_char;
for i in 1 to 32 loop
cod_r_num2:=
codfunc(cod_r_num(i), 29) ;
cod_l_num2:= codfunc(cod_l_num(i), 29) ;
s_decod_int(i) <= cod_l_num2*16+ cod_r_num2;
s_data_vec2(i) <= CONV8(s_decod_int(i));
s_decod_mess_char(i) <= CONV (s_data_vec2(i));
end loop ;
end if;
end process;
write_proc : process (clk_out)
variable wr_buf1, wr_buf2 : string(1 to 32);
file wtite_cont : TEXT open write_MODE is;
file wtite_cont2 : TEXT open write_MODE is;
begin
if clk_out'event and clk_out = '1' and wr_da_fa = '1' then
for i in 1 to 32 loop
wr_buf1(i):= s_cod_mess_char(i);
wr_buf2(i):= s_decod_mess_char(i);
end loop;
FILE_OPEN(wtite_cont, , write_MODE );
FILE_OPEN(wtite_cont2, , write_MODE );
WRITE(wtite_cont, wr_buf1);
WRITE(wtite_cont2, wr_buf2);
end if;
FILE_CLOSE(wtite_cont);
FILE_CLOSE(wtite_cont2);
end process;
end lr22_arch;