Розроблення VHDL-опису та синтез елементів пристроїв для зашифрування інформації
Розробка VHDL-програми та синтез елементів пристрою для реалізації підстановки в S-блоках алгоритму DES. Основна функція шифрування (функція Фейстеля). Генерування ключів ki. Проведення симуляції роботи даних програм в середовищі САПР Aldec Riviera 2004.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | украинский |
Дата добавления | 21.01.2013 |
Размер файла | 176,9 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Зміст
- ЗАВДАННЯ
- 1. Теоретичні відомості
- 1.1 Опис алгоритму шифрування
- 1.2 Схема шифрування алгоритм DES
- 1.3 Початкова перестановка
- 1.4 Цикли шифрування
- 1.5 Основна функція шифрування (функція Фейстеля)
- 1.6 Генерування ключів ki
- 1.7 Кінцева перестановка
- 2. Розроблення поведінкового опису пристрою
- 2.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
a = 03;
3 mod 10 = 3
Номер залікової книжки є непарний, отже потрібно розробити програму опису шифратора, що реалізує підстановку в S - блоках шифру DES.
1. Теоретичні відомості
1.1 Опис алгоритму шифрування
DES (Data Encryption Standard) - симетричний алгоритм шифрування, розроблений фірмою IBM і затверджений урядом США в 1977 році, як офіційний стандарт (FIPS 46-3). DES має блоки по 64 біта і 16 циклову структуру Фейстеля, для шифрування використовується ключ довжиною 56 біт. Алгоритм використовує комбінацію нелінійних (S-блоки) і лінійних (перестановки E, IP, IP-1) перетворень.
1.2 Схема шифрування алгоритм DES
Процес шифрування полягає в початковій перестановці, 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 визначається:
Li=Ri?1
Ліва половина Li рівна правій половині попереднього вектора Li?1Ri?1.
А права половина Ri - це бітове множення Li?1 і f(Ri?1,ki) по модулю 2.
В 16-циклах перетворення Фейстеля функція f відіграє роль шифрування.
1.5 Основна функція шифрування (функція Фейстеля)
Аргументами функції f є 32-бітний вектор Ri-1 і 48-бітний ключ ki, які є результатом перетворення 56-бітного початкового ключа шифру k.
Для обчислення функції f використовується функція розширення Е, перетворення S, що складається з 8 перетворень S-блоків S1, S2, S3, …, S8, і перестановка P.
Функція Е розширює 32-бітний вектор Ri-1 до 48-бітного вектора E(Ri-1), шляхом дублювання деяких бітів з Ri-1; при цьому порядок бітів вектора E(Ri-1) вказаний в таблиці(функція розширення):
32 |
1 |
2 |
3 |
4 |
5 |
|
4 |
5 |
6 |
7 |
8 |
9 |
|
8 |
9 |
10 |
11 |
12 |
13 |
|
12 |
13 |
14 |
15 |
16 |
17 |
|
16 |
17 |
18 |
19 |
20 |
21 |
|
20 |
21 |
22 |
23 |
24 |
25 |
|
24 |
25 |
26 |
27 |
28 |
29 |
|
28 |
29 |
30 |
31 |
32 |
1 |
Перші три біта вектора E(Ri-1) є бітами 32, 1, 2 вектора Ri-1. По таблиці видно, що біти 1, 4, 5, 8, 9, 12, 13, 16, 17, 20, 21, 24, 25, 28, 29, 32 дублюються. Останні 3 біта вектора E(Ri-1) - це біти 31, 32, 1 вектора Ri-1. Отриманий після перестановки блок E(Ri-1) складається по модулю 2 з ключами ki і потім представляється у вигляді восьми послідовних блоків B1, B2, ..., B8.
E(Ri-1)=B1B2...B8
Кожний Bj є 6-бітним блоком. Далі кожен з блоків Bj трансформується в 4-бітовий блок B'j за допомогою перетворень Sj. Перетворення Sj визначається наступною таблицею:
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
|||
0 |
14 |
4 |
13 |
1 |
2 |
15 |
11 |
8 |
3 |
10 |
6 |
12 |
5 |
9 |
0 |
7 |
S1 |
|
1 |
0 |
15 |
7 |
4 |
14 |
2 |
13 |
1 |
10 |
6 |
12 |
11 |
9 |
5 |
3 |
8 |
||
2 |
4 |
1 |
14 |
8 |
13 |
6 |
2 |
11 |
15 |
12 |
9 |
7 |
3 |
10 |
5 |
0 |
||
3 |
15 |
12 |
8 |
2 |
4 |
9 |
1 |
7 |
5 |
11 |
3 |
14 |
10 |
0 |
6 |
13 |
||
0 |
15 |
1 |
8 |
14 |
6 |
11 |
3 |
4 |
9 |
7 |
2 |
13 |
12 |
0 |
5 |
10 |
S2 |
|
1 |
3 |
13 |
4 |
7 |
15 |
2 |
8 |
14 |
12 |
0 |
1 |
10 |
6 |
9 |
11 |
5 |
||
2 |
0 |
14 |
7 |
11 |
10 |
4 |
13 |
1 |
5 |
8 |
12 |
6 |
9 |
3 |
2 |
15 |
||
3 |
13 |
8 |
10 |
1 |
3 |
15 |
4 |
2 |
11 |
6 |
7 |
12 |
0 |
5 |
14 |
9 |
||
0 |
10 |
0 |
9 |
14 |
6 |
3 |
15 |
5 |
1 |
13 |
12 |
7 |
11 |
4 |
2 |
8 |
S3 |
|
1 |
13 |
7 |
0 |
9 |
3 |
4 |
6 |
10 |
2 |
8 |
5 |
14 |
12 |
11 |
15 |
1 |
||
2 |
13 |
6 |
4 |
9 |
8 |
15 |
3 |
0 |
11 |
1 |
2 |
12 |
5 |
10 |
14 |
7 |
||
3 |
1 |
10 |
13 |
0 |
6 |
9 |
8 |
7 |
4 |
15 |
14 |
3 |
11 |
5 |
2 |
12 |
||
0 |
7 |
13 |
14 |
3 |
0 |
6 |
9 |
10 |
1 |
2 |
8 |
5 |
11 |
12 |
4 |
15 |
S4 |
|
1 |
13 |
8 |
11 |
5 |
6 |
15 |
0 |
3 |
4 |
7 |
2 |
12 |
1 |
10 |
14 |
9 |
||
2 |
10 |
6 |
9 |
0 |
12 |
11 |
7 |
13 |
15 |
1 |
3 |
14 |
5 |
2 |
8 |
4 |
||
3 |
3 |
15 |
0 |
6 |
10 |
1 |
13 |
8 |
9 |
4 |
5 |
11 |
12 |
7 |
2 |
14 |
||
0 |
2 |
12 |
4 |
1 |
7 |
10 |
11 |
6 |
8 |
5 |
3 |
15 |
13 |
0 |
14 |
9 |
S5 |
|
1 |
14 |
11 |
2 |
12 |
4 |
7 |
13 |
1 |
5 |
0 |
15 |
10 |
3 |
9 |
8 |
6 |
||
2 |
4 |
2 |
1 |
11 |
10 |
13 |
7 |
8 |
15 |
9 |
12 |
5 |
6 |
3 |
0 |
14 |
||
3 |
11 |
8 |
12 |
7 |
1 |
14 |
2 |
13 |
6 |
15 |
0 |
9 |
10 |
4 |
5 |
3 |
||
0 |
12 |
1 |
10 |
15 |
9 |
2 |
6 |
8 |
0 |
13 |
3 |
4 |
14 |
7 |
5 |
11 |
S6 |
|
1 |
10 |
15 |
4 |
2 |
7 |
12 |
9 |
5 |
6 |
1 |
13 |
14 |
0 |
11 |
3 |
8 |
||
2 |
9 |
14 |
15 |
5 |
2 |
8 |
12 |
3 |
7 |
0 |
4 |
10 |
1 |
13 |
11 |
6 |
||
3 |
4 |
3 |
2 |
12 |
9 |
5 |
15 |
10 |
11 |
14 |
1 |
7 |
6 |
0 |
8 |
13 |
||
0 |
4 |
11 |
2 |
14 |
15 |
0 |
8 |
13 |
3 |
12 |
9 |
7 |
5 |
10 |
6 |
1 |
S7 |
|
1 |
13 |
0 |
11 |
7 |
4 |
9 |
1 |
10 |
14 |
3 |
5 |
12 |
2 |
15 |
8 |
6 |
||
2 |
1 |
4 |
11 |
13 |
12 |
3 |
7 |
14 |
10 |
15 |
6 |
8 |
0 |
5 |
9 |
2 |
||
3 |
6 |
11 |
13 |
8 |
1 |
4 |
10 |
7 |
9 |
5 |
0 |
15 |
14 |
2 |
3 |
12 |
||
0 |
13 |
2 |
8 |
4 |
6 |
15 |
11 |
1 |
10 |
9 |
3 |
14 |
5 |
0 |
12 |
7 |
S8 |
|
1 |
1 |
15 |
13 |
8 |
10 |
3 |
7 |
4 |
12 |
5 |
6 |
11 |
0 |
14 |
9 |
2 |
||
2 |
7 |
11 |
4 |
1 |
9 |
12 |
14 |
2 |
0 |
6 |
10 |
13 |
15 |
3 |
5 |
8 |
||
3 |
2 |
1 |
14 |
7 |
4 |
10 |
8 |
13 |
15 |
12 |
9 |
0 |
3 |
5 |
6 |
11 |
Припустимо, що B3 = 101111, і ми хочемо знайти B'3. Перший і останній розряди B3 є двійковим записом числа а, 0<=a<=3, середні 4 розряди представляють число b, 0<=b<=15. Рядки таблиці S3 нумеруються від 0 до 3, стовпці таблиці S3 нумеруються від 0 до 15. Пара чисел (а, b) визначає число, що знаходиться в перетині рядка а і стовпця b. Двійкове представлення цього числа дає B'3. У нашому випадку а = 112 = 3, b = 01112 = 7, а число, визначуване парою (3,7), рівне 7. Його двійкове представлення B'3=0111.
Значення функції f(Ri-1,ki) (32 біт) утворюється перестановкою Р, застосовуючись до 32-бітового блоку B'1B'2...B'8. Перестановка Р задана таблицею перестановки Р:
16 |
7 |
20 |
21 |
29 |
12 |
28 |
17 |
|
1 |
15 |
23 |
26 |
5 |
18 |
31 |
10 |
|
2 |
8 |
24 |
14 |
32 |
27 |
3 |
9 |
|
19 |
13 |
30 |
6 |
22 |
11 |
4 |
25 |
f(Ri-1,ki)=P(B'1B'2...B'8)
Згідно таблиці, перші чотири біта результуючого вектора після дії функції f це біти 16, 7, 20, 21 вектора B'1B'2...B'8.
1.6 Генерування ключів ki.
Ключі ki генеруються з початкового ключа k (64 біт = 8 байтів або 8 символів в ASCII) таким чином. Вісім бітів, що знаходять в позиціях 8, 16, 24, 32, 40, 48, 56, 64 додаються в ключ k таким чином щоб кожен байт містив непарне число одиниць. Це використовується для виявлення помилок при обміні і зберіганні ключів. Потім роблять перестановку для розширеного ключа (окрім бітів, що додаються, 8, 16, 24, 32, 40, 48, 56, 64). Така перестановка визначена як в наступній таблиці:
57 |
49 |
41 |
33 |
25 |
17 |
9 |
1 |
58 |
50 |
42 |
34 |
26 |
18 |
C0 |
|
10 |
2 |
59 |
51 |
43 |
35 |
27 |
19 |
11 |
3 |
60 |
52 |
44 |
36 |
||
63 |
55 |
47 |
39 |
31 |
23 |
15 |
7 |
62 |
54 |
46 |
38 |
30 |
22 |
D0 |
|
14 |
6 |
61 |
53 |
45 |
37 |
29 |
21 |
13 |
5 |
28 |
20 |
12 |
4 |
Ця перестановка визначається двома блоками C0 і D0 по 28 біт кожен. Перші 3 біта C0 є біти 57, 49, 41 розширеного ключа. А перші три біта D0 є біти 63, 55, 47 розширеного ключа. Ci, Di i=1,2,3… получаються з Ci-1, Di-1 одним або двома лівими циклічними зсувами згідно таблиці:
і |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
|
Число зсуву |
1 |
1 |
2 |
2 |
2 |
2 |
2 |
2 |
1 |
2 |
2 |
2 |
2 |
2 |
2 |
1 |
Ключ ki, i=1,...16 складається з 48 біт, вибраних з бітів вектора CiDi (56 біт) згідно таблиці поданої нижче. Перший і другий біти ki є біти 14, 17 вектора CiDi
14 |
17 |
11 |
24 |
1 |
5 |
3 |
28 |
15 |
6 |
21 |
10 |
23 |
19 |
12 |
4 |
|
26 |
8 |
16 |
7 |
27 |
20 |
13 |
2 |
41 |
52 |
31 |
37 |
47 |
55 |
30 |
40 |
|
51 |
45 |
33 |
48 |
44 |
49 |
39 |
56 |
34 |
53 |
46 |
42 |
50 |
36 |
29 |
32 |
1.7 Кінцева перестановка
Кінцева перестановка IP -1 діє на T16 і використовується для відновлення позиції. Вона є зворотньою до перестановки IP. Кінцева перестановка визначається таблицею:
40 |
8 |
48 |
16 |
56 |
24 |
64 |
32 |
39 |
7 |
47 |
15 |
55 |
23 |
63 |
31 |
|
38 |
6 |
46 |
14 |
54 |
22 |
62 |
30 |
37 |
5 |
45 |
13 |
53 |
21 |
61 |
29 |
|
36 |
4 |
44 |
12 |
52 |
20 |
60 |
28 |
35 |
3 |
43 |
11 |
51 |
19 |
59 |
27 |
|
34 |
2 |
42 |
10 |
50 |
18 |
58 |
26 |
33 |
1 |
41 |
9 |
49 |
17 |
57 |
25 |
1.8 Схема розшифрування
При розшифруванні даних всі дії виконуються в зворотному порядку. В 16 циклах розшифрування, на відміну від шифрування за допомогою прямого перетворення Фейстеля, тут використовується зворотне перетворення Фейстеля.
Ri-1=Li
Ключ ki, i=1,...,16, функція f, перестановка IP і IP -1 такі ж як і в процесі шифрування.
Переглянувши принцип функціонування алгоритма DES можна приступити до реалізації завдання по підстановці S - блоків.
2. Розроблення поведінкового опису пристрою
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity S_Matrix is
port (i:in STD_LOGIC_VECTOR(0 to 5); o:out STD_LOGIC_VECTOR(0 to 3));
end S_Matrix;
architecture S1 of S_Matrix is
begin
with i select
o(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;
with i select
o(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;
with i select
o(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;
with i select
o(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;
end S1;
architecture S2 of S_Matrix is
begin
with i select
o(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;
with i select
o(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;
with i select
o(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;
with i select
o(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;
end S2;
architecture S3 of S_Matrix is
begin
with i select
o(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;
with i select
o(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;
with i select
o(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;
with i select
o(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;
end S3;
architecture S4 of S_Matrix is
begin
with i select
o(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;
with i select
o(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;
with i select
o(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;
with i select
o(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;
end S4;
architecture S5 of S_Matrix is
begin
with i select
o(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;
with i select
o(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;
with i select
o(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;
with i select
o(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;
end S5;
architecture S6 of S_Matrix is
begin
with i select
o(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;
with i select
o(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;
with i select
o(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;
with i select
o(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;
end S6;
architecture S7 of S_Matrix is
begin
with i select
o(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;
with i select
o(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;
with i select
o(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;
with i select
o(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;
end S7;
architecture S8 of S_Matrix is
begin
with i select
o(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;
with i select
o(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;
with i select
o(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;
with i select
o(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;
end S8;
Список ідентифікаторів
Назва ідентифікатора |
Значення ідентифікатора |
|
і |
Вхідний вектор довжиною 6 біт, який використовується для підстановки в S-блоках. |
|
о |
Вихідний вектор довжиною 4 біта, який утворюється в результаті перетворення в S-блоці. |
2.1 Розроблення структурного опису пристрою
Код бібліотеки:
library ieee;
use ieee.std_logic_1164.all;
package my_func is
component S1
port(in1: in STD_LOGIC_VECTOR(0 to 5); out1: out STD_LOGIC_VECTOR(0 to 3));
end component;
component S2
port(in2: in STD_LOGIC_VECTOR(0 to 5); out2: out STD_LOGIC_VECTOR(0 to 3));
end component;
component S3
port(in3: in STD_LOGIC_VECTOR(0 to 5); out3: out STD_LOGIC_VECTOR(0 to 3));
end component;
component S4
port(in4: in STD_LOGIC_VECTOR(0 to 5); out4: out STD_LOGIC_VECTOR(0 to 3));
end component;
component S5
port(in5: in STD_LOGIC_VECTOR(0 to 5); out5: out STD_LOGIC_VECTOR(0 to 3));
end component;
component S6
port(in6: in STD_LOGIC_VECTOR(0 to 5); out6: out STD_LOGIC_VECTOR(0 to 3));
end component;
component S7
port(in7: in STD_LOGIC_VECTOR(0 to 5); out7: out STD_LOGIC_VECTOR(0 to 3));
end component;
component S8
port(in8: in STD_LOGIC_VECTOR(0 to 5); out8: out STD_LOGIC_VECTOR(0 to 3));
end component;
end package my_func;
--Тіло пакету.
package body my_func is
end package body my_func;
library ieee;
use ieee.std_logic_1164.all;
entity S1 is
port(in1: in STD_LOGIC_VECTOR(0 to 5); out1: out STD_LOGIC_VECTOR(0 to 3));
end S1;
architecture model_S1 of S1 is
begin
with in1 select
out1(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;
with in1 select
out1(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;
with in1 select
out1(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;
with in1 select
out1(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;
end model_S1;
library ieee;
use ieee.std_logic_1164.all;
entity S2 is
port(in2: in STD_LOGIC_VECTOR(0 to 5); out2: out STD_LOGIC_VECTOR(0 to 3));
end S2;
architecture model_S2 of S2 is
begin
with in2 select
out2(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;
with in2 select
out2(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;
with in2 select
out2(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;
with in2 select
out2(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;
end model_S2;
library ieee;
use ieee.std_logic_1164.all;
entity S3 is
port(in3: in STD_LOGIC_VECTOR(0 to 5); out3: out STD_LOGIC_VECTOR(0 to 3));
end S3;
architecture model_S3 of S3 is
begin
with in3 select
out3(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;
with in3 select
out3(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;
with in3 select
out3(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;
with in3 select
out3(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;
end model_S3;
library ieee;
use ieee.std_logic_1164.all;
entity S4 is
port(in4: in STD_LOGIC_VECTOR(0 to 5); out4: out STD_LOGIC_VECTOR(0 to 3));
end S4;
architecture model_S4 of S4 is
begin
with in4 select
out4(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;
with in4 select
out4(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;
with in4 select
out4(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;
with in4 select
out4(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;
end model_S4;
library ieee;
use ieee.std_logic_1164.all;
entity S5 is
port(in5: in STD_LOGIC_VECTOR(0 to 5); out5: out STD_LOGIC_VECTOR(0 to 3));
end S5;
architecture model_S5 of S5 is
begin
with in5 select
out5(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;
with in5 select
out5(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;
with in5 select
out5(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;
with in5 select
out5(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;
end model_S5;
library ieee;
use ieee.std_logic_1164.all;
entity S6 is
port(in6: in STD_LOGIC_VECTOR(0 to 5); out6: out STD_LOGIC_VECTOR(0 to 3));
end S6;
architecture model_S6 of S6 is
begin
with in6 select
out6(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;
with in6 select
out6(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;
with in6 select
out6(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;
with in6 select
out6(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;
end model_S6;
library ieee;
use ieee.std_logic_1164.all;
entity S7 is
port(in7: in STD_LOGIC_VECTOR(0 to 5); out7: out STD_LOGIC_VECTOR(0 to 3));
end S7;
architecture model_S7 of S7 is
begin
with in7 select
out7(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;
with in7 select
out7(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;
with in7 select
out7(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;
with in7 select
out7(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;
end model_S7;
library ieee;
use ieee.std_logic_1164.all;
entity S8 is
port(in8: in STD_LOGIC_VECTOR(0 to 5); out8: out STD_LOGIC_VECTOR(0 to 3));
end S8;
architecture model_S8 of S8 is
begin
with in8 select
out8(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;
with in8 select
out8(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;
with in8 select
out8(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;
with in8 select
out8(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;
end model_S8;
Код програми:
library ieee, my_lib;
use ieee.std_logic_1164.all, my_lib.my_func.all;
entity DES is
port (my_in: in STD_LOGIC_VECTOR(0 to 5); my_out: out STD_LOGIC_VECTOR(0 to 3));
end DES;
architecture S of DES is
component S1
port(in1: in STD_LOGIC_VECTOR(0 to 5); out1: out STD_LOGIC_VECTOR(0 to 3));
end component;
component S2
port(in2: in STD_LOGIC_VECTOR(0 to 5); out2: out STD_LOGIC_VECTOR(0 to 3));
end component;
component S3
port(in3: in STD_LOGIC_VECTOR(0 to 5); out3: out STD_LOGIC_VECTOR(0 to 3));
end component;
component S4
port(in4: in STD_LOGIC_VECTOR(0 to 5); out4: out STD_LOGIC_VECTOR(0 to 3));
end component;
component S5
port(in5: in STD_LOGIC_VECTOR(0 to 5); out5: out STD_LOGIC_VECTOR(0 to 3));
end component;
component S6
port(in6: in STD_LOGIC_VECTOR(0 to 5); out6: out STD_LOGIC_VECTOR(0 to 3));
end component;
component S7
port(in7: in STD_LOGIC_VECTOR(0 to 5); out7: out STD_LOGIC_VECTOR(0 to 3));
end component;
component S8
port(in8: in STD_LOGIC_VECTOR(0 to 5); out8: out STD_LOGIC_VECTOR(0 to 3));
end component;
signal
x1, x2, x3, x4, x5, x6, x7, x8: STD_LOGIC_VECTOR(0 to 5);
signal
out1, out2, out3, out4, out5, out6, out7, out8: STD_LOGIC_VECTOR(0 to 3);
begin
U1: S1 port map (x1, out1);
U2: S2 port map (x2, out2);
U3: S3 port map (x3, out3);
U4: S4 port map (x4, out4);
U5: S5 port map (x5, out5);
U6: S6 port map (x6, out6);
U7: S7 port map (x7, out7);
U8: S8 port map (x8, out8);
end 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
3 Зотов В. Ю. Проектирование цифровых устройств на основе ПЛИС фирмы XILINX в САПР WebPACK ISE. - М.: Горячая линия-Телеком. 2003.
4 Кнышев Д. А., Кузелин М. О. ПЛИС фирмы XILINX: описание структуры основных семейств. - М.: ДОДЭКА. 2001.
5 Стешенко В. Б. ПЛИС фирмы ALTERA: проектирование устройств обработки сигналов. - М.: ДОДЭКА. 2000.
6 Суворова Е. А., Шейнин Ю. Е. Проектирование цифровых систем на VHDL. - СПб.: БХВ-Петербург. 2003.
Размещено на Allbest.ru
Подобные документы
Опис результату розробки архітектури пристрою та його структурної схеми на рівні міжрегістрових передач. Система для виконання тестування пристрою, результати його симуляції у формі часових діаграм. Cинтез розробленої VHDL-моделі пристрою в ПЛІС.
курсовая работа [1,2 M], добавлен 03.03.2015Відомі підходи до реалізації потокового шифрування даних. Регістр зсуву з оберненими зв’язками. Комбінуючий та фільтруючий генератор. Потоковий шифр Alpha1. Розробка структурної схеми алгоритму шифрування Alpha1. Розробка блоку керування пристрою.
курсовая работа [185,6 K], добавлен 09.04.2013Мова VHDL. Створення проекту для моделювання цифрових і аналогових схем. Синтез і моделювання комбінаційних пристроїв, заданих в табличній формі, за допомогою системи Active-HDL 6.1. Створення ієрархічних структур при проектуванні складних пристроїв.
реферат [287,3 K], добавлен 14.02.2009Процес послідовної передачі даних, режим її здійснення. Типова схема інтерфейсу. Структурна схема модуля шифрування. Розробка генератора псевдовипадкових чисел на основі регістра зсуву з оберненими зв’язками. Симуляція роботи розробленої моделі пристрою.
курсовая работа [594,1 K], добавлен 09.04.2013Синтез на основі поведінкового опису, виконаний розробниками на мові програмування класу HDL, як перспективний напрямок проектування цифрових пристроїв. Опис RISC-архітектури комп'ютерів. VHDL-модель прототипу RISC-комп'ютера. Основні модулі моделей.
курсовая работа [1,1 M], добавлен 23.01.2014Идентификаторы, объекты и операции языка VHDL. Последовательные и параллельные операторы. Описание интерфейса устройства. Синтез схем по описаниям на языке VHDL. Последовательность букв и цифр произвольной длины. Цифровое устройство и его модель.
курсовая работа [132,5 K], добавлен 28.06.2009Вибір засобу виконання поставленої задачі. Функції переривання INT 21h MS DOS, що використані при роботі програм. Функції роботи із DTA та інші функції переривання INT 21h. Функція завершення програми. Розробка програми на Pascal. Допоміжні процедури.
дипломная работа [89,0 K], добавлен 20.01.2009Опис алгоритму генерування підмножин заданої множини методом двійкової арифметики та бінарним кодом Грея. Аналіз програми генерування підмножини з заданої множини із визначеною кількістю елементів в лексикографічному та антилексикографічному порядку.
лабораторная работа [29,6 K], добавлен 12.05.2011Загальні відомості про мову VHDL, яка використовуються для проектування цифрових електронних систем та створення програмного продукту, її елементи. Способи структуризації програми, принципи об’єктно-орієнтованого програмування, засоби налагоджування.
курсовая работа [34,9 K], добавлен 09.06.2010Розбиття загальної задачі на під задачі. Вибір засобу реалізації кожної з підзадач. Обґрунтування вибору ОМК для вирішення задачі. Функціональна схема пристрою та її короткий опис. Алгоритм роботи МКП. Розподіл пам’яті даних та програм. Текст програми.
контрольная работа [508,3 K], добавлен 21.01.2009