1
0
mirror of https://github.com/pConst/basic_verilog.git synced 2025-02-04 07:12:56 +08:00
Konstantin Pavlov (pt) 40533743d7 Added altera cookbook
2015-12-15 22:44:58 +03:00

649 lines
12 KiB
Verilog

// Copyright 2007 Altera Corporation. All rights reserved.
// Altera products are protected under numerous U.S. and foreign patents,
// maskwork rights, copyrights and other intellectual property laws.
//
// This reference design file, and your use thereof, is subject to and governed
// by the terms and conditions of the applicable Altera Reference Design
// License Agreement (either as signed by you or found at www.altera.com). By
// using this reference design file, you indicate your acceptance of such terms
// and conditions between you and Altera Corporation. In the event that you do
// not agree with such terms and conditions, you may not use the reference
// design file and please promptly destroy any copies you have made.
//
// This reference design file is being provided on an "as-is" basis and as an
// accommodation and therefore all warranties, representations or guarantees of
// any kind (whether express, implied or statutory) including, without
// limitation, warranties of merchantability, non-infringement, or fitness for
// a particular purpose, are specifically disclaimed. By making this reference
// design file available, Altera expressly does not recommend, suggest or
// require that this reference design file be used in combination with any
// other product not provided by Altera.
/////////////////////////////////////////////////////////////////////////////
// baeckler - 1-19-2006
module sbox0 (in,out);
input [5:0] in;
output [3:0] out;
reg [3:0] out;
always @(in) begin
case (in)
0 : out = 14;
1 : out = 0;
2 : out = 4;
3 : out = 15;
4 : out = 13;
5 : out = 7;
6 : out = 1;
7 : out = 4;
8 : out = 2;
9 : out = 14;
10 : out = 15;
11 : out = 2;
12 : out = 11;
13 : out = 13;
14 : out = 8;
15 : out = 1;
16 : out = 3;
17 : out = 10;
18 : out = 10;
19 : out = 6;
20 : out = 6;
21 : out = 12;
22 : out = 12;
23 : out = 11;
24 : out = 5;
25 : out = 9;
26 : out = 9;
27 : out = 5;
28 : out = 0;
29 : out = 3;
30 : out = 7;
31 : out = 8;
32 : out = 4;
33 : out = 15;
34 : out = 1;
35 : out = 12;
36 : out = 14;
37 : out = 8;
38 : out = 8;
39 : out = 2;
40 : out = 13;
41 : out = 4;
42 : out = 6;
43 : out = 9;
44 : out = 2;
45 : out = 1;
46 : out = 11;
47 : out = 7;
48 : out = 15;
49 : out = 5;
50 : out = 12;
51 : out = 11;
52 : out = 9;
53 : out = 3;
54 : out = 7;
55 : out = 14;
56 : out = 3;
57 : out = 10;
58 : out = 10;
59 : out = 0;
60 : out = 5;
61 : out = 6;
62 : out = 0;
63 : out = 13;
endcase
end
endmodule
module sbox1 (in,out);
input [5:0] in;
output [3:0] out;
reg [3:0] out;
always @(in) begin
case (in)
0 : out = 15;
1 : out = 3;
2 : out = 1;
3 : out = 13;
4 : out = 8;
5 : out = 4;
6 : out = 14;
7 : out = 7;
8 : out = 6;
9 : out = 15;
10 : out = 11;
11 : out = 2;
12 : out = 3;
13 : out = 8;
14 : out = 4;
15 : out = 14;
16 : out = 9;
17 : out = 12;
18 : out = 7;
19 : out = 0;
20 : out = 2;
21 : out = 1;
22 : out = 13;
23 : out = 10;
24 : out = 12;
25 : out = 6;
26 : out = 0;
27 : out = 9;
28 : out = 5;
29 : out = 11;
30 : out = 10;
31 : out = 5;
32 : out = 0;
33 : out = 13;
34 : out = 14;
35 : out = 8;
36 : out = 7;
37 : out = 10;
38 : out = 11;
39 : out = 1;
40 : out = 10;
41 : out = 3;
42 : out = 4;
43 : out = 15;
44 : out = 13;
45 : out = 4;
46 : out = 1;
47 : out = 2;
48 : out = 5;
49 : out = 11;
50 : out = 8;
51 : out = 6;
52 : out = 12;
53 : out = 7;
54 : out = 6;
55 : out = 12;
56 : out = 9;
57 : out = 0;
58 : out = 3;
59 : out = 5;
60 : out = 2;
61 : out = 14;
62 : out = 15;
63 : out = 9;
endcase
end
endmodule
module sbox2 (in,out);
input [5:0] in;
output [3:0] out;
reg [3:0] out;
always @(in) begin
case (in)
0 : out = 10;
1 : out = 13;
2 : out = 0;
3 : out = 7;
4 : out = 9;
5 : out = 0;
6 : out = 14;
7 : out = 9;
8 : out = 6;
9 : out = 3;
10 : out = 3;
11 : out = 4;
12 : out = 15;
13 : out = 6;
14 : out = 5;
15 : out = 10;
16 : out = 1;
17 : out = 2;
18 : out = 13;
19 : out = 8;
20 : out = 12;
21 : out = 5;
22 : out = 7;
23 : out = 14;
24 : out = 11;
25 : out = 12;
26 : out = 4;
27 : out = 11;
28 : out = 2;
29 : out = 15;
30 : out = 8;
31 : out = 1;
32 : out = 13;
33 : out = 1;
34 : out = 6;
35 : out = 10;
36 : out = 4;
37 : out = 13;
38 : out = 9;
39 : out = 0;
40 : out = 8;
41 : out = 6;
42 : out = 15;
43 : out = 9;
44 : out = 3;
45 : out = 8;
46 : out = 0;
47 : out = 7;
48 : out = 11;
49 : out = 4;
50 : out = 1;
51 : out = 15;
52 : out = 2;
53 : out = 14;
54 : out = 12;
55 : out = 3;
56 : out = 5;
57 : out = 11;
58 : out = 10;
59 : out = 5;
60 : out = 14;
61 : out = 2;
62 : out = 7;
63 : out = 12;
endcase
end
endmodule
module sbox3 (in,out);
input [5:0] in;
output [3:0] out;
reg [3:0] out;
always @(in) begin
case (in)
0 : out = 7;
1 : out = 13;
2 : out = 13;
3 : out = 8;
4 : out = 14;
5 : out = 11;
6 : out = 3;
7 : out = 5;
8 : out = 0;
9 : out = 6;
10 : out = 6;
11 : out = 15;
12 : out = 9;
13 : out = 0;
14 : out = 10;
15 : out = 3;
16 : out = 1;
17 : out = 4;
18 : out = 2;
19 : out = 7;
20 : out = 8;
21 : out = 2;
22 : out = 5;
23 : out = 12;
24 : out = 11;
25 : out = 1;
26 : out = 12;
27 : out = 10;
28 : out = 4;
29 : out = 14;
30 : out = 15;
31 : out = 9;
32 : out = 10;
33 : out = 3;
34 : out = 6;
35 : out = 15;
36 : out = 9;
37 : out = 0;
38 : out = 0;
39 : out = 6;
40 : out = 12;
41 : out = 10;
42 : out = 11;
43 : out = 1;
44 : out = 7;
45 : out = 13;
46 : out = 13;
47 : out = 8;
48 : out = 15;
49 : out = 9;
50 : out = 1;
51 : out = 4;
52 : out = 3;
53 : out = 5;
54 : out = 14;
55 : out = 11;
56 : out = 5;
57 : out = 12;
58 : out = 2;
59 : out = 7;
60 : out = 8;
61 : out = 2;
62 : out = 4;
63 : out = 14;
endcase
end
endmodule
module sbox4 (in,out);
input [5:0] in;
output [3:0] out;
reg [3:0] out;
always @(in) begin
case (in)
0 : out = 2;
1 : out = 14;
2 : out = 12;
3 : out = 11;
4 : out = 4;
5 : out = 2;
6 : out = 1;
7 : out = 12;
8 : out = 7;
9 : out = 4;
10 : out = 10;
11 : out = 7;
12 : out = 11;
13 : out = 13;
14 : out = 6;
15 : out = 1;
16 : out = 8;
17 : out = 5;
18 : out = 5;
19 : out = 0;
20 : out = 3;
21 : out = 15;
22 : out = 15;
23 : out = 10;
24 : out = 13;
25 : out = 3;
26 : out = 0;
27 : out = 9;
28 : out = 14;
29 : out = 8;
30 : out = 9;
31 : out = 6;
32 : out = 4;
33 : out = 11;
34 : out = 2;
35 : out = 8;
36 : out = 1;
37 : out = 12;
38 : out = 11;
39 : out = 7;
40 : out = 10;
41 : out = 1;
42 : out = 13;
43 : out = 14;
44 : out = 7;
45 : out = 2;
46 : out = 8;
47 : out = 13;
48 : out = 15;
49 : out = 6;
50 : out = 9;
51 : out = 15;
52 : out = 12;
53 : out = 0;
54 : out = 5;
55 : out = 9;
56 : out = 6;
57 : out = 10;
58 : out = 3;
59 : out = 4;
60 : out = 0;
61 : out = 5;
62 : out = 14;
63 : out = 3;
endcase
end
endmodule
module sbox5 (in,out);
input [5:0] in;
output [3:0] out;
reg [3:0] out;
always @(in) begin
case (in)
0 : out = 12;
1 : out = 10;
2 : out = 1;
3 : out = 15;
4 : out = 10;
5 : out = 4;
6 : out = 15;
7 : out = 2;
8 : out = 9;
9 : out = 7;
10 : out = 2;
11 : out = 12;
12 : out = 6;
13 : out = 9;
14 : out = 8;
15 : out = 5;
16 : out = 0;
17 : out = 6;
18 : out = 13;
19 : out = 1;
20 : out = 3;
21 : out = 13;
22 : out = 4;
23 : out = 14;
24 : out = 14;
25 : out = 0;
26 : out = 7;
27 : out = 11;
28 : out = 5;
29 : out = 3;
30 : out = 11;
31 : out = 8;
32 : out = 9;
33 : out = 4;
34 : out = 14;
35 : out = 3;
36 : out = 15;
37 : out = 2;
38 : out = 5;
39 : out = 12;
40 : out = 2;
41 : out = 9;
42 : out = 8;
43 : out = 5;
44 : out = 12;
45 : out = 15;
46 : out = 3;
47 : out = 10;
48 : out = 7;
49 : out = 11;
50 : out = 0;
51 : out = 14;
52 : out = 4;
53 : out = 1;
54 : out = 10;
55 : out = 7;
56 : out = 1;
57 : out = 6;
58 : out = 13;
59 : out = 0;
60 : out = 11;
61 : out = 8;
62 : out = 6;
63 : out = 13;
endcase
end
endmodule
module sbox6 (in,out);
input [5:0] in;
output [3:0] out;
reg [3:0] out;
always @(in) begin
case (in)
0 : out = 4;
1 : out = 13;
2 : out = 11;
3 : out = 0;
4 : out = 2;
5 : out = 11;
6 : out = 14;
7 : out = 7;
8 : out = 15;
9 : out = 4;
10 : out = 0;
11 : out = 9;
12 : out = 8;
13 : out = 1;
14 : out = 13;
15 : out = 10;
16 : out = 3;
17 : out = 14;
18 : out = 12;
19 : out = 3;
20 : out = 9;
21 : out = 5;
22 : out = 7;
23 : out = 12;
24 : out = 5;
25 : out = 2;
26 : out = 10;
27 : out = 15;
28 : out = 6;
29 : out = 8;
30 : out = 1;
31 : out = 6;
32 : out = 1;
33 : out = 6;
34 : out = 4;
35 : out = 11;
36 : out = 11;
37 : out = 13;
38 : out = 13;
39 : out = 8;
40 : out = 12;
41 : out = 1;
42 : out = 3;
43 : out = 4;
44 : out = 7;
45 : out = 10;
46 : out = 14;
47 : out = 7;
48 : out = 10;
49 : out = 9;
50 : out = 15;
51 : out = 5;
52 : out = 6;
53 : out = 0;
54 : out = 8;
55 : out = 15;
56 : out = 0;
57 : out = 14;
58 : out = 5;
59 : out = 2;
60 : out = 9;
61 : out = 3;
62 : out = 2;
63 : out = 12;
endcase
end
endmodule
module sbox7 (in,out);
input [5:0] in;
output [3:0] out;
reg [3:0] out;
always @(in) begin
case (in)
0 : out = 13;
1 : out = 1;
2 : out = 2;
3 : out = 15;
4 : out = 8;
5 : out = 13;
6 : out = 4;
7 : out = 8;
8 : out = 6;
9 : out = 10;
10 : out = 15;
11 : out = 3;
12 : out = 11;
13 : out = 7;
14 : out = 1;
15 : out = 4;
16 : out = 10;
17 : out = 12;
18 : out = 9;
19 : out = 5;
20 : out = 3;
21 : out = 6;
22 : out = 14;
23 : out = 11;
24 : out = 5;
25 : out = 0;
26 : out = 0;
27 : out = 14;
28 : out = 12;
29 : out = 9;
30 : out = 7;
31 : out = 2;
32 : out = 7;
33 : out = 2;
34 : out = 11;
35 : out = 1;
36 : out = 4;
37 : out = 14;
38 : out = 1;
39 : out = 7;
40 : out = 9;
41 : out = 4;
42 : out = 12;
43 : out = 10;
44 : out = 14;
45 : out = 8;
46 : out = 2;
47 : out = 13;
48 : out = 0;
49 : out = 15;
50 : out = 6;
51 : out = 12;
52 : out = 10;
53 : out = 9;
54 : out = 13;
55 : out = 0;
56 : out = 15;
57 : out = 3;
58 : out = 3;
59 : out = 5;
60 : out = 5;
61 : out = 6;
62 : out = 8;
63 : out = 11;
endcase
end
endmodule
module sboxes (in,out);
input [47:0] in;
output [31:0] out;
wire [31:0] out;
sbox7 s0 (.in(in[5:0]),.out(out[3:0]));
sbox6 s1 (.in(in[11:6]),.out(out[7:4]));
sbox5 s2 (.in(in[17:12]),.out(out[11:8]));
sbox4 s3 (.in(in[23:18]),.out(out[15:12]));
sbox3 s4 (.in(in[29:24]),.out(out[19:16]));
sbox2 s5 (.in(in[35:30]),.out(out[23:20]));
sbox1 s6 (.in(in[41:36]),.out(out[27:24]));
sbox0 s7 (.in(in[47:42]),.out(out[31:28]));
endmodule