Розроблення VHDL-опису та синтез елементів пристроїв для зашифрування інформації
Зміст
ЗАВДАННЯ
. Теоретичні
відомості
.1 Опис алгоритму
шифрування
.2 Схема шифрування
алгоритм DES
.3 Початкова
перестановка
.4 Цикли шифрування
.5 Основна функція
шифрування (функція Фейстеля)
.6 Генерування ключів
ki
.7 Кінцева
перестановка
. Розроблення
поведінкового опису пристрою
.1 Розроблення
структурного опису пристрою
Висновки
Список використаної
літератури
ЗАВДАННЯ
шифрування
програма алгоритм
Відповідно до НЗК (номера залікової книжки) розробити
VHDL-програму опису заданого пристрою (шифратора або його частини). В програмі
передбачити поведінковий та структурний опис пристрою. За розробленою програмою
синтезувати заданий пристрій.
Таблиця 1. Тип шифру
НЗК
|
Тип шифру
|
Парний
|
Афінний
|
Непарний
|
DES
|
Таблиця 2. Варіанти афінного шифру
a mod 10
|
0
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
Лінійний афінний
шифр і - го порядку
|
х
|
|
х
|
|
х
|
|
х
|
|
х
|
|
Узагальнений
афінний шифр і - го порядку
|
|
х
|
|
х
|
|
х
|
|
х
|
|
х
|
Таблиця 3. Варіанти елементів шифру DES
a mod 10
|
0
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
Генератор підключів
раундів
|
х
|
|
х
|
|
х
|
|
х
|
|
х
|
|
Блок підстановки в
S-блоках
|
|
х
|
|
х
|
|
х
|
|
х
|
|
х
|
Примітки:
Ø а - число, що визначається двома
останніми цифрами НЗК;
Ø і - остання цифра НЗК при і>1;
Ø і = 10 - якщо остання цифра НЗК нуль;
Ø і = 11 - якщо остання цифра НЗК
одиниця.
Номер залікової книжки : 0809003= 03;
mod 10 = 3
Номер залікової книжки є непарний, отже потрібно розробити
програму опису шифратора, що реалізує підстановку в S - блоках шифру DES.
1.
Теоретичні відомості
.1
Опис алгоритму шифрування
DES (Data Encryption Standard) - симетричний <#"601177.files/image001.gif">
Процес шифрування полягає в початковій перестановці, 16
циклах шифрування і кінцевій перестановці.
1.3 Початкова перестановка
Початковий текст T (блок 64 біт) перетворюється за допомогою
початкової перестановки IP яка визначається таблицею:
58
|
50
|
42
|
34
|
26
|
18
|
10
|
2
|
60
|
52
|
44
|
36
|
28
|
20
|
12
|
4
|
62
|
54
|
46
|
38
|
30
|
22
|
14
|
6
|
64
|
56
|
48
|
40
|
32
|
24
|
16
|
8
|
57
|
49
|
41
|
33
|
25
|
17
|
9
|
1
|
59
|
51
|
43
|
35
|
27
|
19
|
11
|
3
|
61
|
53
|
45
|
37
|
29
|
21
|
13
|
5
|
63
|
55
|
47
|
39
|
31
|
23
|
15
|
7
|
По таблиці перші 3 біта результуючого блоку IP(T) після
початкової перестановки IP є бітами 58, 50, 42 вхідного блоку Т, а його 3
останні біта є бітами 23, 15, 7 вхідного блоку.
1.4
Цикли шифрування
Отриманий після початкової перестановки 64-бітний блок ІР(Т)
використовується в 16-циклах перетворення Фейстеля.
Розбити ІР(Т) на дві частини L0,R0, де L0,R0 - відповідно 32
старших біта і 32 молодших біта блока T0 IP(T) = L0R0
Нехай Ti−1 = Li−1Ri−1 результат (i-1)
ітерації, тоді результат i-ої ітерації Ti = LiRi визначається:
=Ri−1
Ліва половина Li рівна правій половині попереднього вектора Li−1Ri−1.
А права половина Ri - це бітове множення Li−1 і f(Ri−1,ki)
по модулю 2.
В 16-циклах перетворення Фейстеля функція
<#"601177.files/image003.gif">
Ключ ki, i=1,...,16, функція f, перестановка IP і IP -1 такі ж як і в
процесі шифрування.
Переглянувши принцип функціонування алгоритма DES
можна приступити до реалізації завдання по підстановці S - блоків.
2.
Розроблення поведінкового опису пристрою
library IEEE;IEEE.STD_LOGIC_1164.all;S_Matrix is(i:in
STD_LOGIC_VECTOR(0 to 5); o:out STD_LOGIC_VECTOR(0 to 3));S_Matrix;S1 of
S_Matrix isi select(0) <= '1' when
"000000"|"000100"|"001010"|"001100"|"001110"|"010010"|"010110"|"011010"|
"000011"|"001001"|"001101"|"010001"|"010101"|"010111"|"011001"|"011111"|
"100100"|"100110"|"101000"|"101110"|"110000"|"110010"|"110100"|"111010"|
"100001"|"100011"|"100101"|"101011"|"110011"|"110111"|"111001"|"111111",
'0' when others;i select(1) <= '1' when
"000000"|"000010"|"000100"|"001010"|"010100"|"010110"|"011000"|"011110"|
"000011"|"000101"|"000111"|"001001"|"001101"|"010011"|"010101"|"011011"|
"100000"|"100100"|"101000"|"101010"|"110000"|"110010"|"110110"|"111100"|
"100001"|"100011"|"101001"|"101111"|"110001"|"110111"|"111101"|"111111",
'0' when others;i select(2) <= '1' when
"000000"|"001000"|"001010"|"001100"|"010000"|"010010"|"010100"|"011110"|
"000011"|"000101"|"001001"|"001011"|"010001"|"010011"|"010111"|"011101"|
"100100"|"101010"|"101100"|"101110"|"110000"|"110110"|"111000"|"111010"|
"100001"|"100111"|"101111"|"110011"|"110101"|"110111"|"111001"|"111101",
'0' when others;i select(3) <= '1' when
"000100"|"000110"|"001010"|"001100"|"010000"|"011000"|"011010"|"011110"|
"000011"|"000101"|"001101"|"001111"|"010111"|"011001"|"011011"|"011101"|
"100010"|"101000"|"101110"|"110000"|"110100"|"110110"|"111000"|"111100"|
"100001"|"101011"|"101101"|"101111"|"110001"|"110011"|"110101"|"111111",
'0' when others;S1;S2 of S_Matrix isi select(0) <=
'1' when
"000000"|"000100"|"000110"|"001010"|"010000"|"010110"|"011000"|"011110"|
"000011"|"001001"|"001101"|"001111"|"010001"|"010111"|"011011"|"011101"|
"100010"|"100110"|"101000"|"101100"|"110010"|"110100"|"111000"|"111110"|
"100001"|"100011"|"100101"|"101011"|"110001"|"110111"|"111101"|"111111",
'0' when others;i select(1) <= '1' when
"000000"|"000110"|"001000"|"001110"|"010010"|"010110"|"011000"|"011100"|
"000011"|"000101"|"000111"|"001001"|"001111"|"010001"|"011001"|"011111"|
"100010"|"100100"|"101010"|"101100"|"110000"|"110100"|"110110"|"111110"|
"100001"|"101011"|"101101"|"110011"|"110101"|"110111"|"111011"|"111101",
'0' when others;i select(2) <= '1' when
"000000"|"000110"|"001000"|"001010"|"001100"|"010010"|"010100"|"011110"|
"000001"|"000111"|"001001"|"001011"|"001111"|"010111"|"011001"|"011101"|
"100010"|"100100"|"100110"|"101000"|"110110"|"111010"|"111100"|"111110"|
"100101"|"101001"|"101011"|"101111"|"110001"|"110011"|"110101"|"111101",
'0' when others;i select(3) <= '1' when
"000000"|"000010"|"001010"|"001100"|"010000"|"010010"|"010110"|"011100"|
"000001"|"000011"|"000111"|"001001"|"010101"|"011011"|"011101"|"011111"|
"100100"|"100110"|"101100"|"101110"|"110000"|"111000"|"111010"|"111110"|
"100001"|"100111"|"101001"|"101011"|"110001"|"110101"|"111011"|"111111",
'0' when others;S2;S3 of S_Matrix isi select(0) <=
'1' when
"000000"|"000100"|"000110"|"001100"|"010010"|"010100"|"011000"|"011110"|
"000001"|"000111"|"001111"|"010011"|"010111"|"011001"|"011011"|"011101"|
"100000"|"100110"|"101000"|"101010"|"110000"|"110110"|"111010"|"111100"|
"100011"|"100101"|"101011"|"101101"|"110011"|"110101"|"111001"|"111111",
'0' when others;i select(1) <= '1' when
"000110"|"001000"|"001100"|"001110"|"010010"|"010100"|"010110"|"011010"|
"000001"|"000011"|"001011"|"001101"|"010101"|"010111"|"011001"|"011101"|
"100000"|"100010"|"100100"|"101010"|"110110"|"111000"|"111100"|"111110"|
"100101"|"101001"|"101111"|"110001"|"110011"|"110101"|"111011"|"111111",
'0' when others;i select(2) <= '1' when
"000000"|"000110"|"001000"|"001010"|"001100"|"010110"|"011000"|"011100"|
"000011"|"001001"|"001101"|"001111"|"010001"|"010111"|"011011"|"011101"|
"100010"|"101010"|"101100"|"110000"|"110100"|"111010"|"111100"|"111110"|
"100011"|"101001"|"101111"|"110011"|"110101"|"110111"|"111001"|"111101",
'0' when others;i select(3) <= '1' when
"000100"|"001010"|"001100"|"001110"|"010000"|"010010"|"010110"|"011000"|
"000001"|"000011"|"000111"|"001001"|"010101"|"011011"|"011101"|"011111"|
"100000"|"100110"|"101010"|"101100"|"110000"|"110010"|"111000"|"111110"|
"100001"|"100101"|"101011"|"101111"|"110011"|"110111"|"111001"|"111011",
'0' when others;S3;S4 of S_Matrix isi select(0) <=
'1' when
"000010"|"000100"|"001100"|"001110"|"010100"|"011000"|"011010"|"011110"|
"000001"|"000011"|"000101"|"001011"|"010111"|"011011"|"011101"|"011111"|
"100000"|"100100"|"101000"|"101010"|"101110"|"110000"|"110110"|"111100"|
"100011"|"101001"|"101101"|"101111"|"110001"|"110111"|"111001"|"111111",
'0' when others;i select(1) <= '1' when
"000000"|"000010"|"000100"|"001010"|"010110"|"011010"|"011100"|"011110"|
"000001"|"000111"|"001001"|"001011"|"010001"|"010011"|"010111"|"011101"|
"100010"|"101000"|"101100"|"101110"|"110000"|"110110"|"111000"|"111110"|
"100011"|"100111"|"101101"|"110011"|"110101"|"111001"|"111011"|"111111",
'0' when others;i select(2) <= '1' when
"000000"|"000100"|"000110"|"001010"|"001110"|"010010"|"011000"|"011110"|
"000101"|"001001"|"001011"|"001111"|"010011"|"010101"|"011011"|"011101"|
"100000"|"100010"|"101010"|"101100"|"110000"|"110100"|"110110"|"111010"|
"100001"|"100011"|"100111"|"101001"|"110111"|"111011"|"111101"|"111111",
'0' when others;i select(3) <= '1' when
"000000"|"000010"|"000110"|"001100"|"010000"|"010110"|"011000"|"011110"|
"000001"|"000101"|"000111"|"001011"|"001111"|"010011"|"011001"|"011111"|
"100100"|"101010"|"101100"|"101110"|"110000"|"110010"|"110100"|"111000"|
"100001"|"100011"|"101011"|"101101"|"110001"|"110101"|"110111"|"111011",
'0' when others;S4;S5 of S_Matrix isi select(0) <=
'1' when
"000010"|"001010"|"001100"|"010000"|"010110"|"011000"|"011100"|"011110"|
"000001"|"000011"|"000111"|"001101"|"010101"|"010111"|"011011"|"011101"|
"100110"|"101000"|"101010"|"101110"|"110000"|"110010"|"110100"|"111110"|
"100001"|"100011"|"100101"|"101011"|"101111"|"110011"|"110111"|"111001",
'0' when others;i select(1) <= '1' when
"000010"|"000100"|"001000"|"001110"|"010010"|"010110"|"011000"|"011100"|
"000001"|"000111"|"001001"|"001011"|"001101"|"010001"|"010101"|"011111"|
"100000"|"101010"|"101100"|"110000"|"110100"|"110110"|"111000"|"111110"|
"100101"|"100111"|"101011"|"101111"|"110001"|"110011"|"111011"|"111101",
'0' when others;i select(2) <= '1' when
"000000"|"001000"|"001010"|"001100"|"001110"|"010100"|"010110"|"011100"|
"000001"|"000011"|"000101"|"001011"|"010101"|"010111"|"011001"|"011111"|
"100010"|"100110"|"101000"|"101100"|"110000"|"111000"|"111010"|"111110"|
"100001"|"100111"|"101011"|"101101"|"110001"|"110011"|"111001"|"111111",
'0' when others;i select(3) <= '1' when
"000110"|"001000"|"001100"|"010010"|"010100"|"010110"|"011000"|"011110"|
"000011"|"001011"|"001101"|"001111"|"010001"|"010101"|"011001"|"011011"|
"100100"|"100110"|"101010"|"101100"|"110000"|"110010"|"110110"|"111010"|
"100001"|"100111"|"101001"|"101111"|"110011"|"110111"|"111101"|"111111",
'0' when others;S5;S6 of S_Matrix isi select(0) <=
'1' when
"000000"|"000100"|"000110"|"001000"|"001110"|"010010"|"011000"|"011110"|
"000001"|"000011"|"001011"|"001101"|"010101"|"010111"|"011011"|"011111"|
"100000"|"100010"|"100100"|"101010"|"101100"|"110110"|"111010"|"111100"|
"100111"|"101001"|"101101"|"101111"|"110001"|"110011"|"111101"|"111111",
'0' when others;i select(1) <= '1' when
"000000"|"000110"|"001100"|"010010"|"010110"|"011000"|"011010"|"011100"|
"000011"|"000101"|"001001"|"001011"|"001111"|"010001"|"010101"|"010111"|
"100010"|"100100"|"100110"|"101100"|"110000"|"110100"|"111010"|"111110"|
"100001"|"100111"|"101011"|"101101"|"110011"|"110111"|"111001"|"111111",
'0' when others;i select(2) <= '1' when
"000100"|"000110"|"001010"|"001100"|"010100"|"011000"|"011010"|"011110"|
"000001"|"000011"|"000111"|"001001"|"010001"|"010111"|"011011"|"011101"|
"100010"|"100100"|"101000"|"101110"|"110000"|"110110"|"111100"|"111110"|
"100011"|"100101"|"101101"|"101111"|"110001"|"110011"|"110111"|"111001",
'0' when others;i select(3) <= '1' when
"000010"|"000110"|"001000"|"010010"|"010100"|"011010"|"011100"|"011110"|
"000011"|"001001"|"001101"|"001111"|"010011"|"010101"|"011011"|"011101"|
"100000"|"100100"|"100110"|"101110"|"110000"|"111000"|"111010"|"111100"|
"100011"|"101001"|"101011"|"101101"|"110001"|"110101"|"110111"|"111111",
'0' when others;S6;S7 of S_Matrix isi select(0) <=
'1' when
"000010"|"000110"|"001000"|"001100"|"001110"|"010010"|"010100"|"011010"|
"000001"|"000101"|"001011"|"001111"|"010001"|"010111"|"011011"|"011101"|
"100100"|"100110"|"101000"|"101110"|"110000"|"110010"|"110110"|"111100"|
"100011"|"100101"|"100111"|"101101"|"110001"|"110111"|"111001"|"111111",
'0' when others;i select(1) <= '1' when
"000000"|"000110"|"001000"|"001110"|"010010"|"010110"|"011000"|"011100"|
"000001"|"000111"|"001001"|"010001"|"010101"|"010111"|"011011"|"011111"|
"100010"|"100110"|"101000"|"101100"|"101110"|"110010"|"110100"|"111010"|
"100001"|"100101"|"101011"|"101111"|"110011"|"110111"|"111001"|"111111",
'0' when others;i select(2) <= '1' when
"000010"|"000100"|"000110"|"001000"|"010000"|"010110"|"011010"|"011100"|
"000101"|"000111"|"001111"|"010001"|"010011"|"011001"|"011011"|"011111"|
"100100"|"101010"|"101100"|"101110"|"110000"|"110010"|"110100"|"111110"|
"100001"|"100011"|"101101"|"101111"|"110111"|"111001"|"111011"|"111101",
'0' when others;i select(3) <= '1' when
"000010"|"001000"|"001110"|"010000"|"010100"|"010110"|"011000"|"011110"|
"000001"|"000101"|"000111"|"001011"|"001101"|"010011"|"010101"|"011011"|
"100000"|"100100"|"100110"|"101010"|"101100"|"110010"|"111010"|"111100"|
"100011"|"100101"|"101001"|"101111"|"110001"|"110011"|"110111"|"111101",
'0' when others;S7;S8 of S_Matrix isi select(0) <=
'1' when
"000000"|"000100"|"001010"|"001100"|"010000"|"010010"|"010110"|"011100"|
"000011"|"000101"|"000111"|"001001"|"010001"|"010111"|"011011"|"011101"|
"100010"|"101000"|"101010"|"101100"|"110100"|"110110"|"111000"|"111110"|
"100101"|"101011"|"101101"|"101111"|"110001"|"110011"|"110101"|"111111",
'0' when others;i select(1) <= '1' when
"000000"|"000110"|"001000"|"001010"|"010110"|"011000"|"011100"|"011110"|
"000011"|"000101"|"001101"|"001111"|"010001"|"010011"|"010101"|"011011"|
"100000"|"100100"|"101010"|"101100"|"110010"|"110110"|"111000"|"111100"|
"100101"|"100111"|"101001"|"101111"|"110001"|"110011"|"111011"|"111101",
'0' when others;i select(2) <= '1' when
"000010"|"001000"|"001010"|"001100"|"010000"|"010100"|"010110"|"011110"|
"000011"|"001001"|"001011"|"001101"|"010101"|"010111"|"011011"|"011111"|
"100000"|"100010"|"101100"|"101110"|"110010"|"110100"|"111000"|"111010"|
"100001"|"100101"|"100111"|"101011"|"110001"|"111001"|"111101"|"111111",
'0' when others;i select(3) <= '1' when
"000000"|"001010"|"001100"|"001110"|"010010"|"010100"|"011000"|"011110"|
"000001"|"000011"|"000101"|"001011"|"001101"|"010011"|"010111"|"011101"|
"100000"|"100010"|"100110"|"101000"|"110110"|"111000"|"111010"|"111100"|
"100011"|"100111"|"101111"|"110001"|"110101"|"111001"|"111011"|"111111",
'0' when others;S8;
Список ідентифікаторів
Назва
ідентифікатора
|
Значення
ідентифікатора
|
і
|
Вхідний вектор
довжиною 6 біт, який використовується для підстановки в S-блоках.
|
о
|
Вихідний вектор
довжиною 4 біта, який утворюється в результаті перетворення в S-блоці.
|
2.1
Розроблення структурного опису пристрою
Код бібліотеки:
library ieee;ieee.std_logic_1164.all;my_func isS1(in1:
in STD_LOGIC_VECTOR(0 to 5); out1: out STD_LOGIC_VECTOR(0 to
3));component;S2(in2: in STD_LOGIC_VECTOR(0 to 5); out2: out STD_LOGIC_VECTOR(0
to 3));component;S3(in3: in STD_LOGIC_VECTOR(0 to 5); out3: out
STD_LOGIC_VECTOR(0 to 3));component;S4(in4: in STD_LOGIC_VECTOR(0 to 5); out4:
out STD_LOGIC_VECTOR(0 to 3));component;S5(in5: in STD_LOGIC_VECTOR(0 to 5);
out5: out STD_LOGIC_VECTOR(0 to 3));component;S6(in6: in STD_LOGIC_VECTOR(0 to
5); out6: out STD_LOGIC_VECTOR(0 to 3));component;S7(in7: in STD_LOGIC_VECTOR(0
to 5); out7: out STD_LOGIC_VECTOR(0 to 3));component;S8(in8: in
STD_LOGIC_VECTOR(0 to 5); out8: out STD_LOGIC_VECTOR(0 to 3));component;package
my_func;
-Тіло пакету.body my_func ispackage body
my_func;ieee;ieee.std_logic_1164.all;S1 is(in1: in STD_LOGIC_VECTOR(0 to 5);
out1: out STD_LOGIC_VECTOR(0 to 3));S1;model_S1 of S1 isin1 select(0) <= '1'
when
"000000"|"000100"|"001010"|"001100"|"001110"|"010010"|"010110"|"011010"|
"000011"|"001001"|"001101"|"010001"|"010101"|"010111"|"011001"|"011111"|
"100100"|"100110"|"101000"|"101110"|"110000"|"110010"|"110100"|"111010"|
"100001"|"100011"|"100101"|"101011"|"110011"|"110111"|"111001"|"111111",
'0' when others;in1 select(1) <= '1' when
"000000"|"000010"|"000100"|"001010"|"010100"|"010110"|"011000"|"011110"|
"000011"|"000101"|"000111"|"001001"|"001101"|"010011"|"010101"|"011011"|
"100000"|"100100"|"101000"|"101010"|"110000"|"110010"|"110110"|"111100"|
"100001"|"100011"|"101001"|"101111"|"110001"|"110111"|"111101"|"111111",
'0' when others;in1 select(2) <= '1' when
"000000"|"001000"|"001010"|"001100"|"010000"|"010010"|"010100"|"011110"|
"000011"|"000101"|"001001"|"001011"|"010001"|"010011"|"010111"|"011101"|
"100100"|"101010"|"101100"|"101110"|"110000"|"110110"|"111000"|"111010"|
"100001"|"100111"|"101111"|"110011"|"110101"|"110111"|"111001"|"111101",
'0' when others;in1 select(3) <= '1' when
"000100"|"000110"|"001010"|"001100"|"010000"|"011000"|"011010"|"011110"|
"000011"|"000101"|"001101"|"001111"|"010111"|"011001"|"011011"|"011101"|
"100010"|"101000"|"101110"|"110000"|"110100"|"110110"|"111000"|"111100"|
"100001"|"101011"|"101101"|"101111"|"110001"|"110011"|"110101"|"111111",
'0' when
others;model_S1;ieee;ieee.std_logic_1164.all;S2 is(in2: in STD_LOGIC_VECTOR(0
to 5); out2: out STD_LOGIC_VECTOR(0 to 3));S2;model_S2 of S2 isin2 select(0)
<= '1' when
"000000"|"000100"|"000110"|"001010"|"010000"|"010110"|"011000"|"011110"|
"000011"|"001001"|"001101"|"001111"|"010001"|"010111"|"011011"|"011101"|
"100001"|"100011"|"100101"|"101011"|"110001"|"110111"|"111101"|"111111",
'0' when others;in2 select(1) <= '1' when
"000000"|"000110"|"001000"|"001110"|"010010"|"010110"|"011000"|"011100"|
"000011"|"000101"|"000111"|"001001"|"001111"|"010001"|"011001"|"011111"|
"100010"|"100100"|"101010"|"101100"|"110000"|"110100"|"110110"|"111110"|
"100001"|"101011"|"101101"|"110011"|"110101"|"110111"|"111011"|"111101",
'0' when others;in2 select(2) <= '1' when
"000000"|"000110"|"001000"|"001010"|"001100"|"010010"|"010100"|"011110"|
"000001"|"000111"|"001001"|"001011"|"001111"|"010111"|"011001"|"011101"|
"100010"|"100100"|"100110"|"101000"|"110110"|"111010"|"111100"|"111110"|
"100101"|"101001"|"101011"|"101111"|"110001"|"110011"|"110101"|"111101",
'0' when others;in2 select(3) <= '1' when
"000000"|"000010"|"001010"|"001100"|"010000"|"010010"|"010110"|"011100"|
"000001"|"000011"|"000111"|"001001"|"010101"|"011011"|"011101"|"011111"|
"100100"|"100110"|"101100"|"101110"|"110000"|"111000"|"111010"|"111110"|
"100001"|"100111"|"101001"|"101011"|"110001"|"110101"|"111011"|"111111",
'0' when
others;model_S2;ieee;ieee.std_logic_1164.all;S3 is(in3: in STD_LOGIC_VECTOR(0
to 5); out3: out STD_LOGIC_VECTOR(0 to 3));S3;model_S3 of S3 isin3 select(0)
<= '1' when
"000000"|"000100"|"000110"|"001100"|"010010"|"010100"|"011000"|"011110"|
"000001"|"000111"|"001111"|"010011"|"010111"|"011001"|"011011"|"011101"|
"100000"|"100110"|"101000"|"101010"|"110000"|"110110"|"111010"|"111100"|
"100011"|"100101"|"101011"|"101101"|"110011"|"110101"|"111001"|"111111",
'0' when others;in3 select(1) <= '1' when
"000110"|"001000"|"001100"|"001110"|"010010"|"010100"|"010110"|"011010"|
"000001"|"000011"|"001011"|"001101"|"010101"|"010111"|"011001"|"011101"|
"100000"|"100010"|"100100"|"101010"|"110110"|"111000"|"111100"|"111110"|
"100101"|"101001"|"101111"|"110001"|"110011"|"110101"|"111011"|"111111",
'0' when others;in3 select(2) <= '1' when
"000000"|"000110"|"001000"|"001010"|"001100"|"010110"|"011000"|"011100"|
"000011"|"001001"|"001101"|"001111"|"010001"|"010111"|"011011"|"011101"|
"100010"|"101010"|"101100"|"110000"|"110100"|"111010"|"111100"|"111110"|
"100011"|"101001"|"101111"|"110011"|"110101"|"110111"|"111001"|"111101",
'0' when others;in3 select(3) <= '1' when
"000100"|"001010"|"001100"|"001110"|"010000"|"010010"|"010110"|"011000"|
"000001"|"000011"|"000111"|"001001"|"010101"|"011011"|"011101"|"011111"|
"100000"|"100110"|"101010"|"101100"|"110000"|"110010"|"111000"|"111110"|
"100001"|"100101"|"101011"|"101111"|"110011"|"110111"|"111001"|"111011",
'0' when
others;model_S3;ieee;ieee.std_logic_1164.all;S4 is(in4: in STD_LOGIC_VECTOR(0
to 5); out4: out STD_LOGIC_VECTOR(0 to 3));S4;model_S4 of S4 isin4 select(0)
<= '1' when
"000010"|"000100"|"001100"|"001110"|"010100"|"011000"|"011010"|"011110"|
"000001"|"000011"|"000101"|"001011"|"010111"|"011011"|"011101"|"011111"|
"100000"|"100100"|"101000"|"101010"|"101110"|"110000"|"110110"|"111100"|
"100011"|"101001"|"101101"|"101111"|"110001"|"110111"|"111001"|"111111",
'0' when others;in4 select(1) <= '1' when
"000000"|"000010"|"000100"|"001010"|"010110"|"011010"|"011100"|"011110"|
"000001"|"000111"|"001001"|"001011"|"010001"|"010011"|"010111"|"011101"|
"100010"|"101000"|"101100"|"101110"|"110000"|"110110"|"111000"|"111110"|
"100011"|"100111"|"101101"|"110011"|"110101"|"111001"|"111011"|"111111",
'0' when others;in4 select(2) <= '1' when
"000000"|"000100"|"000110"|"001010"|"001110"|"010010"|"011000"|"011110"|
"000101"|"001001"|"001011"|"001111"|"010011"|"010101"|"011011"|"011101"|
"100000"|"100010"|"101010"|"101100"|"110000"|"110100"|"110110"|"111010"|
"100001"|"100011"|"100111"|"101001"|"110111"|"111011"|"111101"|"111111",
'0' when others;in4 select(3) <= '1' when
"000000"|"000010"|"000110"|"001100"|"010000"|"010110"|"011000"|"011110"|
"000001"|"000101"|"000111"|"001011"|"001111"|"010011"|"011001"|"011111"|
"100100"|"101010"|"101100"|"101110"|"110000"|"110010"|"110100"|"111000"|
"100001"|"100011"|"101011"|"101101"|"110001"|"110101"|"110111"|"111011",
'0' when
others;model_S4;ieee;ieee.std_logic_1164.all;S5 is(in5: in STD_LOGIC_VECTOR(0
to 5); out5: out STD_LOGIC_VECTOR(0 to 3));S5;model_S5 of S5 isin5 select(0)
<= '1' when
"000010"|"001010"|"001100"|"010000"|"010110"|"011000"|"011100"|"011110"|
"000001"|"000011"|"000111"|"001101"|"010101"|"010111"|"011011"|"011101"|
"100110"|"101000"|"101010"|"101110"|"110000"|"110010"|"110100"|"111110"|
"100001"|"100011"|"100101"|"101011"|"101111"|"110011"|"110111"|"111001",
'0' when others;in5 select(1) <= '1' when
"000010"|"000100"|"001000"|"001110"|"010010"|"010110"|"011000"|"011100"|
"000001"|"000111"|"001001"|"001011"|"001101"|"010001"|"010101"|"011111"|
"100000"|"101010"|"101100"|"110000"|"110100"|"110110"|"111000"|"111110"|
"100101"|"100111"|"101011"|"101111"|"110001"|"110011"|"111011"|"111101",
'0' when others;in5 select(2) <= '1' when
"000000"|"001000"|"001010"|"001100"|"001110"|"010100"|"010110"|"011100"|
"000001"|"000011"|"000101"|"001011"|"010101"|"010111"|"011001"|"011111"|
"100010"|"100110"|"101000"|"101100"|"110000"|"111000"|"111010"|"111110"|
"100001"|"100111"|"101011"|"101101"|"110001"|"110011"|"111001"|"111111",
'0' when others;in5 select(3) <= '1' when
"000110"|"001000"|"001100"|"010010"|"010100"|"010110"|"011000"|"011110"|
"000011"|"001011"|"001101"|"001111"|"010001"|"010101"|"011001"|"011011"|
"100100"|"100110"|"101010"|"101100"|"110000"|"110010"|"110110"|"111010"|
"100001"|"100111"|"101001"|"101111"|"110011"|"110111"|"111101"|"111111",
'0' when others;model_S5;ieee;ieee.std_logic_1164.all;S6
is(in6: in STD_LOGIC_VECTOR(0 to 5); out6: out STD_LOGIC_VECTOR(0 to
3));S6;model_S6 of S6 isin6 select(0) <= '1' when
"000000"|"000100"|"000110"|"001000"|"001110"|"010010"|"011000"|"011110"|
"000001"|"000011"|"001011"|"001101"|"010101"|"010111"|"011011"|"011111"|
"100000"|"100010"|"100100"|"101010"|"101100"|"110110"|"111010"|"111100"|
"100111"|"101001"|"101101"|"101111"|"110001"|"110011"|"111101"|"111111",
'0' when others;in6 select(1) <= '1' when
"000000"|"000110"|"001100"|"010010"|"010110"|"011000"|"011010"|"011100"|
"000011"|"000101"|"001001"|"001011"|"001111"|"010001"|"010101"|"010111"|
"100010"|"100100"|"100110"|"101100"|"110000"|"110100"|"111010"|"111110"|
"100001"|"100111"|"101011"|"101101"|"110011"|"110111"|"111001"|"111111",
'0' when others;in6 select(2) <= '1' when
"000100"|"000110"|"001010"|"001100"|"010100"|"011000"|"011010"|"011110"|
"000001"|"000011"|"000111"|"001001"|"010001"|"010111"|"011011"|"011101"|
"100010"|"100100"|"101000"|"101110"|"110000"|"110110"|"111100"|"111110"|
"100011"|"100101"|"101101"|"101111"|"110001"|"110011"|"110111"|"111001",
'0' when others;in6 select(3) <= '1' when
"000010"|"000110"|"001000"|"010010"|"010100"|"011010"|"011100"|"011110"|
"000011"|"001001"|"001101"|"001111"|"010011"|"010101"|"011011"|"011101"|
"100000"|"100100"|"100110"|"101110"|"110000"|"111000"|"111010"|"111100"|
"100011"|"101001"|"101011"|"101101"|"110001"|"110101"|"110111"|"111111",
'0' when
others;model_S6;ieee;ieee.std_logic_1164.all;S7 is(in7: in STD_LOGIC_VECTOR(0
to 5); out7: out STD_LOGIC_VECTOR(0 to 3));S7;model_S7 of S7 isin7 select(0)
<= '1' when
"000010"|"000110"|"001000"|"001100"|"001110"|"010010"|"010100"|"011010"|
"000001"|"000101"|"001011"|"001111"|"010001"|"010111"|"011011"|"011101"|
"100100"|"100110"|"101000"|"101110"|"110000"|"110010"|"110110"|"111100"|
"100011"|"100101"|"100111"|"101101"|"110001"|"110111"|"111001"|"111111",
'0' when others;in7 select(1) <= '1' when
"000000"|"000110"|"001000"|"001110"|"010010"|"010110"|"011000"|"011100"|
"000001"|"000111"|"001001"|"010001"|"010101"|"010111"|"011011"|"011111"|
"100010"|"100110"|"101000"|"101100"|"101110"|"110010"|"110100"|"111010"|
"100001"|"100101"|"101011"|"101111"|"110011"|"110111"|"111001"|"111111",
'0' when others;in7 select(2) <= '1' when
"000010"|"000100"|"000110"|"001000"|"010000"|"010110"|"011010"|"011100"|
"000101"|"000111"|"001111"|"010001"|"010011"|"011001"|"011011"|"011111"|
"100100"|"101010"|"101100"|"101110"|"110000"|"110010"|"110100"|"111110"|
"100001"|"100011"|"101101"|"101111"|"110111"|"111001"|"111011"|"111101",
'0' when others;in7 select(3) <= '1' when
"000010"|"001000"|"001110"|"010000"|"010100"|"010110"|"011000"|"011110"|
"000001"|"000101"|"000111"|"001011"|"001101"|"010011"|"010101"|"011011"|
"100000"|"100100"|"100110"|"101010"|"101100"|"110010"|"111010"|"111100"|
"100011"|"100101"|"101001"|"101111"|"110001"|"110011"|"110111"|"111101",
'0' when
others;model_S7;ieee;ieee.std_logic_1164.all;S8 is(in8: in STD_LOGIC_VECTOR(0
to 5); out8: out STD_LOGIC_VECTOR(0 to 3));S8;model_S8 of S8 isin8 select(0)
<= '1' when
"000000"|"000100"|"001010"|"001100"|"010000"|"010010"|"010110"|"011100"|
"000011"|"000101"|"000111"|"001001"|"010001"|"010111"|"011011"|"011101"|
"100010"|"101000"|"101010"|"101100"|"110100"|"110110"|"111000"|"111110"|
"100101"|"101011"|"101101"|"101111"|"110001"|"110011"|"110101"|"111111",
'0' when others;in8 select(1) <= '1' when
"000000"|"000110"|"001000"|"001010"|"010110"|"011000"|"011100"|"011110"|
"000011"|"000101"|"001101"|"001111"|"010001"|"010011"|"010101"|"011011"|
"100000"|"100100"|"101010"|"101100"|"110010"|"110110"|"111000"|"111100"|
"100101"|"100111"|"101001"|"101111"|"110001"|"110011"|"111011"|"111101",
'0' when others;in8 select(2) <= '1' when
"000010"|"001000"|"001010"|"001100"|"010000"|"010100"|"010110"|"011110"|
"000011"|"001001"|"001011"|"001101"|"010101"|"010111"|"011011"|"011111"|
"100000"|"100010"|"101100"|"101110"|"110010"|"110100"|"111000"|"111010"|
"100001"|"100101"|"100111"|"101011"|"110001"|"111001"|"111101"|"111111",
'0' when others;in8 select(3) <= '1' when
"000000"|"001010"|"001100"|"001110"|"010010"|"010100"|"011000"|"011110"|
"000001"|"000011"|"000101"|"001011"|"001101"|"010011"|"010111"|"011101"|
"100000"|"100010"|"100110"|"101000"|"110110"|"111000"|"111010"|"111100"|
"100011"|"100111"|"101111"|"110001"|"110101"|"111001"|"111011"|"111111",
'0' when others;model_S8;
Код програми:ieee, my_lib;ieee.std_logic_1164.all,
my_lib.my_func.all;DES is(my_in: in STD_LOGIC_VECTOR(0 to 5); my_out: out
STD_LOGIC_VECTOR(0 to 3));DES;S of DES isS1(in1: in STD_LOGIC_VECTOR(0 to 5);
out1: out STD_LOGIC_VECTOR(0 to 3));component;S2(in2: in STD_LOGIC_VECTOR(0 to
5); out2: out STD_LOGIC_VECTOR(0 to 3));component;S3(in3: in STD_LOGIC_VECTOR(0
to 5); out3: out STD_LOGIC_VECTOR(0 to 3));component;S4(in4: in
STD_LOGIC_VECTOR(0 to 5); out4: out STD_LOGIC_VECTOR(0 to 3));component;S5(in5:
in STD_LOGIC_VECTOR(0 to 5); out5: out STD_LOGIC_VECTOR(0 to
3));component;S6(in6: in STD_LOGIC_VECTOR(0 to 5); out6: out STD_LOGIC_VECTOR(0
to 3));component;S7(in7: in STD_LOGIC_VECTOR(0 to 5); out7: out
STD_LOGIC_VECTOR(0 to 3));component;S8(in8: in STD_LOGIC_VECTOR(0 to 5); out8:
out STD_LOGIC_VECTOR(0 to 3));component;, x2, x3, x4, x5, x6, x7, x8:
STD_LOGIC_VECTOR(0 to 5);, out2, out3, out4, out5, out6, out7, out8:
STD_LOGIC_VECTOR(0 to 3);: S1 port map (x1, out1);: S2 port map (x2, out2);: S3
port map (x3, out3);: S4 port map (x4, out4);: S5 port map (x5, out5);: S6 port
map (x6, out6);: S7 port map (x7, out7);: S8 port map (x8, out8);S;
Список ідентифікаторів
Назва
ідентифікатора
|
Значення
ідентифікатора
|
x1
|
Вхідний вектор
довжиною 6 біт, який використовується для підстановки в першому
S-блоці.
|
x2
|
Вхідний вектор
довжиною 6 біт, який використовується для підстановки в другому
S-блоці.
|
x3
|
Вхідний вектор
довжиною 6 біт, який використовується для підстановки в третьому
S-блоці.
|
x4
|
Вхідний вектор
довжиною 6 біт, який використовується для підстановки в четвертому
S-блоці.
|
x5
|
Вхідний вектор
довжиною 6 біт, який використовується для підстановки в п’ятому
S-блоці.
|
x6
|
Вхідний вектор
довжиною 6 біт, який використовується для підстановки в шостому
S-блоці.
|
x7
|
Вхідний вектор
довжиною 6 біт, який використовується для підстановки в сьомому
S-блоці.
|
x8
|
Вхідний вектор
довжиною 6 біт, який використовується для підстановки в восьмому
S-блоці.
|
out1
|
Вихідний вектор
довжиною 4 біта, який утворюється в результаті перетворення в першому S-блоці.
|
out2
|
Вихідний вектор
довжиною 4 біта, який утворюється в результаті перетворення в другому S-блоці.
|
out3
|
Вихідний вектор
довжиною 4 біта, який утворюється в результаті перетворення в третьому S-блоці.
|
out4
|
Вихідний вектор
довжиною 4 біта, який утворюється в результаті перетворення в четвертому S-блоці.
|
out5
|
Вихідний вектор
довжиною 4 біта, який утворюється в результаті перетворення в п’ятому S-блоці.
|
out6
|
Вихідний вектор
довжиною 4 біта, який утворюється в результаті перетворення в шостому S-блоці.
|
out7
|
Вихідний вектор
довжиною 4 біта, який утворюється в результаті перетворення в сьомому S-блоці.
|
out8
|
Вихідний вектор
довжиною 4 біта, який утворюється в результаті перетворення в восьмому S-блоці.
|
Висновки
В результаті виконання даної роботи по розробленню VHDL опису та синтезу елементів пристрою
для реалізації підстановки в S-блоках алгоритму DES була написана програма.
Перший лістинг програми представляє собою поведінковий опис
пристрою.
Другий лістинг являє собою структурну форму опису пристрою.
Після проведення симуляції роботи даних програм в середовищі
САПР Aldec Riviera 2004, були отримані результати
роботи, які були представлені у вигляді двійкових діаграм. При симуляції обох
програм ми отримали одинаковий результат, що вказує направельність результату.
Список
використаної літератури
1 Бибило П.Н. Синтез логических схем с
использованием языка VHDL. М.: Солон-Р, 2002.
2 Дьяков И.А. Моделирование цифровых и
микропроцессорных систем. Язык VHDL
Зотов В. Ю. Проектирование цифровых устройств
на основе ПЛИС фирмы XILINX в САПР WebPACK ISE. - М.: Горячая линия-Телеком.
2003.
Кнышев Д. А., Кузелин М. О. ПЛИС фирмы
XILINX: описание структуры основных семейств. - М.: ДОДЭКА. 2001.
Стешенко В. Б. ПЛИС фирмы ALTERA:
проектирование устройств обработки сигналов. - М.: ДОДЭКА. 2000.
Суворова Е. А., Шейнин Ю. Е. Проектирование
цифровых систем на VHDL. - СПб.: БХВ-Петербург. 2003.