-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
🚀 Implemented SubBytes & AddRoundKey Modules (#5)
* AddRoundKey + SubKey +InvSubKey * 🎨 Formatted Code --------- Co-authored-by: AhmedSobhy01 <[email protected]>
- Loading branch information
1 parent
d22c92b
commit b873217
Showing
5 changed files
with
621 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
module AddRoundKey(state, roundKey, newRoundKey); | ||
input [127:0] state, roundKey; | ||
output [127:0] newRoundKey; | ||
|
||
assign newRoundKey= state ^ roundKey; | ||
endmodule | ||
|
||
module AddRoundKey_DUT(); | ||
reg [127:0] state, roundKey; | ||
wire [127:0] newRoundKey; | ||
|
||
AddRoundKey ark(state, roundKey, newRoundKey); | ||
|
||
initial begin | ||
state = 128'h_046681e5_e0cb199a_48f8d37a_2806264c; | ||
roundKey = 128'h_a0fafe17_88542cb1_23a33939_2a6c7605; | ||
#10 | ||
state = newRoundKey; | ||
roundKey = 128'h_a0fafe17_88542cb1_23a33939_2a6c7605; | ||
end | ||
|
||
initial begin | ||
$display("AddRoundKey_DUT"); | ||
$display("=================================="); | ||
$monitor("State = %h, Key = %h, New Key= %h", state, roundKey, newRoundKey); | ||
end | ||
endmodule |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
module InvSubBytes(subBytes, oriBytes); | ||
input [127:0] subBytes; | ||
output [127:0] oriBytes; | ||
|
||
genvar i; | ||
generate | ||
for (i = 7; i < 128; i = i + 8) begin: InvSubTableLoop | ||
InvSubTable s(subBytes[i -:8],oriBytes[i -:8]); | ||
end | ||
endgenerate | ||
endmodule | ||
|
||
module InvSubBytes_DUT(); | ||
reg [127:0] in; | ||
wire [127:0] out; | ||
|
||
InvSubBytes isb(in, out); | ||
|
||
initial begin | ||
in = 128'h63cab704_0953d051_cd60e0e7_ba70e18c; | ||
#10 | ||
in = 128'ha761ca9b_97be8b45_d8ad1a61_1fc97369; | ||
#10 | ||
in = 128'h3b59cb73_fcd90ee0_5774222d_c067fb68; | ||
end | ||
|
||
initial begin | ||
$display("InvSubBytes_DUT"); | ||
$display("=================================="); | ||
$monitor("Input = %h, Output = %h", in, out); | ||
end | ||
endmodule |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,265 @@ | ||
module InvSubTable(subByte, oriByte); | ||
input [7:0] subByte; | ||
output reg [7:0] oriByte; | ||
|
||
always @(*) begin | ||
case (subByte) | ||
8'h00: oriByte =8'h52; | ||
8'h01: oriByte =8'h09; | ||
8'h02: oriByte =8'h6a; | ||
8'h03: oriByte =8'hd5; | ||
8'h04: oriByte =8'h30; | ||
8'h05: oriByte =8'h36; | ||
8'h06: oriByte =8'ha5; | ||
8'h07: oriByte =8'h38; | ||
8'h08: oriByte =8'hbf; | ||
8'h09: oriByte =8'h40; | ||
8'h0a: oriByte =8'ha3; | ||
8'h0b: oriByte =8'h9e; | ||
8'h0c: oriByte =8'h81; | ||
8'h0d: oriByte =8'hf3; | ||
8'h0e: oriByte =8'hd7; | ||
8'h0f: oriByte =8'hfb; | ||
8'h10: oriByte =8'h7c; | ||
8'h11: oriByte =8'he3; | ||
8'h12: oriByte =8'h39; | ||
8'h13: oriByte =8'h82; | ||
8'h14: oriByte =8'h9b; | ||
8'h15: oriByte =8'h2f; | ||
8'h16: oriByte =8'hff; | ||
8'h17: oriByte =8'h87; | ||
8'h18: oriByte =8'h34; | ||
8'h19: oriByte =8'h8e; | ||
8'h1a: oriByte =8'h43; | ||
8'h1b: oriByte =8'h44; | ||
8'h1c: oriByte =8'hc4; | ||
8'h1d: oriByte =8'hde; | ||
8'h1e: oriByte =8'he9; | ||
8'h1f: oriByte =8'hcb; | ||
8'h20: oriByte =8'h54; | ||
8'h21: oriByte =8'h7b; | ||
8'h22: oriByte =8'h94; | ||
8'h23: oriByte =8'h32; | ||
8'h24: oriByte =8'ha6; | ||
8'h25: oriByte =8'hc2; | ||
8'h26: oriByte =8'h23; | ||
8'h27: oriByte =8'h3d; | ||
8'h28: oriByte =8'hee; | ||
8'h29: oriByte =8'h4c; | ||
8'h2a: oriByte =8'h95; | ||
8'h2b: oriByte =8'h0b; | ||
8'h2c: oriByte =8'h42; | ||
8'h2d: oriByte =8'hfa; | ||
8'h2e: oriByte =8'hc3; | ||
8'h2f: oriByte =8'h4e; | ||
8'h30: oriByte =8'h08; | ||
8'h31: oriByte =8'h2e; | ||
8'h32: oriByte =8'ha1; | ||
8'h33: oriByte =8'h66; | ||
8'h34: oriByte =8'h28; | ||
8'h35: oriByte =8'hd9; | ||
8'h36: oriByte =8'h24; | ||
8'h37: oriByte =8'hb2; | ||
8'h38: oriByte =8'h76; | ||
8'h39: oriByte =8'h5b; | ||
8'h3a: oriByte =8'ha2; | ||
8'h3b: oriByte =8'h49; | ||
8'h3c: oriByte =8'h6d; | ||
8'h3d: oriByte =8'h8b; | ||
8'h3e: oriByte =8'hd1; | ||
8'h3f: oriByte =8'h25; | ||
8'h40: oriByte =8'h72; | ||
8'h41: oriByte =8'hf8; | ||
8'h42: oriByte =8'hf6; | ||
8'h43: oriByte =8'h64; | ||
8'h44: oriByte =8'h86; | ||
8'h45: oriByte =8'h68; | ||
8'h46: oriByte =8'h98; | ||
8'h47: oriByte =8'h16; | ||
8'h48: oriByte =8'hd4; | ||
8'h49: oriByte =8'ha4; | ||
8'h4a: oriByte =8'h5c; | ||
8'h4b: oriByte =8'hcc; | ||
8'h4c: oriByte =8'h5d; | ||
8'h4d: oriByte =8'h65; | ||
8'h4e: oriByte =8'hb6; | ||
8'h4f: oriByte =8'h92; | ||
8'h50: oriByte =8'h6c; | ||
8'h51: oriByte =8'h70; | ||
8'h52: oriByte =8'h48; | ||
8'h53: oriByte =8'h50; | ||
8'h54: oriByte =8'hfd; | ||
8'h55: oriByte =8'hed; | ||
8'h56: oriByte =8'hb9; | ||
8'h57: oriByte =8'hda; | ||
8'h58: oriByte =8'h5e; | ||
8'h59: oriByte =8'h15; | ||
8'h5a: oriByte =8'h46; | ||
8'h5b: oriByte =8'h57; | ||
8'h5c: oriByte =8'ha7; | ||
8'h5d: oriByte =8'h8d; | ||
8'h5e: oriByte =8'h9d; | ||
8'h5f: oriByte =8'h84; | ||
8'h60: oriByte =8'h90; | ||
8'h61: oriByte =8'hd8; | ||
8'h62: oriByte =8'hab; | ||
8'h63: oriByte =8'h00; | ||
8'h64: oriByte =8'h8c; | ||
8'h65: oriByte =8'hbc; | ||
8'h66: oriByte =8'hd3; | ||
8'h67: oriByte =8'h0a; | ||
8'h68: oriByte =8'hf7; | ||
8'h69: oriByte =8'he4; | ||
8'h6a: oriByte =8'h58; | ||
8'h6b: oriByte =8'h05; | ||
8'h6c: oriByte =8'hb8; | ||
8'h6d: oriByte =8'hb3; | ||
8'h6e: oriByte =8'h45; | ||
8'h6f: oriByte =8'h06; | ||
8'h70: oriByte =8'hd0; | ||
8'h71: oriByte =8'h2c; | ||
8'h72: oriByte =8'h1e; | ||
8'h73: oriByte =8'h8f; | ||
8'h74: oriByte =8'hca; | ||
8'h75: oriByte =8'h3f; | ||
8'h76: oriByte =8'h0f; | ||
8'h77: oriByte =8'h02; | ||
8'h78: oriByte =8'hc1; | ||
8'h79: oriByte =8'haf; | ||
8'h7a: oriByte =8'hbd; | ||
8'h7b: oriByte =8'h03; | ||
8'h7c: oriByte =8'h01; | ||
8'h7d: oriByte =8'h13; | ||
8'h7e: oriByte =8'h8a; | ||
8'h7f: oriByte =8'h6b; | ||
8'h80: oriByte =8'h3a; | ||
8'h81: oriByte =8'h91; | ||
8'h82: oriByte =8'h11; | ||
8'h83: oriByte =8'h41; | ||
8'h84: oriByte =8'h4f; | ||
8'h85: oriByte =8'h67; | ||
8'h86: oriByte =8'hdc; | ||
8'h87: oriByte =8'hea; | ||
8'h88: oriByte =8'h97; | ||
8'h89: oriByte =8'hf2; | ||
8'h8a: oriByte =8'hcf; | ||
8'h8b: oriByte =8'hce; | ||
8'h8c: oriByte =8'hf0; | ||
8'h8d: oriByte =8'hb4; | ||
8'h8e: oriByte =8'he6; | ||
8'h8f: oriByte =8'h73; | ||
8'h90: oriByte =8'h96; | ||
8'h91: oriByte =8'hac; | ||
8'h92: oriByte =8'h74; | ||
8'h93: oriByte =8'h22; | ||
8'h94: oriByte =8'he7; | ||
8'h95: oriByte =8'had; | ||
8'h96: oriByte =8'h35; | ||
8'h97: oriByte =8'h85; | ||
8'h98: oriByte =8'he2; | ||
8'h99: oriByte =8'hf9; | ||
8'h9a: oriByte =8'h37; | ||
8'h9b: oriByte =8'he8; | ||
8'h9c: oriByte =8'h1c; | ||
8'h9d: oriByte =8'h75; | ||
8'h9e: oriByte =8'hdf; | ||
8'h9f: oriByte =8'h6e; | ||
8'ha0: oriByte =8'h47; | ||
8'ha1: oriByte =8'hf1; | ||
8'ha2: oriByte =8'h1a; | ||
8'ha3: oriByte =8'h71; | ||
8'ha4: oriByte =8'h1d; | ||
8'ha5: oriByte =8'h29; | ||
8'ha6: oriByte =8'hc5; | ||
8'ha7: oriByte =8'h89; | ||
8'ha8: oriByte =8'h6f; | ||
8'ha9: oriByte =8'hb7; | ||
8'haa: oriByte =8'h62; | ||
8'hab: oriByte =8'h0e; | ||
8'hac: oriByte =8'haa; | ||
8'had: oriByte =8'h18; | ||
8'hae: oriByte =8'hbe; | ||
8'haf: oriByte =8'h1b; | ||
8'hb0: oriByte =8'hfc; | ||
8'hb1: oriByte =8'h56; | ||
8'hb2: oriByte =8'h3e; | ||
8'hb3: oriByte =8'h4b; | ||
8'hb4: oriByte =8'hc6; | ||
8'hb5: oriByte =8'hd2; | ||
8'hb6: oriByte =8'h79; | ||
8'hb7: oriByte =8'h20; | ||
8'hb8: oriByte =8'h9a; | ||
8'hb9: oriByte =8'hdb; | ||
8'hba: oriByte =8'hc0; | ||
8'hbb: oriByte =8'hfe; | ||
8'hbc: oriByte =8'h78; | ||
8'hbd: oriByte =8'hcd; | ||
8'hbe: oriByte =8'h5a; | ||
8'hbf: oriByte =8'hf4; | ||
8'hc0: oriByte =8'h1f; | ||
8'hc1: oriByte =8'hdd; | ||
8'hc2: oriByte =8'ha8; | ||
8'hc3: oriByte =8'h33; | ||
8'hc4: oriByte =8'h88; | ||
8'hc5: oriByte =8'h07; | ||
8'hc6: oriByte =8'hc7; | ||
8'hc7: oriByte =8'h31; | ||
8'hc8: oriByte =8'hb1; | ||
8'hc9: oriByte =8'h12; | ||
8'hca: oriByte =8'h10; | ||
8'hcb: oriByte =8'h59; | ||
8'hcc: oriByte =8'h27; | ||
8'hcd: oriByte =8'h80; | ||
8'hce: oriByte =8'hec; | ||
8'hcf: oriByte =8'h5f; | ||
8'hd0: oriByte =8'h60; | ||
8'hd1: oriByte =8'h51; | ||
8'hd2: oriByte =8'h7f; | ||
8'hd3: oriByte =8'ha9; | ||
8'hd4: oriByte =8'h19; | ||
8'hd5: oriByte =8'hb5; | ||
8'hd6: oriByte =8'h4a; | ||
8'hd7: oriByte =8'h0d; | ||
8'hd8: oriByte =8'h2d; | ||
8'hd9: oriByte =8'he5; | ||
8'hda: oriByte =8'h7a; | ||
8'hdb: oriByte =8'h9f; | ||
8'hdc: oriByte =8'h93; | ||
8'hdd: oriByte =8'hc9; | ||
8'hde: oriByte =8'h9c; | ||
8'hdf: oriByte =8'hef; | ||
8'he0: oriByte =8'ha0; | ||
8'he1: oriByte =8'he0; | ||
8'he2: oriByte =8'h3b; | ||
8'he3: oriByte =8'h4d; | ||
8'he4: oriByte =8'hae; | ||
8'he5: oriByte =8'h2a; | ||
8'he6: oriByte =8'hf5; | ||
8'he7: oriByte =8'hb0; | ||
8'he8: oriByte =8'hc8; | ||
8'he9: oriByte =8'heb; | ||
8'hea: oriByte =8'hbb; | ||
8'heb: oriByte =8'h3c; | ||
8'hec: oriByte =8'h83; | ||
8'hed: oriByte =8'h53; | ||
8'hee: oriByte =8'h99; | ||
8'hef: oriByte =8'h61; | ||
8'hf0: oriByte =8'h17; | ||
8'hf1: oriByte =8'h2b; | ||
8'hf2: oriByte =8'h04; | ||
8'hf3: oriByte =8'h7e; | ||
8'hf4: oriByte =8'hba; | ||
8'hf5: oriByte =8'h77; | ||
8'hf6: oriByte =8'hd6; | ||
8'hf7: oriByte =8'h26; | ||
8'hf8: oriByte =8'he1; | ||
8'hf9: oriByte =8'h69; | ||
8'hfa: oriByte =8'h14; | ||
8'hfb: oriByte =8'h63; | ||
8'hfc: oriByte =8'h55; | ||
8'hfd: oriByte =8'h21; | ||
8'hfe: oriByte =8'h0c; | ||
8'hff: oriByte =8'h7d; | ||
endcase | ||
end | ||
endmodule |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
module SubBytes(oriBytes, subBytes); | ||
input [127:0] oriBytes; // Original input bytes | ||
output wire [127:0] subBytes; // Corresponding sub_bytes | ||
|
||
genvar i; | ||
generate | ||
for (i=7;i<128;i=i+8) begin: SubTableLoop | ||
SubTable s(oriBytes[i -:8],subBytes[i -:8]); | ||
end | ||
endgenerate | ||
endmodule | ||
|
||
module SubBytes_DUT(); | ||
reg [127:0] in; | ||
wire [127:0] out; | ||
|
||
SubBytes sb(in, out); | ||
|
||
initial begin | ||
in = 128'h00102030_40506070_8090a0b0_c0d0e0f0; | ||
#10 | ||
in = 128'h89d810e8_855ace68_2d1843d8_cb128fe4; | ||
#10 | ||
in = 128'h4915598f_55e5d7a0_daca94fa_1f0a63f7; | ||
end | ||
|
||
initial begin | ||
$display("SubBytes_DUT"); | ||
$display("=================================="); | ||
$monitor("Input = %h, Output = %h", in, out); | ||
end | ||
endmodule |
Oops, something went wrong.