: = k1 - 1;
L1: = pwr (2.0, k2);
L2: = pwr (2.0, k1); L3: = pwr (x, k1);
G1: = fakt (real (k1));
G2: = mut (REAL (n), g1); Rr: = mut (l1, (l2-1.0));
G3: = BK (x, i);
Rr: = mut (rr, G3); Rr: = mut (rr, l3); result: = rr/g2;
end loop;
return result;
end MYFUN;
function tostd (X1: real) return
STD_LOGIC_VECTOR is variable
result: STD_LOGIC_VECTOR (31 downto
0)
: = "00000000000000000000000000000000"
;
variable X, myn, a, b, c: real; variable pr, w: integer; begin
X: = X1;
pr: = 0;
M2: while abs (X)> = 1.0 loop
X: = X/2.0;
pr: = pr +1;
end loop M2;
result (31 downto 22): = CONV_STD_LOGIC_VECTOR (pr, 10);
result (21): = '0 ';
if X <0.0 then
result (0): = '1 ';
end if;
X: = abs (X);
a: = real (integer (X));
b: = real (X); c: = b-a; w: = 1;
M3: while c/= 0.0 loop
X: = X * 10.0;
a: = real (integer (X));
b: = real (X); c: = b-a; w: = w +1;
exit M3 when w> 6;
end loop M3;
result (20 downto 1): = CONV_STD_LOGIC_VECTOR (integer (X
), 20);
return result;
end tostd;
begin
process (X, N)
variable mynum, res: real; variable count: integer; begin
mynum: = toreal (X);
count: = CONV_INTEGER (N); res: = MYFUN (mynum, count); Y <= tostd (res);
end process;
end F;
Блок шифрування
Блок шифрування організований у вигляді зсувного регістру із зворотними зв'язками, в які включені елементи підсумовування за модулем два, генеруючого потік ключів Результат генерації підсумовується за модуля два з послідовним кодом, отриманим з виходу блоку перетворення паралельного коду в послідовний і видається приймача. Блок шифрування одноразово при початку роботи пристрою завантажується початковим значенням Key по сигналу Load.
Блок шифрування реалізувати на основі 30-і бітового зсувного регістру із зворотними зв'язками.
VHDL КОД:
library IEEE;
use IEEE.std_logic_1164.all;
entity BCODE is port (
CLK: in std_logic; LOAD: in std_logic; DIN: in std_logic;
DATA: in std_logic_vector (29 downto 0); SO: out std_logic
);
end entity;
architecture BCODE of BCODE is
signal TEMP_SO: std_logic_vector (29 downto 0);
begin process (CLK, LOAD) begin
if LOAD = '1 'then
TEMP_SO <= DATA;
ELSif rising_edge (CLK) then
TEMP_SO <= ((TEMP_SO (0) XOR
TEMP_SO (18)) XOR TEMP_SO (19)) & TEMP_SO (29 downto 1);
end if;
end process;
SO <= TEMP_SO (0) XOR DIN;
end architecture;
Блок ОЗУ
ОЗУ з роздільними шинами читання і запису даних
we
data ​​p>
addr
Q
1
data ​​p>
<= addr
Data ​​p>
0
X
<= addr
dataaddr
VHDL КОД
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;
entity ram is port (
WE: in STD_LOGIC;
ADDR: in STD_LOGIC_VECTOR (7 downto 0);
DATA: in STD_LOGIC_VECTOR (31 downto 0);
Лист
Q: out STD_LOGIC_VECTOR (31 downto 0)
);
end entity;
architecture ram_arch of ram is
Блок ОЗУ
type ram_mem_type is array (254 downto 0) of STD_LOGIC_VECTOR (31 downto 0);
signal ram_mem: ram_mem_type;
begin
process (WE, ADDR, DATA)
variable ADDR_TEMP: integer range 254 downto 0;
begin
if (WE = '1 ') then
ADDR_TEMP: = CONV_INTEGER (ADDR);
ram_mem (ADDR_TEMP) <= DATA;
end if;
end process;
Q <= ram_mem (CONV_INTEGER (ADDR));
end architecture;
Блок-перетворювач паралельного коду в послідовний
clk
load
data ​​p>
reg
so
0
0
X
data ​​p>
data (0)
1
1
data ​​p> ...