You are on page 1of 72

module add1(stateuser,cipherkey,round,in,clk,rst,c,bah);

input [127:0]stateuser,cipherkey,in;
input[3:0]round;
input clk,rst;
output reg[127:0]c,bah;
always @(posedge clk)
begin
if(rst) begin c={128{1'b0}}; end
else begin
if(round>0000)
begin
c=stateuser^cipherkey; end
if(round>0001)
begin
bah=in;
end
end
end
endmodule
module byte_sub(c,round,roundkey,rnd,clk,rst,roundkey1,b);
input [127:0]c;
input[3:0]round;
input[127:0]rnd,roundkey;
input clk,rst;
output reg[127:0]b,roundkey1;
wire [127:0]c1;
assign c1=(round>4'b0001)?rnd:c;
always @(posedge clk or round)
begin
if(rst) begin b={128{1'b0}}; end
else begin
b=BYTE_SUB_FUNCT(c1);
roundkey1=roundkey;

end
end
function automatic [7:0]SBOX_LOOKUP;
input [7:0]a;
reg [7:0]temp;
begin
case(a)
8'h00: begin temp=8'h63; end
8'h01: begin temp=8'h7c; end
8'h02: begin temp=8'h77; end
8'h03: begin temp=8'h7b; end
8'h04: begin temp=8'hf2; end
8'h05: begin temp=8'h6b; end
8'h06: begin temp=8'h6f; end
8'h07: begin temp=8'hc5; end
8'h08: begin temp=8'h30; end
8'h09: begin temp=8'h01; end
8'h0a: begin temp=8'h67; end
8'h0b: begin temp=8'h2b; end
8'h0c: begin temp=8'hfe; end
8'h0d: begin temp=8'hd7; end
8'h0e: begin temp=8'hab; end
8'h0f: begin temp=8'h76; end
8'h10: begin temp=8'hca; end
8'h11: begin temp=8'h82; end
8'h12: begin temp=8'hc9; end
8'h13: begin temp=8'h7d; end
8'h14: begin temp=8'hfa; end
8'h15: begin temp=8'h59; end
8'h16: begin temp=8'h47; end
8'h17: begin temp=8'hf0; end
8'h18: begin temp=8'had; end
8'h19: begin temp=8'hd4; end
8'h1a: begin temp=8'ha2; end
8'h1b: begin temp=8'haf; end
8'h1c: begin temp=8'h9c; end
8'h1d: begin temp=8'ha4; end
8'h1e: begin temp=8'h72; end
8'h1f: begin temp=8'hc0; end
8'h20: begin temp=8'hb7; end
8'h21: begin temp=8'hfd; end
8'h22: begin temp=8'h93; end
8'h23: begin temp=8'h26; end
8'h24: begin temp=8'h36; end
8'h25: begin temp=8'h3f; end
8'h26: begin temp=8'hf7; end
8'h27: begin temp=8'hcc; end
8'h28: begin temp=8'h34; end
8'h29: begin temp=8'ha5; end
8'h2a: begin temp=8'he5; end
8'h2b: begin temp=8'hf1; end
8'h2c: begin temp=8'h71; end
8'h2d: begin temp=8'hd8; end
8'h2e: begin temp=8'h31; end
8'h2f: begin temp=8'h15; end
8'h30: begin temp=8'h04; end
8'h31: begin temp=8'hc7; end
8'h32: begin temp=8'h23; end
8'h33: begin temp=8'hc3; end
8'h34: begin temp=8'h18; end
8'h35: begin temp=8'h96; end
8'h36: begin temp=8'h05; end
8'h37: begin temp=8'h9a; end
8'h38: begin temp=8'h07; end
8'h39: begin temp=8'h12; end
8'h3a: begin temp=8'h80; end
8'h3b: begin temp=8'he2; end
8'h3c: begin temp=8'heb; end
8'h3d: begin temp=8'h27; end
8'h3e: begin temp=8'hb2; end
8'h3f: begin temp=8'h75; end
8'h40: begin temp=8'h09; end
8'h41: begin temp=8'h83; end
8'h42: begin temp=8'h2c; end
8'h43: begin temp=8'h1a; end
8'h44: begin temp=8'h1b; end
8'h45: begin temp=8'h6e; end
8'h46: begin temp=8'h5a; end
8'h47: begin temp=8'ha0; end
8'h48: begin temp=8'h52; end
8'h49: begin temp=8'h3b; end
8'h4a: begin temp=8'hd6; end
8'h4b: begin temp=8'hb3; end
8'h4c: begin temp=8'h29; end
8'h4d: begin temp=8'he3; end
8'h4e: begin temp=8'h2f; end
8'h4f: begin temp=8'h84; end
8'h50: begin temp=8'h53; end
8'h51: begin temp=8'hd1; end
8'h52: begin temp=8'h00; end
8'h53: begin temp=8'hed; end
8'h54: begin temp=8'h20; end
8'h55: begin temp=8'hfc; end
8'h56: begin temp=8'hb1; end
8'h57: begin temp=8'h5b; end
8'h58: begin temp=8'h6a; end
8'h59: begin temp=8'hcb; end
8'h5a: begin temp=8'hbe; end
8'h5b: begin temp=8'h39; end
8'h5c: begin temp=8'h4a; end
8'h5d: begin temp=8'h4c; end
8'h5e: begin temp=8'h58; end
8'h5f: begin temp=8'hcf; end
8'h60: begin temp=8'hd0; end
8'h61: begin temp=8'hef; end
8'h62: begin temp=8'haa; end
8'h63: begin temp=8'hfb; end
8'h64: begin temp=8'h43; end
8'h65: begin temp=8'h4d; end
8'h66: begin temp=8'h33; end
8'h67: begin temp=8'h85; end
8'h68: begin temp=8'h45; end
8'h69: begin temp=8'hf9; end
8'h6a: begin temp=8'h02; end
8'h6b: begin temp=8'h7f; end
8'h6c: begin temp=8'h50; end
8'h6d: begin temp=8'h3c; end
8'h6e: begin temp=8'h9f; end
8'h6f: begin temp=8'ha8; end
8'h70: begin temp=8'h51; end
8'h71: begin temp=8'ha3; end
8'h72: begin temp=8'h40; end
8'h73: begin temp=8'h8f; end
8'h74: begin temp=8'h92; end
8'h75: begin temp=8'h9d; end
8'h76: begin temp=8'h38; end
8'h77: begin temp=8'hf5; end
8'h78: begin temp=8'hbc; end
8'h79: begin temp=8'hb6; end
8'h7a: begin temp=8'hda; end
8'h7b: begin temp=8'h21; end
8'h7c: begin temp=8'h10; end
8'h7d: begin temp=8'hff; end
8'h7e: begin temp=8'hf3; end
8'h7f: begin temp=8'hd2; end
8'h80: begin temp=8'hcd; end
8'h81: begin temp=8'h0c; end
8'h82: begin temp=8'h13; end
8'h83: begin temp=8'hec; end
8'h84: begin temp=8'h5f; end
8'h85: begin temp=8'h97; end
8'h86: begin temp=8'h44; end
8'h87: begin temp=8'h17; end
8'h88: begin temp=8'hc4; end
8'h89: begin temp=8'ha7; end
8'h8a: begin temp=8'h7e; end
8'h8b: begin temp=8'h3d; end
8'h8c: begin temp=8'h64; end
8'h8d: begin temp=8'h5d; end
8'h8e: begin temp=8'h19; end
8'h8f: begin temp=8'h73; end
8'h90: begin temp=8'h60; end
8'h91: begin temp=8'h81; end
8'h92: begin temp=8'h4f; end
8'h93: begin temp=8'hdc; end
8'h94: begin temp=8'h22; end
8'h95: begin temp=8'h2a; end
8'h96: begin temp=8'h90; end
8'h97: begin temp=8'h88; end
8'h98: begin temp=8'h46; end
8'h99: begin temp=8'hee; end
8'h9a: begin temp=8'hb8; end
8'h9b: begin temp=8'h14; end
8'h9c: begin temp=8'hde; end
8'h9d: begin temp=8'h5e; end
8'h9e: begin temp=8'h0b; end
8'h9f: begin temp=8'hdb; end
8'ha0: begin temp=8'he0; end
8'ha1: begin temp=8'h32; end
8'ha2: begin temp=8'h3a; end
8'ha3: begin temp=8'h0a; end
8'ha4: begin temp=8'h49; end
8'ha5: begin temp=8'h06; end
8'ha6: begin temp=8'h24; end
8'ha7: begin temp=8'h5c; end
8'ha8: begin temp=8'hc2; end
8'ha9: begin temp=8'hd3; end
8'haa: begin temp=8'hac; end
8'hab: begin temp=8'h62; end
8'hac: begin temp=8'h91; end
8'had: begin temp=8'h95; end
8'hae: begin temp=8'he4; end
8'haf: begin temp=8'h79; end
8'hb0: begin temp=8'he7; end
8'hb1: begin temp=8'hc8; end
8'hb2: begin temp=8'h37; end
8'hb3: begin temp=8'h6d; end
8'hb4: begin temp=8'h8d; end
8'hb5: begin temp=8'hd5; end
8'hb6: begin temp=8'h4e; end
8'hb7: begin temp=8'ha9; end
8'hb8: begin temp=8'h6c; end
8'hb9: begin temp=8'h56; end
8'hba: begin temp=8'hf4; end
8'hbb: begin temp=8'hea; end
8'hbc: begin temp=8'h65; end
8'hbd: begin temp=8'h7a; end
8'hbe: begin temp=8'hae; end
8'hbf: begin temp=8'h08; end
8'hc0: begin temp=8'hba; end
8'hc1: begin temp=8'h78; end
8'hc2: begin temp=8'h25; end
8'hc3: begin temp=8'h2e; end
8'hc4: begin temp=8'h1c; end
8'hc5: begin temp=8'ha6; end
8'hc6: begin temp=8'hb4; end
8'hc7: begin temp=8'hc6; end
8'hc8: begin temp=8'he8; end
8'hc9: begin temp=8'hdd; end
8'hca: begin temp=8'h74; end
8'hcb: begin temp=8'h1f; end
8'hcc: begin temp=8'h4b; end
8'hcd: begin temp=8'hbd; end
8'hce: begin temp=8'h8b; end
8'hcf: begin temp=8'h8a; end
8'hd0: begin temp=8'h70; end
8'hd1: begin temp=8'h3e; end
8'hd2: begin temp=8'hb5; end
8'hd3: begin temp=8'h66; end
8'hd4: begin temp=8'h48; end
8'hd5: begin temp=8'h03; end
8'hd6: begin temp=8'hf6; end
8'hd7: begin temp=8'h0e; end
8'hd8: begin temp=8'h61; end
8'hd9: begin temp=8'h35; end
8'hda: begin temp=8'h57; end
8'hdb: begin temp=8'hb9; end
8'hdc: begin temp=8'h86; end
8'hdd: begin temp=8'hc1; end
8'hde: begin temp=8'h1d; end
8'hdf: begin temp=8'h9e; end
8'he0: begin temp=8'he1; end
8'he1: begin temp=8'hf8; end
8'he2: begin temp=8'h98; end
8'he3: begin temp=8'h11; end
8'he4: begin temp=8'h69; end
8'he5: begin temp=8'hd9; end
8'he6: begin temp=8'h8e; end
8'he7: begin temp=8'h94; end
8'he8: begin temp=8'h9b; end
8'he9: begin temp=8'h1e; end
8'hea: begin temp=8'h87; end
8'heb: begin temp=8'he9; end
8'hec: begin temp=8'hce; end
8'hed: begin temp=8'h55; end
8'hee: begin temp=8'h28; end
8'hef: begin temp=8'hdf; end
8'hf0: begin temp=8'h8c; end
8'hf1: begin temp=8'ha1; end
8'hf2: begin temp=8'h89; end
8'hf3: begin temp=8'h0d; end
8'hf4: begin temp=8'hbf; end
8'hf5: begin temp=8'he6; end
8'hf6: begin temp=8'h42; end
8'hf7: begin temp=8'h68; end
8'hf8: begin temp=8'h41; end
8'hf9: begin temp=8'h99; end
8'hfa: begin temp=8'h2d; end
8'hfb: begin temp=8'h0f; end
8'hfc: begin temp=8'hb0; end
8'hfd: begin temp=8'h54; end
8'hfe: begin temp=8'hbb; end
8'hff: begin temp=8'h16; end
endcase
SBOX_LOOKUP=temp;
end
endfunction
function [127:0]BYTE_SUB_FUNCT;
input[127:0]state;
reg[127:0]b;
reg[127:0]temp;
begin
b[127:104]={SBOX_LOOKUP(state[127:120]),SBOX_LOOKUP(state[119:112]),SBOX_LOO
KUP(state[111:104])};
b[103:80]={SBOX_LOOKUP(state[103:96]),SBOX_LOOKUP(state[95:88]),SBOX_LOOKUP(
state[87:80])};
b[79:48]={SBOX_LOOKUP(state[79:72]),SBOX_LOOKUP(state[71:64]),SBOX_LOOKUP(st
ate[63:56]),SBOX_LOOKUP(state[55:48])};
b[47:16]={SBOX_LOOKUP(state[47:40]),SBOX_LOOKUP(state[39:32]),SBOX_LOOKUP(st
ate[31:24]),SBOX_LOOKUP(state[23:16])};
b[15:0]={SBOX_LOOKUP(state[15:8]),SBOX_LOOKUP(state[7:0])};
temp=b;
BYTE_SUB_FUNCT=temp;
end
endfunction
endmodule
module key_gen(cipherkey,round,rst,roundkey,myround);
input [127:0]cipherkey,myround;
input [3:0]round;
input rst;
output reg[127:0]roundkey;
reg [127:0]cipherkey1 ;
always @(round)
begin
if (rst==1'b1)
begin
roundkey=128'b0;
end
else
begin
if (round==4'b0001)
begin
cipherkey1=cipherkey;
end
else
begin
cipherkey1=myround;
end
roundkey=roundkey_GEN(cipherkey1);
end
end
function [127:0]roundkey_GEN;
input[127:0]cipherkey;
reg[127:0]b;
reg[7:0]b0,b1,b2,b3;
begin
{b0,b1,b2,b3}=cipherkey[31:0];
case(round)
1: begin
b[127:120]=SBOX_LOOKUP(b1)^8'b00000001^cipherkey[127:120];
b[119:112]=SBOX_LOOKUP(b2)^cipherkey[119:112];
b[111:104]=SBOX_LOOKUP(b3)^cipherkey[111:104];
b[103:96]=SBOX_LOOKUP(b0)^cipherkey[103:96];
b[95:64]=b[127:96]^cipherkey[95:64];
b[63:32]=b[95:64]^cipherkey[63:32];
b[31:0]=b[63:32]^cipherkey[31:0];
end

2:
begin
b[127:120]=SBOX_LOOKUP(b1)^8'b00000010^myround[127:120];
b[119:112]=SBOX_LOOKUP(b2)^myround[119:112];
b[111:104]=SBOX_LOOKUP(b3)^myround[111:104];
b[103:96]=SBOX_LOOKUP(b0)^myround[103:96];
b[95:64]=b[127:96]^myround[95:64];
b[63:32]=b[95:64]^myround[63:32];
b[31:0]=b[63:32]^myround[31:0];
end
3:
begin
b[127:120]=SBOX_LOOKUP(b1)^8'b00000100^myround[127:120];
b[119:112]=SBOX_LOOKUP(b2)^myround[119:112];
b[111:104]=SBOX_LOOKUP(b3)^myround[111:104];
b[103:96]=SBOX_LOOKUP(b0)^myround[103:96];
b[95:64]=b[127:96]^myround[95:64];
b[63:32]=b[95:64]^myround[63:32];
b[31:0]=b[63:32]^myround[31:0];
end
4:
begin
b[127:120]=SBOX_LOOKUP(b1)^8'b00001000^myround[127:120];
b[119:112]=SBOX_LOOKUP(b2)^myround[119:112];
b[111:104]=SBOX_LOOKUP(b3)^myround[111:104];
b[103:96]=SBOX_LOOKUP(b0)^myround[103:96];
b[95:64]=b[127:96]^myround[95:64];
b[63:32]=b[95:64]^myround[63:32];
b[31:0]=b[63:32]^myround[31:0];
end
5:
begin
b[127:120]=SBOX_LOOKUP(b1)^8'b00010000^myround[127:120];
b[119:112]=SBOX_LOOKUP(b2)^myround[119:112];
b[111:104]=SBOX_LOOKUP(b3)^myround[111:104];
b[103:96]=SBOX_LOOKUP(b0)^myround[103:96];
b[95:64]=b[127:96]^myround[95:64];
b[63:32]=b[95:64]^myround[63:32];
b[31:0]=b[63:32]^myround[31:0];
end
6:
begin
b[127:120]=SBOX_LOOKUP(b1)^8'b00100000^myround[127:120];
b[119:112]=SBOX_LOOKUP(b2)^myround[119:112];
b[111:104]=SBOX_LOOKUP(b3)^myround[111:104];
b[103:96]=SBOX_LOOKUP(b0)^myround[103:96];
b[95:64]=b[127:96]^myround[95:64];
b[63:32]=b[95:64]^myround[63:32];
b[31:0]=b[63:32]^myround[31:0];
end

7:
begin
b[127:120]=SBOX_LOOKUP(b1)^8'b01000000^myround[127:120];
b[119:112]=SBOX_LOOKUP(b2)^myround[119:112];
b[111:104]=SBOX_LOOKUP(b3)^myround[111:104];
b[103:96]=SBOX_LOOKUP(b0)^myround[103:96];
b[95:64]=b[127:96]^myround[95:64];
b[63:32]=b[95:64]^myround[63:32];
b[31:0]=b[63:32]^myround[31:0];
end

8:
begin
b[127:120]=SBOX_LOOKUP(b1)^8'b10000000^myround[127:120];
b[119:112]=SBOX_LOOKUP(b2)^myround[119:112];
b[111:104]=SBOX_LOOKUP(b3)^myround[111:104];
b[103:96]=SBOX_LOOKUP(b0)^myround[103:96];
b[95:64]=b[127:96]^myround[95:64];
b[63:32]=b[95:64]^myround[63:32];
b[31:0]=b[63:32]^myround[31:0];
end
9:
begin
b[127:120]=SBOX_LOOKUP(b1)^8'b00011011^myround[127:120];
b[119:112]=SBOX_LOOKUP(b2)^myround[119:112];
b[111:104]=SBOX_LOOKUP(b3)^myround[111:104];
b[103:96]=SBOX_LOOKUP(b0)^myround[103:96];
b[95:64]=b[127:96]^myround[95:64];
b[63:32]=b[95:64]^myround[63:32];
b[31:0]=b[63:32]^myround[31:0];
end
10:
begin
b[127:120]=SBOX_LOOKUP(b1)^8'b00110110^myround[127:120];
b[119:112]=SBOX_LOOKUP(b2)^myround[119:112];
b[111:104]=SBOX_LOOKUP(b3)^myround[111:104];
b[103:96]=SBOX_LOOKUP(b0)^myround[103:96];
b[95:64]=b[127:96]^myround[95:64];
b[63:32]=b[95:64]^myround[63:32];
b[31:0]=b[63:32]^myround[31:0];
end
default: begin end
endcase

roundkey_GEN=b;
end
endfunction
function automatic [7:0]SBOX_LOOKUP;
input [7:0]a;
reg [7:0]temp;
begin
case(a)
8'h00:
begin
temp=8'h63;
end
8'h01:
begin
temp=8'h7c;
end
8'h02:
begin
temp=8'h77;
end
8'h03:
begin
temp=8'h7b;
end
8'h04:
begin
temp=8'hf2;
end
8'h05:
begin
temp=8'h6b;
end
8'h06:
begin
temp=8'h6f;
end
8'h07:
begin
temp=8'hc5;
end
8'h08:
begin
temp=8'h30;
end
8'h09:
begin
temp=8'h01;
end
8'h0a:
begin
temp=8'h67;
end
8'h0b:
begin
temp=8'h2b;
end
8'h0c:
begin
temp=8'hfe;
end
8'h0d:
begin
temp=8'hd7;
end
8'h0e:
begin
temp=8'hab;
end
8'h0f:
begin
temp=8'h76;
end
8'h10:
begin
temp=8'hca;
end
8'h11:
begin
temp=8'h82;
end
8'h12:
begin
temp=8'hc9;
end
8'h13:
begin
temp=8'h7d;
end
8'h14:
begin
temp=8'hfa;
end
8'h15:
begin
temp=8'h59;
end
8'h16:
begin
temp=8'h47;
end
8'h17:
begin
temp=8'hf0;
end
8'h18:
begin
temp=8'had;
end
8'h19:
begin
temp=8'hd4;
end
8'h1a:
begin
temp=8'ha2;
end
8'h1b:
begin
temp=8'haf;
end
8'h1c:
begin
temp=8'h9c;
end
8'h1d:
begin
temp=8'ha4;
end
8'h1e:
begin
temp=8'h72;
end
8'h1f:
begin
temp=8'hc0;
end
8'h20:
begin
temp=8'hb7;
end
8'h21:
begin
temp=8'hfd;
end
8'h22:
begin
temp=8'h93;
end
8'h23:
begin
temp=8'h26;
end
8'h24:
begin
temp=8'h36;
end
8'h25:
begin
temp=8'h3f;
end
8'h26:
begin
temp=8'hf7;
end
8'h27:
begin
temp=8'hcc;
end
8'h28:
begin
temp=8'h34;
end
8'h29:
begin
temp=8'ha5;
end
8'h2a:
begin
temp=8'he5;
end
8'h2b:
begin
temp=8'hf1;
end
8'h2c:
begin
temp=8'h71;
end
8'h2d:
begin
temp=8'hd8;
end
8'h2e:
begin
temp=8'h31;
end
8'h2f:
begin
temp=8'h15;
end
8'h30:
begin
temp=8'h04;
end
8'h31:
begin
temp=8'hc7;
end
8'h32:
begin
temp=8'h23;
end
8'h33:
begin
temp=8'hc3;
end
8'h34:
begin
temp=8'h18;
end
8'h35:
begin
temp=8'h96;
end
8'h36:
begin
temp=8'h05;
end
8'h37:
begin
temp=8'h9a;
end
8'h38:
begin
temp=8'h07;
end
8'h39:
begin
temp=8'h12;
end
8'h3a:
begin
temp=8'h80;
end
8'h3b:
begin
temp=8'he2;
end
8'h3c:
begin
temp=8'heb;
end
8'h3d:
begin
temp=8'h27;
end
8'h3e:
begin
temp=8'hb2;
end
8'h3f:
begin
temp=8'h75;
end
8'h40:
begin
temp=8'h09;
end
8'h41:
begin
temp=8'h83;
end
8'h42:
begin
temp=8'h2c;
end
8'h43:
begin
temp=8'h1a;
end
8'h44:
begin
temp=8'h1b;
end
8'h45:
begin
temp=8'h6e;
end
8'h46:
begin
temp=8'h5a;
end
8'h47:
begin
temp=8'ha0;
end
8'h48:
begin
temp=8'h52;
end
8'h49:
begin
temp=8'h3b;
end
8'h4a:
begin
temp=8'hd6;
end
8'h4b:
begin
temp=8'hb3;
end
8'h4c:
begin
temp=8'h29;
end
8'h4d:
begin
temp=8'he3;
end
8'h4e:
begin
temp=8'h2f;
end
8'h4f:
begin
temp=8'h84;
end
8'h50:
begin
temp=8'h53;
end
8'h51:
begin
temp=8'hd1;
end
8'h52:
begin
temp=8'h00;
end
8'h53:
begin
temp=8'hed;
end
8'h54:
begin
temp=8'h20;
end
8'h55:
begin
temp=8'hfc;
end
8'h56:
begin
temp=8'hb1;
end
8'h57:
begin
temp=8'h5b;
end
8'h58:
begin
temp=8'h6a;
end
8'h59:
begin
temp=8'hcb;
end
8'h5a:
begin
temp=8'hbe;
end
8'h5b:
begin
temp=8'h39;
end
8'h5c:
begin
temp=8'h4a;
end
8'h5d:
begin
temp=8'h4c;
end
8'h5e:
begin
temp=8'h58;
end
8'h5f:
begin
temp=8'hcf;
end
8'h60:
begin
temp=8'hd0;
end
8'h61:
begin
temp=8'hef;
end
8'h62:
begin
temp=8'haa;
end
8'h63:
begin
temp=8'hfb;
end
8'h64:
begin
temp=8'h43;
end
8'h65:
begin
temp=8'h4d;
end
8'h66:
begin
temp=8'h33;
end
8'h67:
begin
temp=8'h85;
end
8'h68:
begin
temp=8'h45;
end
8'h69:
begin
temp=8'hf9;
end
8'h6a:
begin
temp=8'h02;
end
8'h6b:
begin
temp=8'h7f;
end
8'h6c:
begin
temp=8'h50;
end
8'h6d:
begin
temp=8'h3c;
end
8'h6e:
begin
temp=8'h9f;
end
8'h6f:
begin
temp=8'ha8;
end
8'h70:
begin
temp=8'h51;
end
8'h71:
begin
temp=8'ha3;
end
8'h72:
begin
temp=8'h40;
end
8'h73:
begin
temp=8'h8f;
end
8'h74:
begin
temp=8'h92;
end
8'h75:
begin
temp=8'h9d;
end
8'h76:
begin
temp=8'h38;
end
8'h77:
begin
temp=8'hf5;
end
8'h78:
begin
temp=8'hbc;
end
8'h79:
begin
temp=8'hb6;
end
8'h7a:
begin
temp=8'hda;
end
8'h7b:
begin
temp=8'h21;
end
8'h7c:
begin
temp=8'h10;
end
8'h7d:
begin
temp=8'hff;
end
8'h7e:
begin
temp=8'hf3;
end
8'h7f:
begin
temp=8'hd2;
end
8'h80:
begin
temp=8'hcd;
end
8'h81:
begin
temp=8'h0c;
end
8'h82:
begin
temp=8'h13;
end
8'h83:
begin
temp=8'hec;
end
8'h84:
begin
temp=8'h5f;
end
8'h85:
begin
temp=8'h97;
end
8'h86:
begin
temp=8'h44;
end
8'h87:
begin
temp=8'h17;
end
8'h88:
begin
temp=8'hc4;
end
8'h89:
begin
temp=8'ha7;
end
8'h8a:
begin
temp=8'h7e;
end
8'h8b:
begin
temp=8'h3d;
end
8'h8c:
begin
temp=8'h64;
end
8'h8d:
begin
temp=8'h5d;
end
8'h8e:
begin
temp=8'h19;
end
8'h8f:
begin
temp=8'h73;
end
8'h90:
begin
temp=8'h60;
end
8'h91:
begin
temp=8'h81;
end
8'h92:
begin
temp=8'h4f;
end
8'h93:
begin
temp=8'hdc;
end
8'h94:
begin
temp=8'h22;
end
8'h95:
begin
temp=8'h2a;
end
8'h96:
begin
temp=8'h90;
end
8'h97:
begin
temp=8'h88;
end
8'h98:
begin
temp=8'h46;
end
8'h99:
begin
temp=8'hee;
end
8'h9a:
begin
temp=8'hb8;
end
8'h9b:
begin
temp=8'h14;
end
8'h9c:
begin
temp=8'hde;
end
8'h9d:
begin
temp=8'h5e;
end
8'h9e:
begin
temp=8'h0b;
end
8'h9f:
begin
temp=8'hdb;
end
8'ha0:
begin
temp=8'he0;
end
8'ha1:
begin
temp=8'h32;
end
8'ha2:
begin
temp=8'h3a;
end
8'ha3:
begin
temp=8'h0a;
end
8'ha4:
begin
temp=8'h49;
end
8'ha5:
begin
temp=8'h06;
end
8'ha6:
begin
temp=8'h24;
end
8'ha7:
begin
temp=8'h5c;
end
8'ha8:
begin
temp=8'hc2;
end
8'ha9:
begin
temp=8'hd3;
end
8'haa:
begin
temp=8'hac;
end
8'hab:
begin
temp=8'h62;
end
8'hac:
begin
temp=8'h91;
end
8'had:
begin
temp=8'h95;
end
8'hae:
begin
temp=8'he4;
end
8'haf:
begin
temp=8'h79;
end
8'hb0:
begin
temp=8'he7;
end
8'hb1:
begin
temp=8'hc8;
end
8'hb2:
begin
temp=8'h37;
end
8'hb3:
begin
temp=8'h6d;
end
8'hb4:
begin
temp=8'h8d;
end
8'hb5:
begin
temp=8'hd5;
end
8'hb6:
begin
temp=8'h4e;
end
8'hb7:
begin
temp=8'ha9;
end
8'hb8:
begin
temp=8'h6c;
end
8'hb9:
begin
temp=8'h56;
end
8'hba:
begin
temp=8'hf4;
end
8'hbb:
begin
temp=8'hea;
end
8'hbc:
begin
temp=8'h65;
end
8'hbd:
begin
temp=8'h7a;
end
8'hbe:
begin
temp=8'hae;
end
8'hbf:
begin
temp=8'h08;
end
8'hc0:
begin
temp=8'hba;
end
8'hc1:
begin
temp=8'h78;
end
8'hc2:
begin
temp=8'h25;
end
8'hc3:
begin
temp=8'h2e;
end
8'hc4:
begin
temp=8'h1c;
end
8'hc5:
begin
temp=8'ha6;
end
8'hc6:
begin
temp=8'hb4;
end
8'hc7:
begin
temp=8'hc6;
end
8'hc8:
begin
temp=8'he8;
end
8'hc9:
begin
temp=8'hdd;
end
8'hca:
begin
temp=8'h74;
end
8'hcb:
begin
temp=8'h1f;
end
8'hcc:
begin
temp=8'h4b;
end
8'hcd:
begin
temp=8'hbd;
end
8'hce:
begin
temp=8'h8b;
end
8'hcf:
begin
temp=8'h8a;
end
8'hd0:
begin
temp=8'h70;
end
8'hd1:
begin
temp=8'h3e;
end
8'hd2:
begin
temp=8'hb5;
end
8'hd3:
begin
temp=8'h66;
end
8'hd4:
begin
temp=8'h48;
end
8'hd5:
begin
temp=8'h03;
end
8'hd6:
begin
temp=8'hf6;
end
8'hd7:
begin
temp=8'h0e;
end
8'hd8:
begin
temp=8'h61;
end
8'hd9:
begin
temp=8'h35;
end
8'hda:
begin
temp=8'h57;
end
8'hdb:
begin
temp=8'hb9;
end
8'hdc:
begin
temp=8'h86;
end
8'hdd:
begin
temp=8'hc1;
end
8'hde:
begin
temp=8'h1d;
end
8'hdf:
begin
temp=8'h9e;
end
8'he0:
begin
temp=8'he1;
end
8'he1:
begin
temp=8'hf8;
end
8'he2:
begin
temp=8'h98;
end
8'he3:
begin
temp=8'h11;
end
8'he4:
begin
temp=8'h69;
end
8'he5:
begin
temp=8'hd9;
end
8'he6:
begin
temp=8'h8e;
end
8'he7:
begin
temp=8'h94;
end
8'he8:
begin
temp=8'h9b;
end
8'he9:
begin
temp=8'h1e;
end
8'hea:
begin
temp=8'h87;
end
8'heb:
begin
temp=8'he9;
end
8'hec:
begin
temp=8'hce;
end
8'hed:
begin
temp=8'h55;
end
8'hee:
begin
temp=8'h28;
end
8'hef:
begin
temp=8'hdf;
end
8'hf0:
begin
temp=8'h8c;
end
8'hf1:
begin
temp=8'ha1;
end
8'hf2:
begin
temp=8'h89;
end
8'hf3:
begin
temp=8'h0d;
end
8'hf4:
begin
temp=8'hbf;
end
8'hf5:
begin
temp=8'he6;
end
8'hf6:
begin
temp=8'h42;
end
8'hf7:
begin
temp=8'h68;
end
8'hf8:
begin
temp=8'h41;
end
8'hf9:
begin
temp=8'h99;
end
8'hfa:
begin
temp=8'h2d;
end
8'hfb:
begin
temp=8'h0f;
end
8'hfc:
begin
temp=8'hb0;
end
8'hfd:
begin
temp=8'h54;
end
8'hfe:
begin
temp=8'hbb;
end
8'hff:
begin
temp=8'h16;
end
default: begin end
endcase
SBOX_LOOKUP=temp;
end
endfunction
endmodule

module shift_row(b,roundkey1,round,clk,rst,roundkey2,DATAOUT1,n11,n2,n3,n4,n5,n6
,n7,n8,n9);
input [127:0]b,roundkey1;
input [3:0]round;
input clk, rst;
output reg[127:0]DATAOUT1,roundkey2,n11,n2,n3,n4,n5,n6,n7,n8,n9;
always @(posedge clk)
begin
if(rst) begin DATAOUT1={128{1'b0}}; end
else begin
DATAOUT1=SHIFT_ROW_FUNCT(b);
roundkey2=roundkey1;
if(round==4'b0001)
begin
DATAOUT1=SHIFT_ROW_FUNCT(b);
roundkey2=roundkey1;
n11=roundkey1;
end
if(round==4'b0010)
begin
DATAOUT1=SHIFT_ROW_FUNCT(b);
roundkey2=roundkey1;
n2=roundkey1;
end
if(round==4'b0011)
begin
DATAOUT1=SHIFT_ROW_FUNCT(b);
roundkey2=roundkey1;
n3=roundkey1;
end
if(round==4'b0100)
begin
DATAOUT1=SHIFT_ROW_FUNCT(b);
roundkey2=roundkey1;
n4=roundkey1;
end
if(round==4'b0101)
begin
DATAOUT1=SHIFT_ROW_FUNCT(b);
roundkey2=roundkey1;
n5=roundkey1;
end
if(round==4'b0110)
begin
DATAOUT1=SHIFT_ROW_FUNCT(b);
roundkey2=roundkey1;
n6=roundkey1;
end
if(round==4'b0111)
begin
DATAOUT1=SHIFT_ROW_FUNCT(b);
roundkey2=roundkey1;
n7=roundkey1;
end
if(round==4'b1000)
begin
DATAOUT1=SHIFT_ROW_FUNCT(b);
roundkey2=roundkey1;
n8=roundkey1;
end
if(round==4'b1001)
begin
DATAOUT1=SHIFT_ROW_FUNCT(b);
roundkey2=roundkey1;
n9=roundkey1;
end
if(round==4'b1010)
begin
DATAOUT1=SHIFT_ROW_FUNCT(b);
roundkey2=roundkey1;

end
end
end
function[127:0]SHIFT_ROW_FUNCT;
input[127:0]b;
reg[127:0]temp;
begin
temp[127:96]={b[127:120],b[87:80],b[47:40],b[7:0]};
temp[95:64]={b[95:88],b[55:48],b[15:8],b[103:96]};
temp[63:32]={b[63:56],b[23:16],b[111:104],b[71:64]};
temp[31:0]={b[31:24],b[119:112],b[79:72],b[39:32]};
SHIFT_ROW_FUNCT=temp;
end
endfunction
endmodule
module mix_column(DATAOUT1,roundkey2,round,clk,rst,myround,DATAOUT);
input [127:0]DATAOUT1,roundkey2;
input clk,rst;
input[3:0]round;
output reg[127:0]DATAOUT,myround;
always @(posedge clk)
begin
if (rst) begin DATAOUT<={128{1'b0}}; end
else begin
if(round>4'b1001)
begin
DATAOUT<=DATAOUT1;
myround=roundkey2; end
if(round<=4'b1001)
begin
DATAOUT<=MIX_COLUMN_FUNCT(DATAOUT1);
myround=roundkey2;
end
end
end

function[127:0]MIX_COLUMN_FUNCT;
input[127:0]state;
reg [7:0]t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t15;
reg [127:0]DATA_OUT,temp;
begin
t0=DATAOUT1[127:120];
t1=DATAOUT1[119:112];
t2=DATAOUT1[111:104];
t3=DATAOUT1[103:96];
t4=DATAOUT1[95:88];
t5=DATAOUT1[87:80];
t6=DATAOUT1[79:72];
t7=DATAOUT1[71:64];
t8=DATAOUT1[63:56];
t9=DATAOUT1[55:48];
t10=DATAOUT1[47:40];
t11=DATAOUT1[39:32];
t12=DATAOUT1[31:24];
t13=DATAOUT1[23:16];
t14=DATAOUT1[15:8];
t15=DATAOUT1[7:0];
DATA_OUT[127:120]=POLY_MULTE_FUNCT(8'b00000010,t0)^POLY_MULTE_FUNCT(8'b00000011,
t1)^t2^t3;
DATA_OUT[119:112]=POLY_MULTE_FUNCT(8'b00000010,t1)^POLY_MULTE_FUNCT(8'b00000011,
t2)^t0^t3;
DATA_OUT[111:104]=POLY_MULTE_FUNCT(8'b00000010,t2)^POLY_MULTE_FUNCT(8'b00000011,
t3)^t0^t1;
DATA_OUT[103:96] =POLY_MULTE_FUNCT(8'b00000011,t0)^POLY_MULTE_FUNCT(8'b00000010,
t3)^t1^t2;
DATA_OUT[95:88] =POLY_MULTE_FUNCT(8'b00000010,t4)^POLY_MULTE_FUNCT(8'b00000011,
t5)^t6^t7;
DATA_OUT[87:80] =POLY_MULTE_FUNCT(8'b00000010,t5)^POLY_MULTE_FUNCT(8'b00000011,t
6)^t4^t7;
DATA_OUT[79:72]=POLY_MULTE_FUNCT(8'b00000010,t6)^POLY_MULTE_FUNCT(8'b00000011,t7
)^t4^t5;
DATA_OUT[71:64]=POLY_MULTE_FUNCT(8'b00000011,t4)^POLY_MULTE_FUNCT(8'b00000010,t7
)^t5^t6;
DATA_OUT[63:56]=POLY_MULTE_FUNCT(8'b00000010,t8)^POLY_MULTE_FUNCT(8'b00000011,t9
)^t10^t11;
DATA_OUT[55:48]=POLY_MULTE_FUNCT(8'b00000010,t9)^POLY_MULTE_FUNCT(8'b00000011,t1
0)^t8^t11;
DATA_OUT[47:40]=POLY_MULTE_FUNCT(8'b00000010,t10)^POLY_MULTE_FUNCT(8'b00000011,t
11)^t8^t9;
DATA_OUT[39:32]=POLY_MULTE_FUNCT(8'b00000011,t8)^POLY_MULTE_FUNCT(8'b00000010,t1
1)^t9^t10;
DATA_OUT[31:24]=POLY_MULTE_FUNCT(8'b00000010,t12)^POLY_MULTE_FUNCT(8'b00000011,t
13)^t14^t15;
DATA_OUT[23:16]=POLY_MULTE_FUNCT(8'b00000010,t13)^POLY_MULTE_FUNCT(8'b00000011,t
14)^t12^t15;
DATA_OUT[15:8] =POLY_MULTE_FUNCT(8'b00000010,t14)^POLY_MULTE_FUNCT(8'b00000011,t
15)^t12^t13;
DATA_OUT[7:0] =POLY_MULTE_FUNCT(8'b00000011,t12)^POLY_MULTE_FUNCT(8'b00000010,t
15)^t13^t14;
temp=DATA_OUT;
MIX_COLUMN_FUNCT=temp;
end
endfunction

function[7:0]POLY_MULTE_FUNCT;
input[7:0]a,b;
reg[7:0]temp,temp1,temp2,temp3,and_mask;
begin
and_mask={7{b[7]}};
case(a[3:0])
4'b0001: begin temp=b; end
4'b0010: begin temp={b[6:0],1'b0}^((8'b00011011)&and_mask); end
4'b0011: begin temp={b[6:0],1'b0}^((8'b00011011)&and_mask)^b; end
default: begin temp={8{1'b0}}; end
endcase
POLY_MULTE_FUNCT=temp;
end
endfunction
endmodule
module add2(bah,clk,rst,rnd);
input [127:0]bah;
input clk,rst;
output reg[127:0]rnd;
always @(posedge clk)
begin
if(rst) begin rnd={128{1'b0}}; end
else begin
rnd=bah;
end
end
endmodule

module add_roundkey(DATAOUT,myround,clk,rst,d2in,round);
input [127:0]DATAOUT,myround;
input clk;
input rst;
output reg [127:0]d2in;
output reg [3:0]round;
always @(posedge clk)
begin
if(rst) begin d2in={128{1'b0}};round=4'b0;
end
else begin
d2in=DATAOUT^myround;
round=round+1;
end
end
endmodule

module add3(round1,tenthround,oenc,in15,clk,rst,c15,bah15);
input [127:0]in15,tenthround,oenc;
input[3:0]round1;
input clk,rst;
output reg[127:0]c15,bah15;
always @(posedge clk)
begin
if(rst) begin c15={128{1'b0}}; end
else begin
if(round1==0001)
begin
c15=tenthround ^ oenc; end
if(round1>0001)
begin
bah15=in15;
end
end
end
endmodule
module inv_shift_row(c15,roundkey11,round1,rnd15,clk,rst,roundkey21,DATAOUT15);
input [127:0]c15,roundkey11,rnd15;
input [3:0]round1;
input clk, rst;
output reg[127:0]DATAOUT15,roundkey21;
wire [127:0]c1;
assign c1=(round1>4'b0001)?rnd15:c15;

always @(posedge clk)


begin
if(rst) begin DATAOUT15={128{1'b0}}; end
else begin
DATAOUT15=inv_SHIFT_ROW_FUNCT(c1);
roundkey21=roundkey11; end
end

function[127:0]inv_SHIFT_ROW_FUNCT;
input[127:0]state;
reg[127:0]a;
reg[127:0]temp;
begin
temp={state[127:120],state[23:16],state[47:40],state[71:64],state[95:88],state[1
19:112],state[15:8],state[39:32],state[63:56],
state[87:80],state[111:104],state[7:0],state[31:24],state[55:48],state[79:72
],state[103:96]};
inv_SHIFT_ROW_FUNCT=temp;
end
endfunction
endmodule
module inv_byte_sub(DATAOUT15,round1,roundkey21,clk,rst,roundkey31,b15);
input [127:0]DATAOUT15;
input[3:0]round1;
input[127:0]roundkey21;
input clk,rst;
output reg[127:0]b15,roundkey31;
always @(posedge clk or round1)
begin
if(rst) begin b15={128{1'b0}}; end
else begin

b15=inv_BYTE_SUB_FUNCT(DATAOUT15);
roundkey31=roundkey21; end
end

function automatic [7:0]inv_SBOX_LOOKUP;


input[7:0]a;
reg[7:0] temp;
begin
case(a)
8'h00:
begin
temp=8'h52;
end
8'h01:
begin
temp=8'h09;
end
8'h02:
begin
temp=8'h6a;
end
8'h03:
begin
temp=8'hd5;
end
8'h04:
begin
temp=8'h30;
end
8'h05:
begin
temp=8'h36;
end
8'h06:
begin
temp=8'ha5;
end
8'h07:
begin
temp=8'h38;
end
8'h08:
begin
temp=8'hbf;
end
8'h09:
begin
temp=8'h40;
end
8'h0a:
begin
temp=8'ha3;
end
8'h0b:
begin
temp=8'h9e;
end
8'h0c:
begin
temp=8'h81;
end
8'h0d:
begin
temp=8'hf3;
end
8'h0e:
begin
temp=8'hd7;
end
8'h0f:
begin
temp=8'hfb;
end
8'h10:
begin
temp=8'h7c;
end
8'h11:
begin
temp=8'he3;
end
8'h12:
begin
temp=8'h39;
end
8'h13:
begin
temp=8'h82;
end
8'h14:
begin
temp=8'h9b;
end
8'h15:
begin
temp=8'h2f;
end
8'h16:
begin
temp=8'hff;
end
8'h17:
begin
temp=8'h87;
end
8'h18:
begin
temp=8'h34;
end
8'h19:
begin
temp=8'h8e;
end
8'h1a:
begin
temp=8'h43;
end
8'h1b:
begin
temp=8'h44;
end
8'h1c:
begin
temp=8'hc4;
end
8'h1d:
begin
temp=8'hde;
end
8'h1e:
begin
temp=8'he9;
end
8'h1f:
begin
temp=8'hcb;
end
8'h20:
begin
temp=8'h54;
end
8'h21:
begin
temp=8'h7b;
end
8'h22:
begin
temp=8'h94;
end
8'h23:
begin
temp=8'h32;
end
8'h24:
begin
temp=8'ha6;
end
8'h25:
begin
temp=8'hc2;
end
8'h26:
begin
temp=8'h23;
end
8'h27:
begin
temp=8'h3d;
end
8'h28:
begin
temp=8'hee;
end
8'h29:
begin
temp=8'h4c;
end
8'h2a:
begin
temp=8'h95;
end
8'h2b:
begin
temp=8'h0b;
end
8'h2c:
begin
temp=8'h42;
end
8'h2d:
begin
temp=8'hfa;
end
8'h2e:
begin
temp=8'hc3;
end
8'h2f:
begin
temp=8'h4e;
end
8'h30:
begin
temp=8'h08;
end
8'h31:
begin
temp=8'h2e;
end
8'h32:
begin
temp=8'ha1;
end
8'h33:
begin
temp=8'h66;
end
8'h34:
begin
temp=8'h28;
end
8'h35:
begin
temp=8'hd9;
end
8'h36:
begin
temp=8'h24;
end
8'h37:
begin
temp=8'hb2;
end
8'h38:
begin
temp=8'h76;
end
8'h39:
begin
temp=8'h5b;
end
8'h3a:
begin
temp=8'ha2;
end
8'h3b:
begin
temp=8'h49;
end
8'h3c:
begin
temp=8'h6d;
end
8'h3d:
begin
temp=8'h8b;
end
8'h3e:
begin
temp=8'hd1;
end
8'h3f:
begin
temp=8'h25;
end
8'h40:
begin
temp=8'h72;
end
8'h41:
begin
temp=8'hf8;
end
8'h42:
begin
temp=8'hf6;
end
8'h43:
begin
temp=8'h64;
end
8'h44:
begin
temp=8'h86;
end
8'h45:
begin
temp=8'h68;
end
8'h46:
begin
temp=8'h98;
end
8'h47:
begin
temp=8'h16;
end
8'h48:
begin
temp=8'hd4;
end
8'h49:
begin
temp=8'ha4;
end
8'h4a:
begin
temp=8'h5c;
end
8'h4b:
begin
temp=8'hcc;
end
8'h4c:
begin
temp=8'h5d;
end
8'h4d:
begin
temp=8'h65;
end
8'h4e:
begin
temp=8'hb6;
end
8'h4f:
begin
temp=8'h92;
end
8'h50:
begin
temp=8'h6c;
end
8'h51:
begin
temp=8'h70;
end
8'h52:
begin
temp=8'h48;
end
8'h53:
begin
temp=8'h50;
end
8'h54:
begin
temp=8'hfd;
end
8'h55:
begin
temp=8'hed;
end
8'h56:
begin
temp=8'hb9;
end
8'h57:
begin
temp=8'hda;
end
8'h58:
begin
temp=8'h5e;
end
8'h59:
begin
temp=8'h15;
end
8'h5a:
begin
temp=8'h46;
end
8'h5b:
begin
temp=8'h57;
end
8'h5c:
begin
temp=8'ha7;
end
8'h5d:
begin
temp=8'h8d;
end
8'h5e:
begin
temp=8'h9d;
end
8'h5f:
begin
temp=8'h84;
end
8'h60:
begin
temp=8'h90;
end
8'h61:
begin
temp=8'hd8;
end
8'h62:
begin
temp=8'hab;
end
8'h63:
begin
temp=8'h00;
end
8'h64:
begin
temp=8'h8c;
end
8'h65:
begin
temp=8'hbc;
end
8'h66:
begin
temp=8'hd3;
end
8'h67:
begin
temp=8'h0a;
end
8'h68:
begin
temp=8'hf7;
end
8'h69:
begin
temp=8'he4;
end
8'h6a:
begin
temp=8'h58;
end
8'h6b:
begin
temp=8'h05;
end
8'h6c:
begin
temp=8'hb8;
end
8'h6d:
begin
temp=8'hb3;
end
8'h6e:
begin
temp=8'h45;
end
8'h6f:
begin
temp=8'h06;
end
8'h70:
begin
temp=8'hd0;
end
8'h71:
begin
temp=8'h2c;
end
8'h72:
begin
temp=8'h1e;
end
8'h73:
begin
temp=8'h8f;
end
8'h74:
begin
temp=8'hca;
end
8'h75:
begin
temp=8'h3f;
end
8'h76:
begin
temp=8'h0f;
end
8'h77:
begin
temp=8'h02;
end
8'h78:
begin
temp=8'hc1;
end
8'h79:
begin
temp=8'haf;
end
8'h7a:
begin
temp=8'hbd;
end
8'h7b:
begin
temp=8'h03;
end
8'h7c:
begin
temp=8'h01;
end
8'h7d:
begin
temp=8'h13;
end
8'h7e:
begin
temp=8'h8a;
end
8'h7f:
begin
temp=8'h6b;
end
8'h80:
begin
temp=8'h3a;
end
8'h81:
begin
temp=8'h91;
end
8'h82:
begin
temp=8'h11;
end
8'h83:
begin
temp=8'h41;
end
8'h84:
begin
temp=8'h4f;
end
8'h85:
begin
temp=8'h67;
end
8'h86:
begin
temp=8'hdc;
end
8'h87:
begin
temp=8'hea;
end
8'h88:
begin
temp=8'h97;
end
8'h89:
begin
temp=8'hf2;
end
8'h8a:
begin
temp=8'hcf;
end
8'h8b:
begin
temp=8'hce;
end
8'h8c:
begin
temp=8'hf0;
end
8'h8d:
begin
temp=8'hb4;
end
8'h8e:
begin
temp=8'he6;
end
8'h8f:
begin
temp=8'h73;
end
8'h90:
begin
temp=8'h96;
end
8'h91:
begin
temp=8'hac;
end
8'h92:
begin
temp=8'h74;
end
8'h93:
begin
temp=8'h22;
end
8'h94:
begin
temp=8'he7;
end
8'h95:
begin
temp=8'had;
end
8'h96:
begin
temp=8'h35;
end
8'h97:
begin
temp=8'h85;
end
8'h98:
begin
temp=8'he2;
end
8'h99:
begin
temp=8'hf9;
end
8'h9a:
begin
temp=8'h37;
end
8'h9b:
begin
temp=8'he8;
end
8'h9c:
begin
temp=8'h1c;
end
8'h9d:
begin
temp=8'h75;
end
8'h9e:
begin
temp=8'hdf;
end
8'h9f:
begin
temp=8'h6e;
end
8'ha0:
begin
temp=8'h47;
end
8'ha1:
begin
temp=8'hf1;
end
8'ha2:
begin
temp=8'h1a;
end
8'ha3:
begin
temp=8'h71;
end
8'ha4:
begin
temp=8'h1d;
end
8'ha5:
begin
temp=8'h29;
end
8'ha6:
begin
temp=8'hc5;
end
8'ha7:
begin
temp=8'h89;
end
8'ha8:
begin
temp=8'h6f;
end
8'ha9:
begin
temp=8'hb7;
end
8'haa:
begin
temp=8'h62;
end
8'hab:
begin
temp=8'h0e;
end
8'hac:
begin
temp=8'haa;
end
8'had:
begin
temp=8'h18;
end
8'hae:
begin
temp=8'hbe;
end
8'haf:
begin
temp=8'h1b;
end
8'hb0:
begin
temp=8'hfc;
end
8'hb1:
begin
temp=8'h56;
end
8'hb2:
begin
temp=8'h3e;
end
8'hb3:
begin
temp=8'h4b;
end
8'hb4:
begin
temp=8'hc6;
end
8'hb5:
begin
temp=8'hd2;
end
8'hb6:
begin
temp=8'h79;
end
8'hb7:
begin
temp=8'h20;
end
8'hb8:
begin
temp=8'h9a;
end
8'hb9:
begin
temp=8'hdb;
end
8'hba:
begin
temp=8'hc0;
end
8'hbb:
begin
temp=8'hfe;
end
8'hbc:
begin
temp=8'h78;
end
8'hbd:
begin
temp=8'hcd;
end
8'hbe:
begin
temp=8'h5a;
end
8'hbf:
begin
temp=8'hf4;
end
8'hc0:
begin
temp=8'h1f;
end
8'hc1:
begin
temp=8'hdd;
end
8'hc2:
begin
temp=8'ha8;
end
8'hc3:
begin
temp=8'h33;
end
8'hc4:
begin
temp=8'h88;
end
8'hc5:
begin
temp=8'h07;
end
8'hc6:
begin
temp=8'hc7;
end
8'hc7:
begin
temp=8'h31;
end
8'hc8:
begin
temp=8'hb1;
end
8'hc9:
begin
temp=8'h12;
end
8'hca:
begin
temp=8'h10;
end
8'hcb:
begin
temp=8'h59;
end
8'hcc:
begin
temp=8'h27;
end
8'hcd:
begin
temp=8'h80;
end
8'hce:
begin
temp=8'hec;
end
8'hcf:
begin
temp=8'h5f;
end
8'hd0:
begin
temp=8'h60;
end
8'hd1:
begin
temp=8'h51;
end
8'hd2:
begin
temp=8'h7f;
end
8'hd3:
begin
temp=8'ha9;
end
8'hd4:
begin
temp=8'h19;
end
8'hd5:
begin
temp=8'hb5;
end
8'hd6:
begin
temp=8'h4a;
end
8'hd7:
begin
temp=8'h0d;
end
8'hd8:
begin
temp=8'h2d;
end
8'hd9:
begin
temp=8'he5;
end
8'hda:
begin
temp=8'h7a;
end
8'hdb:
begin
temp=8'h9f;
end
8'hdc:
begin
temp=8'h93;
end
8'hdd:
begin
temp=8'hc9;
end
8'hde:
begin
temp=8'h9c;
end
8'hdf:
begin
temp=8'hef;
end
8'he0:
begin
temp=8'ha0;
end
8'he1:
begin
temp=8'he0;
end
8'he2:
begin
temp=8'h3b;
end
8'he3:
begin
temp=8'h4d;
end
8'he4:
begin
temp=8'hae;
end
8'he5:
begin
temp=8'h2a;
end
8'he6:
begin
temp=8'hf5;
end
8'he7:
begin
temp=8'hb0;
end
8'he8:
begin
temp=8'hc8;
end
8'he9:
begin
temp=8'heb;
end
8'hea:
begin
temp=8'hbb;
end
8'heb:
begin
temp=8'h3c;
end
8'hec:
begin
temp=8'h83;
end
8'hed:
begin
temp=8'h53;
end
8'hee:
begin
temp=8'h99;
end
8'hef:
begin
temp=8'h61;
end
8'hf0:
begin
temp=8'h17;
end
8'hf1:
begin
temp=8'h2b;
end
8'hf2:
begin
temp=8'h04;
end
8'hf3:
begin
temp=8'h7e;
end
8'hf4:
begin
temp=8'hba;
end
8'hf5:
begin
temp=8'h77;
end
8'hf6:
begin
temp=8'hd6;
end
8'hf7:
begin
temp=8'h26;
end
8'hf8:
begin
temp=8'he1;
end
8'hf9:
begin
temp=8'h69;
end
8'hfa:
begin
temp=8'h14;
end
8'hfb:
begin
temp=8'h63;
end
8'hfc:
begin
temp=8'h55;
end
8'hfd:
begin
temp=8'h21;
end
8'hfe:
begin
temp=8'h0c;
end
8'hff:
begin
temp=8'h7d;
end
default:
begin
end
endcase
inv_SBOX_LOOKUP=temp;
end
endfunction
function [127:0]inv_BYTE_SUB_FUNCT;
input[127:0]state;
reg[127:0]b;
reg[127:0]temp;
begin
b[127:104]={inv_SBOX_LOOKUP(state[127:120]),inv_SBOX_LOOKUP(state[119:112]),inv_
SBOX_LOOKUP(state[111:104])};
b[103:80]={inv_SBOX_LOOKUP(state[103:96]),inv_SBOX_LOOKUP(state[95:88]),inv_SBOX
_LOOKUP(state[87:80])};
b[79:48]={inv_SBOX_LOOKUP(state[79:72]),inv_SBOX_LOOKUP(state[71:64]),inv_SBOX_L
OOKUP(state[63:56]),inv_SBOX_LOOKUP(state[55:48])};
b[47:16]={inv_SBOX_LOOKUP(state[47:40]),inv_SBOX_LOOKUP(state[39:32]),inv_SBOX_L
OOKUP(state[31:24]),inv_SBOX_LOOKUP(state[23:16])};
b[15:0]={inv_SBOX_LOOKUP(state[15:8]),inv_SBOX_LOOKUP(state[7:0])};
temp=b;
inv_BYTE_SUB_FUNCT=temp;
end
endfunction
endmodule

module key_gen1(e1,e2,e3,e4,e5,e6,e7,e8,e9,cipher,round1,roundkey11,rst);
input [127:0]e1,e2,e3,e4,e5,e6,e7,e8,e9,cipher;
input [3:0]round1;
input rst;
output reg[127:0]roundkey11;
always @(round1)
begin
if (rst==1'b1)
begin
roundkey11=128'b0;
end
else
begin
roundkey11=roundkey_GEN(e1,e2,e3,e4,e5,e6,e7,e8,e9,cipher);
end
end
function [127:0]roundkey_GEN;
input [127:0] e1,e2,e3,e4,e5,e6,e7,e8,e9,cipher;
reg[127:0]b;
begin
case(round1)
1: begin
b=e9;
end

2:
begin
b=e8;
end
3:
begin
b=e7;
end
4:
begin
b=e6;
end
5:
begin
b=e5;
end
6:
begin
b=e4;
end

7:
begin
b=e3;
end

8:
begin
b=e2;
end
9:
begin
b=e1;
end
10:
begin
b=cipher;
end
default: begin end
endcase

roundkey_GEN=b;
end
endfunction
function automatic [7:0]SBOX_LOOKUP;
input [7:0]a;
reg [7:0]temp;
begin
case(a)
8'h00:
begin
temp=8'h63;
end
8'h01:
begin
temp=8'h7c;
end
8'h02:
begin
temp=8'h77;
end
8'h03:
begin
temp=8'h7b;
end
8'h04:
begin
temp=8'hf2;
end
8'h05:
begin
temp=8'h6b;
end
8'h06:
begin
temp=8'h6f;
end
8'h07:
begin
temp=8'hc5;
end
8'h08:
begin
temp=8'h30;
end
8'h09:
begin
temp=8'h01;
end
8'h0a:
begin
temp=8'h67;
end
8'h0b:
begin
temp=8'h2b;
end
8'h0c:
begin
temp=8'hfe;
end
8'h0d:
begin
temp=8'hd7;
end
8'h0e:
begin
temp=8'hab;
end
8'h0f:
begin
temp=8'h76;
end
8'h10:
begin
temp=8'hca;
end
8'h11:
begin
temp=8'h82;
end
8'h12:
begin
temp=8'hc9;
end
8'h13:
begin
temp=8'h7d;
end
8'h14:
begin
temp=8'hfa;
end
8'h15:
begin
temp=8'h59;
end
8'h16:
begin
temp=8'h47;
end
8'h17:
begin
temp=8'hf0;
end
8'h18:
begin
temp=8'had;
end
8'h19:
begin
temp=8'hd4;
end
8'h1a:
begin
temp=8'ha2;
end
8'h1b:
begin
temp=8'haf;
end
8'h1c:
begin
temp=8'h9c;
end
8'h1d:
begin
temp=8'ha4;
end
8'h1e:
begin
temp=8'h72;
end
8'h1f:
begin
temp=8'hc0;
end
8'h20:
begin
temp=8'hb7;
end
8'h21:
begin
temp=8'hfd;
end
8'h22:
begin
temp=8'h93;
end
8'h23:
begin
temp=8'h26;
end
8'h24:
begin
temp=8'h36;
end
8'h25:
begin
temp=8'h3f;
end
8'h26:
begin
temp=8'hf7;
end
8'h27:
begin
temp=8'hcc;
end
8'h28:
begin
temp=8'h34;
end
8'h29:
begin
temp=8'ha5;
end
8'h2a:
begin
temp=8'he5;
end
8'h2b:
begin
temp=8'hf1;
end
8'h2c:
begin
temp=8'h71;
end
8'h2d:
begin
temp=8'hd8;
end
8'h2e:
begin
temp=8'h31;
end
8'h2f:
begin
temp=8'h15;
end
8'h30:
begin
temp=8'h04;
end
8'h31:
begin
temp=8'hc7;
end
8'h32:
begin
temp=8'h23;
end
8'h33:
begin
temp=8'hc3;
end
8'h34:
begin
temp=8'h18;
end
8'h35:
begin
temp=8'h96;
end
8'h36:
begin
temp=8'h05;
end
8'h37:
begin
temp=8'h9a;
end
8'h38:
begin
temp=8'h07;
end
8'h39:
begin
temp=8'h12;
end
8'h3a:
begin
temp=8'h80;
end
8'h3b:
begin
temp=8'he2;
end
8'h3c:
begin
temp=8'heb;
end
8'h3d:
begin
temp=8'h27;
end
8'h3e:
begin
temp=8'hb2;
end
8'h3f:
begin
temp=8'h75;
end
8'h40:
begin
temp=8'h09;
end
8'h41:
begin
temp=8'h83;
end
8'h42:
begin
temp=8'h2c;
end
8'h43:
begin
temp=8'h1a;
end
8'h44:
begin
temp=8'h1b;
end
8'h45:
begin
temp=8'h6e;
end
8'h46:
begin
temp=8'h5a;
end
8'h47:
begin
temp=8'ha0;
end
8'h48:
begin
temp=8'h52;
end
8'h49:
begin
temp=8'h3b;
end
8'h4a:
begin
temp=8'hd6;
end
8'h4b:
begin
temp=8'hb3;
end
8'h4c:
begin
temp=8'h29;
end
8'h4d:
begin
temp=8'he3;
end
8'h4e:
begin
temp=8'h2f;
end
8'h4f:
begin
temp=8'h84;
end
8'h50:
begin
temp=8'h53;
end
8'h51:
begin
temp=8'hd1;
end
8'h52:
begin
temp=8'h00;
end
8'h53:
begin
temp=8'hed;
end
8'h54:
begin
temp=8'h20;
end
8'h55:
begin
temp=8'hfc;
end
8'h56:
begin
temp=8'hb1;
end
8'h57:
begin
temp=8'h5b;
end
8'h58:
begin
temp=8'h6a;
end
8'h59:
begin
temp=8'hcb;
end
8'h5a:
begin
temp=8'hbe;
end
8'h5b:
begin
temp=8'h39;
end
8'h5c:
begin
temp=8'h4a;
end
8'h5d:
begin
temp=8'h4c;
end
8'h5e:
begin
temp=8'h58;
end
8'h5f:
begin
temp=8'hcf;
end
8'h60:
begin
temp=8'hd0;
end
8'h61:
begin
temp=8'hef;
end
8'h62:
begin
temp=8'haa;
end
8'h63:
begin
temp=8'hfb;
end
8'h64:
begin
temp=8'h43;
end
8'h65:
begin
temp=8'h4d;
end
8'h66:
begin
temp=8'h33;
end
8'h67:
begin
temp=8'h85;
end
8'h68:
begin
temp=8'h45;
end
8'h69:
begin
temp=8'hf9;
end
8'h6a:
begin
temp=8'h02;
end
8'h6b:
begin
temp=8'h7f;
end
8'h6c:
begin
temp=8'h50;
end
8'h6d:
begin
temp=8'h3c;
end
8'h6e:
begin
temp=8'h9f;
end
8'h6f:
begin
temp=8'ha8;
end
8'h70:
begin
temp=8'h51;
end
8'h71:
begin
temp=8'ha3;
end
8'h72:
begin
temp=8'h40;
end
8'h73:
begin
temp=8'h8f;
end
8'h74:
begin
temp=8'h92;
end
8'h75:
begin
temp=8'h9d;
end
8'h76:
begin
temp=8'h38;
end
8'h77:
begin
temp=8'hf5;
end
8'h78:
begin
temp=8'hbc;
end
8'h79:
begin
temp=8'hb6;
end
8'h7a:
begin
temp=8'hda;
end
8'h7b:
begin
temp=8'h21;
end
8'h7c:
begin
temp=8'h10;
end
8'h7d:
begin
temp=8'hff;
end
8'h7e:
begin
temp=8'hf3;
end
8'h7f:
begin
temp=8'hd2;
end
8'h80:
begin
temp=8'hcd;
end
8'h81:
begin
temp=8'h0c;
end
8'h82:
begin
temp=8'h13;
end
8'h83:
begin
temp=8'hec;
end
8'h84:
begin
temp=8'h5f;
end
8'h85:
begin
temp=8'h97;
end
8'h86:
begin
temp=8'h44;
end
8'h87:
begin
temp=8'h17;
end
8'h88:
begin
temp=8'hc4;
end
8'h89:
begin
temp=8'ha7;
end
8'h8a:
begin
temp=8'h7e;
end
8'h8b:
begin
temp=8'h3d;
end
8'h8c:
begin
temp=8'h64;
end
8'h8d:
begin
temp=8'h5d;
end
8'h8e:
begin
temp=8'h19;
end
8'h8f:
begin
temp=8'h73;
end
8'h90:
begin
temp=8'h60;
end
8'h91:
begin
temp=8'h81;
end
8'h92:
begin
temp=8'h4f;
end
8'h93:
begin
temp=8'hdc;
end
8'h94:
begin
temp=8'h22;
end
8'h95:
begin
temp=8'h2a;
end
8'h96:
begin
temp=8'h90;
end
8'h97:
begin
temp=8'h88;
end
8'h98:
begin
temp=8'h46;
end
8'h99:
begin
temp=8'hee;
end
8'h9a:
begin
temp=8'hb8;
end
8'h9b:
begin
temp=8'h14;
end
8'h9c:
begin
temp=8'hde;
end
8'h9d:
begin
temp=8'h5e;
end
8'h9e:
begin
temp=8'h0b;
end
8'h9f:
begin
temp=8'hdb;
end
8'ha0:
begin
temp=8'he0;
end
8'ha1:
begin
temp=8'h32;
end
8'ha2:
begin
temp=8'h3a;
end
8'ha3:
begin
temp=8'h0a;
end
8'ha4:
begin
temp=8'h49;
end
8'ha5:
begin
temp=8'h06;
end
8'ha6:
begin
temp=8'h24;
end
8'ha7:
begin
temp=8'h5c;
end
8'ha8:
begin
temp=8'hc2;
end
8'ha9:
begin
temp=8'hd3;
end
8'haa:
begin
temp=8'hac;
end
8'hab:
begin
temp=8'h62;
end
8'hac:
begin
temp=8'h91;
end
8'had:
begin
temp=8'h95;
end
8'hae:
begin
temp=8'he4;
end
8'haf:
begin
temp=8'h79;
end
8'hb0:
begin
temp=8'he7;
end
8'hb1:
begin
temp=8'hc8;
end
8'hb2:
begin
temp=8'h37;
end
8'hb3:
begin
temp=8'h6d;
end
8'hb4:
begin
temp=8'h8d;
end
8'hb5:
begin
temp=8'hd5;
end
8'hb6:
begin
temp=8'h4e;
end
8'hb7:
begin
temp=8'ha9;
end
8'hb8:
begin
temp=8'h6c;
end
8'hb9:
begin
temp=8'h56;
end
8'hba:
begin
temp=8'hf4;
end
8'hbb:
begin
temp=8'hea;
end
8'hbc:
begin
temp=8'h65;
end
8'hbd:
begin
temp=8'h7a;
end
8'hbe:
begin
temp=8'hae;
end
8'hbf:
begin
temp=8'h08;
end
8'hc0:
begin
temp=8'hba;
end
8'hc1:
begin
temp=8'h78;
end
8'hc2:
begin
temp=8'h25;
end
8'hc3:
begin
temp=8'h2e;
end
8'hc4:
begin
temp=8'h1c;
end
8'hc5:
begin
temp=8'ha6;
end
8'hc6:
begin
temp=8'hb4;
end
8'hc7:
begin
temp=8'hc6;
end
8'hc8:
begin
temp=8'he8;
end
8'hc9:
begin
temp=8'hdd;
end
8'hca:
begin
temp=8'h74;
end
8'hcb:
begin
temp=8'h1f;
end
8'hcc:
begin
temp=8'h4b;
end
8'hcd:
begin
temp=8'hbd;
end
8'hce:
begin
temp=8'h8b;
end
8'hcf:
begin
temp=8'h8a;
end
8'hd0:
begin
temp=8'h70;
end
8'hd1:
begin
temp=8'h3e;
end
8'hd2:
begin
temp=8'hb5;
end
8'hd3:
begin
temp=8'h66;
end
8'hd4:
begin
temp=8'h48;
end
8'hd5:
begin
temp=8'h03;
end
8'hd6:
begin
temp=8'hf6;
end
8'hd7:
begin
temp=8'h0e;
end
8'hd8:
begin
temp=8'h61;
end
8'hd9:
begin
temp=8'h35;
end
8'hda:
begin
temp=8'h57;
end
8'hdb:
begin
temp=8'hb9;
end
8'hdc:
begin
temp=8'h86;
end
8'hdd:
begin
temp=8'hc1;
end
8'hde:
begin
temp=8'h1d;
end
8'hdf:
begin
temp=8'h9e;
end
8'he0:
begin
temp=8'he1;
end
8'he1:
begin
temp=8'hf8;
end
8'he2:
begin
temp=8'h98;
end
8'he3:
begin
temp=8'h11;
end
8'he4:
begin
temp=8'h69;
end
8'he5:
begin
temp=8'hd9;
end
8'he6:
begin
temp=8'h8e;
end
8'he7:
begin
temp=8'h94;
end
8'he8:
begin
temp=8'h9b;
end
8'he9:
begin
temp=8'h1e;
end
8'hea:
begin
temp=8'h87;
end
8'heb:
begin
temp=8'he9;
end
8'hec:
begin
temp=8'hce;
end
8'hed:
begin
temp=8'h55;
end
8'hee:
begin
temp=8'h28;
end
8'hef:
begin
temp=8'hdf;
end
8'hf0:
begin
temp=8'h8c;
end
8'hf1:
begin
temp=8'ha1;
end
8'hf2:
begin
temp=8'h89;
end
8'hf3:
begin
temp=8'h0d;
end
8'hf4:
begin
temp=8'hbf;
end
8'hf5:
begin
temp=8'he6;
end
8'hf6:
begin
temp=8'h42;
end
8'hf7:
begin
temp=8'h68;
end
8'hf8:
begin
temp=8'h41;
end
8'hf9:
begin
temp=8'h99;
end
8'hfa:
begin
temp=8'h2d;
end
8'hfb:
begin
temp=8'h0f;
end
8'hfc:
begin
temp=8'hb0;
end
8'hfd:
begin
temp=8'h54;
end
8'hfe:
begin
temp=8'hbb;
end
8'hff:
begin
temp=8'h16;
end
default: begin end
endcase
SBOX_LOOKUP=temp;
end
endfunction
endmodule
module add_roundkey1(b15,myround15,clk,rst,d2in15,round1);
input [127:0]b15,myround15;
input clk;
input rst;
output reg [127:0]d2in15;
output reg [3:0]round1;
always @(posedge clk)
begin
if(rst) begin d2in15={128{1'b0}};
end
else begin
d2in15=b15^myround15;
end
end
endmodule
module add4(bah15,clk,rst,rnd15,cipherkey15,n11,n2,n3,n4,n5,n6,n7,n8,n9,e1,e2,e3
,e4,e5,e6,e7,e8,e9,cipher);
input [127:0]bah15,n11,n2,n3,n4,n5,n6,n7,n8,n9,cipherkey15;
input clk,rst;
output reg[127:0]rnd15,e1,e2,e3,e4,e5,e6,e7,e8,e9,cipher;
always @(posedge clk)
begin
if(rst) begin rnd15={128{1'b0}}; end
else begin
rnd15=bah15;
e1=n11;
e2=n2;
e3=n3;
e4=n4;
e5=n5;
e6=n6;
e7=n7;
e8=n8;
e9=n9;
cipher=cipherkey15;
end
end
endmodule

module inv_mix_column(d2in15,roundkey31,round1,clk,rst,myround15,DATAOUT155);
input [127:0]d2in15,roundkey31;
input clk,rst;
input[3:0]round1;
output reg[127:0]DATAOUT155,myround15;
always @(posedge clk)
begin
if (rst) begin DATAOUT155<={128{1'b0}}; end
else begin
if(round1>4'b1001)
begin
DATAOUT155<=d2in15;
myround15=roundkey31; end
if(round1<=4'b1001)
begin
DATAOUT155<=inv_MIX_COLUMN_FUNCT(d2in15);
myround15=roundkey31;
end
end
end
function[127:0]inv_MIX_COLUMN_FUNCT;
input[127:0]d2in;
reg [7:0] t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t15;
reg[127:0]b;
reg[127:0]temp;
begin
t0=d2in[127:120];
t1=d2in[119:112];
t2=d2in[111:104];
t3=d2in[103:96];
t4=d2in[95:88];
t5=d2in[87:80];
t6=d2in[79:72];
t7=d2in[71:64];
t8=d2in[63:56];
t9=d2in[55:48];
t10=d2in[47:40];
t11=d2in[39:32];
t12=d2in[31:24];
t13=d2in[23:16];
t14=d2in[15:8];
t15=d2in[7:0];
b[127:120]=POLY_MULTD_FUNCT(8'b00001110,t0)^POLY_MULTD_FUNCT(8'b00001011,t1)^POL
Y_MULTD_FUNCT(8'b00001101,t2)^POLY_MULTD_FUNCT(8'b00001001,t3);
b[119:112]=POLY_MULTD_FUNCT(8'b00001001,t0)^POLY_MULTD_FUNCT(8'b00001110,t1)^POL
Y_MULTD_FUNCT(8'b00001011,t2)^POLY_MULTD_FUNCT(8'b00001101,t3);
b[111:104]=POLY_MULTD_FUNCT(8'b00001101,t0)^POLY_MULTD_FUNCT(8'b00001001,t1)^POL
Y_MULTD_FUNCT(8'b00001110,t2)^POLY_MULTD_FUNCT(8'b00001011,t3);
b[103:96]=POLY_MULTD_FUNCT(8'b00001011,t0)^POLY_MULTD_FUNCT(8'b00001101,t1)^POLY
_MULTD_FUNCT(8'b00001001,t2)^POLY_MULTD_FUNCT(8'b00001110,t3);
b[95:88]=POLY_MULTD_FUNCT(8'b00001110,t4)^POLY_MULTD_FUNCT(8'b00001011,t5)^POLY_
MULTD_FUNCT(8'b00001101,t6)^POLY_MULTD_FUNCT(8'b00001001,t7);
b[87:80]=POLY_MULTD_FUNCT(8'b00001001,t4)^POLY_MULTD_FUNCT(8'b00001110,t5)^POLY_
MULTD_FUNCT(8'b00001011,t6)^POLY_MULTD_FUNCT(8'b00001101,t7);
b[79:72]=POLY_MULTD_FUNCT(8'b00001101,t4)^POLY_MULTD_FUNCT(8'b00001001,t5)^POLY_
MULTD_FUNCT(8'b00001110,t6)^POLY_MULTD_FUNCT(8'b00001011,t7);
b[71:64]=POLY_MULTD_FUNCT(8'b00001011,t4)^POLY_MULTD_FUNCT(8'b00001101,t5)^POLY_
MULTD_FUNCT(8'b00001001,t6)^POLY_MULTD_FUNCT(8'b00001110,t7);
b[63:56]=POLY_MULTD_FUNCT(8'b00001110,t8)^POLY_MULTD_FUNCT(8'b00001011,t9)^POLY_
MULTD_FUNCT(8'b00001101,t10)^POLY_MULTD_FUNCT(8'b00001001,t11);
b[55:48]=POLY_MULTD_FUNCT(8'b00001001,t8)^POLY_MULTD_FUNCT(8'b00001110,t9)^POLY_
MULTD_FUNCT(8'b00001011,t10)^POLY_MULTD_FUNCT(8'b00001101,t11);
b[47:40]=POLY_MULTD_FUNCT(8'b00001101,t8)^POLY_MULTD_FUNCT(8'b00001001,t9)^POLY_
MULTD_FUNCT(8'b00001110,t10)^POLY_MULTD_FUNCT(8'b00001011,t11);
b[39:32]=POLY_MULTD_FUNCT(8'b00001011,t8)^POLY_MULTD_FUNCT(8'b00001101,t9)^POLY_
MULTD_FUNCT(8'b00001001,t10)^POLY_MULTD_FUNCT(8'b00001110,t11);
b[31:24]=POLY_MULTD_FUNCT(8'b00001110,t12)^POLY_MULTD_FUNCT(8'b00001011,t13)^POL
Y_MULTD_FUNCT(8'b00001101,t14)^POLY_MULTD_FUNCT(8'b00001001,t15);
b[23:16]=POLY_MULTD_FUNCT(8'b00001001,t12)^POLY_MULTD_FUNCT(8'b00001110,t13)^POL
Y_MULTD_FUNCT(8'b00001011,t14)^POLY_MULTD_FUNCT(8'b00001101,t15);
b[15:8]=POLY_MULTD_FUNCT(8'b00001101,t12)^POLY_MULTD_FUNCT(8'b00001001,t13)^POLY
_MULTD_FUNCT(8'b00001110,t14)^POLY_MULTD_FUNCT(8'b00001011,t15);
b[7:0]=POLY_MULTD_FUNCT(8'b00001011,t12)^POLY_MULTD_FUNCT(8'b00001101,t13)^POLY_
MULTD_FUNCT(8'b00001001,t14)^POLY_MULTD_FUNCT(8'b00001110,t15);
temp=b;
inv_MIX_COLUMN_FUNCT=temp;
end
endfunction
//POLY_MULTD_FUNCT

function automatic [7:0]POLY_MULTD_FUNCT;


input[7:0]a;
input[7:0]b;
reg [7:0]temp,temp1,temp2,temp3,and_mask;
begin
and_mask={7{b[7]}};
case(a[3:0])
4'b1001:
begin
temp1=({b[6:0],1'b0})^((8'b00011011)&and_mask);
and_mask={temp1[7],temp1[7],temp1[7],temp1[7],temp1[7],temp1[7],temp1[7],temp1[7
]};
temp2={temp1[6:0],1'b0}^((8'b00011011)&and_mask);
and_mask={temp2[7],temp2[7],temp2[7],temp2[7],temp2[7],temp2[7],temp2[7],temp2[7
]};
temp3={temp2[6:0],1'b0}^((8'b00011011)&and_mask);
temp=temp3^b;
end
4'b1011:
begin
temp1=({b[6:0],1'b0})^((8'b00011011)&and_mask);
and_mask={8{temp1[7]}};
temp2={temp1[6:0],1'b0}^((8'b00011011)&and_mask);
and_mask={8{temp2[7]}};
temp3={temp2[6:0],1'b0}^((8'b00011011)&and_mask);
temp=temp1^temp3^b;
end
4'b1101:
begin
temp1=({b[6:0],1'b0})^((8'b00011011)&and_mask);
and_mask={8{temp1[7]}};
temp2={temp1[6:0],1'b0}^((8'b00011011)&and_mask);
and_mask={8{temp2[7]}};
temp3={temp2[6:0],1'b0}^((8'b00011011)&and_mask);
temp=temp2^temp3^b;
end
4'b1110:
begin
temp1=({b[6:0],1'b0})^((8'b00011011)&and_mask);
and_mask={8{temp1[7]}};
temp2={temp1[6:0],1'b0}^((8'b00011011)&and_mask);
and_mask={8{temp2[7]}};
temp3={temp2[6:0],1'b0}^((8'b00011011)&and_mask);
temp=temp1^temp2^temp3;
end
default:
begin
temp={8{1'b0}};
end
endcase
POLY_MULTD_FUNCT=temp;
end
endfunction
endmodule

module top(stateuser,cipherkey,clk,rst,DATAOUT155);
input [127:0]stateuser,cipherkey;
input clk,rst;
wire [3:0]round;
wire [127:0]c;
wire [127:0]b;
wire [127:0]DATAOUT1;
wire [127:0]DATAOUT,rnd;
wire [127:0]roundkey,myround,roundkey1,roundkey2,d2in;
wire [127:0]v,myround1,cipherkey15,n11,n2,n3,n4,n5,n6,n7,n8,n9;
wire [127:0]in,bah;
assign in=(round<4'b1010)?d2in:128'bz;
add1 b1(stateuser,cipherkey,round,in,clk,rst,c,bah);
byte_sub b2(c,round,roundkey,rnd,clk,rst,roundkey1,b);
shift_row b3(b,roundkey1,round,clk,rst,roundkey2,DATAOUT1,n11,n2,n3,n4,n5,n6,n7,
n8,n9);
mix_column b4(DATAOUT1,roundkey2,round,clk,rst,myround,DATAOUT);
add2 n1(bah,clk,rst,rnd);
add_roundkey b5(DATAOUT,myround,clk,rst,d2in,round);
key_gen b6(cipherkey,round,rst,roundkey,myround);
assign v=(round>=4'b1010)?d2in:128'bz;
assign myround1=(round>=4'b1010)?myround:128'bz;
assign cipherkey15=cipherkey;
wire [3:0]round1;
wire [127:0]c15;
wire [127:0]b15;
wire [127:0]DATAOUT15,tenthround,oenc;
wire [127:0]rnd15;
wire [127:0]roundkey11,myround15,roundkey21,roundkey31,d2in15;
output [127:0]DATAOUT155;
wire [127:0]in15,bah15,e1,e2,e3,e4,e5,e6,e7,e8,e9,cipher;
assign in15=DATAOUT155;
add3 b7(round1,tenthround,oenc,in15,clk,rst,c15,bah15);
inv_shift_row b8(c15,roundkey11,round1,rnd15,clk,rst,roundkey21,DATAOUT15);
inv_byte_sub b9(DATAOUT15,round1,roundkey21,clk,rst,roundkey31,b15);
add_roundkey1 b10(b15,myround15,clk,rst,d2in15,round1);
add4 z1(bah15,clk,rst,rnd15,cipherkey15,n11,n2,n3,n4,n5,n6,n7,n8,n9,e1,e2,e3,e4,
e5,e6,e7,e8,e9,cipher);
inv_mix_column b11(d2in15,roundkey31,round1,clk,rst,myround15,DATAOUT155);
key_gen1 j1(e1,e2,e3,e4,e5,e6,e7,e8,e9,cipher,round1,roundkey11,rst);
endmodule

You might also like