//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