Browse Source

moved array type definitions out of functions to head of package, instances now also in package head and are constants

master
T. Meissner 10 years ago
parent
commit
716ce2725b
1 changed files with 113 additions and 110 deletions
  1. +113
    -110
      cbcdes/rtl/vhdl/des_pkg.vhd

+ 113
- 110
cbcdes/rtl/vhdl/des_pkg.vhd View File

@ -29,8 +29,10 @@ USE ieee.std_logic_1164.all;
USE ieee.numeric_std.ALL; USE ieee.numeric_std.ALL;
PACKAGE des_pkg IS PACKAGE des_pkg IS
FUNCTION ip ( input_vector : std_logic_vector(0 TO 63) ) RETURN std_logic_vector; FUNCTION ip ( input_vector : std_logic_vector(0 TO 63) ) RETURN std_logic_vector;
FUNCTION ipn ( input_vector : std_logic_vector(0 TO 63) ) RETURN std_logic_vector; FUNCTION ipn ( input_vector : std_logic_vector(0 TO 63) ) RETURN std_logic_vector;
@ -52,14 +54,8 @@ PACKAGE des_pkg IS
FUNCTION pc1_d ( input_vector : std_logic_vector(0 TO 63) ) RETURN std_logic_vector; FUNCTION pc1_d ( input_vector : std_logic_vector(0 TO 63) ) RETURN std_logic_vector;
FUNCTION pc2 ( input_vector : std_logic_vector(0 TO 55) ) RETURN std_logic_vector; FUNCTION pc2 ( input_vector : std_logic_vector(0 TO 55) ) RETURN std_logic_vector;
END PACKAGE des_pkg;
PACKAGE BODY des_pkg IS
FUNCTION ip ( input_vector : std_logic_vector(0 TO 63) ) RETURN std_logic_vector IS
TYPE matrix IS ARRAY (0 TO 63) OF natural RANGE 0 TO 63;
VARIABLE table : matrix := (57, 49, 41, 33, 25, 17, 9, 1,
TYPE ip_matrix IS ARRAY (0 TO 63) OF natural RANGE 0 TO 63;
constant ip_table : ip_matrix := (57, 49, 41, 33, 25, 17, 9, 1,
59, 51, 43, 35, 27, 19, 11, 3, 59, 51, 43, 35, 27, 19, 11, 3,
61, 53, 45, 37, 29, 21, 13, 5, 61, 53, 45, 37, 29, 21, 13, 5,
63, 55, 47, 39, 31, 23, 15, 7, 63, 55, 47, 39, 31, 23, 15, 7,
@ -67,56 +63,125 @@ PACKAGE BODY des_pkg IS
58, 50, 42, 34, 26, 18, 10, 2, 58, 50, 42, 34, 26, 18, 10, 2,
60, 52, 44, 36, 28, 20, 12, 4, 60, 52, 44, 36, 28, 20, 12, 4,
62, 54, 46, 38, 30, 22, 14, 6); 62, 54, 46, 38, 30, 22, 14, 6);
constant ipn_table : ip_matrix := (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,
32, 0, 40, 8, 48, 16, 56, 24);
TYPE e_matrix IS ARRAY (0 TO 47) OF natural RANGE 0 TO 31;
constant e_table : e_matrix := (31, 0, 1, 2, 3, 4,
3, 4, 5, 6, 7, 8,
7, 8, 9, 10, 11, 12,
11, 12, 13, 14, 15, 16,
15, 16, 17, 18, 19, 20,
19, 20, 21, 22, 23, 24,
23, 24, 25, 26, 27, 28,
27, 28, 29, 30, 31, 0);
TYPE s_matrix IS ARRAY (0 TO 3, 0 TO 15) OF integer RANGE 0 TO 15;
constant s1_table : s_matrix := (0 => (14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7),
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));
constant s2_table : s_matrix := (0 => (15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10),
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));
constant s3_table : s_matrix := (0 => (10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8),
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));
constant s4_table : s_matrix := (0 => ( 7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15),
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));
constant s5_table : s_matrix := (0 => ( 2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9),
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));
constant s6_table : s_matrix := (0 => (12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11),
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));
constant s7_table : s_matrix := (0 => ( 4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1),
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));
constant s8_table : s_matrix := (0 => (13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7),
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));
type pc_matrix IS ARRAY (0 TO 27) OF natural RANGE 0 TO 63;
constant pc1c_table : pc_matrix := (56, 48, 40, 32, 24, 16, 8,
0, 57, 49, 41, 33, 25, 17,
9, 1, 58, 50, 42, 34, 26,
18, 10, 2, 59, 51, 43, 35);
constant pc1d_table : pc_matrix := (62, 54, 46, 38, 30, 22, 14,
6, 61, 53, 45, 37, 29, 21,
13, 5, 60, 52, 44, 36, 28,
20, 12, 4, 27, 19, 11, 3);
type p_matrix IS ARRAY (0 TO 31) OF natural RANGE 0 TO 31;
constant p_table : p_matrix := (15, 6, 19, 20,
28, 11, 27, 16,
0, 14, 22, 25,
4, 17, 30, 9,
1, 7, 23, 13,
31, 26, 2, 8,
18, 12, 29, 5,
21, 10, 3, 24);
type pc2_matrix IS ARRAY (0 TO 47) OF natural RANGE 0 TO 63;
constant pc2_table : pc2_matrix := (13, 16, 10, 23, 0, 4,
2, 27, 14, 5, 20, 9,
22, 18, 11, 3, 25, 7,
15, 6, 26, 19, 12, 1,
40, 51, 30, 36, 46, 54,
29, 39, 50, 44, 32, 47,
43, 48, 38, 55, 33, 52,
45, 41, 49, 35, 28, 31);
END PACKAGE des_pkg;
PACKAGE BODY des_pkg IS
FUNCTION ip ( input_vector : std_logic_vector(0 TO 63) ) RETURN std_logic_vector IS
VARIABLE result : std_logic_vector(0 TO 63); VARIABLE result : std_logic_vector(0 TO 63);
BEGIN BEGIN
FOR index IN 0 TO 63 LOOP FOR index IN 0 TO 63 LOOP
result( index ) := input_vector( table( index ) );
result( index ) := input_vector( ip_table( index ) );
END LOOP; END LOOP;
RETURN result; RETURN result;
END FUNCTION ip; END FUNCTION ip;
FUNCTION ipn ( input_vector : std_logic_vector(0 TO 63) ) RETURN std_logic_vector IS FUNCTION ipn ( input_vector : std_logic_vector(0 TO 63) ) RETURN std_logic_vector IS
TYPE matrix IS ARRAY (0 TO 63) OF natural RANGE 0 TO 63;
VARIABLE table : matrix := (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,
32, 0, 40, 8, 48, 16, 56, 24);
VARIABLE result : std_logic_vector(0 TO 63); VARIABLE result : std_logic_vector(0 TO 63);
BEGIN BEGIN
FOR index IN 0 TO 63 LOOP FOR index IN 0 TO 63 LOOP
result( index ) := input_vector( table( index ) );
result( index ) := input_vector( ipn_table( index ) );
END LOOP; END LOOP;
RETURN result; RETURN result;
END FUNCTION ipn; END FUNCTION ipn;
FUNCTION e (input_vector : std_logic_vector(0 TO 31) ) RETURN std_logic_vector IS FUNCTION e (input_vector : std_logic_vector(0 TO 31) ) RETURN std_logic_vector IS
TYPE matrix IS ARRAY (0 TO 47) OF natural RANGE 0 TO 31;
VARIABLE table : matrix := (31, 0, 1, 2, 3, 4,
3, 4, 5, 6, 7, 8,
7, 8, 9, 10, 11, 12,
11, 12, 13, 14, 15, 16,
15, 16, 17, 18, 19, 20,
19, 20, 21, 22, 23, 24,
23, 24, 25, 26, 27, 28,
27, 28, 29, 30, 31, 0);
VARIABLE result : std_logic_vector(0 TO 47); VARIABLE result : std_logic_vector(0 TO 47);
BEGIN BEGIN
FOR index IN 0 TO 47 LOOP FOR index IN 0 TO 47 LOOP
result( index ) := input_vector( table( index ) );
result( index ) := input_vector( e_table( index ) );
END LOOP; END LOOP;
RETURN result; RETURN result;
END FUNCTION e; END FUNCTION e;
FUNCTION s1 ( input_vector : std_logic_vector(0 TO 5) ) RETURN std_logic_vector IS FUNCTION s1 ( input_vector : std_logic_vector(0 TO 5) ) RETURN std_logic_vector IS
TYPE matrix IS ARRAY (0 TO 3, 0 TO 15) OF integer RANGE 0 TO 15;
VARIABLE table : matrix := (0 => (14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7),
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));
VARIABLE int : std_logic_vector(0 TO 1); VARIABLE int : std_logic_vector(0 TO 1);
VARIABLE i : integer RANGE 0 TO 3; VARIABLE i : integer RANGE 0 TO 3;
VARIABLE j : integer RANGE 0 TO 15; VARIABLE j : integer RANGE 0 TO 15;
@ -125,16 +190,11 @@ PACKAGE BODY des_pkg IS
int := input_vector( 0 ) & input_vector( 5 ); int := input_vector( 0 ) & input_vector( 5 );
i := to_integer( unsigned( int ) ); i := to_integer( unsigned( int ) );
j := to_integer( unsigned( input_vector( 1 TO 4) ) ); j := to_integer( unsigned( input_vector( 1 TO 4) ) );
result := std_logic_vector( to_unsigned( table( i, j ), 4 ) );
result := std_logic_vector( to_unsigned( s1_table( i, j ), 4 ) );
RETURN result; RETURN result;
END FUNCTION s1; END FUNCTION s1;
FUNCTION s2 ( input_vector : std_logic_vector(0 TO 5) ) RETURN std_logic_vector IS FUNCTION s2 ( input_vector : std_logic_vector(0 TO 5) ) RETURN std_logic_vector IS
TYPE matrix IS ARRAY (0 TO 3, 0 TO 15) OF integer RANGE 0 TO 15;
VARIABLE table : matrix := (0 => (15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10),
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));
VARIABLE int : std_logic_vector(0 TO 1); VARIABLE int : std_logic_vector(0 TO 1);
VARIABLE i : integer RANGE 0 TO 3; VARIABLE i : integer RANGE 0 TO 3;
VARIABLE j : integer RANGE 0 TO 15; VARIABLE j : integer RANGE 0 TO 15;
@ -143,16 +203,11 @@ PACKAGE BODY des_pkg IS
int := input_vector( 0 ) & input_vector( 5 ); int := input_vector( 0 ) & input_vector( 5 );
i := to_integer( unsigned( int ) ); i := to_integer( unsigned( int ) );
j := to_integer( unsigned( input_vector( 1 TO 4) ) ); j := to_integer( unsigned( input_vector( 1 TO 4) ) );
result := std_logic_vector( to_unsigned( table( i, j ), 4 ) );
result := std_logic_vector( to_unsigned( s2_table( i, j ), 4 ) );
RETURN result; RETURN result;
END FUNCTION s2; END FUNCTION s2;
FUNCTION s3 ( input_vector : std_logic_vector(0 TO 5) ) RETURN std_logic_vector IS FUNCTION s3 ( input_vector : std_logic_vector(0 TO 5) ) RETURN std_logic_vector IS
TYPE matrix IS ARRAY (0 TO 3, 0 TO 15) OF integer RANGE 0 TO 15;
VARIABLE table : matrix := (0 => (10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8),
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));
VARIABLE int : std_logic_vector(0 TO 1); VARIABLE int : std_logic_vector(0 TO 1);
VARIABLE i : integer RANGE 0 TO 3; VARIABLE i : integer RANGE 0 TO 3;
VARIABLE j : integer RANGE 0 TO 15; VARIABLE j : integer RANGE 0 TO 15;
@ -161,16 +216,11 @@ PACKAGE BODY des_pkg IS
int := input_vector( 0 ) & input_vector( 5 ); int := input_vector( 0 ) & input_vector( 5 );
i := to_integer( unsigned( int ) ); i := to_integer( unsigned( int ) );
j := to_integer( unsigned( input_vector( 1 TO 4) ) ); j := to_integer( unsigned( input_vector( 1 TO 4) ) );
result := std_logic_vector( to_unsigned( table( i, j ), 4 ) );
result := std_logic_vector( to_unsigned( s3_table( i, j ), 4 ) );
RETURN result; RETURN result;
END FUNCTION s3; END FUNCTION s3;
FUNCTION s4 ( input_vector : std_logic_vector(0 TO 5) ) RETURN std_logic_vector IS FUNCTION s4 ( input_vector : std_logic_vector(0 TO 5) ) RETURN std_logic_vector IS
TYPE matrix IS ARRAY (0 TO 3, 0 TO 15) OF integer RANGE 0 TO 15;
VARIABLE table : matrix := (0 => ( 7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15),
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));
VARIABLE int : std_logic_vector(0 TO 1); VARIABLE int : std_logic_vector(0 TO 1);
VARIABLE i : integer RANGE 0 TO 3; VARIABLE i : integer RANGE 0 TO 3;
VARIABLE j : integer RANGE 0 TO 15; VARIABLE j : integer RANGE 0 TO 15;
@ -179,16 +229,11 @@ PACKAGE BODY des_pkg IS
int := input_vector( 0 ) & input_vector( 5 ); int := input_vector( 0 ) & input_vector( 5 );
i := to_integer( unsigned( int ) ); i := to_integer( unsigned( int ) );
j := to_integer( unsigned( input_vector( 1 TO 4) ) ); j := to_integer( unsigned( input_vector( 1 TO 4) ) );
result := std_logic_vector( to_unsigned( table( i, j ), 4 ) );
result := std_logic_vector( to_unsigned( s4_table( i, j ), 4 ) );
RETURN result; RETURN result;
END FUNCTION s4; END FUNCTION s4;
FUNCTION s5 ( input_vector : std_logic_vector(0 TO 5) ) RETURN std_logic_vector IS FUNCTION s5 ( input_vector : std_logic_vector(0 TO 5) ) RETURN std_logic_vector IS
TYPE matrix IS ARRAY (0 TO 3, 0 TO 15) OF integer RANGE 0 TO 15;
VARIABLE table : matrix := (0 => ( 2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9),
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));
VARIABLE int : std_logic_vector(0 TO 1); VARIABLE int : std_logic_vector(0 TO 1);
VARIABLE i : integer RANGE 0 TO 3; VARIABLE i : integer RANGE 0 TO 3;
VARIABLE j : integer RANGE 0 TO 15; VARIABLE j : integer RANGE 0 TO 15;
@ -197,16 +242,11 @@ PACKAGE BODY des_pkg IS
int := input_vector( 0 ) & input_vector( 5 ); int := input_vector( 0 ) & input_vector( 5 );
i := to_integer( unsigned( int ) ); i := to_integer( unsigned( int ) );
j := to_integer( unsigned( input_vector( 1 TO 4) ) ); j := to_integer( unsigned( input_vector( 1 TO 4) ) );
result := std_logic_vector( to_unsigned( table( i, j ), 4 ) );
result := std_logic_vector( to_unsigned( s5_table( i, j ), 4 ) );
RETURN result; RETURN result;
END FUNCTION s5; END FUNCTION s5;
FUNCTION s6 ( input_vector : std_logic_vector(0 TO 5) ) RETURN std_logic_vector IS FUNCTION s6 ( input_vector : std_logic_vector(0 TO 5) ) RETURN std_logic_vector IS
TYPE matrix IS ARRAY (0 TO 3, 0 TO 15) OF integer RANGE 0 TO 15;
VARIABLE table : matrix := (0 => (12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11),
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));
VARIABLE int : std_logic_vector(0 TO 1); VARIABLE int : std_logic_vector(0 TO 1);
VARIABLE i : integer RANGE 0 TO 3; VARIABLE i : integer RANGE 0 TO 3;
VARIABLE j : integer RANGE 0 TO 15; VARIABLE j : integer RANGE 0 TO 15;
@ -215,16 +255,11 @@ PACKAGE BODY des_pkg IS
int := input_vector( 0 ) & input_vector( 5 ); int := input_vector( 0 ) & input_vector( 5 );
i := to_integer( unsigned( int ) ); i := to_integer( unsigned( int ) );
j := to_integer( unsigned( input_vector( 1 TO 4) ) ); j := to_integer( unsigned( input_vector( 1 TO 4) ) );
result := std_logic_vector( to_unsigned( table( i, j ), 4 ) );
result := std_logic_vector( to_unsigned( s6_table( i, j ), 4 ) );
RETURN result; RETURN result;
END FUNCTION s6; END FUNCTION s6;
FUNCTION s7 ( input_vector : std_logic_vector(0 TO 5) ) RETURN std_logic_vector IS FUNCTION s7 ( input_vector : std_logic_vector(0 TO 5) ) RETURN std_logic_vector IS
TYPE matrix IS ARRAY (0 TO 3, 0 TO 15) OF integer RANGE 0 TO 15;
VARIABLE table : matrix := (0 => ( 4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1),
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));
VARIABLE int : std_logic_vector(0 TO 1); VARIABLE int : std_logic_vector(0 TO 1);
VARIABLE i : integer RANGE 0 TO 3; VARIABLE i : integer RANGE 0 TO 3;
VARIABLE j : integer RANGE 0 TO 15; VARIABLE j : integer RANGE 0 TO 15;
@ -233,16 +268,11 @@ PACKAGE BODY des_pkg IS
int := input_vector( 0 ) & input_vector( 5 ); int := input_vector( 0 ) & input_vector( 5 );
i := to_integer( unsigned( int ) ); i := to_integer( unsigned( int ) );
j := to_integer( unsigned( input_vector( 1 TO 4) ) ); j := to_integer( unsigned( input_vector( 1 TO 4) ) );
result := std_logic_vector( to_unsigned( table( i, j ), 4 ) );
result := std_logic_vector( to_unsigned( s7_table( i, j ), 4 ) );
RETURN result; RETURN result;
END FUNCTION s7; END FUNCTION s7;
FUNCTION s8 ( input_vector : std_logic_vector(0 TO 5) ) RETURN std_logic_vector IS FUNCTION s8 ( input_vector : std_logic_vector(0 TO 5) ) RETURN std_logic_vector IS
TYPE matrix IS ARRAY (0 TO 3, 0 TO 15) OF integer RANGE 0 TO 15;
VARIABLE table : matrix := (0 => (13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7),
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));
VARIABLE int : std_logic_vector(0 TO 1); VARIABLE int : std_logic_vector(0 TO 1);
VARIABLE i : integer RANGE 0 TO 3; VARIABLE i : integer RANGE 0 TO 3;
VARIABLE j : integer RANGE 0 TO 15; VARIABLE j : integer RANGE 0 TO 15;
@ -251,24 +281,15 @@ PACKAGE BODY des_pkg IS
int := input_vector( 0 ) & input_vector( 5 ); int := input_vector( 0 ) & input_vector( 5 );
i := to_integer( unsigned( int ) ); i := to_integer( unsigned( int ) );
j := to_integer( unsigned( input_vector( 1 TO 4) ) ); j := to_integer( unsigned( input_vector( 1 TO 4) ) );
result := std_logic_vector( to_unsigned( table( i, j ), 4 ) );
result := std_logic_vector( to_unsigned( s8_table( i, j ), 4 ) );
RETURN result; RETURN result;
END FUNCTION s8; END FUNCTION s8;
FUNCTION p (input_vector : std_logic_vector(0 TO 31) ) RETURN std_logic_vector IS FUNCTION p (input_vector : std_logic_vector(0 TO 31) ) RETURN std_logic_vector IS
TYPE matrix IS ARRAY (0 TO 31) OF natural RANGE 0 TO 31;
VARIABLE table : matrix := (15, 6, 19, 20,
28, 11, 27, 16,
0, 14, 22, 25,
4, 17, 30, 9,
1, 7, 23, 13,
31, 26, 2, 8,
18, 12, 29, 5,
21, 10, 3, 24);
VARIABLE result : std_logic_vector(0 TO 31); VARIABLE result : std_logic_vector(0 TO 31);
BEGIN BEGIN
FOR index IN 0 TO 31 LOOP FOR index IN 0 TO 31 LOOP
result( index ) := input_vector( table( index ) );
result( index ) := input_vector( p_table( index ) );
END LOOP; END LOOP;
RETURN result; RETURN result;
END FUNCTION p; END FUNCTION p;
@ -284,50 +305,32 @@ PACKAGE BODY des_pkg IS
END FUNCTION f; END FUNCTION f;
FUNCTION pc1_c ( input_vector : std_logic_vector(0 TO 63) ) RETURN std_logic_vector IS FUNCTION pc1_c ( input_vector : std_logic_vector(0 TO 63) ) RETURN std_logic_vector IS
TYPE matrix IS ARRAY (0 TO 27) OF natural RANGE 0 TO 63;
VARIABLE table : matrix := (56, 48, 40, 32, 24, 16, 8,
0, 57, 49, 41, 33, 25, 17,
9, 1, 58, 50, 42, 34, 26,
18, 10, 2, 59, 51, 43, 35);
VARIABLE result : std_logic_vector(0 TO 27); VARIABLE result : std_logic_vector(0 TO 27);
BEGIN BEGIN
FOR index IN 0 TO 27 LOOP FOR index IN 0 TO 27 LOOP
result( index ) := input_vector( table( index ) );
result( index ) := input_vector( pc1c_table( index ) );
END LOOP; END LOOP;
RETURN result; RETURN result;
END FUNCTION pc1_c; END FUNCTION pc1_c;
FUNCTION pc1_d ( input_vector : std_logic_vector(0 TO 63) ) RETURN std_logic_vector IS FUNCTION pc1_d ( input_vector : std_logic_vector(0 TO 63) ) RETURN std_logic_vector IS
TYPE matrix IS ARRAY (0 TO 27) OF natural RANGE 0 TO 63;
VARIABLE table : matrix := (62, 54, 46, 38, 30, 22, 14,
6, 61, 53, 45, 37, 29, 21,
13, 5, 60, 52, 44, 36, 28,
20, 12, 4, 27, 19, 11, 3);
VARIABLE result : std_logic_vector(0 TO 27); VARIABLE result : std_logic_vector(0 TO 27);
BEGIN BEGIN
FOR index IN 0 TO 27 LOOP FOR index IN 0 TO 27 LOOP
result( index ) := input_vector( table( index ) );
result( index ) := input_vector( pc1d_table( index ) );
END LOOP; END LOOP;
RETURN result; RETURN result;
END FUNCTION pc1_d; END FUNCTION pc1_d;
FUNCTION pc2 ( input_vector : std_logic_vector(0 TO 55) ) RETURN std_logic_vector IS FUNCTION pc2 ( input_vector : std_logic_vector(0 TO 55) ) RETURN std_logic_vector IS
TYPE matrix IS ARRAY (0 TO 47) OF natural RANGE 0 TO 63;
VARIABLE table : matrix := (13, 16, 10, 23, 0, 4,
2, 27, 14, 5, 20, 9,
22, 18, 11, 3, 25, 7,
15, 6, 26, 19, 12, 1,
40, 51, 30, 36, 46, 54,
29, 39, 50, 44, 32, 47,
43, 48, 38, 55, 33, 52,
45, 41, 49, 35, 28, 31);
VARIABLE result : std_logic_vector(0 TO 47); VARIABLE result : std_logic_vector(0 TO 47);
BEGIN BEGIN
FOR index IN 0 TO 47 LOOP FOR index IN 0 TO 47 LOOP
result( index ) := input_vector( table( index ) );
result( index ) := input_vector( pc2_table( index ) );
END LOOP; END LOOP;
RETURN result; RETURN result;
END FUNCTION pc2; END FUNCTION pc2;
END PACKAGE BODY des_pkg;
END PACKAGE BODY des_pkg;

Loading…
Cancel
Save