//substitution boxes
module sbox1(row,col,out);
input wire [1:0] row; // bit 1 and 6 form the 2-bit value
input wire [3:0] col; // bit 2,3,4,5 form the 4-bit value
output reg [3:0] out; // subsutition table returns 4-bit values
always@(*)
begin
//all values are considered as 4 bits wide
case(row)
0:
begin
case(col)
0:out = 4'd14;
1:out = 4'd4;
2:out = 4'd13;
3:out = 4'd1;
4:out = 4'd2;
5:out = 4'd15;
6:out = 4'd11;
7:out = 4'd8;
8:out = 4'd3;
9:out = 4'd10;
10:out = 4'd6;
11:out = 4'd12;
12:out = 4'd5;
13:out = 4'd9;
14:out = 4'd0;
15:out = 4'd7;
endcase // case (col)
end // case: 0
1:
begin
case(col)
0:out = 4'd0;
1:out = 4'd15;
2:out = 4'd7;
3:out = 4'd4;
4:out = 4'd14;
5:out = 4'd2;
6:out = 4'd13;
7:out = 4'd1;
8:out = 4'd10;
9:out = 4'd6;
10:out = 4'd12;
11:out = 4'd11;
12:out = 4'd9;
13:out = 4'd5;
14:out = 4'd3;
15:out = 4'd8;
endcase // case (col)
end // case: 1
2:
begin
case(col)
0:out = 4'd4;
1:out = 4'd1;
2:out = 4'd14;
3:out = 4'd8;
4:out = 4'd13;
5:out = 4'd6;
6:out = 4'd2;
7:out = 4'd11;
8:out = 4'd15;
9:out = 4'd12;
10:out = 4'd9;
11:out = 4'd7;
12:out = 4'd3;
13:out = 4'd10;
14:out = 4'd5;
15:out = 4'd0;
endcase // case (col)
end // case: 2
3:
begin
case(col)
0:out = 4'd15;
1:out = 4'd12;
2:out = 4'd8;
3:out = 4'd2;
4:out = 4'd4;
5:out = 4'd9;
6:out = 4'd1;
7:out = 4'd7;
8:out = 4'd5;
9:out = 4'd11;
10:out = 4'd3;
11:out = 4'd14;
12:out = 4'd10;
13:out = 4'd0;
14:out = 4'd6;
15:out = 4'd13;
endcase // case (col)
end // case: 3
endcase // case (row)
end // always@ (*)
endmodule // sbox1
module sbox2(row,col,out);
input wire [1:0] row; // bit 1 and 6 form the 2-bit value
input wire [3:0] col; // bit 2,3,4,5 form the 4-bit value
output reg [3:0] out; // subsutition table returns 4-bit values
always@(*)
begin
//all values are considered as 4 bits wide
case(row)
0:
begin
case(col)
0:out = 4'd15;
1:out = 4'd1;
2:out = 4'd8;
3:out = 4'd14;
4:out = 4'd6;
5:out = 4'd11;
6:out = 4'd3;
7:out = 4'd4;
8:out = 4'd9;
9:out = 4'd7;
10:out = 4'd2;
11:out = 4'd13;
12:out = 4'd12;
13:out = 4'd0;
14:out = 4'd5;
15:out = 4'd10;
endcase // case (col)
end // case: 0
1:
begin
case(col)
0:out = 4'd3;
1:out = 4'd13;
2:out = 4'd4;
3:out = 4'd7;
4:out = 4'd15;
5:out = 4'd2;
6:out = 4'd8;
7:out = 4'd14;
8:out = 4'd12;
9:out = 4'd0;
10:out = 4'd1;
11:out = 4'd10;
12:out = 4'd6;
13:out = 4'd9;
14:out = 4'd11;
15:out = 4'd5;
endcase // case (col)
end // case: 1
2:
begin
case(col)
0:out = 4'd0;
1:out = 4'd14;
2:out = 4'd7;
3:out = 4'd11;
4:out = 4'd10;
5:out = 4'd4;
6:out = 4'd13;
7:out = 4'd1;
8:out = 4'd5;
9:out = 4'd8;
10:out = 4'd12;
11:out = 4'd6;
12:out = 4'd9;
13:out = 4'd3;
14:out = 4'd2;
15:out = 4'd15;
endcase // case (col)
end // case: 2
3:
begin
case(col)
0:out = 4'd13;
1:out = 4'd8;
2:out = 4'd10;
3:out = 4'd1;
4:out = 4'd3;
5:out = 4'd15;
6:out = 4'd4;
7:out = 4'd2;
8:out = 4'd11;
9:out = 4'd6;
10:out = 4'd7;
11:out = 4'd12;
12:out = 4'd0;
13:out = 4'd5;
14:out = 4'd14;
15:out = 4'd9;
endcase // case (col)
end // case: 3
endcase // case (row)
end // always@ (*)
endmodule // sbox2
module sbox3(row,col,out);
input wire [1:0] row; // bit 1 and 6 form the 2-bit value
input wire [3:0] col; // bit 2,3,4,5 form the 4-bit value
output reg [3:0] out; // subsutition table returns 4-bit values
always@(*)
begin
//all values are considered as 4 bits wide
case(row)
0:
begin
case(col)
0:out = 4'd10;
1:out = 4'd0;
2:out = 4'd9;
3:out = 4'd14;
4:out = 4'd6;
5:out = 4'd3;
6:out = 4'd15;
7:out = 4'd5;
8:out = 4'd1;
9:out = 4'd13;
10:out = 4'd12;
11:out = 4'd7;
12:out = 4'd11;
13:out = 4'd4;
14:out = 4'd2;
15:out = 4'd8;
endcase // case (col)
end // case: 0
1:
begin
case(col)
0:out = 4'd13;
1:out = 4'd7;
2:out = 4'd0;
3:out = 4'd9;
4:out = 4'd3;
5:out = 4'd4;
6:out = 4'd6;
7:out = 4'd10;
8:out = 4'd2;
9:out = 4'd8;
10:out = 4'd5;
11:out = 4'd14;
12:out = 4'd12;
13:out = 4'd11;
14:out = 4'd15;
15:out = 4'd1;
endcase // case (col)
end // case: 1
2:
begin
case(col)
0:out = 4'd13;
1:out = 4'd6;
2:out = 4'd4;
3:out = 4'd9;
4:out = 4'd8;
5:out = 4'd15;
6:out = 4'd3;
7:out = 4'd0;
8:out = 4'd11;
9:out = 4'd1;
10:out = 4'd2;
11:out = 4'd12;
12:out = 4'd5;
13:out = 4'd10;
14:out = 4'd14;
15:out = 4'd7;
endcase // case (col)
end // case: 2
3:
begin
case(col)
0:out = 4'd1;
1:out = 4'd10;
2:out = 4'd13;
3:out = 4'd0;
4:out = 4'd6;
5:out = 4'd9;
6:out = 4'd8;
7:out = 4'd7;
8:out = 4'd4;
9:out = 4'd15;
10:out = 4'd14;
11:out = 4'd3;
12:out = 4'd11;
13:out = 4'd5;
14:out = 4'd2;
15:out = 4'd12;
endcase // case (col)
end // case: 3
endcase // case (row)
end // always@ (*)
endmodule // sbox3
module sbox4(row,col,out);
input wire [1:0] row; // bit 1 and 6 form the 2-bit value
input wire [3:0] col; // bit 2,3,4,5 form the 4-bit value
output reg [3:0] out; // subsutition table returns 4-bit values
always@(*)
begin
//all values are considered as 4 bits wide
case(row)
0:
begin
case(col)
0:out = 4'd7;
1:out = 4'd13;
2:out = 4'd14;
3:out = 4'd3;
4:out = 4'd0;
5:out = 4'd6;
6:out = 4'd9;
7:out = 4'd10;
8:out = 4'd1;
9:out = 4'd2;
10:out = 4'd8;
11:out = 4'd5;
12:out = 4'd11;
13:out = 4'd12;
14:out = 4'd4;
15:out = 4'd15;
endcase // case (col)
end // case: 0
1:
begin
case(col)
0:out = 4'd13;
1:out = 4'd8;
2:out = 4'd11;
3:out = 4'd5;
4:out = 4'd6;
5:out = 4'd15;
6:out = 4'd0;
7:out = 4'd3;
8:out = 4'd4;
9:out = 4'd7;
10:out = 4'd2;
11:out = 4'd12;
12:out = 4'd1;
13:out = 4'd10;
14:out = 4'd14;
15:out = 4'd9;
endcase // case (col)
end // case: 1
2:
begin
case(col)
0:out = 4'd10;
1:out = 4'd6;
2:out = 4'd9;
3:out = 4'd0;
4:out = 4'd12;
5:out = 4'd11;
6:out = 4'd7;
7:out = 4'd13;
8:out = 4'd15;
9:out = 4'd1;
10:out = 4'd3;
11:out = 4'd14;
12:out = 4'd5;
13:out = 4'd2;
14:out = 4'd8;
15:out = 4'd4;
endcase // case (col)
end // case: 2
3:
begin
case(col)
0:out = 4'd3;
1:out = 4'd15;
2:out = 4'd0;
3:out = 4'd6;
4:out = 4'd10;
5:out = 4'd1;
6:out = 4'd13;
7:out = 4'd8;
8:out = 4'd9;
9:out = 4'd4;
10:out = 4'd5;
11:out = 4'd11;
12:out = 4'd12;
13:out = 4'd7;
14:out = 4'd2;
15:out = 4'd14;
endcase // case (col)
end // case: 3
endcase // case (row)
end // always@ (posedge clk)
endmodule // sbox4
module sbox5(row,col,out);
input wire [1:0] row; // bit 1 and 6 form the 2-bit value
input wire [3:0] col; // bit 2,3,4,5 form the 4-bit value
output reg [3:0] out; // subsutition table returns 4-bit values
always@(*)
begin
//all values are considered as 4 bits wide
case(row)
0:
begin
case(col)
0:out = 4'd2;
1:out = 4'd12;
2:out = 4'd4;
3:out = 4'd1;
4:out = 4'd7;
5:out = 4'd10;
6:out = 4'd11;
7:out = 4'd6;
8:out = 4'd8;
9:out = 4'd5;
10:out = 4'd3;
11:out = 4'd15;
12:out = 4'd13;
13:out = 4'd0;
14:out = 4'd14;
15:out = 4'd9;
endcase // case (col)
end // case: 0
1:
begin
case(col)
0:out = 4'd14;
1:out = 4'd11;
2:out = 4'd2;
3:out = 4'd12;
4:out = 4'd4;
5:out = 4'd7;
6:out = 4'd13;
7:out = 4'd1;
8:out = 4'd5;
9:out = 4'd0;
10:out = 4'd15;
11:out = 4'd10;
12:out = 4'd3;
13:out = 4'd9;
14:out = 4'd8;
15:out = 4'd6;
endcase // case (col)
end // case: 1
2:
begin
case(col)
0:out = 4'd4;
1:out = 4'd2;
2:out = 4'd1;
3:out = 4'd11;
4:out = 4'd10;
5:out = 4'd13;
6:out = 4'd7;
7:out = 4'd8;
8:out = 4'd15;
9:out = 4'd9;
10:out = 4'd12;
11:out = 4'd5;
12:out = 4'd6;
13:out = 4'd3;
14:out = 4'd0;
15:out = 4'd14;
endcase // case (col)
end // case: 2
3:
begin
case(col)
0:out = 4'd11;
1:out = 4'd8;
2:out = 4'd12;
3:out = 4'd7;
4:out = 4'd1;
5:out = 4'd14;
6:out = 4'd2;
7:out = 4'd13;
8:out = 4'd6;
9:out = 4'd15;
10:out = 4'd0;
11:out = 4'd9;
12:out = 4'd10;
13:out = 4'd4;
14:out = 4'd5;
15:out = 4'd3;
endcase // case (col)
end // case: 3
endcase // case (row)
end // always@ (posedge clk)
endmodule // sbox5
module sbox6(row,col,out);
input wire [1:0] row; // bit 1 and 6 form the 2-bit value
input wire [3:0] col; // bit 2,3,4,5 form the 4-bit value
output reg [3:0] out; // subsutition table returns 4-bit values
always@(*)
begin
//all values are considered as 4 bits wide
case(row)
0:
begin
case(col)
0:out = 4'd12;
1:out = 4'd1;
2:out = 4'd10;
3:out = 4'd15;
4:out = 4'd9;
5:out = 4'd2;
6:out = 4'd6;
7:out = 4'd8;
8:out = 4'd0;
9:out = 4'd13;
10:out = 4'd3;
11:out = 4'd4;
12:out = 4'd14;
13:out = 4'd7;
14:out = 4'd5;
15:out = 4'd11;
endcase // case (col)
end // case: 0
1:
begin
case(col)
0:out = 4'd10;
1:out = 4'd15;
2:out = 4'd4;
3:out = 4'd2;
4:out = 4'd7;
5:out = 4'd12;
6:out = 4'd9;
7:out = 4'd5;
8:out = 4'd6;
9:out = 4'd1;
10:out = 4'd13;
11:out = 4'd14;
12:out = 4'd0;
13:out = 4'd11;
14:out = 4'd3;
15:out = 4'd8;
endcase // case (col)
end // case: 1
2:
begin
case(col)
0:out = 4'd9;
1:out = 4'd14;
2:out = 4'd15;
3:out = 4'd5;
4:out = 4'd2;
5:out = 4'd8;
6:out = 4'd12;
7:out = 4'd3;
8:out = 4'd7;
9:out = 4'd0;
10:out = 4'd4;
11:out = 4'd10;
12:out = 4'd1;
13:out = 4'd13;
14:out = 4'd11;
15:out = 4'd6;
endcase // case (col)
end // case: 2
3:
begin
case(col)
0:out = 4'd4;
1:out = 4'd3;
2:out = 4'd2;
3:out = 4'd12;
4:out = 4'd9;
5:out = 4'd5;
6:out = 4'd15;
7:out = 4'd10;
8:out = 4'd11;
9:out = 4'd14;
10:out = 4'd1;
11:out = 4'd7;
12:out = 4'd6;
13:out = 4'd0;
14:out = 4'd8;
15:out = 4'd13;
endcase // case (col)
end // case: 3
endcase // case (row)
end // always@ (posedge clk)
endmodule // sbox6
module sbox7(row,col,out);
input wire [1:0] row; // bit 1 and 6 form the 2-bit value
input wire [3:0] col; // bit 2,3,4,5 form the 4-bit value
output reg [3:0] out; // subsutition table returns 4-bit values
always@(*)
begin
//all values are considered as 4 bits wide
case(row)
0:
begin
case(col)
0:out = 4'd4;
1:out = 4'd11;
2:out = 4'd2;
3:out = 4'd14;
4:out = 4'd15;
5:out = 4'd0;
6:out = 4'd8;
7:out = 4'd13;
8:out = 4'd3;
9:out = 4'd12;
10:out = 4'd9;
11:out = 4'd7;
12:out = 4'd5;
13:out = 4'd10;
14:out = 4'd6;
15:out = 4'd1;
endcase // case (col)
end // case: 0
1:
begin
case(col)
0:out = 4'd13;
1:out = 4'd0;
2:out = 4'd11;
3:out = 4'd7;
4:out = 4'd4;
5:out = 4'd9;
6:out = 4'd1;
7:out = 4'd10;
8:out = 4'd14;
9:out = 4'd3;
10:out = 4'd5;
11:out = 4'd12;
12:out = 4'd2;
13:out = 4'd15;
14:out = 4'd8;
15:out = 4'd6;
endcase // case (col)
end // case: 1
2:
begin
case(col)
0:out = 4'd1;
1:out = 4'd4;
2:out = 4'd11;
3:out = 4'd13;
4:out = 4'd12;
5:out = 4'd3;
6:out = 4'd7;
7:out = 4'd14;
8:out = 4'd10;
9:out = 4'd15;
10:out = 4'd6;
11:out = 4'd8;
12:out = 4'd0;
13:out = 4'd5;
14:out = 4'd9;
15:out = 4'd2;
endcase // case (col)
end // case: 2
3:
begin
case(col)
0:out = 4'd6;
1:out = 4'd11;
2:out = 4'd13;
3:out = 4'd8;
4:out = 4'd1;
5:out = 4'd4;
6:out = 4'd10;
7:out = 4'd7;
8:out = 4'd9;
9:out = 4'd5;
10:out = 4'd0;
11:out = 4'd15;
12:out = 4'd14;
13:out = 4'd2;
14:out = 4'd3;
15:out = 4'd12;
endcase // case (col)
end // case: 3
endcase // case (row)
end // always@ (posedge clk)
endmodule // sbox7
module sbox8(row,col,out);
input wire [1:0] row; // bit 1 and 6 form the 2-bit value
input wire [3:0] col; // bit 2,3,4,5 form the 4-bit value
output reg [3:0] out; // subsutition table returns 4-bit values
always@(*)
begin
//all values are considered as 4 bits wide
case(row)
0:
begin
case(col)
0:out = 4'd13;
1:out = 4'd2;
2:out = 4'd8;
3:out = 4'd4;
4:out = 4'd6;
5:out = 4'd15;
6:out = 4'd11;
7:out = 4'd1;
8:out = 4'd10;
9:out = 4'd9;
10:out = 4'd3;
11:out = 4'd14;
12:out = 4'd5;
13:out = 4'd0;
14:out = 4'd12;
15:out = 4'd7;
endcase // case (col)
end // case: 0
1:
begin
case(col)
0:out = 4'd1;
1:out = 4'd15;
2:out = 4'd13;
3:out = 4'd8;
4:out = 4'd10;
5:out = 4'd3;
6:out = 4'd7;
7:out = 4'd4;
8:out = 4'd12;
9:out = 4'd5;
10:out = 4'd6;
11:out = 4'd11;
12:out = 4'd0;
13:out = 4'd14;
14:out = 4'd9;
15:out = 4'd2;
endcase // case (col)
end // case: 1
2:
begin
case(col)
0:out = 4'd7;
1:out = 4'd11;
2:out = 4'd4;
3:out = 4'd1;
4:out = 4'd9;
5:out = 4'd12;
6:out = 4'd14;
7:out = 4'd2;
8:out = 4'd0;
9:out = 4'd6;
10:out = 4'd10;
11:out = 4'd13;
12:out = 4'd15;
13:out = 4'd3;
14:out = 4'd5;
15:out = 4'd8;
endcase // case (col)
end // case: 2
3:
begin
case(col)
0:out = 4'd2;
1:out = 4'd1;
2:out = 4'd14;
3:out = 4'd7;
4:out = 4'd4;
5:out = 4'd10;
6:out = 4'd8;
7:out = 4'd13;
8:out = 4'd15;
9:out = 4'd12;
10:out = 4'd9;
11:out = 4'd0;
12:out = 4'd3;
13:out = 4'd5;
14:out = 4'd6;
15:out = 4'd11;
endcase // case (col)
end // case: 3
endcase // case (row)
end // always@ (posedge clk)
endmodule // sbox8