Анотація
У рамках запропонованої розрахунково-графічної роботи необхідно створити апаратний вузол, що виконує завдання перетворення цифрової інформації з її шифруванням за певним алгоритмом. Пристрій необхідно спроектувати з використанням мови високорівневого опису апаратури VHDL.
Завдання на розробку
У системі є два пристрої: джерело (І) і приймач (П) інформації. Необхідно описати пристрій є посередником між пристроями І і П (Рис. 1). Пристрій І має дві вихідні односпрямовані шини даних: 32-х розрядну X і 4-х розрядну n, 8-й розрядну шину адреси Address, два вихідних сигналу Write і Read і вхідний сигнал Ready. Пристрій посередник обчислює функцію
Y (0 : 31) =
f (X (0 : 32))
і за сигналом Write записує обчислені дані в ОЗУ за адресою, виставленому на шину адреси джерела. За сигналом Read пристрій посередник зчитує байт за адресою, виставленому на шину адреси, і видає його в послідовному коді приймачу попередньо пропустивши через блок шифрування БШ. Видача послідовного коду здійснюється, коли на сигнал готовності посередника до передачі Ready, приймач відповідає сигналом готовності прийому Ask.
Блок шифрування
r1 = 6 r2 = 0
Функції
Bn cos x
де
в€ћ 1
Bk = ОЈ
ПЂ 2k - 1
p = 1 p 2k
(2k)
Блок обчислення функції
Блок має дві вхідні шини: 32-х розрядну X і 4-х розрядну n і вихідну 32 - х розрядну шину Y. Вважати, що по шині X передається число з плаваючою точкою в форматі (рис. 3).
У блоці всі операції проводяться над речовими типами даних. Для отримання речових даних організувати функцію, що здійснює переклад з типу STD_LOGIC_VECTOR в тип REAL, для отримання двійкових даних з речових організувати функцію, що здійснює зворотний переклад. Аналогічно організувати (або скористатися готовою, наприклад, з пакета exemplar) функцію для перекладу даних 4-х розрядної шини n в цілий тип.
Пристрій, обчислює функцію Y = f (X), за допомогою розкладання в ряд з точністю обумовленою кількістю доданків рівним значенню n. При реалізації опису використовувати тільки стандартні арифметичні операції "+", "-", "/" І власну функцію повертає квадрат аргументу
rr : = B -1;
result: = mut (a, pwr (a, rr));
end if;
return result; ь
end pwr;
function toreal (X
: STD_LOGIC_VECTOR (31 downto 0))
return real is
variable result, res1, tt3, tt2, myn: real;
variable res2, tt1: integer;
begin
function toreal (X
: STD_LOGIC_VECTOR (31 downto 0))
return real is
variable result, res1, myn: real;
variable res2: integer;
begin
res1: = real (CONV_INTEGER (X (20 downto 1)));
M1: while res1> = 1.0 loop res1: = res1/10.0;
end loop M1;
if X (0) = '1 'then res1: =-res1;
end if;
res2: = CONV_INTEGER (X (31 downto 22));
if X (20) = '1 'then res2: =-res2;
end if;
myn: = 2.0 ** res2;
result: = mut (res1, myn);
return result;
end toreal;
function fakt (n: real) return real is variable rr: real;
variable result: real;
begin
if n = 1.0 then result: = n;
elsif n = 0.0 then result: = 0.0;
elsif n <0.0 then
result: = 0.0;
else
rr: = n -1.0;
result: = mut (n, fakt (rr));
end if;
return result;
end fakt;
res1: = 0.0;
e1: for i in 20 downto 1 loop tt1: = i;
tt2: = 1.0/(pwr (2.0, tt1));
tt3: =
mut (real (CONV_INTEGER (X (i))), real (tt2)
);
res1: = res1 + real (tt3);
end loop e1;
if X (0) = '1 'then res1: =-res1;
end if;
res2: = CONV_INTEGER (X (31 downto
22));
myn: = pwr (2.0, res2);
if X (21) = '1 'then myn: = 1.0/myn;
end if;
result: = mut (res1, myn);
return result;
end toreal;
function BK (X: real; N: integer)
return real is
variable result, pi: real;
variable k1, k2, k3, k4: real;
begin pi: = 3.14;
for i in 1 to N loop k1: = mut (2.0, x); k2: = pwr (REAL (i), INTEGER (k1));
k3: = 1.0/k2; k4: = (pwr (pi, INTEGER (k1)) -
1.0)/fakt (k1); result: = k4; end loop;
return result;
end BK;
function MYFUN (X: real; N: integer
) return real is
variable result, pi: real;
variable k2, k1: integer;
variable RR, l1, l2, l3, g1, g2, g3: real;
begin pi: = 3.14;
result: = 0.0;
if abs (x)> (3.14/2) then return result;
end if;
for i in 1 to N loop
K1: = integer (pwr (2.0, i)); K2...