/////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////
|
//// ////
|
//// ////
|
//// AES Cipher Top Level ////
|
//// AES Cipher Top Level ////
|
//// ////
|
//// ////
|
//// ////
|
//// ////
|
//// Author: Rudolf Usselmann ////
|
//// Author: Rudolf Usselmann ////
|
//// rudi@asics.ws ////
|
//// rudi@asics.ws ////
|
//// ////
|
//// ////
|
//// ////
|
//// ////
|
//// Downloaded from: http://www.opencores.org/cores/aes_core/ ////
|
//// Downloaded from: http://www.opencores.org/cores/aes_core/ ////
|
//// ////
|
//// ////
|
/////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////
|
//// ////
|
//// ////
|
//// Copyright (C) 2000-2002 Rudolf Usselmann ////
|
//// Copyright (C) 2000-2002 Rudolf Usselmann ////
|
//// www.asics.ws ////
|
//// www.asics.ws ////
|
//// rudi@asics.ws ////
|
//// rudi@asics.ws ////
|
//// ////
|
//// ////
|
//// This source file may be used and distributed without ////
|
//// This source file may be used and distributed without ////
|
//// restriction provided that this copyright statement is not ////
|
//// restriction provided that this copyright statement is not ////
|
//// removed from the file and that any derivative work contains ////
|
//// removed from the file and that any derivative work contains ////
|
//// the original copyright notice and the associated disclaimer.////
|
//// the original copyright notice and the associated disclaimer.////
|
//// ////
|
//// ////
|
//// THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY ////
|
//// THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY ////
|
//// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ////
|
//// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ////
|
//// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS ////
|
//// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS ////
|
//// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR ////
|
//// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR ////
|
//// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, ////
|
//// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, ////
|
//// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ////
|
//// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ////
|
//// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ////
|
//// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ////
|
//// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR ////
|
//// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR ////
|
//// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ////
|
//// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ////
|
//// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ////
|
//// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ////
|
//// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ////
|
//// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ////
|
//// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ////
|
//// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ////
|
//// POSSIBILITY OF SUCH DAMAGE. ////
|
//// POSSIBILITY OF SUCH DAMAGE. ////
|
//// ////
|
//// ////
|
/////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////
|
|
|
//// Modified to achieve 10 cycle - 10 stage functionality ////
|
//// Modified to achieve 10 cycle - 10 stage functionality ////
|
//// By Tariq Bashir Ahmad ////
|
//// By Tariq Bashir Ahmad ////
|
//// tariq.bashir@gmail.com ////
|
//// tariq.bashir@gmail.com ////
|
//// http://www.ecs.umass.edu/~tbashir ////
|
//// http://www.ecs.umass.edu/~tbashir ////
|
|
|
|
|
|
|
`timescale 1 ns/1 ps
|
`timescale 1 ns/1 ps
|
|
|
module aes_cipher_top(clk, rst, ld, done, key, text_in, text_out);
|
module aes_cipher_top(clk, rst, ld, done, key, text_in, text_out);
|
|
|
input clk, rst;
|
input clk, rst;
|
input ld;
|
input ld;
|
output done;
|
output done;
|
input [127:0] key;
|
input [127:0] key;
|
input [127:0] text_in;
|
input [127:0] text_in;
|
output [127:0] text_out;
|
output [127:0] text_out;
|
|
|
input aes_en;
|
|
|
|
reg [127:0] text_in_r;
|
reg [127:0] text_in_r;
|
|
|
reg [127:0] text_out_stage1;
|
reg [127:0] text_out_stage1;
|
reg [127:0] text_out_stage2;
|
reg [127:0] text_out_stage2;
|
reg [127:0] text_out_stage3;
|
reg [127:0] text_out_stage3;
|
reg [127:0] text_out_stage4;
|
reg [127:0] text_out_stage4;
|
reg [127:0] text_out_stage5;
|
reg [127:0] text_out_stage5;
|
reg [127:0] text_out_stage6;
|
reg [127:0] text_out_stage6;
|
reg [127:0] text_out_stage7;
|
reg [127:0] text_out_stage7;
|
reg [127:0] text_out_stage8;
|
reg [127:0] text_out_stage8;
|
reg [127:0] text_out_stage9;
|
reg [127:0] text_out_stage9;
|
|
|
|
|
reg [127:0] text_out; //10th stage output
|
reg [127:0] text_out; //10th stage output
|
|
|
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
//
|
//
|
// Local Wires
|
// Local Wires
|
//
|
//
|
|
|
wire [31:0] w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11, w12, w13, w14, w15, w16, w17, w18, w19, w20, w21, w22,
|
wire [31:0] w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11, w12, w13, w14, w15, w16, w17, w18, w19, w20, w21, w22,
|
w23, w24, w25, w26, w27, w28, w29, w30, w31, w32, w33, w34, w35, w36, w37, w38, w39, w40, w41, w42, w43;
|
w23, w24, w25, w26, w27, w28, w29, w30, w31, w32, w33, w34, w35, w36, w37, w38, w39, w40, w41, w42, w43;
|
|
|
/*reg [127:0] text_out_temp;
|
/*reg [127:0] text_out_temp;
|
*/
|
*/
|
//round 1 wires
|
//round 1 wires
|
reg [7:0] sa00, sa01, sa02, sa03;
|
reg [7:0] sa00, sa01, sa02, sa03;
|
reg [7:0] sa10, sa11, sa12, sa13;
|
reg [7:0] sa10, sa11, sa12, sa13;
|
reg [7:0] sa20, sa21, sa22, sa23;
|
reg [7:0] sa20, sa21, sa22, sa23;
|
reg [7:0] sa30, sa31, sa32, sa33;
|
reg [7:0] sa30, sa31, sa32, sa33;
|
|
|
wire [7:0] sa00_next, sa01_next, sa02_next, sa03_next;
|
wire [7:0] sa00_next, sa01_next, sa02_next, sa03_next;
|
wire [7:0] sa10_next, sa11_next, sa12_next, sa13_next;
|
wire [7:0] sa10_next, sa11_next, sa12_next, sa13_next;
|
wire [7:0] sa20_next, sa21_next, sa22_next, sa23_next;
|
wire [7:0] sa20_next, sa21_next, sa22_next, sa23_next;
|
wire [7:0] sa30_next, sa31_next, sa32_next, sa33_next;
|
wire [7:0] sa30_next, sa31_next, sa32_next, sa33_next;
|
|
|
wire [7:0] sa00_sub, sa01_sub, sa02_sub, sa03_sub;
|
wire [7:0] sa00_sub, sa01_sub, sa02_sub, sa03_sub;
|
wire [7:0] sa10_sub, sa11_sub, sa12_sub, sa13_sub;
|
wire [7:0] sa10_sub, sa11_sub, sa12_sub, sa13_sub;
|
wire [7:0] sa20_sub, sa21_sub, sa22_sub, sa23_sub;
|
wire [7:0] sa20_sub, sa21_sub, sa22_sub, sa23_sub;
|
wire [7:0] sa30_sub, sa31_sub, sa32_sub, sa33_sub;
|
wire [7:0] sa30_sub, sa31_sub, sa32_sub, sa33_sub;
|
|
|
wire [7:0] sa00_sr, sa01_sr, sa02_sr, sa03_sr;
|
wire [7:0] sa00_sr, sa01_sr, sa02_sr, sa03_sr;
|
wire [7:0] sa10_sr, sa11_sr, sa12_sr, sa13_sr;
|
wire [7:0] sa10_sr, sa11_sr, sa12_sr, sa13_sr;
|
wire [7:0] sa20_sr, sa21_sr, sa22_sr, sa23_sr;
|
wire [7:0] sa20_sr, sa21_sr, sa22_sr, sa23_sr;
|
wire [7:0] sa30_sr, sa31_sr, sa32_sr, sa33_sr;
|
wire [7:0] sa30_sr, sa31_sr, sa32_sr, sa33_sr;
|
|
|
wire [7:0] sa00_mc, sa01_mc, sa02_mc, sa03_mc;
|
wire [7:0] sa00_mc, sa01_mc, sa02_mc, sa03_mc;
|
wire [7:0] sa10_mc, sa11_mc, sa12_mc, sa13_mc;
|
wire [7:0] sa10_mc, sa11_mc, sa12_mc, sa13_mc;
|
wire [7:0] sa20_mc, sa21_mc, sa22_mc, sa23_mc;
|
wire [7:0] sa20_mc, sa21_mc, sa22_mc, sa23_mc;
|
wire [7:0] sa30_mc, sa31_mc, sa32_mc, sa33_mc;
|
wire [7:0] sa30_mc, sa31_mc, sa32_mc, sa33_mc;
|
|
|
|
|
//round2 wires
|
//round2 wires
|
wire [7:0] sa00_next_round2, sa01_next_round2, sa02_next_round2, sa03_next_round2;
|
wire [7:0] sa00_next_round2, sa01_next_round2, sa02_next_round2, sa03_next_round2;
|
wire [7:0] sa10_next_round2, sa11_next_round2, sa12_next_round2, sa13_next_round2;
|
wire [7:0] sa10_next_round2, sa11_next_round2, sa12_next_round2, sa13_next_round2;
|
wire [7:0] sa20_next_round2, sa21_next_round2, sa22_next_round2, sa23_next_round2;
|
wire [7:0] sa20_next_round2, sa21_next_round2, sa22_next_round2, sa23_next_round2;
|
wire [7:0] sa30_next_round2, sa31_next_round2, sa32_next_round2, sa33_next_round2;
|
wire [7:0] sa30_next_round2, sa31_next_round2, sa32_next_round2, sa33_next_round2;
|
|
|
wire [7:0] sa00_sub_round2, sa01_sub_round2, sa02_sub_round2, sa03_sub_round2;
|
wire [7:0] sa00_sub_round2, sa01_sub_round2, sa02_sub_round2, sa03_sub_round2;
|
wire [7:0] sa10_sub_round2, sa11_sub_round2, sa12_sub_round2, sa13_sub_round2;
|
wire [7:0] sa10_sub_round2, sa11_sub_round2, sa12_sub_round2, sa13_sub_round2;
|
wire [7:0] sa20_sub_round2, sa21_sub_round2, sa22_sub_round2, sa23_sub_round2;
|
wire [7:0] sa20_sub_round2, sa21_sub_round2, sa22_sub_round2, sa23_sub_round2;
|
wire [7:0] sa30_sub_round2, sa31_sub_round2, sa32_sub_round2, sa33_sub_round2;
|
wire [7:0] sa30_sub_round2, sa31_sub_round2, sa32_sub_round2, sa33_sub_round2;
|
|
|
wire [7:0] sa00_sr_round2, sa01_sr_round2, sa02_sr_round2, sa03_sr_round2;
|
wire [7:0] sa00_sr_round2, sa01_sr_round2, sa02_sr_round2, sa03_sr_round2;
|
wire [7:0] sa10_sr_round2, sa11_sr_round2, sa12_sr_round2, sa13_sr_round2;
|
wire [7:0] sa10_sr_round2, sa11_sr_round2, sa12_sr_round2, sa13_sr_round2;
|
wire [7:0] sa20_sr_round2, sa21_sr_round2, sa22_sr_round2, sa23_sr_round2;
|
wire [7:0] sa20_sr_round2, sa21_sr_round2, sa22_sr_round2, sa23_sr_round2;
|
wire [7:0] sa30_sr_round2, sa31_sr_round2, sa32_sr_round2, sa33_sr_round2;
|
wire [7:0] sa30_sr_round2, sa31_sr_round2, sa32_sr_round2, sa33_sr_round2;
|
|
|
wire [7:0] sa00_mc_round2, sa01_mc_round2, sa02_mc_round2, sa03_mc_round2;
|
wire [7:0] sa00_mc_round2, sa01_mc_round2, sa02_mc_round2, sa03_mc_round2;
|
wire [7:0] sa10_mc_round2, sa11_mc_round2, sa12_mc_round2, sa13_mc_round2;
|
wire [7:0] sa10_mc_round2, sa11_mc_round2, sa12_mc_round2, sa13_mc_round2;
|
wire [7:0] sa20_mc_round2, sa21_mc_round2, sa22_mc_round2, sa23_mc_round2;
|
wire [7:0] sa20_mc_round2, sa21_mc_round2, sa22_mc_round2, sa23_mc_round2;
|
wire [7:0] sa30_mc_round2, sa31_mc_round2, sa32_mc_round2, sa33_mc_round2;
|
wire [7:0] sa30_mc_round2, sa31_mc_round2, sa32_mc_round2, sa33_mc_round2;
|
|
|
|
|
//round3 wires
|
//round3 wires
|
wire [7:0] sa00_next_round3, sa01_next_round3, sa02_next_round3, sa03_next_round3;
|
wire [7:0] sa00_next_round3, sa01_next_round3, sa02_next_round3, sa03_next_round3;
|
wire [7:0] sa10_next_round3, sa11_next_round3, sa12_next_round3, sa13_next_round3;
|
wire [7:0] sa10_next_round3, sa11_next_round3, sa12_next_round3, sa13_next_round3;
|
wire [7:0] sa20_next_round3, sa21_next_round3, sa22_next_round3, sa23_next_round3;
|
wire [7:0] sa20_next_round3, sa21_next_round3, sa22_next_round3, sa23_next_round3;
|
wire [7:0] sa30_next_round3, sa31_next_round3, sa32_next_round3, sa33_next_round3;
|
wire [7:0] sa30_next_round3, sa31_next_round3, sa32_next_round3, sa33_next_round3;
|
|
|
wire [7:0] sa00_sub_round3, sa01_sub_round3, sa02_sub_round3, sa03_sub_round3;
|
wire [7:0] sa00_sub_round3, sa01_sub_round3, sa02_sub_round3, sa03_sub_round3;
|
wire [7:0] sa10_sub_round3, sa11_sub_round3, sa12_sub_round3, sa13_sub_round3;
|
wire [7:0] sa10_sub_round3, sa11_sub_round3, sa12_sub_round3, sa13_sub_round3;
|
wire [7:0] sa20_sub_round3, sa21_sub_round3, sa22_sub_round3, sa23_sub_round3;
|
wire [7:0] sa20_sub_round3, sa21_sub_round3, sa22_sub_round3, sa23_sub_round3;
|
wire [7:0] sa30_sub_round3, sa31_sub_round3, sa32_sub_round3, sa33_sub_round3;
|
wire [7:0] sa30_sub_round3, sa31_sub_round3, sa32_sub_round3, sa33_sub_round3;
|
|
|
wire [7:0] sa00_sr_round3, sa01_sr_round3, sa02_sr_round3, sa03_sr_round3;
|
wire [7:0] sa00_sr_round3, sa01_sr_round3, sa02_sr_round3, sa03_sr_round3;
|
wire [7:0] sa10_sr_round3, sa11_sr_round3, sa12_sr_round3, sa13_sr_round3;
|
wire [7:0] sa10_sr_round3, sa11_sr_round3, sa12_sr_round3, sa13_sr_round3;
|
wire [7:0] sa20_sr_round3, sa21_sr_round3, sa22_sr_round3, sa23_sr_round3;
|
wire [7:0] sa20_sr_round3, sa21_sr_round3, sa22_sr_round3, sa23_sr_round3;
|
wire [7:0] sa30_sr_round3, sa31_sr_round3, sa32_sr_round3, sa33_sr_round3;
|
wire [7:0] sa30_sr_round3, sa31_sr_round3, sa32_sr_round3, sa33_sr_round3;
|
|
|
wire [7:0] sa00_mc_round3, sa01_mc_round3, sa02_mc_round3, sa03_mc_round3;
|
wire [7:0] sa00_mc_round3, sa01_mc_round3, sa02_mc_round3, sa03_mc_round3;
|
wire [7:0] sa10_mc_round3, sa11_mc_round3, sa12_mc_round3, sa13_mc_round3;
|
wire [7:0] sa10_mc_round3, sa11_mc_round3, sa12_mc_round3, sa13_mc_round3;
|
wire [7:0] sa20_mc_round3, sa21_mc_round3, sa22_mc_round3, sa23_mc_round3;
|
wire [7:0] sa20_mc_round3, sa21_mc_round3, sa22_mc_round3, sa23_mc_round3;
|
wire [7:0] sa30_mc_round3, sa31_mc_round3, sa32_mc_round3, sa33_mc_round3;
|
wire [7:0] sa30_mc_round3, sa31_mc_round3, sa32_mc_round3, sa33_mc_round3;
|
|
|
|
|
|
|
//round4 wires
|
//round4 wires
|
wire [7:0] sa00_next_round4, sa01_next_round4, sa02_next_round4, sa03_next_round4;
|
wire [7:0] sa00_next_round4, sa01_next_round4, sa02_next_round4, sa03_next_round4;
|
wire [7:0] sa10_next_round4, sa11_next_round4, sa12_next_round4, sa13_next_round4;
|
wire [7:0] sa10_next_round4, sa11_next_round4, sa12_next_round4, sa13_next_round4;
|
wire [7:0] sa20_next_round4, sa21_next_round4, sa22_next_round4, sa23_next_round4;
|
wire [7:0] sa20_next_round4, sa21_next_round4, sa22_next_round4, sa23_next_round4;
|
wire [7:0] sa30_next_round4, sa31_next_round4, sa32_next_round4, sa33_next_round4;
|
wire [7:0] sa30_next_round4, sa31_next_round4, sa32_next_round4, sa33_next_round4;
|
|
|
wire [7:0] sa00_sub_round4, sa01_sub_round4, sa02_sub_round4, sa03_sub_round4;
|
wire [7:0] sa00_sub_round4, sa01_sub_round4, sa02_sub_round4, sa03_sub_round4;
|
wire [7:0] sa10_sub_round4, sa11_sub_round4, sa12_sub_round4, sa13_sub_round4;
|
wire [7:0] sa10_sub_round4, sa11_sub_round4, sa12_sub_round4, sa13_sub_round4;
|
wire [7:0] sa20_sub_round4, sa21_sub_round4, sa22_sub_round4, sa23_sub_round4;
|
wire [7:0] sa20_sub_round4, sa21_sub_round4, sa22_sub_round4, sa23_sub_round4;
|
wire [7:0] sa30_sub_round4, sa31_sub_round4, sa32_sub_round4, sa33_sub_round4;
|
wire [7:0] sa30_sub_round4, sa31_sub_round4, sa32_sub_round4, sa33_sub_round4;
|
|
|
wire [7:0] sa00_sr_round4, sa01_sr_round4, sa02_sr_round4, sa03_sr_round4;
|
wire [7:0] sa00_sr_round4, sa01_sr_round4, sa02_sr_round4, sa03_sr_round4;
|
wire [7:0] sa10_sr_round4, sa11_sr_round4, sa12_sr_round4, sa13_sr_round4;
|
wire [7:0] sa10_sr_round4, sa11_sr_round4, sa12_sr_round4, sa13_sr_round4;
|
wire [7:0] sa20_sr_round4, sa21_sr_round4, sa22_sr_round4, sa23_sr_round4;
|
wire [7:0] sa20_sr_round4, sa21_sr_round4, sa22_sr_round4, sa23_sr_round4;
|
wire [7:0] sa30_sr_round4, sa31_sr_round4, sa32_sr_round4, sa33_sr_round4;
|
wire [7:0] sa30_sr_round4, sa31_sr_round4, sa32_sr_round4, sa33_sr_round4;
|
|
|
wire [7:0] sa00_mc_round4, sa01_mc_round4, sa02_mc_round4, sa03_mc_round4;
|
wire [7:0] sa00_mc_round4, sa01_mc_round4, sa02_mc_round4, sa03_mc_round4;
|
wire [7:0] sa10_mc_round4, sa11_mc_round4, sa12_mc_round4, sa13_mc_round4;
|
wire [7:0] sa10_mc_round4, sa11_mc_round4, sa12_mc_round4, sa13_mc_round4;
|
wire [7:0] sa20_mc_round4, sa21_mc_round4, sa22_mc_round4, sa23_mc_round4;
|
wire [7:0] sa20_mc_round4, sa21_mc_round4, sa22_mc_round4, sa23_mc_round4;
|
wire [7:0] sa30_mc_round4, sa31_mc_round4, sa32_mc_round4, sa33_mc_round4;
|
wire [7:0] sa30_mc_round4, sa31_mc_round4, sa32_mc_round4, sa33_mc_round4;
|
|
|
//round5 wires
|
//round5 wires
|
wire [7:0] sa00_next_round5, sa01_next_round5, sa02_next_round5, sa03_next_round5;
|
wire [7:0] sa00_next_round5, sa01_next_round5, sa02_next_round5, sa03_next_round5;
|
wire [7:0] sa10_next_round5, sa11_next_round5, sa12_next_round5, sa13_next_round5;
|
wire [7:0] sa10_next_round5, sa11_next_round5, sa12_next_round5, sa13_next_round5;
|
wire [7:0] sa20_next_round5, sa21_next_round5, sa22_next_round5, sa23_next_round5;
|
wire [7:0] sa20_next_round5, sa21_next_round5, sa22_next_round5, sa23_next_round5;
|
wire [7:0] sa30_next_round5, sa31_next_round5, sa32_next_round5, sa33_next_round5;
|
wire [7:0] sa30_next_round5, sa31_next_round5, sa32_next_round5, sa33_next_round5;
|
|
|
wire [7:0] sa00_sub_round5, sa01_sub_round5, sa02_sub_round5, sa03_sub_round5;
|
wire [7:0] sa00_sub_round5, sa01_sub_round5, sa02_sub_round5, sa03_sub_round5;
|
wire [7:0] sa10_sub_round5, sa11_sub_round5, sa12_sub_round5, sa13_sub_round5;
|
wire [7:0] sa10_sub_round5, sa11_sub_round5, sa12_sub_round5, sa13_sub_round5;
|
wire [7:0] sa20_sub_round5, sa21_sub_round5, sa22_sub_round5, sa23_sub_round5;
|
wire [7:0] sa20_sub_round5, sa21_sub_round5, sa22_sub_round5, sa23_sub_round5;
|
wire [7:0] sa30_sub_round5, sa31_sub_round5, sa32_sub_round5, sa33_sub_round5;
|
wire [7:0] sa30_sub_round5, sa31_sub_round5, sa32_sub_round5, sa33_sub_round5;
|
|
|
wire [7:0] sa00_sr_round5, sa01_sr_round5, sa02_sr_round5, sa03_sr_round5;
|
wire [7:0] sa00_sr_round5, sa01_sr_round5, sa02_sr_round5, sa03_sr_round5;
|
wire [7:0] sa10_sr_round5, sa11_sr_round5, sa12_sr_round5, sa13_sr_round5;
|
wire [7:0] sa10_sr_round5, sa11_sr_round5, sa12_sr_round5, sa13_sr_round5;
|
wire [7:0] sa20_sr_round5, sa21_sr_round5, sa22_sr_round5, sa23_sr_round5;
|
wire [7:0] sa20_sr_round5, sa21_sr_round5, sa22_sr_round5, sa23_sr_round5;
|
wire [7:0] sa30_sr_round5, sa31_sr_round5, sa32_sr_round5, sa33_sr_round5;
|
wire [7:0] sa30_sr_round5, sa31_sr_round5, sa32_sr_round5, sa33_sr_round5;
|
|
|
wire [7:0] sa00_mc_round5, sa01_mc_round5, sa02_mc_round5, sa03_mc_round5;
|
wire [7:0] sa00_mc_round5, sa01_mc_round5, sa02_mc_round5, sa03_mc_round5;
|
wire [7:0] sa10_mc_round5, sa11_mc_round5, sa12_mc_round5, sa13_mc_round5;
|
wire [7:0] sa10_mc_round5, sa11_mc_round5, sa12_mc_round5, sa13_mc_round5;
|
wire [7:0] sa20_mc_round5, sa21_mc_round5, sa22_mc_round5, sa23_mc_round5;
|
wire [7:0] sa20_mc_round5, sa21_mc_round5, sa22_mc_round5, sa23_mc_round5;
|
wire [7:0] sa30_mc_round5, sa31_mc_round5, sa32_mc_round5, sa33_mc_round5;
|
wire [7:0] sa30_mc_round5, sa31_mc_round5, sa32_mc_round5, sa33_mc_round5;
|
|
|
|
|
//round6 wires
|
//round6 wires
|
wire [7:0] sa00_next_round6, sa01_next_round6, sa02_next_round6, sa03_next_round6;
|
wire [7:0] sa00_next_round6, sa01_next_round6, sa02_next_round6, sa03_next_round6;
|
wire [7:0] sa10_next_round6, sa11_next_round6, sa12_next_round6, sa13_next_round6;
|
wire [7:0] sa10_next_round6, sa11_next_round6, sa12_next_round6, sa13_next_round6;
|
wire [7:0] sa20_next_round6, sa21_next_round6, sa22_next_round6, sa23_next_round6;
|
wire [7:0] sa20_next_round6, sa21_next_round6, sa22_next_round6, sa23_next_round6;
|
wire [7:0] sa30_next_round6, sa31_next_round6, sa32_next_round6, sa33_next_round6;
|
wire [7:0] sa30_next_round6, sa31_next_round6, sa32_next_round6, sa33_next_round6;
|
|
|
wire [7:0] sa00_sub_round6, sa01_sub_round6, sa02_sub_round6, sa03_sub_round6;
|
wire [7:0] sa00_sub_round6, sa01_sub_round6, sa02_sub_round6, sa03_sub_round6;
|
wire [7:0] sa10_sub_round6, sa11_sub_round6, sa12_sub_round6, sa13_sub_round6;
|
wire [7:0] sa10_sub_round6, sa11_sub_round6, sa12_sub_round6, sa13_sub_round6;
|
wire [7:0] sa20_sub_round6, sa21_sub_round6, sa22_sub_round6, sa23_sub_round6;
|
wire [7:0] sa20_sub_round6, sa21_sub_round6, sa22_sub_round6, sa23_sub_round6;
|
wire [7:0] sa30_sub_round6, sa31_sub_round6, sa32_sub_round6, sa33_sub_round6;
|
wire [7:0] sa30_sub_round6, sa31_sub_round6, sa32_sub_round6, sa33_sub_round6;
|
|
|
wire [7:0] sa00_sr_round6, sa01_sr_round6, sa02_sr_round6, sa03_sr_round6;
|
wire [7:0] sa00_sr_round6, sa01_sr_round6, sa02_sr_round6, sa03_sr_round6;
|
wire [7:0] sa10_sr_round6, sa11_sr_round6, sa12_sr_round6, sa13_sr_round6;
|
wire [7:0] sa10_sr_round6, sa11_sr_round6, sa12_sr_round6, sa13_sr_round6;
|
wire [7:0] sa20_sr_round6, sa21_sr_round6, sa22_sr_round6, sa23_sr_round6;
|
wire [7:0] sa20_sr_round6, sa21_sr_round6, sa22_sr_round6, sa23_sr_round6;
|
wire [7:0] sa30_sr_round6, sa31_sr_round6, sa32_sr_round6, sa33_sr_round6;
|
wire [7:0] sa30_sr_round6, sa31_sr_round6, sa32_sr_round6, sa33_sr_round6;
|
|
|
wire [7:0] sa00_mc_round6, sa01_mc_round6, sa02_mc_round6, sa03_mc_round6;
|
wire [7:0] sa00_mc_round6, sa01_mc_round6, sa02_mc_round6, sa03_mc_round6;
|
wire [7:0] sa10_mc_round6, sa11_mc_round6, sa12_mc_round6, sa13_mc_round6;
|
wire [7:0] sa10_mc_round6, sa11_mc_round6, sa12_mc_round6, sa13_mc_round6;
|
wire [7:0] sa20_mc_round6, sa21_mc_round6, sa22_mc_round6, sa23_mc_round6;
|
wire [7:0] sa20_mc_round6, sa21_mc_round6, sa22_mc_round6, sa23_mc_round6;
|
wire [7:0] sa30_mc_round6, sa31_mc_round6, sa32_mc_round6, sa33_mc_round6;
|
wire [7:0] sa30_mc_round6, sa31_mc_round6, sa32_mc_round6, sa33_mc_round6;
|
|
|
|
|
//round7 wires
|
//round7 wires
|
wire [7:0] sa00_next_round7, sa01_next_round7, sa02_next_round7, sa03_next_round7;
|
wire [7:0] sa00_next_round7, sa01_next_round7, sa02_next_round7, sa03_next_round7;
|
wire [7:0] sa10_next_round7, sa11_next_round7, sa12_next_round7, sa13_next_round7;
|
wire [7:0] sa10_next_round7, sa11_next_round7, sa12_next_round7, sa13_next_round7;
|
wire [7:0] sa20_next_round7, sa21_next_round7, sa22_next_round7, sa23_next_round7;
|
wire [7:0] sa20_next_round7, sa21_next_round7, sa22_next_round7, sa23_next_round7;
|
wire [7:0] sa30_next_round7, sa31_next_round7, sa32_next_round7, sa33_next_round7;
|
wire [7:0] sa30_next_round7, sa31_next_round7, sa32_next_round7, sa33_next_round7;
|
|
|
wire [7:0] sa00_sub_round7, sa01_sub_round7, sa02_sub_round7, sa03_sub_round7;
|
wire [7:0] sa00_sub_round7, sa01_sub_round7, sa02_sub_round7, sa03_sub_round7;
|
wire [7:0] sa10_sub_round7, sa11_sub_round7, sa12_sub_round7, sa13_sub_round7;
|
wire [7:0] sa10_sub_round7, sa11_sub_round7, sa12_sub_round7, sa13_sub_round7;
|
wire [7:0] sa20_sub_round7, sa21_sub_round7, sa22_sub_round7, sa23_sub_round7;
|
wire [7:0] sa20_sub_round7, sa21_sub_round7, sa22_sub_round7, sa23_sub_round7;
|
wire [7:0] sa30_sub_round7, sa31_sub_round7, sa32_sub_round7, sa33_sub_round7;
|
wire [7:0] sa30_sub_round7, sa31_sub_round7, sa32_sub_round7, sa33_sub_round7;
|
|
|
wire [7:0] sa00_sr_round7, sa01_sr_round7, sa02_sr_round7, sa03_sr_round7;
|
wire [7:0] sa00_sr_round7, sa01_sr_round7, sa02_sr_round7, sa03_sr_round7;
|
wire [7:0] sa10_sr_round7, sa11_sr_round7, sa12_sr_round7, sa13_sr_round7;
|
wire [7:0] sa10_sr_round7, sa11_sr_round7, sa12_sr_round7, sa13_sr_round7;
|
wire [7:0] sa20_sr_round7, sa21_sr_round7, sa22_sr_round7, sa23_sr_round7;
|
wire [7:0] sa20_sr_round7, sa21_sr_round7, sa22_sr_round7, sa23_sr_round7;
|
wire [7:0] sa30_sr_round7, sa31_sr_round7, sa32_sr_round7, sa33_sr_round7;
|
wire [7:0] sa30_sr_round7, sa31_sr_round7, sa32_sr_round7, sa33_sr_round7;
|
|
|
wire [7:0] sa00_mc_round7, sa01_mc_round7, sa02_mc_round7, sa03_mc_round7;
|
wire [7:0] sa00_mc_round7, sa01_mc_round7, sa02_mc_round7, sa03_mc_round7;
|
wire [7:0] sa10_mc_round7, sa11_mc_round7, sa12_mc_round7, sa13_mc_round7;
|
wire [7:0] sa10_mc_round7, sa11_mc_round7, sa12_mc_round7, sa13_mc_round7;
|
wire [7:0] sa20_mc_round7, sa21_mc_round7, sa22_mc_round7, sa23_mc_round7;
|
wire [7:0] sa20_mc_round7, sa21_mc_round7, sa22_mc_round7, sa23_mc_round7;
|
wire [7:0] sa30_mc_round7, sa31_mc_round7, sa32_mc_round7, sa33_mc_round7;
|
wire [7:0] sa30_mc_round7, sa31_mc_round7, sa32_mc_round7, sa33_mc_round7;
|
|
|
|
|
//round8 wires
|
//round8 wires
|
wire [7:0] sa00_next_round8, sa01_next_round8, sa02_next_round8, sa03_next_round8;
|
wire [7:0] sa00_next_round8, sa01_next_round8, sa02_next_round8, sa03_next_round8;
|
wire [7:0] sa10_next_round8, sa11_next_round8, sa12_next_round8, sa13_next_round8;
|
wire [7:0] sa10_next_round8, sa11_next_round8, sa12_next_round8, sa13_next_round8;
|
wire [7:0] sa20_next_round8, sa21_next_round8, sa22_next_round8, sa23_next_round8;
|
wire [7:0] sa20_next_round8, sa21_next_round8, sa22_next_round8, sa23_next_round8;
|
wire [7:0] sa30_next_round8, sa31_next_round8, sa32_next_round8, sa33_next_round8;
|
wire [7:0] sa30_next_round8, sa31_next_round8, sa32_next_round8, sa33_next_round8;
|
|
|
wire [7:0] sa00_sub_round8, sa01_sub_round8, sa02_sub_round8, sa03_sub_round8;
|
wire [7:0] sa00_sub_round8, sa01_sub_round8, sa02_sub_round8, sa03_sub_round8;
|
wire [7:0] sa10_sub_round8, sa11_sub_round8, sa12_sub_round8, sa13_sub_round8;
|
wire [7:0] sa10_sub_round8, sa11_sub_round8, sa12_sub_round8, sa13_sub_round8;
|
wire [7:0] sa20_sub_round8, sa21_sub_round8, sa22_sub_round8, sa23_sub_round8;
|
wire [7:0] sa20_sub_round8, sa21_sub_round8, sa22_sub_round8, sa23_sub_round8;
|
wire [7:0] sa30_sub_round8, sa31_sub_round8, sa32_sub_round8, sa33_sub_round8;
|
wire [7:0] sa30_sub_round8, sa31_sub_round8, sa32_sub_round8, sa33_sub_round8;
|
|
|
wire [7:0] sa00_sr_round8, sa01_sr_round8, sa02_sr_round8, sa03_sr_round8;
|
wire [7:0] sa00_sr_round8, sa01_sr_round8, sa02_sr_round8, sa03_sr_round8;
|
wire [7:0] sa10_sr_round8, sa11_sr_round8, sa12_sr_round8, sa13_sr_round8;
|
wire [7:0] sa10_sr_round8, sa11_sr_round8, sa12_sr_round8, sa13_sr_round8;
|
wire [7:0] sa20_sr_round8, sa21_sr_round8, sa22_sr_round8, sa23_sr_round8;
|
wire [7:0] sa20_sr_round8, sa21_sr_round8, sa22_sr_round8, sa23_sr_round8;
|
wire [7:0] sa30_sr_round8, sa31_sr_round8, sa32_sr_round8, sa33_sr_round8;
|
wire [7:0] sa30_sr_round8, sa31_sr_round8, sa32_sr_round8, sa33_sr_round8;
|
|
|
wire [7:0] sa00_mc_round8, sa01_mc_round8, sa02_mc_round8, sa03_mc_round8;
|
wire [7:0] sa00_mc_round8, sa01_mc_round8, sa02_mc_round8, sa03_mc_round8;
|
wire [7:0] sa10_mc_round8, sa11_mc_round8, sa12_mc_round8, sa13_mc_round8;
|
wire [7:0] sa10_mc_round8, sa11_mc_round8, sa12_mc_round8, sa13_mc_round8;
|
wire [7:0] sa20_mc_round8, sa21_mc_round8, sa22_mc_round8, sa23_mc_round8;
|
wire [7:0] sa20_mc_round8, sa21_mc_round8, sa22_mc_round8, sa23_mc_round8;
|
wire [7:0] sa30_mc_round8, sa31_mc_round8, sa32_mc_round8, sa33_mc_round8;
|
wire [7:0] sa30_mc_round8, sa31_mc_round8, sa32_mc_round8, sa33_mc_round8;
|
|
|
|
|
//round9 wires
|
//round9 wires
|
wire [7:0] sa00_next_round9, sa01_next_round9, sa02_next_round9, sa03_next_round9;
|
wire [7:0] sa00_next_round9, sa01_next_round9, sa02_next_round9, sa03_next_round9;
|
wire [7:0] sa10_next_round9, sa11_next_round9, sa12_next_round9, sa13_next_round9;
|
wire [7:0] sa10_next_round9, sa11_next_round9, sa12_next_round9, sa13_next_round9;
|
wire [7:0] sa20_next_round9, sa21_next_round9, sa22_next_round9, sa23_next_round9;
|
wire [7:0] sa20_next_round9, sa21_next_round9, sa22_next_round9, sa23_next_round9;
|
wire [7:0] sa30_next_round9, sa31_next_round9, sa32_next_round9, sa33_next_round9;
|
wire [7:0] sa30_next_round9, sa31_next_round9, sa32_next_round9, sa33_next_round9;
|
|
|
wire [7:0] sa00_sub_round9, sa01_sub_round9, sa02_sub_round9, sa03_sub_round9;
|
wire [7:0] sa00_sub_round9, sa01_sub_round9, sa02_sub_round9, sa03_sub_round9;
|
wire [7:0] sa10_sub_round9, sa11_sub_round9, sa12_sub_round9, sa13_sub_round9;
|
wire [7:0] sa10_sub_round9, sa11_sub_round9, sa12_sub_round9, sa13_sub_round9;
|
wire [7:0] sa20_sub_round9, sa21_sub_round9, sa22_sub_round9, sa23_sub_round9;
|
wire [7:0] sa20_sub_round9, sa21_sub_round9, sa22_sub_round9, sa23_sub_round9;
|
wire [7:0] sa30_sub_round9, sa31_sub_round9, sa32_sub_round9, sa33_sub_round9;
|
wire [7:0] sa30_sub_round9, sa31_sub_round9, sa32_sub_round9, sa33_sub_round9;
|
|
|
wire [7:0] sa00_sr_round9, sa01_sr_round9, sa02_sr_round9, sa03_sr_round9;
|
wire [7:0] sa00_sr_round9, sa01_sr_round9, sa02_sr_round9, sa03_sr_round9;
|
wire [7:0] sa10_sr_round9, sa11_sr_round9, sa12_sr_round9, sa13_sr_round9;
|
wire [7:0] sa10_sr_round9, sa11_sr_round9, sa12_sr_round9, sa13_sr_round9;
|
wire [7:0] sa20_sr_round9, sa21_sr_round9, sa22_sr_round9, sa23_sr_round9;
|
wire [7:0] sa20_sr_round9, sa21_sr_round9, sa22_sr_round9, sa23_sr_round9;
|
wire [7:0] sa30_sr_round9, sa31_sr_round9, sa32_sr_round9, sa33_sr_round9;
|
wire [7:0] sa30_sr_round9, sa31_sr_round9, sa32_sr_round9, sa33_sr_round9;
|
|
|
wire [7:0] sa00_mc_round9, sa01_mc_round9, sa02_mc_round9, sa03_mc_round9;
|
wire [7:0] sa00_mc_round9, sa01_mc_round9, sa02_mc_round9, sa03_mc_round9;
|
wire [7:0] sa10_mc_round9, sa11_mc_round9, sa12_mc_round9, sa13_mc_round9;
|
wire [7:0] sa10_mc_round9, sa11_mc_round9, sa12_mc_round9, sa13_mc_round9;
|
wire [7:0] sa20_mc_round9, sa21_mc_round9, sa22_mc_round9, sa23_mc_round9;
|
wire [7:0] sa20_mc_round9, sa21_mc_round9, sa22_mc_round9, sa23_mc_round9;
|
wire [7:0] sa30_mc_round9, sa31_mc_round9, sa32_mc_round9, sa33_mc_round9;
|
wire [7:0] sa30_mc_round9, sa31_mc_round9, sa32_mc_round9, sa33_mc_round9;
|
|
|
|
|
//round10 wires
|
//round10 wires
|
wire [7:0] sa00_next_round10, sa01_next_round10, sa02_next_round10, sa03_next_round10;
|
wire [7:0] sa00_next_round10, sa01_next_round10, sa02_next_round10, sa03_next_round10;
|
wire [7:0] sa10_next_round10, sa11_next_round10, sa12_next_round10, sa13_next_round10;
|
wire [7:0] sa10_next_round10, sa11_next_round10, sa12_next_round10, sa13_next_round10;
|
wire [7:0] sa20_next_round10, sa21_next_round10, sa22_next_round10, sa23_next_round10;
|
wire [7:0] sa20_next_round10, sa21_next_round10, sa22_next_round10, sa23_next_round10;
|
wire [7:0] sa30_next_round10, sa31_next_round10, sa32_next_round10, sa33_next_round10;
|
wire [7:0] sa30_next_round10, sa31_next_round10, sa32_next_round10, sa33_next_round10;
|
|
|
wire [7:0] sa00_sub_round10, sa01_sub_round10, sa02_sub_round10, sa03_sub_round10;
|
wire [7:0] sa00_sub_round10, sa01_sub_round10, sa02_sub_round10, sa03_sub_round10;
|
wire [7:0] sa10_sub_round10, sa11_sub_round10, sa12_sub_round10, sa13_sub_round10;
|
wire [7:0] sa10_sub_round10, sa11_sub_round10, sa12_sub_round10, sa13_sub_round10;
|
wire [7:0] sa20_sub_round10, sa21_sub_round10, sa22_sub_round10, sa23_sub_round10;
|
wire [7:0] sa20_sub_round10, sa21_sub_round10, sa22_sub_round10, sa23_sub_round10;
|
wire [7:0] sa30_sub_round10, sa31_sub_round10, sa32_sub_round10, sa33_sub_round10;
|
wire [7:0] sa30_sub_round10, sa31_sub_round10, sa32_sub_round10, sa33_sub_round10;
|
|
|
wire [7:0] sa00_sr_round10, sa01_sr_round10, sa02_sr_round10, sa03_sr_round10;
|
wire [7:0] sa00_sr_round10, sa01_sr_round10, sa02_sr_round10, sa03_sr_round10;
|
wire [7:0] sa10_sr_round10, sa11_sr_round10, sa12_sr_round10, sa13_sr_round10;
|
wire [7:0] sa10_sr_round10, sa11_sr_round10, sa12_sr_round10, sa13_sr_round10;
|
wire [7:0] sa20_sr_round10, sa21_sr_round10, sa22_sr_round10, sa23_sr_round10;
|
wire [7:0] sa20_sr_round10, sa21_sr_round10, sa22_sr_round10, sa23_sr_round10;
|
wire [7:0] sa30_sr_round10, sa31_sr_round10, sa32_sr_round10, sa33_sr_round10;
|
wire [7:0] sa30_sr_round10, sa31_sr_round10, sa32_sr_round10, sa33_sr_round10;
|
|
|
|
|
|
|
reg done, ld_r;
|
reg done, ld_r;
|
reg [3:0] dcnt;
|
reg [3:0] dcnt;
|
reg done2;
|
reg done2;
|
|
|
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
//
|
//
|
// Misc Logic
|
// Misc Logic
|
//
|
//
|
|
|
always @(posedge clk)
|
always @(posedge clk)
|
begin
|
begin
|
if(rst) begin dcnt <= 4'h0; end
|
if(~rst) begin dcnt <= 4'h0; end
|
else
|
else
|
if(ld) begin dcnt <= 4'hb; end
|
if(ld) begin dcnt <= 4'hb; end
|
else
|
else
|
if(|dcnt) begin dcnt <= dcnt - 4'h1; end
|
if(|dcnt) begin dcnt <= dcnt - 4'h1; end
|
|
|
end
|
end
|
|
|
always @(posedge clk) done <= !(|dcnt[3:1]) & dcnt[0] & !ld;
|
always @(posedge clk) done <= !(|dcnt[3:1]) & dcnt[0] & !ld;
|
always @(posedge clk) if(ld) text_in_r <= text_in;
|
always @(posedge clk) if(ld) text_in_r <= text_in;
|
always @(posedge clk) ld_r <= ld;
|
always @(posedge clk) ld_r <= ld;
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
// key expansion
|
// key expansion
|
|
|
|
|
aes_key_expand_128 u0(
|
aes_key_expand_128 u0(
|
.clk( clk ),
|
.clk( clk ),
|
.key( key ),
|
.key( key ),
|
.w0( w0 ),
|
.w0( w0 ),
|
.w1( w1 ),
|
.w1( w1 ),
|
.w2( w2 ),
|
.w2( w2 ),
|
.w3( w3 ),
|
.w3( w3 ),
|
.w4( w4 ),
|
.w4( w4 ),
|
.w5( w5 ),
|
.w5( w5 ),
|
.w6( w6 ),
|
.w6( w6 ),
|
.w7( w7 ),
|
.w7( w7 ),
|
.w8( w8 ),
|
.w8( w8 ),
|
.w9( w9 ),
|
.w9( w9 ),
|
.w10( w10 ),
|
.w10( w10 ),
|
.w11( w11 ),
|
.w11( w11 ),
|
.w12( w12 ),
|
.w12( w12 ),
|
.w13( w13 ),
|
.w13( w13 ),
|
.w14( w14 ),
|
.w14( w14 ),
|
.w15( w15 ),
|
.w15( w15 ),
|
.w16( w16 ),
|
.w16( w16 ),
|
.w17( w17 ),
|
.w17( w17 ),
|
.w18( w18 ),
|
.w18( w18 ),
|
.w19( w19 ),
|
.w19( w19 ),
|
.w20( w20 ),
|
.w20( w20 ),
|
.w21( w21 ),
|
.w21( w21 ),
|
.w22( w22 ),
|
.w22( w22 ),
|
.w23( w23 ),
|
.w23( w23 ),
|
.w24( w24 ),
|
.w24( w24 ),
|
.w25( w25 ),
|
.w25( w25 ),
|
.w26( w26 ),
|
.w26( w26 ),
|
.w27( w27 ),
|
.w27( w27 ),
|
.w28( w28 ),
|
.w28( w28 ),
|
.w29( w29 ),
|
.w29( w29 ),
|
.w30( w30 ),
|
.w30( w30 ),
|
.w31( w31 ),
|
.w31( w31 ),
|
.w32( w32 ),
|
.w32( w32 ),
|
.w33( w33 ),
|
.w33( w33 ),
|
.w34( w34 ),
|
.w34( w34 ),
|
.w35( w35 ),
|
.w35( w35 ),
|
.w36( w36 ),
|
.w36( w36 ),
|
.w37( w37 ),
|
.w37( w37 ),
|
.w38( w38 ),
|
.w38( w38 ),
|
.w39( w39 ),
|
.w39( w39 ),
|
.w40( w40 ),
|
.w40( w40 ),
|
.w41( w41 ),
|
.w41( w41 ),
|
.w42( w42 ),
|
.w42( w42 ),
|
.w43( w43 )
|
.w43( w43 )
|
);
|
);
|
|
|
always @(posedge clk)
|
always @(posedge clk)
|
begin
|
begin
|
sa33 <= text_in_r[007:000] ^ w3[07:00]; //sa33_mc_round2 ^ w3[07:00];
|
sa33 <= text_in_r[007:000] ^ w3[07:00]; //sa33_mc_round2 ^ w3[07:00];
|
sa23 <= text_in_r[015:008] ^ w3[15:08]; //sa23_mc_round2 ^ w3[15:08];
|
sa23 <= text_in_r[015:008] ^ w3[15:08]; //sa23_mc_round2 ^ w3[15:08];
|
sa13 <= text_in_r[023:016] ^ w3[23:16]; //sa13_mc_round2 ^ w3[23:16];
|
sa13 <= text_in_r[023:016] ^ w3[23:16]; //sa13_mc_round2 ^ w3[23:16];
|
sa03 <= text_in_r[031:024] ^ w3[31:24]; //sa03_mc_round2 ^ w3[31:24];
|
sa03 <= text_in_r[031:024] ^ w3[31:24]; //sa03_mc_round2 ^ w3[31:24];
|
sa32 <= text_in_r[039:032] ^ w2[07:00]; //sa32_mc_round2 ^ w2[07:00];
|
sa32 <= text_in_r[039:032] ^ w2[07:00]; //sa32_mc_round2 ^ w2[07:00];
|
sa22 <= text_in_r[047:040] ^ w2[15:08]; //sa22_mc_round2 ^ w2[15:08];
|
sa22 <= text_in_r[047:040] ^ w2[15:08]; //sa22_mc_round2 ^ w2[15:08];
|
sa12 <= text_in_r[055:048] ^ w2[23:16]; //sa12_mc_round2 ^ w2[23:16];
|
sa12 <= text_in_r[055:048] ^ w2[23:16]; //sa12_mc_round2 ^ w2[23:16];
|
sa02 <= text_in_r[063:056] ^ w2[31:24]; //sa02_mc_round2 ^ w2[31:24];
|
sa02 <= text_in_r[063:056] ^ w2[31:24]; //sa02_mc_round2 ^ w2[31:24];
|
sa31 <= text_in_r[071:064] ^ w1[07:00]; //sa31_mc_round2 ^ w1[07:00];
|
sa31 <= text_in_r[071:064] ^ w1[07:00]; //sa31_mc_round2 ^ w1[07:00];
|
sa21 <= text_in_r[079:072] ^ w1[15:08]; //sa21_mc_round2 ^ w1[15:08];
|
sa21 <= text_in_r[079:072] ^ w1[15:08]; //sa21_mc_round2 ^ w1[15:08];
|
sa11 <= text_in_r[087:080] ^ w1[23:16]; //sa11_mc_round2 ^ w1[23:16];
|
sa11 <= text_in_r[087:080] ^ w1[23:16]; //sa11_mc_round2 ^ w1[23:16];
|
sa01 <= text_in_r[095:088] ^ w1[31:24]; //sa01_mc_round2 ^ w1[31:24];
|
sa01 <= text_in_r[095:088] ^ w1[31:24]; //sa01_mc_round2 ^ w1[31:24];
|
sa30 <= text_in_r[103:096] ^ w0[07:00]; //sa30_mc_round2 ^ w0[07:00];
|
sa30 <= text_in_r[103:096] ^ w0[07:00]; //sa30_mc_round2 ^ w0[07:00];
|
sa20 <= text_in_r[111:104] ^ w0[15:08]; //sa20_mc_round2 ^ w0[15:08];
|
sa20 <= text_in_r[111:104] ^ w0[15:08]; //sa20_mc_round2 ^ w0[15:08];
|
sa10 <= text_in_r[119:112] ^ w0[23:16]; //sa10_mc_round2 ^ w0[23:16];
|
sa10 <= text_in_r[119:112] ^ w0[23:16]; //sa10_mc_round2 ^ w0[23:16];
|
sa00 <= text_in_r[127:120] ^ w0[31:24]; //sa00_mc_round2 ^ w0[31:24];
|
sa00 <= text_in_r[127:120] ^ w0[31:24]; //sa00_mc_round2 ^ w0[31:24];
|
|
|
end
|
end
|
|
|
|
|
//sbox lookup
|
//sbox lookup
|
aes_sbox us00( .a( sa00 ), .d( sa00_sub ));
|
aes_sbox us00( .a( sa00 ), .d( sa00_sub ));
|
aes_sbox us01( .a( sa01 ), .d( sa01_sub ));
|
aes_sbox us01( .a( sa01 ), .d( sa01_sub ));
|
aes_sbox us02( .a( sa02 ), .d( sa02_sub ));
|
aes_sbox us02( .a( sa02 ), .d( sa02_sub ));
|
aes_sbox us03( .a( sa03 ), .d( sa03_sub ));
|
aes_sbox us03( .a( sa03 ), .d( sa03_sub ));
|
aes_sbox us10( .a( sa10 ), .d( sa10_sub ));
|
aes_sbox us10( .a( sa10 ), .d( sa10_sub ));
|
aes_sbox us11( .a( sa11 ), .d( sa11_sub ));
|
aes_sbox us11( .a( sa11 ), .d( sa11_sub ));
|
aes_sbox us12( .a( sa12 ), .d( sa12_sub ));
|
aes_sbox us12( .a( sa12 ), .d( sa12_sub ));
|
aes_sbox us13( .a( sa13 ), .d( sa13_sub ));
|
aes_sbox us13( .a( sa13 ), .d( sa13_sub ));
|
aes_sbox us20( .a( sa20 ), .d( sa20_sub ));
|
aes_sbox us20( .a( sa20 ), .d( sa20_sub ));
|
aes_sbox us21( .a( sa21 ), .d( sa21_sub ));
|
aes_sbox us21( .a( sa21 ), .d( sa21_sub ));
|
aes_sbox us22( .a( sa22 ), .d( sa22_sub ));
|
aes_sbox us22( .a( sa22 ), .d( sa22_sub ));
|
aes_sbox us23( .a( sa23 ), .d( sa23_sub ));
|
aes_sbox us23( .a( sa23 ), .d( sa23_sub ));
|
aes_sbox us30( .a( sa30 ), .d( sa30_sub ));
|
aes_sbox us30( .a( sa30 ), .d( sa30_sub ));
|
aes_sbox us31( .a( sa31 ), .d( sa31_sub ));
|
aes_sbox us31( .a( sa31 ), .d( sa31_sub ));
|
aes_sbox us32( .a( sa32 ), .d( sa32_sub ));
|
aes_sbox us32( .a( sa32 ), .d( sa32_sub ));
|
aes_sbox us33( .a( sa33 ), .d( sa33_sub ));
|
aes_sbox us33( .a( sa33 ), .d( sa33_sub ));
|
|
|
//shift rows
|
//shift rows
|
|
|
assign sa00_sr = sa00_sub; //
|
assign sa00_sr = sa00_sub; //
|
assign sa01_sr = sa01_sub; //no shift
|
assign sa01_sr = sa01_sub; //no shift
|
assign sa02_sr = sa02_sub; //
|
assign sa02_sr = sa02_sub; //
|
assign sa03_sr = sa03_sub; //
|
assign sa03_sr = sa03_sub; //
|
|
|
assign sa10_sr = sa11_sub; //
|
assign sa10_sr = sa11_sub; //
|
assign sa11_sr = sa12_sub; // left shift by 1
|
assign sa11_sr = sa12_sub; // left shift by 1
|
assign sa12_sr = sa13_sub; //
|
assign sa12_sr = sa13_sub; //
|
assign sa13_sr = sa10_sub; //
|
assign sa13_sr = sa10_sub; //
|
|
|
assign sa20_sr = sa22_sub; //
|
assign sa20_sr = sa22_sub; //
|
assign sa21_sr = sa23_sub; // left shift by 2
|
assign sa21_sr = sa23_sub; // left shift by 2
|
assign sa22_sr = sa20_sub; //
|
assign sa22_sr = sa20_sub; //
|
assign sa23_sr = sa21_sub; //
|
assign sa23_sr = sa21_sub; //
|
|
|
assign sa30_sr = sa33_sub; //
|
assign sa30_sr = sa33_sub; //
|
assign sa31_sr = sa30_sub; // left shift by 3
|
assign sa31_sr = sa30_sub; // left shift by 3
|
assign sa32_sr = sa31_sub; //
|
assign sa32_sr = sa31_sub; //
|
assign sa33_sr = sa32_sub; //
|
assign sa33_sr = sa32_sub; //
|
|
|
// mix column operation
|
// mix column operation
|
assign {sa00_mc, sa10_mc, sa20_mc, sa30_mc} = mix_col(sa00_sr,sa10_sr,sa20_sr,sa30_sr);
|
assign {sa00_mc, sa10_mc, sa20_mc, sa30_mc} = mix_col(sa00_sr,sa10_sr,sa20_sr,sa30_sr);
|
assign {sa01_mc, sa11_mc, sa21_mc, sa31_mc} = mix_col(sa01_sr,sa11_sr,sa21_sr,sa31_sr);
|
assign {sa01_mc, sa11_mc, sa21_mc, sa31_mc} = mix_col(sa01_sr,sa11_sr,sa21_sr,sa31_sr);
|
assign {sa02_mc, sa12_mc, sa22_mc, sa32_mc} = mix_col(sa02_sr,sa12_sr,sa22_sr,sa32_sr);
|
assign {sa02_mc, sa12_mc, sa22_mc, sa32_mc} = mix_col(sa02_sr,sa12_sr,sa22_sr,sa32_sr);
|
assign {sa03_mc, sa13_mc, sa23_mc, sa33_mc} = mix_col(sa03_sr,sa13_sr,sa23_sr,sa33_sr);
|
assign {sa03_mc, sa13_mc, sa23_mc, sa33_mc} = mix_col(sa03_sr,sa13_sr,sa23_sr,sa33_sr);
|
|
|
//// add round key
|
//// add round key
|
assign sa00_next_round2 = sa00_mc ^ w4[31:24];
|
assign sa00_next_round2 = sa00_mc ^ w4[31:24];
|
assign sa01_next_round2 = sa01_mc ^ w5[31:24];
|
assign sa01_next_round2 = sa01_mc ^ w5[31:24];
|
assign sa02_next_round2 = sa02_mc ^ w6[31:24];
|
assign sa02_next_round2 = sa02_mc ^ w6[31:24];
|
assign sa03_next_round2 = sa03_mc ^ w7[31:24];
|
assign sa03_next_round2 = sa03_mc ^ w7[31:24];
|
assign sa10_next_round2 = sa10_mc ^ w4[23:16];
|
assign sa10_next_round2 = sa10_mc ^ w4[23:16];
|
assign sa11_next_round2 = sa11_mc ^ w5[23:16];
|
assign sa11_next_round2 = sa11_mc ^ w5[23:16];
|
assign sa12_next_round2 = sa12_mc ^ w6[23:16];
|
assign sa12_next_round2 = sa12_mc ^ w6[23:16];
|
assign sa13_next_round2 = sa13_mc ^ w7[23:16];
|
assign sa13_next_round2 = sa13_mc ^ w7[23:16];
|
assign sa20_next_round2 = sa20_mc ^ w4[15:08];
|
assign sa20_next_round2 = sa20_mc ^ w4[15:08];
|
assign sa21_next_round2 = sa21_mc ^ w5[15:08];
|
assign sa21_next_round2 = sa21_mc ^ w5[15:08];
|
assign sa22_next_round2 = sa22_mc ^ w6[15:08];
|
assign sa22_next_round2 = sa22_mc ^ w6[15:08];
|
assign sa23_next_round2 = sa23_mc ^ w7[15:08];
|
assign sa23_next_round2 = sa23_mc ^ w7[15:08];
|
assign sa30_next_round2 = sa30_mc ^ w4[07:00];
|
assign sa30_next_round2 = sa30_mc ^ w4[07:00];
|
assign sa31_next_round2 = sa31_mc ^ w5[07:00];
|
assign sa31_next_round2 = sa31_mc ^ w5[07:00];
|
assign sa32_next_round2 = sa32_mc ^ w6[07:00];
|
assign sa32_next_round2 = sa32_mc ^ w6[07:00];
|
assign sa33_next_round2 = sa33_mc ^ w7[07:00];
|
assign sa33_next_round2 = sa33_mc ^ w7[07:00];
|
|
|
|
|
|
|
always @(posedge clk)
|
always @(posedge clk)
|
begin
|
begin
|
text_out_stage1[127:120] <= sa00_next_round2;
|
text_out_stage1[127:120] <= sa00_next_round2;
|
text_out_stage1[095:088] <= sa01_next_round2;
|
text_out_stage1[095:088] <= sa01_next_round2;
|
text_out_stage1[063:056] <= sa02_next_round2;
|
text_out_stage1[063:056] <= sa02_next_round2;
|
text_out_stage1[031:024] <= sa03_next_round2;
|
text_out_stage1[031:024] <= sa03_next_round2;
|
text_out_stage1[119:112] <= sa10_next_round2;
|
text_out_stage1[119:112] <= sa10_next_round2;
|
text_out_stage1[087:080] <= sa11_next_round2;
|
text_out_stage1[087:080] <= sa11_next_round2;
|
text_out_stage1[055:048] <= sa12_next_round2;
|
text_out_stage1[055:048] <= sa12_next_round2;
|
text_out_stage1[023:016] <= sa13_next_round2;
|
text_out_stage1[023:016] <= sa13_next_round2;
|
text_out_stage1[111:104] <= sa20_next_round2;
|
text_out_stage1[111:104] <= sa20_next_round2;
|
text_out_stage1[079:072] <= sa21_next_round2;
|
text_out_stage1[079:072] <= sa21_next_round2;
|
text_out_stage1[047:040] <= sa22_next_round2;
|
text_out_stage1[047:040] <= sa22_next_round2;
|
text_out_stage1[015:008] <= sa23_next_round2;
|
text_out_stage1[015:008] <= sa23_next_round2;
|
text_out_stage1[103:096] <= sa30_next_round2;
|
text_out_stage1[103:096] <= sa30_next_round2;
|
text_out_stage1[071:064] <= sa31_next_round2;
|
text_out_stage1[071:064] <= sa31_next_round2;
|
text_out_stage1[039:032] <= sa32_next_round2;
|
text_out_stage1[039:032] <= sa32_next_round2;
|
text_out_stage1[007:000] <= sa33_next_round2;
|
text_out_stage1[007:000] <= sa33_next_round2;
|
|
|
end
|
end
|
|
|
|
|
|
|
////////////////////// round 2 //////////////////////////////////
|
////////////////////// round 2 //////////////////////////////////
|
|
|
//sbox lookup
|
//sbox lookup
|
aes_sbox us00_round2( .a(text_out_stage1[127:120] ), .d( sa00_sub_round2 ));
|
aes_sbox us00_round2( .a(text_out_stage1[127:120] ), .d( sa00_sub_round2 ));
|
aes_sbox us01_round2( .a(text_out_stage1[095:088] ), .d( sa01_sub_round2 ));
|
aes_sbox us01_round2( .a(text_out_stage1[095:088] ), .d( sa01_sub_round2 ));
|
aes_sbox us02_round2( .a(text_out_stage1[063:056] ), .d( sa02_sub_round2 ));
|
aes_sbox us02_round2( .a(text_out_stage1[063:056] ), .d( sa02_sub_round2 ));
|
aes_sbox us03_round2( .a(text_out_stage1[031:024] ), .d( sa03_sub_round2 ));
|
aes_sbox us03_round2( .a(text_out_stage1[031:024] ), .d( sa03_sub_round2 ));
|
aes_sbox us10_round2( .a(text_out_stage1[119:112] ), .d( sa10_sub_round2 ));
|
aes_sbox us10_round2( .a(text_out_stage1[119:112] ), .d( sa10_sub_round2 ));
|
aes_sbox us11_round2( .a(text_out_stage1[087:080] ), .d( sa11_sub_round2 ));
|
aes_sbox us11_round2( .a(text_out_stage1[087:080] ), .d( sa11_sub_round2 ));
|
aes_sbox us12_round2( .a(text_out_stage1[055:048] ), .d( sa12_sub_round2 ));
|
aes_sbox us12_round2( .a(text_out_stage1[055:048] ), .d( sa12_sub_round2 ));
|
aes_sbox us13_round2( .a(text_out_stage1[023:016] ), .d( sa13_sub_round2 ));
|
aes_sbox us13_round2( .a(text_out_stage1[023:016] ), .d( sa13_sub_round2 ));
|
aes_sbox us20_round2( .a(text_out_stage1[111:104] ), .d( sa20_sub_round2 ));
|
aes_sbox us20_round2( .a(text_out_stage1[111:104] ), .d( sa20_sub_round2 ));
|
aes_sbox us21_round2( .a(text_out_stage1[079:072] ), .d( sa21_sub_round2 ));
|
aes_sbox us21_round2( .a(text_out_stage1[079:072] ), .d( sa21_sub_round2 ));
|
aes_sbox us22_round2( .a(text_out_stage1[047:040] ), .d( sa22_sub_round2 ));
|
aes_sbox us22_round2( .a(text_out_stage1[047:040] ), .d( sa22_sub_round2 ));
|
aes_sbox us23_round2( .a(text_out_stage1[015:008] ), .d( sa23_sub_round2 ));
|
aes_sbox us23_round2( .a(text_out_stage1[015:008] ), .d( sa23_sub_round2 ));
|
aes_sbox us30_round2( .a(text_out_stage1[103:096] ), .d( sa30_sub_round2 ));
|
aes_sbox us30_round2( .a(text_out_stage1[103:096] ), .d( sa30_sub_round2 ));
|
aes_sbox us31_round2( .a(text_out_stage1[071:064] ), .d( sa31_sub_round2 ));
|
aes_sbox us31_round2( .a(text_out_stage1[071:064] ), .d( sa31_sub_round2 ));
|
aes_sbox us32_round2( .a(text_out_stage1[039:032] ), .d( sa32_sub_round2 ));
|
aes_sbox us32_round2( .a(text_out_stage1[039:032] ), .d( sa32_sub_round2 ));
|
aes_sbox us33_round2( .a(text_out_stage1[007:000] ), .d( sa33_sub_round2 ));
|
aes_sbox us33_round2( .a(text_out_stage1[007:000] ), .d( sa33_sub_round2 ));
|
|
|
//shift rows
|
//shift rows
|
|
|
assign sa00_sr_round2 = sa00_sub_round2; //
|
assign sa00_sr_round2 = sa00_sub_round2; //
|
assign sa01_sr_round2 = sa01_sub_round2; //no shift
|
assign sa01_sr_round2 = sa01_sub_round2; //no shift
|
assign sa02_sr_round2 = sa02_sub_round2; //
|
assign sa02_sr_round2 = sa02_sub_round2; //
|
assign sa03_sr_round2 = sa03_sub_round2; //
|
assign sa03_sr_round2 = sa03_sub_round2; //
|
|
|
assign sa10_sr_round2 = sa11_sub_round2; //
|
assign sa10_sr_round2 = sa11_sub_round2; //
|
assign sa11_sr_round2 = sa12_sub_round2; // left shift by 1
|
assign sa11_sr_round2 = sa12_sub_round2; // left shift by 1
|
assign sa12_sr_round2 = sa13_sub_round2; //
|
assign sa12_sr_round2 = sa13_sub_round2; //
|
assign sa13_sr_round2 = sa10_sub_round2; //
|
assign sa13_sr_round2 = sa10_sub_round2; //
|
|
|
assign sa20_sr_round2 = sa22_sub_round2; //
|
assign sa20_sr_round2 = sa22_sub_round2; //
|
assign sa21_sr_round2 = sa23_sub_round2; // left shift by 2
|
assign sa21_sr_round2 = sa23_sub_round2; // left shift by 2
|
assign sa22_sr_round2 = sa20_sub_round2; //
|
assign sa22_sr_round2 = sa20_sub_round2; //
|
assign sa23_sr_round2 = sa21_sub_round2; //
|
assign sa23_sr_round2 = sa21_sub_round2; //
|
|
|
assign sa30_sr_round2 = sa33_sub_round2; //
|
assign sa30_sr_round2 = sa33_sub_round2; //
|
assign sa31_sr_round2 = sa30_sub_round2; // left shift by 3
|
assign sa31_sr_round2 = sa30_sub_round2; // left shift by 3
|
assign sa32_sr_round2 = sa31_sub_round2; //
|
assign sa32_sr_round2 = sa31_sub_round2; //
|
assign sa33_sr_round2 = sa32_sub_round2; //
|
assign sa33_sr_round2 = sa32_sub_round2; //
|
|
|
// mix column operation
|
// mix column operation
|
assign {sa00_mc_round2, sa10_mc_round2, sa20_mc_round2, sa30_mc_round2} = mix_col(sa00_sr_round2,sa10_sr_round2,sa20_sr_round2,sa30_sr_round2);
|
assign {sa00_mc_round2, sa10_mc_round2, sa20_mc_round2, sa30_mc_round2} = mix_col(sa00_sr_round2,sa10_sr_round2,sa20_sr_round2,sa30_sr_round2);
|
assign {sa01_mc_round2, sa11_mc_round2, sa21_mc_round2, sa31_mc_round2} = mix_col(sa01_sr_round2,sa11_sr_round2,sa21_sr_round2,sa31_sr_round2);
|
assign {sa01_mc_round2, sa11_mc_round2, sa21_mc_round2, sa31_mc_round2} = mix_col(sa01_sr_round2,sa11_sr_round2,sa21_sr_round2,sa31_sr_round2);
|
assign {sa02_mc_round2, sa12_mc_round2, sa22_mc_round2, sa32_mc_round2} = mix_col(sa02_sr_round2,sa12_sr_round2,sa22_sr_round2,sa32_sr_round2);
|
assign {sa02_mc_round2, sa12_mc_round2, sa22_mc_round2, sa32_mc_round2} = mix_col(sa02_sr_round2,sa12_sr_round2,sa22_sr_round2,sa32_sr_round2);
|
assign {sa03_mc_round2, sa13_mc_round2, sa23_mc_round2, sa33_mc_round2} = mix_col(sa03_sr_round2,sa13_sr_round2,sa23_sr_round2,sa33_sr_round2);
|
assign {sa03_mc_round2, sa13_mc_round2, sa23_mc_round2, sa33_mc_round2} = mix_col(sa03_sr_round2,sa13_sr_round2,sa23_sr_round2,sa33_sr_round2);
|
|
|
//add round key
|
//add round key
|
assign sa33_next_round3 = sa33_mc_round2 ^ w11[07:00];
|
assign sa33_next_round3 = sa33_mc_round2 ^ w11[07:00];
|
assign sa23_next_round3 = sa23_mc_round2 ^ w11[15:08];
|
assign sa23_next_round3 = sa23_mc_round2 ^ w11[15:08];
|
assign sa13_next_round3 = sa13_mc_round2 ^ w11[23:16];
|
assign sa13_next_round3 = sa13_mc_round2 ^ w11[23:16];
|
assign sa03_next_round3 = sa03_mc_round2 ^ w11[31:24];
|
assign sa03_next_round3 = sa03_mc_round2 ^ w11[31:24];
|
assign sa32_next_round3 = sa32_mc_round2 ^ w10[07:00];
|
assign sa32_next_round3 = sa32_mc_round2 ^ w10[07:00];
|
assign sa22_next_round3 = sa22_mc_round2 ^ w10[15:08];
|
assign sa22_next_round3 = sa22_mc_round2 ^ w10[15:08];
|
assign sa12_next_round3 = sa12_mc_round2 ^ w10[23:16];
|
assign sa12_next_round3 = sa12_mc_round2 ^ w10[23:16];
|
assign sa02_next_round3 = sa02_mc_round2 ^ w10[31:24];
|
assign sa02_next_round3 = sa02_mc_round2 ^ w10[31:24];
|
assign sa31_next_round3 = sa31_mc_round2 ^ w9[07:00];
|
assign sa31_next_round3 = sa31_mc_round2 ^ w9[07:00];
|
assign sa21_next_round3 = sa21_mc_round2 ^ w9[15:08];
|
assign sa21_next_round3 = sa21_mc_round2 ^ w9[15:08];
|
assign sa11_next_round3 = sa11_mc_round2 ^ w9[23:16];
|
assign sa11_next_round3 = sa11_mc_round2 ^ w9[23:16];
|
assign sa01_next_round3 = sa01_mc_round2 ^ w9[31:24];
|
assign sa01_next_round3 = sa01_mc_round2 ^ w9[31:24];
|
assign sa30_next_round3 = sa30_mc_round2 ^ w8[07:00];
|
assign sa30_next_round3 = sa30_mc_round2 ^ w8[07:00];
|
assign sa20_next_round3 = sa20_mc_round2 ^ w8[15:08];
|
assign sa20_next_round3 = sa20_mc_round2 ^ w8[15:08];
|
assign sa10_next_round3 = sa10_mc_round2 ^ w8[23:16];
|
assign sa10_next_round3 = sa10_mc_round2 ^ w8[23:16];
|
assign sa00_next_round3 = sa00_mc_round2 ^ w8[31:24];
|
assign sa00_next_round3 = sa00_mc_round2 ^ w8[31:24];
|
|
|
|
|
|
|
always @(posedge clk)
|
always @(posedge clk)
|
begin
|
begin
|
text_out_stage2[127:120] <= sa00_next_round3;
|
text_out_stage2[127:120] <= sa00_next_round3;
|
text_out_stage2[095:088] <= sa01_next_round3;
|
text_out_stage2[095:088] <= sa01_next_round3;
|
text_out_stage2[063:056] <= sa02_next_round3;
|
text_out_stage2[063:056] <= sa02_next_round3;
|
text_out_stage2[031:024] <= sa03_next_round3;
|
text_out_stage2[031:024] <= sa03_next_round3;
|
text_out_stage2[119:112] <= sa10_next_round3;
|
text_out_stage2[119:112] <= sa10_next_round3;
|
text_out_stage2[087:080] <= sa11_next_round3;
|
text_out_stage2[087:080] <= sa11_next_round3;
|
text_out_stage2[055:048] <= sa12_next_round3;
|
text_out_stage2[055:048] <= sa12_next_round3;
|
text_out_stage2[023:016] <= sa13_next_round3;
|
text_out_stage2[023:016] <= sa13_next_round3;
|
text_out_stage2[111:104] <= sa20_next_round3;
|
text_out_stage2[111:104] <= sa20_next_round3;
|
text_out_stage2[079:072] <= sa21_next_round3;
|
text_out_stage2[079:072] <= sa21_next_round3;
|
text_out_stage2[047:040] <= sa22_next_round3;
|
text_out_stage2[047:040] <= sa22_next_round3;
|
text_out_stage2[015:008] <= sa23_next_round3;
|
text_out_stage2[015:008] <= sa23_next_round3;
|
text_out_stage2[103:096] <= sa30_next_round3;
|
text_out_stage2[103:096] <= sa30_next_round3;
|
text_out_stage2[071:064] <= sa31_next_round3;
|
text_out_stage2[071:064] <= sa31_next_round3;
|
text_out_stage2[039:032] <= sa32_next_round3;
|
text_out_stage2[039:032] <= sa32_next_round3;
|
text_out_stage2[007:000] <= sa33_next_round3;
|
text_out_stage2[007:000] <= sa33_next_round3;
|
|
|
end
|
end
|
|
|
|
|
|
|
////////////////////// round 3 //////////////////////////////////
|
////////////////////// round 3 //////////////////////////////////
|
|
|
//sbox lookup
|
//sbox lookup
|
aes_sbox us00_round3( .a(text_out_stage2[127:120] ), .d( sa00_sub_round3 ));
|
aes_sbox us00_round3( .a(text_out_stage2[127:120] ), .d( sa00_sub_round3 ));
|
aes_sbox us01_round3( .a(text_out_stage2[095:088] ), .d( sa01_sub_round3 ));
|
aes_sbox us01_round3( .a(text_out_stage2[095:088] ), .d( sa01_sub_round3 ));
|
aes_sbox us02_round3( .a(text_out_stage2[063:056] ), .d( sa02_sub_round3 ));
|
aes_sbox us02_round3( .a(text_out_stage2[063:056] ), .d( sa02_sub_round3 ));
|
aes_sbox us03_round3( .a(text_out_stage2[031:024] ), .d( sa03_sub_round3 ));
|
aes_sbox us03_round3( .a(text_out_stage2[031:024] ), .d( sa03_sub_round3 ));
|
aes_sbox us10_round3( .a(text_out_stage2[119:112] ), .d( sa10_sub_round3 ));
|
aes_sbox us10_round3( .a(text_out_stage2[119:112] ), .d( sa10_sub_round3 ));
|
aes_sbox us11_round3( .a(text_out_stage2[087:080] ), .d( sa11_sub_round3 ));
|
aes_sbox us11_round3( .a(text_out_stage2[087:080] ), .d( sa11_sub_round3 ));
|
aes_sbox us12_round3( .a(text_out_stage2[055:048] ), .d( sa12_sub_round3 ));
|
aes_sbox us12_round3( .a(text_out_stage2[055:048] ), .d( sa12_sub_round3 ));
|
aes_sbox us13_round3( .a(text_out_stage2[023:016] ), .d( sa13_sub_round3 ));
|
aes_sbox us13_round3( .a(text_out_stage2[023:016] ), .d( sa13_sub_round3 ));
|
aes_sbox us20_round3( .a(text_out_stage2[111:104] ), .d( sa20_sub_round3 ));
|
aes_sbox us20_round3( .a(text_out_stage2[111:104] ), .d( sa20_sub_round3 ));
|
aes_sbox us21_round3( .a(text_out_stage2[079:072] ), .d( sa21_sub_round3 ));
|
aes_sbox us21_round3( .a(text_out_stage2[079:072] ), .d( sa21_sub_round3 ));
|
aes_sbox us22_round3( .a(text_out_stage2[047:040] ), .d( sa22_sub_round3 ));
|
aes_sbox us22_round3( .a(text_out_stage2[047:040] ), .d( sa22_sub_round3 ));
|
aes_sbox us23_round3( .a(text_out_stage2[015:008] ), .d( sa23_sub_round3 ));
|
aes_sbox us23_round3( .a(text_out_stage2[015:008] ), .d( sa23_sub_round3 ));
|
aes_sbox us30_round3( .a(text_out_stage2[103:096] ), .d( sa30_sub_round3 ));
|
aes_sbox us30_round3( .a(text_out_stage2[103:096] ), .d( sa30_sub_round3 ));
|
aes_sbox us31_round3( .a(text_out_stage2[071:064] ), .d( sa31_sub_round3 ));
|
aes_sbox us31_round3( .a(text_out_stage2[071:064] ), .d( sa31_sub_round3 ));
|
aes_sbox us32_round3( .a(text_out_stage2[039:032] ), .d( sa32_sub_round3 ));
|
aes_sbox us32_round3( .a(text_out_stage2[039:032] ), .d( sa32_sub_round3 ));
|
aes_sbox us33_round3( .a(text_out_stage2[007:000] ), .d( sa33_sub_round3 ));
|
aes_sbox us33_round3( .a(text_out_stage2[007:000] ), .d( sa33_sub_round3 ));
|
|
|
|
|
|
|
//shift rows
|
//shift rows
|
|
|
assign sa00_sr_round3 = sa00_sub_round3; //
|
assign sa00_sr_round3 = sa00_sub_round3; //
|
assign sa01_sr_round3 = sa01_sub_round3; //no shift
|
assign sa01_sr_round3 = sa01_sub_round3; //no shift
|
assign sa02_sr_round3 = sa02_sub_round3; //
|
assign sa02_sr_round3 = sa02_sub_round3; //
|
assign sa03_sr_round3 = sa03_sub_round3; //
|
assign sa03_sr_round3 = sa03_sub_round3; //
|
|
|
assign sa10_sr_round3 = sa11_sub_round3; //
|
assign sa10_sr_round3 = sa11_sub_round3; //
|
assign sa11_sr_round3 = sa12_sub_round3; // left shift by 1
|
assign sa11_sr_round3 = sa12_sub_round3; // left shift by 1
|
assign sa12_sr_round3 = sa13_sub_round3; //
|
assign sa12_sr_round3 = sa13_sub_round3; //
|
assign sa13_sr_round3 = sa10_sub_round3; //
|
assign sa13_sr_round3 = sa10_sub_round3; //
|
|
|
assign sa20_sr_round3 = sa22_sub_round3; //
|
assign sa20_sr_round3 = sa22_sub_round3; //
|
assign sa21_sr_round3 = sa23_sub_round3; // left shift by 2
|
assign sa21_sr_round3 = sa23_sub_round3; // left shift by 2
|
assign sa22_sr_round3 = sa20_sub_round3; //
|
assign sa22_sr_round3 = sa20_sub_round3; //
|
assign sa23_sr_round3 = sa21_sub_round3; //
|
assign sa23_sr_round3 = sa21_sub_round3; //
|
|
|
assign sa30_sr_round3 = sa33_sub_round3; //
|
assign sa30_sr_round3 = sa33_sub_round3; //
|
assign sa31_sr_round3 = sa30_sub_round3; // left shift by 3
|
assign sa31_sr_round3 = sa30_sub_round3; // left shift by 3
|
assign sa32_sr_round3 = sa31_sub_round3; //
|
assign sa32_sr_round3 = sa31_sub_round3; //
|
assign sa33_sr_round3 = sa32_sub_round3; //
|
assign sa33_sr_round3 = sa32_sub_round3; //
|
|
|
// mix column operation
|
// mix column operation
|
assign {sa00_mc_round3, sa10_mc_round3, sa20_mc_round3, sa30_mc_round3} = mix_col(sa00_sr_round3,sa10_sr_round3,sa20_sr_round3,sa30_sr_round3);
|
assign {sa00_mc_round3, sa10_mc_round3, sa20_mc_round3, sa30_mc_round3} = mix_col(sa00_sr_round3,sa10_sr_round3,sa20_sr_round3,sa30_sr_round3);
|
assign {sa01_mc_round3, sa11_mc_round3, sa21_mc_round3, sa31_mc_round3} = mix_col(sa01_sr_round3,sa11_sr_round3,sa21_sr_round3,sa31_sr_round3);
|
assign {sa01_mc_round3, sa11_mc_round3, sa21_mc_round3, sa31_mc_round3} = mix_col(sa01_sr_round3,sa11_sr_round3,sa21_sr_round3,sa31_sr_round3);
|
assign {sa02_mc_round3, sa12_mc_round3, sa22_mc_round3, sa32_mc_round3} = mix_col(sa02_sr_round3,sa12_sr_round3,sa22_sr_round3,sa32_sr_round3);
|
assign {sa02_mc_round3, sa12_mc_round3, sa22_mc_round3, sa32_mc_round3} = mix_col(sa02_sr_round3,sa12_sr_round3,sa22_sr_round3,sa32_sr_round3);
|
assign {sa03_mc_round3, sa13_mc_round3, sa23_mc_round3, sa33_mc_round3} = mix_col(sa03_sr_round3,sa13_sr_round3,sa23_sr_round3,sa33_sr_round3);
|
assign {sa03_mc_round3, sa13_mc_round3, sa23_mc_round3, sa33_mc_round3} = mix_col(sa03_sr_round3,sa13_sr_round3,sa23_sr_round3,sa33_sr_round3);
|
|
|
|
|
//add round key
|
//add round key
|
assign sa33_next_round4 = sa33_mc_round3 ^ w15[07:00];
|
assign sa33_next_round4 = sa33_mc_round3 ^ w15[07:00];
|
assign sa23_next_round4 = sa23_mc_round3 ^ w15[15:08];
|
assign sa23_next_round4 = sa23_mc_round3 ^ w15[15:08];
|
assign sa13_next_round4 = sa13_mc_round3 ^ w15[23:16];
|
assign sa13_next_round4 = sa13_mc_round3 ^ w15[23:16];
|
assign sa03_next_round4 = sa03_mc_round3 ^ w15[31:24];
|
assign sa03_next_round4 = sa03_mc_round3 ^ w15[31:24];
|
assign sa32_next_round4 = sa32_mc_round3 ^ w14[07:00];
|
assign sa32_next_round4 = sa32_mc_round3 ^ w14[07:00];
|
assign sa22_next_round4 = sa22_mc_round3 ^ w14[15:08];
|
assign sa22_next_round4 = sa22_mc_round3 ^ w14[15:08];
|
assign sa12_next_round4 = sa12_mc_round3 ^ w14[23:16];
|
assign sa12_next_round4 = sa12_mc_round3 ^ w14[23:16];
|
assign sa02_next_round4 = sa02_mc_round3 ^ w14[31:24];
|
assign sa02_next_round4 = sa02_mc_round3 ^ w14[31:24];
|
assign sa31_next_round4 = sa31_mc_round3 ^ w13[07:00];
|
assign sa31_next_round4 = sa31_mc_round3 ^ w13[07:00];
|
assign sa21_next_round4 = sa21_mc_round3 ^ w13[15:08];
|
assign sa21_next_round4 = sa21_mc_round3 ^ w13[15:08];
|
assign sa11_next_round4 = sa11_mc_round3 ^ w13[23:16];
|
assign sa11_next_round4 = sa11_mc_round3 ^ w13[23:16];
|
assign sa01_next_round4 = sa01_mc_round3 ^ w13[31:24];
|
assign sa01_next_round4 = sa01_mc_round3 ^ w13[31:24];
|
assign sa30_next_round4 = sa30_mc_round3 ^ w12[07:00];
|
assign sa30_next_round4 = sa30_mc_round3 ^ w12[07:00];
|
assign sa20_next_round4 = sa20_mc_round3 ^ w12[15:08];
|
assign sa20_next_round4 = sa20_mc_round3 ^ w12[15:08];
|
assign sa10_next_round4 = sa10_mc_round3 ^ w12[23:16];
|
assign sa10_next_round4 = sa10_mc_round3 ^ w12[23:16];
|
assign sa00_next_round4 = sa00_mc_round3 ^ w12[31:24];
|
assign sa00_next_round4 = sa00_mc_round3 ^ w12[31:24];
|
|
|
|
|
always @(posedge clk)
|
always @(posedge clk)
|
begin
|
begin
|
text_out_stage3[127:120] <= sa00_next_round4;
|
text_out_stage3[127:120] <= sa00_next_round4;
|
text_out_stage3[095:088] <= sa01_next_round4;
|
text_out_stage3[095:088] <= sa01_next_round4;
|
text_out_stage3[063:056] <= sa02_next_round4;
|
text_out_stage3[063:056] <= sa02_next_round4;
|
text_out_stage3[031:024] <= sa03_next_round4;
|
text_out_stage3[031:024] <= sa03_next_round4;
|
text_out_stage3[119:112] <= sa10_next_round4;
|
text_out_stage3[119:112] <= sa10_next_round4;
|
text_out_stage3[087:080] <= sa11_next_round4;
|
text_out_stage3[087:080] <= sa11_next_round4;
|
text_out_stage3[055:048] <= sa12_next_round4;
|
text_out_stage3[055:048] <= sa12_next_round4;
|
text_out_stage3[023:016] <= sa13_next_round4;
|
text_out_stage3[023:016] <= sa13_next_round4;
|
text_out_stage3[111:104] <= sa20_next_round4;
|
text_out_stage3[111:104] <= sa20_next_round4;
|
text_out_stage3[079:072] <= sa21_next_round4;
|
text_out_stage3[079:072] <= sa21_next_round4;
|
text_out_stage3[047:040] <= sa22_next_round4;
|
text_out_stage3[047:040] <= sa22_next_round4;
|
text_out_stage3[015:008] <= sa23_next_round4;
|
text_out_stage3[015:008] <= sa23_next_round4;
|
text_out_stage3[103:096] <= sa30_next_round4;
|
text_out_stage3[103:096] <= sa30_next_round4;
|
text_out_stage3[071:064] <= sa31_next_round4;
|
text_out_stage3[071:064] <= sa31_next_round4;
|
text_out_stage3[039:032] <= sa32_next_round4;
|
text_out_stage3[039:032] <= sa32_next_round4;
|
text_out_stage3[007:000] <= sa33_next_round4;
|
text_out_stage3[007:000] <= sa33_next_round4;
|
|
|
end
|
end
|
|
|
|
|
|
|
////////////////////// round 4 //////////////////////////////////
|
////////////////////// round 4 //////////////////////////////////
|
|
|
//sbox lookup
|
//sbox lookup
|
aes_sbox us00_round4( .a(text_out_stage3[127:120] ), .d( sa00_sub_round4 ));
|
aes_sbox us00_round4( .a(text_out_stage3[127:120] ), .d( sa00_sub_round4 ));
|
aes_sbox us01_round4( .a(text_out_stage3[095:088] ), .d( sa01_sub_round4 ));
|
aes_sbox us01_round4( .a(text_out_stage3[095:088] ), .d( sa01_sub_round4 ));
|
aes_sbox us02_round4( .a(text_out_stage3[063:056] ), .d( sa02_sub_round4 ));
|
aes_sbox us02_round4( .a(text_out_stage3[063:056] ), .d( sa02_sub_round4 ));
|
aes_sbox us03_round4( .a(text_out_stage3[031:024] ), .d( sa03_sub_round4 ));
|
aes_sbox us03_round4( .a(text_out_stage3[031:024] ), .d( sa03_sub_round4 ));
|
aes_sbox us10_round4( .a(text_out_stage3[119:112] ), .d( sa10_sub_round4 ));
|
aes_sbox us10_round4( .a(text_out_stage3[119:112] ), .d( sa10_sub_round4 ));
|
aes_sbox us11_round4( .a(text_out_stage3[087:080] ), .d( sa11_sub_round4 ));
|
aes_sbox us11_round4( .a(text_out_stage3[087:080] ), .d( sa11_sub_round4 ));
|
aes_sbox us12_round4( .a(text_out_stage3[055:048] ), .d( sa12_sub_round4 ));
|
aes_sbox us12_round4( .a(text_out_stage3[055:048] ), .d( sa12_sub_round4 ));
|
aes_sbox us13_round4( .a(text_out_stage3[023:016] ), .d( sa13_sub_round4 ));
|
aes_sbox us13_round4( .a(text_out_stage3[023:016] ), .d( sa13_sub_round4 ));
|
aes_sbox us20_round4( .a(text_out_stage3[111:104] ), .d( sa20_sub_round4 ));
|
aes_sbox us20_round4( .a(text_out_stage3[111:104] ), .d( sa20_sub_round4 ));
|
aes_sbox us21_round4( .a(text_out_stage3[079:072] ), .d( sa21_sub_round4 ));
|
aes_sbox us21_round4( .a(text_out_stage3[079:072] ), .d( sa21_sub_round4 ));
|
aes_sbox us22_round4( .a(text_out_stage3[047:040] ), .d( sa22_sub_round4 ));
|
aes_sbox us22_round4( .a(text_out_stage3[047:040] ), .d( sa22_sub_round4 ));
|
aes_sbox us23_round4( .a(text_out_stage3[015:008] ), .d( sa23_sub_round4 ));
|
aes_sbox us23_round4( .a(text_out_stage3[015:008] ), .d( sa23_sub_round4 ));
|
aes_sbox us30_round4( .a(text_out_stage3[103:096] ), .d( sa30_sub_round4 ));
|
aes_sbox us30_round4( .a(text_out_stage3[103:096] ), .d( sa30_sub_round4 ));
|
aes_sbox us31_round4( .a(text_out_stage3[071:064] ), .d( sa31_sub_round4 ));
|
aes_sbox us31_round4( .a(text_out_stage3[071:064] ), .d( sa31_sub_round4 ));
|
aes_sbox us32_round4( .a(text_out_stage3[039:032] ), .d( sa32_sub_round4 ));
|
aes_sbox us32_round4( .a(text_out_stage3[039:032] ), .d( sa32_sub_round4 ));
|
aes_sbox us33_round4( .a(text_out_stage3[007:000] ), .d( sa33_sub_round4 ));
|
aes_sbox us33_round4( .a(text_out_stage3[007:000] ), .d( sa33_sub_round4 ));
|
|
|
|
|
//shift rows
|
//shift rows
|
|
|
assign sa00_sr_round4 = sa00_sub_round4; //
|
assign sa00_sr_round4 = sa00_sub_round4; //
|
assign sa01_sr_round4 = sa01_sub_round4; //no shift
|
assign sa01_sr_round4 = sa01_sub_round4; //no shift
|
assign sa02_sr_round4 = sa02_sub_round4; //
|
assign sa02_sr_round4 = sa02_sub_round4; //
|
assign sa03_sr_round4 = sa03_sub_round4; //
|
assign sa03_sr_round4 = sa03_sub_round4; //
|
|
|
assign sa10_sr_round4 = sa11_sub_round4; //
|
assign sa10_sr_round4 = sa11_sub_round4; //
|
assign sa11_sr_round4 = sa12_sub_round4; // left shift by 1
|
assign sa11_sr_round4 = sa12_sub_round4; // left shift by 1
|
assign sa12_sr_round4 = sa13_sub_round4; //
|
assign sa12_sr_round4 = sa13_sub_round4; //
|
assign sa13_sr_round4 = sa10_sub_round4; //
|
assign sa13_sr_round4 = sa10_sub_round4; //
|
|
|
assign sa20_sr_round4 = sa22_sub_round4; //
|
assign sa20_sr_round4 = sa22_sub_round4; //
|
assign sa21_sr_round4 = sa23_sub_round4; // left shift by 2
|
assign sa21_sr_round4 = sa23_sub_round4; // left shift by 2
|
assign sa22_sr_round4 = sa20_sub_round4; //
|
assign sa22_sr_round4 = sa20_sub_round4; //
|
assign sa23_sr_round4 = sa21_sub_round4; //
|
assign sa23_sr_round4 = sa21_sub_round4; //
|
|
|
assign sa30_sr_round4 = sa33_sub_round4; //
|
assign sa30_sr_round4 = sa33_sub_round4; //
|
assign sa31_sr_round4 = sa30_sub_round4; // left shift by 3
|
assign sa31_sr_round4 = sa30_sub_round4; // left shift by 3
|
assign sa32_sr_round4 = sa31_sub_round4; //
|
assign sa32_sr_round4 = sa31_sub_round4; //
|
assign sa33_sr_round4 = sa32_sub_round4; //
|
assign sa33_sr_round4 = sa32_sub_round4; //
|
|
|
// mix column operation
|
// mix column operation
|
assign {sa00_mc_round4, sa10_mc_round4, sa20_mc_round4, sa30_mc_round4} = mix_col(sa00_sr_round4,sa10_sr_round4,sa20_sr_round4,sa30_sr_round4);
|
assign {sa00_mc_round4, sa10_mc_round4, sa20_mc_round4, sa30_mc_round4} = mix_col(sa00_sr_round4,sa10_sr_round4,sa20_sr_round4,sa30_sr_round4);
|
assign {sa01_mc_round4, sa11_mc_round4, sa21_mc_round4, sa31_mc_round4} = mix_col(sa01_sr_round4,sa11_sr_round4,sa21_sr_round4,sa31_sr_round4);
|
assign {sa01_mc_round4, sa11_mc_round4, sa21_mc_round4, sa31_mc_round4} = mix_col(sa01_sr_round4,sa11_sr_round4,sa21_sr_round4,sa31_sr_round4);
|
assign {sa02_mc_round4, sa12_mc_round4, sa22_mc_round4, sa32_mc_round4} = mix_col(sa02_sr_round4,sa12_sr_round4,sa22_sr_round4,sa32_sr_round4);
|
assign {sa02_mc_round4, sa12_mc_round4, sa22_mc_round4, sa32_mc_round4} = mix_col(sa02_sr_round4,sa12_sr_round4,sa22_sr_round4,sa32_sr_round4);
|
assign {sa03_mc_round4, sa13_mc_round4, sa23_mc_round4, sa33_mc_round4} = mix_col(sa03_sr_round4,sa13_sr_round4,sa23_sr_round4,sa33_sr_round4);
|
assign {sa03_mc_round4, sa13_mc_round4, sa23_mc_round4, sa33_mc_round4} = mix_col(sa03_sr_round4,sa13_sr_round4,sa23_sr_round4,sa33_sr_round4);
|
|
|
|
|
//add round key
|
//add round key
|
assign sa33_next_round5 = sa33_mc_round4 ^ w19[07:00];
|
assign sa33_next_round5 = sa33_mc_round4 ^ w19[07:00];
|
assign sa23_next_round5 = sa23_mc_round4 ^ w19[15:08];
|
assign sa23_next_round5 = sa23_mc_round4 ^ w19[15:08];
|
assign sa13_next_round5 = sa13_mc_round4 ^ w19[23:16];
|
assign sa13_next_round5 = sa13_mc_round4 ^ w19[23:16];
|
assign sa03_next_round5 = sa03_mc_round4 ^ w19[31:24];
|
assign sa03_next_round5 = sa03_mc_round4 ^ w19[31:24];
|
assign sa32_next_round5 = sa32_mc_round4 ^ w18[07:00];
|
assign sa32_next_round5 = sa32_mc_round4 ^ w18[07:00];
|
assign sa22_next_round5 = sa22_mc_round4 ^ w18[15:08];
|
assign sa22_next_round5 = sa22_mc_round4 ^ w18[15:08];
|
assign sa12_next_round5 = sa12_mc_round4 ^ w18[23:16];
|
assign sa12_next_round5 = sa12_mc_round4 ^ w18[23:16];
|
assign sa02_next_round5 = sa02_mc_round4 ^ w18[31:24];
|
assign sa02_next_round5 = sa02_mc_round4 ^ w18[31:24];
|
assign sa31_next_round5 = sa31_mc_round4 ^ w17[07:00];
|
assign sa31_next_round5 = sa31_mc_round4 ^ w17[07:00];
|
assign sa21_next_round5 = sa21_mc_round4 ^ w17[15:08];
|
assign sa21_next_round5 = sa21_mc_round4 ^ w17[15:08];
|
assign sa11_next_round5 = sa11_mc_round4 ^ w17[23:16];
|
assign sa11_next_round5 = sa11_mc_round4 ^ w17[23:16];
|
assign sa01_next_round5 = sa01_mc_round4 ^ w17[31:24];
|
assign sa01_next_round5 = sa01_mc_round4 ^ w17[31:24];
|
assign sa30_next_round5 = sa30_mc_round4 ^ w16[07:00];
|
assign sa30_next_round5 = sa30_mc_round4 ^ w16[07:00];
|
assign sa20_next_round5 = sa20_mc_round4 ^ w16[15:08];
|
assign sa20_next_round5 = sa20_mc_round4 ^ w16[15:08];
|
assign sa10_next_round5 = sa10_mc_round4 ^ w16[23:16];
|
assign sa10_next_round5 = sa10_mc_round4 ^ w16[23:16];
|
assign sa00_next_round5 = sa00_mc_round4 ^ w16[31:24];
|
assign sa00_next_round5 = sa00_mc_round4 ^ w16[31:24];
|
|
|
|
|
always @(posedge clk)
|
always @(posedge clk)
|
begin
|
begin
|
text_out_stage4[127:120] <= sa00_next_round5;
|
text_out_stage4[127:120] <= sa00_next_round5;
|
text_out_stage4[095:088] <= sa01_next_round5;
|
text_out_stage4[095:088] <= sa01_next_round5;
|
text_out_stage4[063:056] <= sa02_next_round5;
|
text_out_stage4[063:056] <= sa02_next_round5;
|
text_out_stage4[031:024] <= sa03_next_round5;
|
text_out_stage4[031:024] <= sa03_next_round5;
|
text_out_stage4[119:112] <= sa10_next_round5;
|
text_out_stage4[119:112] <= sa10_next_round5;
|
text_out_stage4[087:080] <= sa11_next_round5;
|
text_out_stage4[087:080] <= sa11_next_round5;
|
text_out_stage4[055:048] <= sa12_next_round5;
|
text_out_stage4[055:048] <= sa12_next_round5;
|
text_out_stage4[023:016] <= sa13_next_round5;
|
text_out_stage4[023:016] <= sa13_next_round5;
|
text_out_stage4[111:104] <= sa20_next_round5;
|
text_out_stage4[111:104] <= sa20_next_round5;
|
text_out_stage4[079:072] <= sa21_next_round5;
|
text_out_stage4[079:072] <= sa21_next_round5;
|
text_out_stage4[047:040] <= sa22_next_round5;
|
text_out_stage4[047:040] <= sa22_next_round5;
|
text_out_stage4[015:008] <= sa23_next_round5;
|
text_out_stage4[015:008] <= sa23_next_round5;
|
text_out_stage4[103:096] <= sa30_next_round5;
|
text_out_stage4[103:096] <= sa30_next_round5;
|
text_out_stage4[071:064] <= sa31_next_round5;
|
text_out_stage4[071:064] <= sa31_next_round5;
|
text_out_stage4[039:032] <= sa32_next_round5;
|
text_out_stage4[039:032] <= sa32_next_round5;
|
text_out_stage4[007:000] <= sa33_next_round5;
|
text_out_stage4[007:000] <= sa33_next_round5;
|
|
|
end
|
end
|
|
|
|
|
|
|
////////////////////// round 5 //////////////////////////////////
|
////////////////////// round 5 //////////////////////////////////
|
|
|
//sbox lookup
|
//sbox lookup
|
aes_sbox us00_round5( .a(text_out_stage4[127:120] ), .d( sa00_sub_round5 ));
|
aes_sbox us00_round5( .a(text_out_stage4[127:120] ), .d( sa00_sub_round5 ));
|
aes_sbox us01_round5( .a(text_out_stage4[095:088] ), .d( sa01_sub_round5 ));
|
aes_sbox us01_round5( .a(text_out_stage4[095:088] ), .d( sa01_sub_round5 ));
|
aes_sbox us02_round5( .a(text_out_stage4[063:056] ), .d( sa02_sub_round5 ));
|
aes_sbox us02_round5( .a(text_out_stage4[063:056] ), .d( sa02_sub_round5 ));
|
aes_sbox us03_round5( .a(text_out_stage4[031:024] ), .d( sa03_sub_round5 ));
|
aes_sbox us03_round5( .a(text_out_stage4[031:024] ), .d( sa03_sub_round5 ));
|
aes_sbox us10_round5( .a(text_out_stage4[119:112] ), .d( sa10_sub_round5 ));
|
aes_sbox us10_round5( .a(text_out_stage4[119:112] ), .d( sa10_sub_round5 ));
|
aes_sbox us11_round5( .a(text_out_stage4[087:080] ), .d( sa11_sub_round5 ));
|
aes_sbox us11_round5( .a(text_out_stage4[087:080] ), .d( sa11_sub_round5 ));
|
aes_sbox us12_round5( .a(text_out_stage4[055:048] ), .d( sa12_sub_round5 ));
|
aes_sbox us12_round5( .a(text_out_stage4[055:048] ), .d( sa12_sub_round5 ));
|
aes_sbox us13_round5( .a(text_out_stage4[023:016] ), .d( sa13_sub_round5 ));
|
aes_sbox us13_round5( .a(text_out_stage4[023:016] ), .d( sa13_sub_round5 ));
|
aes_sbox us20_round5( .a(text_out_stage4[111:104] ), .d( sa20_sub_round5 ));
|
aes_sbox us20_round5( .a(text_out_stage4[111:104] ), .d( sa20_sub_round5 ));
|
aes_sbox us21_round5( .a(text_out_stage4[079:072] ), .d( sa21_sub_round5 ));
|
aes_sbox us21_round5( .a(text_out_stage4[079:072] ), .d( sa21_sub_round5 ));
|
aes_sbox us22_round5( .a(text_out_stage4[047:040] ), .d( sa22_sub_round5 ));
|
aes_sbox us22_round5( .a(text_out_stage4[047:040] ), .d( sa22_sub_round5 ));
|
aes_sbox us23_round5( .a(text_out_stage4[015:008] ), .d( sa23_sub_round5 ));
|
aes_sbox us23_round5( .a(text_out_stage4[015:008] ), .d( sa23_sub_round5 ));
|
aes_sbox us30_round5( .a(text_out_stage4[103:096] ), .d( sa30_sub_round5 ));
|
aes_sbox us30_round5( .a(text_out_stage4[103:096] ), .d( sa30_sub_round5 ));
|
aes_sbox us31_round5( .a(text_out_stage4[071:064] ), .d( sa31_sub_round5 ));
|
aes_sbox us31_round5( .a(text_out_stage4[071:064] ), .d( sa31_sub_round5 ));
|
aes_sbox us32_round5( .a(text_out_stage4[039:032] ), .d( sa32_sub_round5 ));
|
aes_sbox us32_round5( .a(text_out_stage4[039:032] ), .d( sa32_sub_round5 ));
|
aes_sbox us33_round5( .a(text_out_stage4[007:000] ), .d( sa33_sub_round5 ));
|
aes_sbox us33_round5( .a(text_out_stage4[007:000] ), .d( sa33_sub_round5 ));
|
|
|
|
|
|
|
|
|
|
|
//shift rows
|
//shift rows
|
|
|
assign sa00_sr_round5 = sa00_sub_round5; //
|
assign sa00_sr_round5 = sa00_sub_round5; //
|
assign sa01_sr_round5 = sa01_sub_round5; //no shift
|
assign sa01_sr_round5 = sa01_sub_round5; //no shift
|
assign sa02_sr_round5 = sa02_sub_round5; //
|
assign sa02_sr_round5 = sa02_sub_round5; //
|
assign sa03_sr_round5 = sa03_sub_round5; //
|
assign sa03_sr_round5 = sa03_sub_round5; //
|
|
|
assign sa10_sr_round5 = sa11_sub_round5; //
|
assign sa10_sr_round5 = sa11_sub_round5; //
|
assign sa11_sr_round5 = sa12_sub_round5; // left shift by 1
|
assign sa11_sr_round5 = sa12_sub_round5; // left shift by 1
|
assign sa12_sr_round5 = sa13_sub_round5; //
|
assign sa12_sr_round5 = sa13_sub_round5; //
|
assign sa13_sr_round5 = sa10_sub_round5; //
|
assign sa13_sr_round5 = sa10_sub_round5; //
|
|
|
assign sa20_sr_round5 = sa22_sub_round5; //
|
assign sa20_sr_round5 = sa22_sub_round5; //
|
assign sa21_sr_round5 = sa23_sub_round5; // left shift by 2
|
assign sa21_sr_round5 = sa23_sub_round5; // left shift by 2
|
assign sa22_sr_round5 = sa20_sub_round5; //
|
assign sa22_sr_round5 = sa20_sub_round5; //
|
assign sa23_sr_round5 = sa21_sub_round5; //
|
assign sa23_sr_round5 = sa21_sub_round5; //
|
|
|
assign sa30_sr_round5 = sa33_sub_round5; //
|
assign sa30_sr_round5 = sa33_sub_round5; //
|
assign sa31_sr_round5 = sa30_sub_round5; // left shift by 3
|
assign sa31_sr_round5 = sa30_sub_round5; // left shift by 3
|
assign sa32_sr_round5 = sa31_sub_round5; //
|
assign sa32_sr_round5 = sa31_sub_round5; //
|
assign sa33_sr_round5 = sa32_sub_round5; //
|
assign sa33_sr_round5 = sa32_sub_round5; //
|
|
|
// mix column operation
|
// mix column operation
|
assign {sa00_mc_round5, sa10_mc_round5, sa20_mc_round5, sa30_mc_round5} = mix_col(sa00_sr_round5,sa10_sr_round5,sa20_sr_round5,sa30_sr_round5);
|
assign {sa00_mc_round5, sa10_mc_round5, sa20_mc_round5, sa30_mc_round5} = mix_col(sa00_sr_round5,sa10_sr_round5,sa20_sr_round5,sa30_sr_round5);
|
assign {sa01_mc_round5, sa11_mc_round5, sa21_mc_round5, sa31_mc_round5} = mix_col(sa01_sr_round5,sa11_sr_round5,sa21_sr_round5,sa31_sr_round5);
|
assign {sa01_mc_round5, sa11_mc_round5, sa21_mc_round5, sa31_mc_round5} = mix_col(sa01_sr_round5,sa11_sr_round5,sa21_sr_round5,sa31_sr_round5);
|
assign {sa02_mc_round5, sa12_mc_round5, sa22_mc_round5, sa32_mc_round5} = mix_col(sa02_sr_round5,sa12_sr_round5,sa22_sr_round5,sa32_sr_round5);
|
assign {sa02_mc_round5, sa12_mc_round5, sa22_mc_round5, sa32_mc_round5} = mix_col(sa02_sr_round5,sa12_sr_round5,sa22_sr_round5,sa32_sr_round5);
|
assign {sa03_mc_round5, sa13_mc_round5, sa23_mc_round5, sa33_mc_round5} = mix_col(sa03_sr_round5,sa13_sr_round5,sa23_sr_round5,sa33_sr_round5);
|
assign {sa03_mc_round5, sa13_mc_round5, sa23_mc_round5, sa33_mc_round5} = mix_col(sa03_sr_round5,sa13_sr_round5,sa23_sr_round5,sa33_sr_round5);
|
|
|
|
|
//add round key
|
//add round key
|
assign sa33_next_round6 = sa33_mc_round5 ^ w23[07:00];
|
assign sa33_next_round6 = sa33_mc_round5 ^ w23[07:00];
|
assign sa23_next_round6 = sa23_mc_round5 ^ w23[15:08];
|
assign sa23_next_round6 = sa23_mc_round5 ^ w23[15:08];
|
assign sa13_next_round6 = sa13_mc_round5 ^ w23[23:16];
|
assign sa13_next_round6 = sa13_mc_round5 ^ w23[23:16];
|
assign sa03_next_round6 = sa03_mc_round5 ^ w23[31:24];
|
assign sa03_next_round6 = sa03_mc_round5 ^ w23[31:24];
|
assign sa32_next_round6 = sa32_mc_round5 ^ w22[07:00];
|
assign sa32_next_round6 = sa32_mc_round5 ^ w22[07:00];
|
assign sa22_next_round6 = sa22_mc_round5 ^ w22[15:08];
|
assign sa22_next_round6 = sa22_mc_round5 ^ w22[15:08];
|
assign sa12_next_round6 = sa12_mc_round5 ^ w22[23:16];
|
assign sa12_next_round6 = sa12_mc_round5 ^ w22[23:16];
|
assign sa02_next_round6 = sa02_mc_round5 ^ w22[31:24];
|
assign sa02_next_round6 = sa02_mc_round5 ^ w22[31:24];
|
assign sa31_next_round6 = sa31_mc_round5 ^ w21[07:00];
|
assign sa31_next_round6 = sa31_mc_round5 ^ w21[07:00];
|
assign sa21_next_round6 = sa21_mc_round5 ^ w21[15:08];
|
assign sa21_next_round6 = sa21_mc_round5 ^ w21[15:08];
|
assign sa11_next_round6 = sa11_mc_round5 ^ w21[23:16];
|
assign sa11_next_round6 = sa11_mc_round5 ^ w21[23:16];
|
assign sa01_next_round6 = sa01_mc_round5 ^ w21[31:24];
|
assign sa01_next_round6 = sa01_mc_round5 ^ w21[31:24];
|
assign sa30_next_round6 = sa30_mc_round5 ^ w20[07:00];
|
assign sa30_next_round6 = sa30_mc_round5 ^ w20[07:00];
|
assign sa20_next_round6 = sa20_mc_round5 ^ w20[15:08];
|
assign sa20_next_round6 = sa20_mc_round5 ^ w20[15:08];
|
assign sa10_next_round6 = sa10_mc_round5 ^ w20[23:16];
|
assign sa10_next_round6 = sa10_mc_round5 ^ w20[23:16];
|
assign sa00_next_round6 = sa00_mc_round5 ^ w20[31:24];
|
assign sa00_next_round6 = sa00_mc_round5 ^ w20[31:24];
|
|
|
|
|
always @(posedge clk)
|
always @(posedge clk)
|
begin
|
begin
|
text_out_stage5[127:120] <= sa00_next_round6;
|
text_out_stage5[127:120] <= sa00_next_round6;
|
text_out_stage5[095:088] <= sa01_next_round6;
|
text_out_stage5[095:088] <= sa01_next_round6;
|
text_out_stage5[063:056] <= sa02_next_round6;
|
text_out_stage5[063:056] <= sa02_next_round6;
|
text_out_stage5[031:024] <= sa03_next_round6;
|
text_out_stage5[031:024] <= sa03_next_round6;
|
text_out_stage5[119:112] <= sa10_next_round6;
|
text_out_stage5[119:112] <= sa10_next_round6;
|
text_out_stage5[087:080] <= sa11_next_round6;
|
text_out_stage5[087:080] <= sa11_next_round6;
|
text_out_stage5[055:048] <= sa12_next_round6;
|
text_out_stage5[055:048] <= sa12_next_round6;
|
text_out_stage5[023:016] <= sa13_next_round6;
|
text_out_stage5[023:016] <= sa13_next_round6;
|
text_out_stage5[111:104] <= sa20_next_round6;
|
text_out_stage5[111:104] <= sa20_next_round6;
|
text_out_stage5[079:072] <= sa21_next_round6;
|
text_out_stage5[079:072] <= sa21_next_round6;
|
text_out_stage5[047:040] <= sa22_next_round6;
|
text_out_stage5[047:040] <= sa22_next_round6;
|
text_out_stage5[015:008] <= sa23_next_round6;
|
text_out_stage5[015:008] <= sa23_next_round6;
|
text_out_stage5[103:096] <= sa30_next_round6;
|
text_out_stage5[103:096] <= sa30_next_round6;
|
text_out_stage5[071:064] <= sa31_next_round6;
|
text_out_stage5[071:064] <= sa31_next_round6;
|
text_out_stage5[039:032] <= sa32_next_round6;
|
text_out_stage5[039:032] <= sa32_next_round6;
|
text_out_stage5[007:000] <= sa33_next_round6;
|
text_out_stage5[007:000] <= sa33_next_round6;
|
|
|
end
|
end
|
|
|
|
|
|
|
////////////////////// round 6 //////////////////////////////////
|
////////////////////// round 6 //////////////////////////////////
|
|
|
//sbox lookup
|
//sbox lookup
|
aes_sbox us00_round6( .a(text_out_stage5[127:120] ), .d( sa00_sub_round6 ));
|
aes_sbox us00_round6( .a(text_out_stage5[127:120] ), .d( sa00_sub_round6 ));
|
aes_sbox us01_round6( .a(text_out_stage5[095:088] ), .d( sa01_sub_round6 ));
|
aes_sbox us01_round6( .a(text_out_stage5[095:088] ), .d( sa01_sub_round6 ));
|
aes_sbox us02_round6( .a(text_out_stage5[063:056] ), .d( sa02_sub_round6 ));
|
aes_sbox us02_round6( .a(text_out_stage5[063:056] ), .d( sa02_sub_round6 ));
|
aes_sbox us03_round6( .a(text_out_stage5[031:024] ), .d( sa03_sub_round6 ));
|
aes_sbox us03_round6( .a(text_out_stage5[031:024] ), .d( sa03_sub_round6 ));
|
aes_sbox us10_round6( .a(text_out_stage5[119:112] ), .d( sa10_sub_round6 ));
|
aes_sbox us10_round6( .a(text_out_stage5[119:112] ), .d( sa10_sub_round6 ));
|
aes_sbox us11_round6( .a(text_out_stage5[087:080] ), .d( sa11_sub_round6 ));
|
aes_sbox us11_round6( .a(text_out_stage5[087:080] ), .d( sa11_sub_round6 ));
|
aes_sbox us12_round6( .a(text_out_stage5[055:048] ), .d( sa12_sub_round6 ));
|
aes_sbox us12_round6( .a(text_out_stage5[055:048] ), .d( sa12_sub_round6 ));
|
aes_sbox us13_round6( .a(text_out_stage5[023:016] ), .d( sa13_sub_round6 ));
|
aes_sbox us13_round6( .a(text_out_stage5[023:016] ), .d( sa13_sub_round6 ));
|
aes_sbox us20_round6( .a(text_out_stage5[111:104] ), .d( sa20_sub_round6 ));
|
aes_sbox us20_round6( .a(text_out_stage5[111:104] ), .d( sa20_sub_round6 ));
|
aes_sbox us21_round6( .a(text_out_stage5[079:072] ), .d( sa21_sub_round6 ));
|
aes_sbox us21_round6( .a(text_out_stage5[079:072] ), .d( sa21_sub_round6 ));
|
aes_sbox us22_round6( .a(text_out_stage5[047:040] ), .d( sa22_sub_round6 ));
|
aes_sbox us22_round6( .a(text_out_stage5[047:040] ), .d( sa22_sub_round6 ));
|
aes_sbox us23_round6( .a(text_out_stage5[015:008] ), .d( sa23_sub_round6 ));
|
aes_sbox us23_round6( .a(text_out_stage5[015:008] ), .d( sa23_sub_round6 ));
|
aes_sbox us30_round6( .a(text_out_stage5[103:096] ), .d( sa30_sub_round6 ));
|
aes_sbox us30_round6( .a(text_out_stage5[103:096] ), .d( sa30_sub_round6 ));
|
aes_sbox us31_round6( .a(text_out_stage5[071:064] ), .d( sa31_sub_round6 ));
|
aes_sbox us31_round6( .a(text_out_stage5[071:064] ), .d( sa31_sub_round6 ));
|
aes_sbox us32_round6( .a(text_out_stage5[039:032] ), .d( sa32_sub_round6 ));
|
aes_sbox us32_round6( .a(text_out_stage5[039:032] ), .d( sa32_sub_round6 ));
|
aes_sbox us33_round6( .a(text_out_stage5[007:000] ), .d( sa33_sub_round6 ));
|
aes_sbox us33_round6( .a(text_out_stage5[007:000] ), .d( sa33_sub_round6 ));
|
|
|
|
|
//shift rows
|
//shift rows
|
|
|
assign sa00_sr_round6 = sa00_sub_round6; //
|
assign sa00_sr_round6 = sa00_sub_round6; //
|
assign sa01_sr_round6 = sa01_sub_round6; //no shift
|
assign sa01_sr_round6 = sa01_sub_round6; //no shift
|
assign sa02_sr_round6 = sa02_sub_round6; //
|
assign sa02_sr_round6 = sa02_sub_round6; //
|
assign sa03_sr_round6 = sa03_sub_round6; //
|
assign sa03_sr_round6 = sa03_sub_round6; //
|
|
|
assign sa10_sr_round6 = sa11_sub_round6; //
|
assign sa10_sr_round6 = sa11_sub_round6; //
|
assign sa11_sr_round6 = sa12_sub_round6; // left shift by 1
|
assign sa11_sr_round6 = sa12_sub_round6; // left shift by 1
|
assign sa12_sr_round6 = sa13_sub_round6; //
|
assign sa12_sr_round6 = sa13_sub_round6; //
|
assign sa13_sr_round6 = sa10_sub_round6; //
|
assign sa13_sr_round6 = sa10_sub_round6; //
|
|
|
assign sa20_sr_round6 = sa22_sub_round6; //
|
assign sa20_sr_round6 = sa22_sub_round6; //
|
assign sa21_sr_round6 = sa23_sub_round6; // left shift by 2
|
assign sa21_sr_round6 = sa23_sub_round6; // left shift by 2
|
assign sa22_sr_round6 = sa20_sub_round6; //
|
assign sa22_sr_round6 = sa20_sub_round6; //
|
assign sa23_sr_round6 = sa21_sub_round6; //
|
assign sa23_sr_round6 = sa21_sub_round6; //
|
|
|
assign sa30_sr_round6 = sa33_sub_round6; //
|
assign sa30_sr_round6 = sa33_sub_round6; //
|
assign sa31_sr_round6 = sa30_sub_round6; // left shift by 3
|
assign sa31_sr_round6 = sa30_sub_round6; // left shift by 3
|
assign sa32_sr_round6 = sa31_sub_round6; //
|
assign sa32_sr_round6 = sa31_sub_round6; //
|
assign sa33_sr_round6 = sa32_sub_round6; //
|
assign sa33_sr_round6 = sa32_sub_round6; //
|
|
|
// mix column operation
|
// mix column operation
|
assign {sa00_mc_round6, sa10_mc_round6, sa20_mc_round6, sa30_mc_round6} = mix_col(sa00_sr_round6,sa10_sr_round6,sa20_sr_round6,sa30_sr_round6);
|
assign {sa00_mc_round6, sa10_mc_round6, sa20_mc_round6, sa30_mc_round6} = mix_col(sa00_sr_round6,sa10_sr_round6,sa20_sr_round6,sa30_sr_round6);
|
assign {sa01_mc_round6, sa11_mc_round6, sa21_mc_round6, sa31_mc_round6} = mix_col(sa01_sr_round6,sa11_sr_round6,sa21_sr_round6,sa31_sr_round6);
|
assign {sa01_mc_round6, sa11_mc_round6, sa21_mc_round6, sa31_mc_round6} = mix_col(sa01_sr_round6,sa11_sr_round6,sa21_sr_round6,sa31_sr_round6);
|
assign {sa02_mc_round6, sa12_mc_round6, sa22_mc_round6, sa32_mc_round6} = mix_col(sa02_sr_round6,sa12_sr_round6,sa22_sr_round6,sa32_sr_round6);
|
assign {sa02_mc_round6, sa12_mc_round6, sa22_mc_round6, sa32_mc_round6} = mix_col(sa02_sr_round6,sa12_sr_round6,sa22_sr_round6,sa32_sr_round6);
|
assign {sa03_mc_round6, sa13_mc_round6, sa23_mc_round6, sa33_mc_round6} = mix_col(sa03_sr_round6,sa13_sr_round6,sa23_sr_round6,sa33_sr_round6);
|
assign {sa03_mc_round6, sa13_mc_round6, sa23_mc_round6, sa33_mc_round6} = mix_col(sa03_sr_round6,sa13_sr_round6,sa23_sr_round6,sa33_sr_round6);
|
|
|
|
|
//add round key
|
//add round key
|
assign sa33_next_round7 = sa33_mc_round6 ^ w27[07:00];
|
assign sa33_next_round7 = sa33_mc_round6 ^ w27[07:00];
|
assign sa23_next_round7 = sa23_mc_round6 ^ w27[15:08];
|
assign sa23_next_round7 = sa23_mc_round6 ^ w27[15:08];
|
assign sa13_next_round7 = sa13_mc_round6 ^ w27[23:16];
|
assign sa13_next_round7 = sa13_mc_round6 ^ w27[23:16];
|
assign sa03_next_round7 = sa03_mc_round6 ^ w27[31:24];
|
assign sa03_next_round7 = sa03_mc_round6 ^ w27[31:24];
|
assign sa32_next_round7 = sa32_mc_round6 ^ w26[07:00];
|
assign sa32_next_round7 = sa32_mc_round6 ^ w26[07:00];
|
assign sa22_next_round7 = sa22_mc_round6 ^ w26[15:08];
|
assign sa22_next_round7 = sa22_mc_round6 ^ w26[15:08];
|
assign sa12_next_round7 = sa12_mc_round6 ^ w26[23:16];
|
assign sa12_next_round7 = sa12_mc_round6 ^ w26[23:16];
|
assign sa02_next_round7 = sa02_mc_round6 ^ w26[31:24];
|
assign sa02_next_round7 = sa02_mc_round6 ^ w26[31:24];
|
assign sa31_next_round7 = sa31_mc_round6 ^ w25[07:00];
|
assign sa31_next_round7 = sa31_mc_round6 ^ w25[07:00];
|
assign sa21_next_round7 = sa21_mc_round6 ^ w25[15:08];
|
assign sa21_next_round7 = sa21_mc_round6 ^ w25[15:08];
|
assign sa11_next_round7 = sa11_mc_round6 ^ w25[23:16];
|
assign sa11_next_round7 = sa11_mc_round6 ^ w25[23:16];
|
assign sa01_next_round7 = sa01_mc_round6 ^ w25[31:24];
|
assign sa01_next_round7 = sa01_mc_round6 ^ w25[31:24];
|
assign sa30_next_round7 = sa30_mc_round6 ^ w24[07:00];
|
assign sa30_next_round7 = sa30_mc_round6 ^ w24[07:00];
|
assign sa20_next_round7 = sa20_mc_round6 ^ w24[15:08];
|
assign sa20_next_round7 = sa20_mc_round6 ^ w24[15:08];
|
assign sa10_next_round7 = sa10_mc_round6 ^ w24[23:16];
|
assign sa10_next_round7 = sa10_mc_round6 ^ w24[23:16];
|
assign sa00_next_round7 = sa00_mc_round6 ^ w24[31:24];
|
assign sa00_next_round7 = sa00_mc_round6 ^ w24[31:24];
|
|
|
|
|
always @(posedge clk)
|
always @(posedge clk)
|
begin
|
begin
|
text_out_stage6[127:120] <= sa00_next_round7;
|
text_out_stage6[127:120] <= sa00_next_round7;
|
text_out_stage6[095:088] <= sa01_next_round7;
|
text_out_stage6[095:088] <= sa01_next_round7;
|
text_out_stage6[063:056] <= sa02_next_round7;
|
text_out_stage6[063:056] <= sa02_next_round7;
|
text_out_stage6[031:024] <= sa03_next_round7;
|
text_out_stage6[031:024] <= sa03_next_round7;
|
text_out_stage6[119:112] <= sa10_next_round7;
|
text_out_stage6[119:112] <= sa10_next_round7;
|
text_out_stage6[087:080] <= sa11_next_round7;
|
text_out_stage6[087:080] <= sa11_next_round7;
|
text_out_stage6[055:048] <= sa12_next_round7;
|
text_out_stage6[055:048] <= sa12_next_round7;
|
text_out_stage6[023:016] <= sa13_next_round7;
|
text_out_stage6[023:016] <= sa13_next_round7;
|
text_out_stage6[111:104] <= sa20_next_round7;
|
text_out_stage6[111:104] <= sa20_next_round7;
|
text_out_stage6[079:072] <= sa21_next_round7;
|
text_out_stage6[079:072] <= sa21_next_round7;
|
text_out_stage6[047:040] <= sa22_next_round7;
|
text_out_stage6[047:040] <= sa22_next_round7;
|
text_out_stage6[015:008] <= sa23_next_round7;
|
text_out_stage6[015:008] <= sa23_next_round7;
|
text_out_stage6[103:096] <= sa30_next_round7;
|
text_out_stage6[103:096] <= sa30_next_round7;
|
text_out_stage6[071:064] <= sa31_next_round7;
|
text_out_stage6[071:064] <= sa31_next_round7;
|
text_out_stage6[039:032] <= sa32_next_round7;
|
text_out_stage6[039:032] <= sa32_next_round7;
|
text_out_stage6[007:000] <= sa33_next_round7;
|
text_out_stage6[007:000] <= sa33_next_round7;
|
|
|
end
|
end
|
|
|
|
|
|
|
////////////////////// round 7 //////////////////////////////////
|
////////////////////// round 7 //////////////////////////////////
|
|
|
//sbox lookup
|
//sbox lookup
|
aes_sbox us00_round7( .a(text_out_stage6[127:120] ), .d( sa00_sub_round7 ));
|
aes_sbox us00_round7( .a(text_out_stage6[127:120] ), .d( sa00_sub_round7 ));
|
aes_sbox us01_round7( .a(text_out_stage6[095:088] ), .d( sa01_sub_round7 ));
|
aes_sbox us01_round7( .a(text_out_stage6[095:088] ), .d( sa01_sub_round7 ));
|
aes_sbox us02_round7( .a(text_out_stage6[063:056] ), .d( sa02_sub_round7 ));
|
aes_sbox us02_round7( .a(text_out_stage6[063:056] ), .d( sa02_sub_round7 ));
|
aes_sbox us03_round7( .a(text_out_stage6[031:024] ), .d( sa03_sub_round7 ));
|
aes_sbox us03_round7( .a(text_out_stage6[031:024] ), .d( sa03_sub_round7 ));
|
aes_sbox us10_round7( .a(text_out_stage6[119:112] ), .d( sa10_sub_round7 ));
|
aes_sbox us10_round7( .a(text_out_stage6[119:112] ), .d( sa10_sub_round7 ));
|
aes_sbox us11_round7( .a(text_out_stage6[087:080] ), .d( sa11_sub_round7 ));
|
aes_sbox us11_round7( .a(text_out_stage6[087:080] ), .d( sa11_sub_round7 ));
|
aes_sbox us12_round7( .a(text_out_stage6[055:048] ), .d( sa12_sub_round7 ));
|
aes_sbox us12_round7( .a(text_out_stage6[055:048] ), .d( sa12_sub_round7 ));
|
aes_sbox us13_round7( .a(text_out_stage6[023:016] ), .d( sa13_sub_round7 ));
|
aes_sbox us13_round7( .a(text_out_stage6[023:016] ), .d( sa13_sub_round7 ));
|
aes_sbox us20_round7( .a(text_out_stage6[111:104] ), .d( sa20_sub_round7 ));
|
aes_sbox us20_round7( .a(text_out_stage6[111:104] ), .d( sa20_sub_round7 ));
|
aes_sbox us21_round7( .a(text_out_stage6[079:072] ), .d( sa21_sub_round7 ));
|
aes_sbox us21_round7( .a(text_out_stage6[079:072] ), .d( sa21_sub_round7 ));
|
aes_sbox us22_round7( .a(text_out_stage6[047:040] ), .d( sa22_sub_round7 ));
|
aes_sbox us22_round7( .a(text_out_stage6[047:040] ), .d( sa22_sub_round7 ));
|
aes_sbox us23_round7( .a(text_out_stage6[015:008] ), .d( sa23_sub_round7 ));
|
aes_sbox us23_round7( .a(text_out_stage6[015:008] ), .d( sa23_sub_round7 ));
|
aes_sbox us30_round7( .a(text_out_stage6[103:096] ), .d( sa30_sub_round7 ));
|
aes_sbox us30_round7( .a(text_out_stage6[103:096] ), .d( sa30_sub_round7 ));
|
aes_sbox us31_round7( .a(text_out_stage6[071:064] ), .d( sa31_sub_round7 ));
|
aes_sbox us31_round7( .a(text_out_stage6[071:064] ), .d( sa31_sub_round7 ));
|
aes_sbox us32_round7( .a(text_out_stage6[039:032] ), .d( sa32_sub_round7 ));
|
aes_sbox us32_round7( .a(text_out_stage6[039:032] ), .d( sa32_sub_round7 ));
|
aes_sbox us33_round7( .a(text_out_stage6[007:000] ), .d( sa33_sub_round7 ));
|
aes_sbox us33_round7( .a(text_out_stage6[007:000] ), .d( sa33_sub_round7 ));
|
|
|
|
|
|
|
//shift rows
|
//shift rows
|
|
|
assign sa00_sr_round7 = sa00_sub_round7; //
|
assign sa00_sr_round7 = sa00_sub_round7; //
|
assign sa01_sr_round7 = sa01_sub_round7; //no shift
|
assign sa01_sr_round7 = sa01_sub_round7; //no shift
|
assign sa02_sr_round7 = sa02_sub_round7; //
|
assign sa02_sr_round7 = sa02_sub_round7; //
|
assign sa03_sr_round7 = sa03_sub_round7; //
|
assign sa03_sr_round7 = sa03_sub_round7; //
|
|
|
assign sa10_sr_round7 = sa11_sub_round7; //
|
assign sa10_sr_round7 = sa11_sub_round7; //
|
assign sa11_sr_round7 = sa12_sub_round7; // left shift by 1
|
assign sa11_sr_round7 = sa12_sub_round7; // left shift by 1
|
assign sa12_sr_round7 = sa13_sub_round7; //
|
assign sa12_sr_round7 = sa13_sub_round7; //
|
assign sa13_sr_round7 = sa10_sub_round7; //
|
assign sa13_sr_round7 = sa10_sub_round7; //
|
|
|
assign sa20_sr_round7 = sa22_sub_round7; //
|
assign sa20_sr_round7 = sa22_sub_round7; //
|
assign sa21_sr_round7 = sa23_sub_round7; // left shift by 2
|
assign sa21_sr_round7 = sa23_sub_round7; // left shift by 2
|
assign sa22_sr_round7 = sa20_sub_round7; //
|
assign sa22_sr_round7 = sa20_sub_round7; //
|
assign sa23_sr_round7 = sa21_sub_round7; //
|
assign sa23_sr_round7 = sa21_sub_round7; //
|
|
|
assign sa30_sr_round7 = sa33_sub_round7; //
|
assign sa30_sr_round7 = sa33_sub_round7; //
|
assign sa31_sr_round7 = sa30_sub_round7; // left shift by 3
|
assign sa31_sr_round7 = sa30_sub_round7; // left shift by 3
|
assign sa32_sr_round7 = sa31_sub_round7; //
|
assign sa32_sr_round7 = sa31_sub_round7; //
|
assign sa33_sr_round7 = sa32_sub_round7; //
|
assign sa33_sr_round7 = sa32_sub_round7; //
|
|
|
// mix column operation
|
// mix column operation
|
assign {sa00_mc_round7, sa10_mc_round7, sa20_mc_round7, sa30_mc_round7} = mix_col(sa00_sr_round7,sa10_sr_round7,sa20_sr_round7,sa30_sr_round7);
|
assign {sa00_mc_round7, sa10_mc_round7, sa20_mc_round7, sa30_mc_round7} = mix_col(sa00_sr_round7,sa10_sr_round7,sa20_sr_round7,sa30_sr_round7);
|
assign {sa01_mc_round7, sa11_mc_round7, sa21_mc_round7, sa31_mc_round7} = mix_col(sa01_sr_round7,sa11_sr_round7,sa21_sr_round7,sa31_sr_round7);
|
assign {sa01_mc_round7, sa11_mc_round7, sa21_mc_round7, sa31_mc_round7} = mix_col(sa01_sr_round7,sa11_sr_round7,sa21_sr_round7,sa31_sr_round7);
|
assign {sa02_mc_round7, sa12_mc_round7, sa22_mc_round7, sa32_mc_round7} = mix_col(sa02_sr_round7,sa12_sr_round7,sa22_sr_round7,sa32_sr_round7);
|
assign {sa02_mc_round7, sa12_mc_round7, sa22_mc_round7, sa32_mc_round7} = mix_col(sa02_sr_round7,sa12_sr_round7,sa22_sr_round7,sa32_sr_round7);
|
assign {sa03_mc_round7, sa13_mc_round7, sa23_mc_round7, sa33_mc_round7} = mix_col(sa03_sr_round7,sa13_sr_round7,sa23_sr_round7,sa33_sr_round7);
|
assign {sa03_mc_round7, sa13_mc_round7, sa23_mc_round7, sa33_mc_round7} = mix_col(sa03_sr_round7,sa13_sr_round7,sa23_sr_round7,sa33_sr_round7);
|
|
|
|
|
//add round key
|
//add round key
|
assign sa33_next_round8 = sa33_mc_round7 ^ w31[07:00];
|
assign sa33_next_round8 = sa33_mc_round7 ^ w31[07:00];
|
assign sa23_next_round8 = sa23_mc_round7 ^ w31[15:08];
|
assign sa23_next_round8 = sa23_mc_round7 ^ w31[15:08];
|
assign sa13_next_round8 = sa13_mc_round7 ^ w31[23:16];
|
assign sa13_next_round8 = sa13_mc_round7 ^ w31[23:16];
|
assign sa03_next_round8 = sa03_mc_round7 ^ w31[31:24];
|
assign sa03_next_round8 = sa03_mc_round7 ^ w31[31:24];
|
assign sa32_next_round8 = sa32_mc_round7 ^ w30[07:00];
|
assign sa32_next_round8 = sa32_mc_round7 ^ w30[07:00];
|
assign sa22_next_round8 = sa22_mc_round7 ^ w30[15:08];
|
assign sa22_next_round8 = sa22_mc_round7 ^ w30[15:08];
|
assign sa12_next_round8 = sa12_mc_round7 ^ w30[23:16];
|
assign sa12_next_round8 = sa12_mc_round7 ^ w30[23:16];
|
assign sa02_next_round8 = sa02_mc_round7 ^ w30[31:24];
|
assign sa02_next_round8 = sa02_mc_round7 ^ w30[31:24];
|
assign sa31_next_round8 = sa31_mc_round7 ^ w29[07:00];
|
assign sa31_next_round8 = sa31_mc_round7 ^ w29[07:00];
|
assign sa21_next_round8 = sa21_mc_round7 ^ w29[15:08];
|
assign sa21_next_round8 = sa21_mc_round7 ^ w29[15:08];
|
assign sa11_next_round8 = sa11_mc_round7 ^ w29[23:16];
|
assign sa11_next_round8 = sa11_mc_round7 ^ w29[23:16];
|
assign sa01_next_round8 = sa01_mc_round7 ^ w29[31:24];
|
assign sa01_next_round8 = sa01_mc_round7 ^ w29[31:24];
|
assign sa30_next_round8 = sa30_mc_round7 ^ w28[07:00];
|
assign sa30_next_round8 = sa30_mc_round7 ^ w28[07:00];
|
assign sa20_next_round8 = sa20_mc_round7 ^ w28[15:08];
|
assign sa20_next_round8 = sa20_mc_round7 ^ w28[15:08];
|
assign sa10_next_round8 = sa10_mc_round7 ^ w28[23:16];
|
assign sa10_next_round8 = sa10_mc_round7 ^ w28[23:16];
|
assign sa00_next_round8 = sa00_mc_round7 ^ w28[31:24];
|
assign sa00_next_round8 = sa00_mc_round7 ^ w28[31:24];
|
|
|
always @(posedge clk)
|
always @(posedge clk)
|
begin
|
begin
|
text_out_stage7[127:120] <= sa00_next_round8;
|
text_out_stage7[127:120] <= sa00_next_round8;
|
text_out_stage7[095:088] <= sa01_next_round8;
|
text_out_stage7[095:088] <= sa01_next_round8;
|
text_out_stage7[063:056] <= sa02_next_round8;
|
text_out_stage7[063:056] <= sa02_next_round8;
|
text_out_stage7[031:024] <= sa03_next_round8;
|
text_out_stage7[031:024] <= sa03_next_round8;
|
text_out_stage7[119:112] <= sa10_next_round8;
|
text_out_stage7[119:112] <= sa10_next_round8;
|
text_out_stage7[087:080] <= sa11_next_round8;
|
text_out_stage7[087:080] <= sa11_next_round8;
|
text_out_stage7[055:048] <= sa12_next_round8;
|
text_out_stage7[055:048] <= sa12_next_round8;
|
text_out_stage7[023:016] <= sa13_next_round8;
|
text_out_stage7[023:016] <= sa13_next_round8;
|
text_out_stage7[111:104] <= sa20_next_round8;
|
text_out_stage7[111:104] <= sa20_next_round8;
|
text_out_stage7[079:072] <= sa21_next_round8;
|
text_out_stage7[079:072] <= sa21_next_round8;
|
text_out_stage7[047:040] <= sa22_next_round8;
|
text_out_stage7[047:040] <= sa22_next_round8;
|
text_out_stage7[015:008] <= sa23_next_round8;
|
text_out_stage7[015:008] <= sa23_next_round8;
|
text_out_stage7[103:096] <= sa30_next_round8;
|
text_out_stage7[103:096] <= sa30_next_round8;
|
text_out_stage7[071:064] <= sa31_next_round8;
|
text_out_stage7[071:064] <= sa31_next_round8;
|
text_out_stage7[039:032] <= sa32_next_round8;
|
text_out_stage7[039:032] <= sa32_next_round8;
|
text_out_stage7[007:000] <= sa33_next_round8;
|
text_out_stage7[007:000] <= sa33_next_round8;
|
|
|
end
|
end
|
|
|
|
|
|
|
////////////////////// round 8 //////////////////////////////////
|
////////////////////// round 8 //////////////////////////////////
|
|
|
//sbox lookup
|
//sbox lookup
|
aes_sbox us00_round8( .a(text_out_stage7[127:120] ), .d( sa00_sub_round8 ));
|
aes_sbox us00_round8( .a(text_out_stage7[127:120] ), .d( sa00_sub_round8 ));
|
aes_sbox us01_round8( .a(text_out_stage7[095:088] ), .d( sa01_sub_round8 ));
|
aes_sbox us01_round8( .a(text_out_stage7[095:088] ), .d( sa01_sub_round8 ));
|
aes_sbox us02_round8( .a(text_out_stage7[063:056] ), .d( sa02_sub_round8 ));
|
aes_sbox us02_round8( .a(text_out_stage7[063:056] ), .d( sa02_sub_round8 ));
|
aes_sbox us03_round8( .a(text_out_stage7[031:024] ), .d( sa03_sub_round8 ));
|
aes_sbox us03_round8( .a(text_out_stage7[031:024] ), .d( sa03_sub_round8 ));
|
aes_sbox us10_round8( .a(text_out_stage7[119:112] ), .d( sa10_sub_round8 ));
|
aes_sbox us10_round8( .a(text_out_stage7[119:112] ), .d( sa10_sub_round8 ));
|
aes_sbox us11_round8( .a(text_out_stage7[087:080] ), .d( sa11_sub_round8 ));
|
aes_sbox us11_round8( .a(text_out_stage7[087:080] ), .d( sa11_sub_round8 ));
|
aes_sbox us12_round8( .a(text_out_stage7[055:048] ), .d( sa12_sub_round8 ));
|
aes_sbox us12_round8( .a(text_out_stage7[055:048] ), .d( sa12_sub_round8 ));
|
aes_sbox us13_round8( .a(text_out_stage7[023:016] ), .d( sa13_sub_round8 ));
|
aes_sbox us13_round8( .a(text_out_stage7[023:016] ), .d( sa13_sub_round8 ));
|
aes_sbox us20_round8( .a(text_out_stage7[111:104] ), .d( sa20_sub_round8 ));
|
aes_sbox us20_round8( .a(text_out_stage7[111:104] ), .d( sa20_sub_round8 ));
|
aes_sbox us21_round8( .a(text_out_stage7[079:072] ), .d( sa21_sub_round8 ));
|
aes_sbox us21_round8( .a(text_out_stage7[079:072] ), .d( sa21_sub_round8 ));
|
aes_sbox us22_round8( .a(text_out_stage7[047:040] ), .d( sa22_sub_round8 ));
|
aes_sbox us22_round8( .a(text_out_stage7[047:040] ), .d( sa22_sub_round8 ));
|
aes_sbox us23_round8( .a(text_out_stage7[015:008] ), .d( sa23_sub_round8 ));
|
aes_sbox us23_round8( .a(text_out_stage7[015:008] ), .d( sa23_sub_round8 ));
|
aes_sbox us30_round8( .a(text_out_stage7[103:096] ), .d( sa30_sub_round8 ));
|
aes_sbox us30_round8( .a(text_out_stage7[103:096] ), .d( sa30_sub_round8 ));
|
aes_sbox us31_round8( .a(text_out_stage7[071:064] ), .d( sa31_sub_round8 ));
|
aes_sbox us31_round8( .a(text_out_stage7[071:064] ), .d( sa31_sub_round8 ));
|
aes_sbox us32_round8( .a(text_out_stage7[039:032] ), .d( sa32_sub_round8 ));
|
aes_sbox us32_round8( .a(text_out_stage7[039:032] ), .d( sa32_sub_round8 ));
|
aes_sbox us33_round8( .a(text_out_stage7[007:000] ), .d( sa33_sub_round8 ));
|
aes_sbox us33_round8( .a(text_out_stage7[007:000] ), .d( sa33_sub_round8 ));
|
|
|
|
|
|
|
//shift rows
|
//shift rows
|
|
|
assign sa00_sr_round8 = sa00_sub_round8; //
|
assign sa00_sr_round8 = sa00_sub_round8; //
|
assign sa01_sr_round8 = sa01_sub_round8; //no shift
|
assign sa01_sr_round8 = sa01_sub_round8; //no shift
|
assign sa02_sr_round8 = sa02_sub_round8; //
|
assign sa02_sr_round8 = sa02_sub_round8; //
|
assign sa03_sr_round8 = sa03_sub_round8; //
|
assign sa03_sr_round8 = sa03_sub_round8; //
|
|
|
assign sa10_sr_round8 = sa11_sub_round8; //
|
assign sa10_sr_round8 = sa11_sub_round8; //
|
assign sa11_sr_round8 = sa12_sub_round8; // left shift by 1
|
assign sa11_sr_round8 = sa12_sub_round8; // left shift by 1
|
assign sa12_sr_round8 = sa13_sub_round8; //
|
assign sa12_sr_round8 = sa13_sub_round8; //
|
assign sa13_sr_round8 = sa10_sub_round8; //
|
assign sa13_sr_round8 = sa10_sub_round8; //
|
|
|
assign sa20_sr_round8 = sa22_sub_round8; //
|
assign sa20_sr_round8 = sa22_sub_round8; //
|
assign sa21_sr_round8 = sa23_sub_round8; // left shift by 2
|
assign sa21_sr_round8 = sa23_sub_round8; // left shift by 2
|
assign sa22_sr_round8 = sa20_sub_round8; //
|
assign sa22_sr_round8 = sa20_sub_round8; //
|
assign sa23_sr_round8 = sa21_sub_round8; //
|
assign sa23_sr_round8 = sa21_sub_round8; //
|
|
|
assign sa30_sr_round8 = sa33_sub_round8; //
|
assign sa30_sr_round8 = sa33_sub_round8; //
|
assign sa31_sr_round8 = sa30_sub_round8; // left shift by 3
|
assign sa31_sr_round8 = sa30_sub_round8; // left shift by 3
|
assign sa32_sr_round8 = sa31_sub_round8; //
|
assign sa32_sr_round8 = sa31_sub_round8; //
|
assign sa33_sr_round8 = sa32_sub_round8; //
|
assign sa33_sr_round8 = sa32_sub_round8; //
|
|
|
// mix column operation
|
// mix column operation
|
assign {sa00_mc_round8, sa10_mc_round8, sa20_mc_round8, sa30_mc_round8} = mix_col(sa00_sr_round8,sa10_sr_round8,sa20_sr_round8,sa30_sr_round8);
|
assign {sa00_mc_round8, sa10_mc_round8, sa20_mc_round8, sa30_mc_round8} = mix_col(sa00_sr_round8,sa10_sr_round8,sa20_sr_round8,sa30_sr_round8);
|
assign {sa01_mc_round8, sa11_mc_round8, sa21_mc_round8, sa31_mc_round8} = mix_col(sa01_sr_round8,sa11_sr_round8,sa21_sr_round8,sa31_sr_round8);
|
assign {sa01_mc_round8, sa11_mc_round8, sa21_mc_round8, sa31_mc_round8} = mix_col(sa01_sr_round8,sa11_sr_round8,sa21_sr_round8,sa31_sr_round8);
|
assign {sa02_mc_round8, sa12_mc_round8, sa22_mc_round8, sa32_mc_round8} = mix_col(sa02_sr_round8,sa12_sr_round8,sa22_sr_round8,sa32_sr_round8);
|
assign {sa02_mc_round8, sa12_mc_round8, sa22_mc_round8, sa32_mc_round8} = mix_col(sa02_sr_round8,sa12_sr_round8,sa22_sr_round8,sa32_sr_round8);
|
assign {sa03_mc_round8, sa13_mc_round8, sa23_mc_round8, sa33_mc_round8} = mix_col(sa03_sr_round8,sa13_sr_round8,sa23_sr_round8,sa33_sr_round8);
|
assign {sa03_mc_round8, sa13_mc_round8, sa23_mc_round8, sa33_mc_round8} = mix_col(sa03_sr_round8,sa13_sr_round8,sa23_sr_round8,sa33_sr_round8);
|
|
|
|
|
//add round key
|
//add round key
|
assign sa33_next_round9 = sa33_mc_round8 ^ w35[07:00];
|
assign sa33_next_round9 = sa33_mc_round8 ^ w35[07:00];
|
assign sa23_next_round9 = sa23_mc_round8 ^ w35[15:08];
|
assign sa23_next_round9 = sa23_mc_round8 ^ w35[15:08];
|
assign sa13_next_round9 = sa13_mc_round8 ^ w35[23:16];
|
assign sa13_next_round9 = sa13_mc_round8 ^ w35[23:16];
|
assign sa03_next_round9 = sa03_mc_round8 ^ w35[31:24];
|
assign sa03_next_round9 = sa03_mc_round8 ^ w35[31:24];
|
assign sa32_next_round9 = sa32_mc_round8 ^ w34[07:00];
|
assign sa32_next_round9 = sa32_mc_round8 ^ w34[07:00];
|
assign sa22_next_round9 = sa22_mc_round8 ^ w34[15:08];
|
assign sa22_next_round9 = sa22_mc_round8 ^ w34[15:08];
|
assign sa12_next_round9 = sa12_mc_round8 ^ w34[23:16];
|
assign sa12_next_round9 = sa12_mc_round8 ^ w34[23:16];
|
assign sa02_next_round9 = sa02_mc_round8 ^ w34[31:24];
|
assign sa02_next_round9 = sa02_mc_round8 ^ w34[31:24];
|
assign sa31_next_round9 = sa31_mc_round8 ^ w33[07:00];
|
assign sa31_next_round9 = sa31_mc_round8 ^ w33[07:00];
|
assign sa21_next_round9 = sa21_mc_round8 ^ w33[15:08];
|
assign sa21_next_round9 = sa21_mc_round8 ^ w33[15:08];
|
assign sa11_next_round9 = sa11_mc_round8 ^ w33[23:16];
|
assign sa11_next_round9 = sa11_mc_round8 ^ w33[23:16];
|
assign sa01_next_round9 = sa01_mc_round8 ^ w33[31:24];
|
assign sa01_next_round9 = sa01_mc_round8 ^ w33[31:24];
|
assign sa30_next_round9 = sa30_mc_round8 ^ w32[07:00];
|
assign sa30_next_round9 = sa30_mc_round8 ^ w32[07:00];
|
assign sa20_next_round9 = sa20_mc_round8 ^ w32[15:08];
|
assign sa20_next_round9 = sa20_mc_round8 ^ w32[15:08];
|
assign sa10_next_round9 = sa10_mc_round8 ^ w32[23:16];
|
assign sa10_next_round9 = sa10_mc_round8 ^ w32[23:16];
|
assign sa00_next_round9 = sa00_mc_round8 ^ w32[31:24];
|
assign sa00_next_round9 = sa00_mc_round8 ^ w32[31:24];
|
|
|
|
|
|
|
always @(posedge clk)
|
always @(posedge clk)
|
begin
|
begin
|
text_out_stage8[127:120] <= sa00_next_round9;
|
text_out_stage8[127:120] <= sa00_next_round9;
|
text_out_stage8[095:088] <= sa01_next_round9;
|
text_out_stage8[095:088] <= sa01_next_round9;
|
text_out_stage8[063:056] <= sa02_next_round9;
|
text_out_stage8[063:056] <= sa02_next_round9;
|
text_out_stage8[031:024] <= sa03_next_round9;
|
text_out_stage8[031:024] <= sa03_next_round9;
|
text_out_stage8[119:112] <= sa10_next_round9;
|
text_out_stage8[119:112] <= sa10_next_round9;
|
text_out_stage8[087:080] <= sa11_next_round9;
|
text_out_stage8[087:080] <= sa11_next_round9;
|
text_out_stage8[055:048] <= sa12_next_round9;
|
text_out_stage8[055:048] <= sa12_next_round9;
|
text_out_stage8[023:016] <= sa13_next_round9;
|
text_out_stage8[023:016] <= sa13_next_round9;
|
text_out_stage8[111:104] <= sa20_next_round9;
|
text_out_stage8[111:104] <= sa20_next_round9;
|
text_out_stage8[079:072] <= sa21_next_round9;
|
text_out_stage8[079:072] <= sa21_next_round9;
|
text_out_stage8[047:040] <= sa22_next_round9;
|
text_out_stage8[047:040] <= sa22_next_round9;
|
text_out_stage8[015:008] <= sa23_next_round9;
|
text_out_stage8[015:008] <= sa23_next_round9;
|
text_out_stage8[103:096] <= sa30_next_round9;
|
text_out_stage8[103:096] <= sa30_next_round9;
|
text_out_stage8[071:064] <= sa31_next_round9;
|
text_out_stage8[071:064] <= sa31_next_round9;
|
text_out_stage8[039:032] <= sa32_next_round9;
|
text_out_stage8[039:032] <= sa32_next_round9;
|
text_out_stage8[007:000] <= sa33_next_round9;
|
text_out_stage8[007:000] <= sa33_next_round9;
|
|
|
end
|
end
|
|
|
|
|
|
|
////////////////////// round 9 //////////////////////////////////
|
////////////////////// round 9 //////////////////////////////////
|
|
|
//sbox lookup
|
//sbox lookup
|
aes_sbox us00_round9( .a(text_out_stage8[127:120] ), .d( sa00_sub_round9 ));
|
aes_sbox us00_round9( .a(text_out_stage8[127:120] ), .d( sa00_sub_round9 ));
|
aes_sbox us01_round9( .a(text_out_stage8[095:088] ), .d( sa01_sub_round9 ));
|
aes_sbox us01_round9( .a(text_out_stage8[095:088] ), .d( sa01_sub_round9 ));
|
aes_sbox us02_round9( .a(text_out_stage8[063:056] ), .d( sa02_sub_round9 ));
|
aes_sbox us02_round9( .a(text_out_stage8[063:056] ), .d( sa02_sub_round9 ));
|
aes_sbox us03_round9( .a(text_out_stage8[031:024] ), .d( sa03_sub_round9 ));
|
aes_sbox us03_round9( .a(text_out_stage8[031:024] ), .d( sa03_sub_round9 ));
|
aes_sbox us10_round9( .a(text_out_stage8[119:112] ), .d( sa10_sub_round9 ));
|
aes_sbox us10_round9( .a(text_out_stage8[119:112] ), .d( sa10_sub_round9 ));
|
aes_sbox us11_round9( .a(text_out_stage8[087:080] ), .d( sa11_sub_round9 ));
|
aes_sbox us11_round9( .a(text_out_stage8[087:080] ), .d( sa11_sub_round9 ));
|
aes_sbox us12_round9( .a(text_out_stage8[055:048] ), .d( sa12_sub_round9 ));
|
aes_sbox us12_round9( .a(text_out_stage8[055:048] ), .d( sa12_sub_round9 ));
|
aes_sbox us13_round9( .a(text_out_stage8[023:016] ), .d( sa13_sub_round9 ));
|
aes_sbox us13_round9( .a(text_out_stage8[023:016] ), .d( sa13_sub_round9 ));
|
aes_sbox us20_round9( .a(text_out_stage8[111:104] ), .d( sa20_sub_round9 ));
|
aes_sbox us20_round9( .a(text_out_stage8[111:104] ), .d( sa20_sub_round9 ));
|
aes_sbox us21_round9( .a(text_out_stage8[079:072] ), .d( sa21_sub_round9 ));
|
aes_sbox us21_round9( .a(text_out_stage8[079:072] ), .d( sa21_sub_round9 ));
|
aes_sbox us22_round9( .a(text_out_stage8[047:040] ), .d( sa22_sub_round9 ));
|
aes_sbox us22_round9( .a(text_out_stage8[047:040] ), .d( sa22_sub_round9 ));
|
aes_sbox us23_round9( .a(text_out_stage8[015:008] ), .d( sa23_sub_round9 ));
|
aes_sbox us23_round9( .a(text_out_stage8[015:008] ), .d( sa23_sub_round9 ));
|
aes_sbox us30_round9( .a(text_out_stage8[103:096] ), .d( sa30_sub_round9 ));
|
aes_sbox us30_round9( .a(text_out_stage8[103:096] ), .d( sa30_sub_round9 ));
|
aes_sbox us31_round9( .a(text_out_stage8[071:064] ), .d( sa31_sub_round9 ));
|
aes_sbox us31_round9( .a(text_out_stage8[071:064] ), .d( sa31_sub_round9 ));
|
aes_sbox us32_round9( .a(text_out_stage8[039:032] ), .d( sa32_sub_round9 ));
|
aes_sbox us32_round9( .a(text_out_stage8[039:032] ), .d( sa32_sub_round9 ));
|
aes_sbox us33_round9( .a(text_out_stage8[007:000] ), .d( sa33_sub_round9 ));
|
aes_sbox us33_round9( .a(text_out_stage8[007:000] ), .d( sa33_sub_round9 ));
|
|
|
|
|
|
|
//shift rows
|
//shift rows
|
|
|
assign sa00_sr_round9 = sa00_sub_round9; //
|
assign sa00_sr_round9 = sa00_sub_round9; //
|
assign sa01_sr_round9 = sa01_sub_round9; //no shift
|
assign sa01_sr_round9 = sa01_sub_round9; //no shift
|
assign sa02_sr_round9 = sa02_sub_round9; //
|
assign sa02_sr_round9 = sa02_sub_round9; //
|
assign sa03_sr_round9 = sa03_sub_round9; //
|
assign sa03_sr_round9 = sa03_sub_round9; //
|
|
|
assign sa10_sr_round9 = sa11_sub_round9; //
|
assign sa10_sr_round9 = sa11_sub_round9; //
|
assign sa11_sr_round9 = sa12_sub_round9; // left shift by 1
|
assign sa11_sr_round9 = sa12_sub_round9; // left shift by 1
|
assign sa12_sr_round9 = sa13_sub_round9; //
|
assign sa12_sr_round9 = sa13_sub_round9; //
|
assign sa13_sr_round9 = sa10_sub_round9; //
|
assign sa13_sr_round9 = sa10_sub_round9; //
|
|
|
assign sa20_sr_round9 = sa22_sub_round9; //
|
assign sa20_sr_round9 = sa22_sub_round9; //
|
assign sa21_sr_round9 = sa23_sub_round9; // left shift by 2
|
assign sa21_sr_round9 = sa23_sub_round9; // left shift by 2
|
assign sa22_sr_round9 = sa20_sub_round9; //
|
assign sa22_sr_round9 = sa20_sub_round9; //
|
assign sa23_sr_round9 = sa21_sub_round9; //
|
assign sa23_sr_round9 = sa21_sub_round9; //
|
|
|
assign sa30_sr_round9 = sa33_sub_round9; //
|
assign sa30_sr_round9 = sa33_sub_round9; //
|
assign sa31_sr_round9 = sa30_sub_round9; // left shift by 3
|
assign sa31_sr_round9 = sa30_sub_round9; // left shift by 3
|
assign sa32_sr_round9 = sa31_sub_round9; //
|
assign sa32_sr_round9 = sa31_sub_round9; //
|
assign sa33_sr_round9 = sa32_sub_round9; //
|
assign sa33_sr_round9 = sa32_sub_round9; //
|
|
|
// mix column operation
|
// mix column operation
|
assign {sa00_mc_round9, sa10_mc_round9, sa20_mc_round9, sa30_mc_round9} = mix_col(sa00_sr_round9,sa10_sr_round9,sa20_sr_round9,sa30_sr_round9);
|
assign {sa00_mc_round9, sa10_mc_round9, sa20_mc_round9, sa30_mc_round9} = mix_col(sa00_sr_round9,sa10_sr_round9,sa20_sr_round9,sa30_sr_round9);
|
assign {sa01_mc_round9, sa11_mc_round9, sa21_mc_round9, sa31_mc_round9} = mix_col(sa01_sr_round9,sa11_sr_round9,sa21_sr_round9,sa31_sr_round9);
|
assign {sa01_mc_round9, sa11_mc_round9, sa21_mc_round9, sa31_mc_round9} = mix_col(sa01_sr_round9,sa11_sr_round9,sa21_sr_round9,sa31_sr_round9);
|
assign {sa02_mc_round9, sa12_mc_round9, sa22_mc_round9, sa32_mc_round9} = mix_col(sa02_sr_round9,sa12_sr_round9,sa22_sr_round9,sa32_sr_round9);
|
assign {sa02_mc_round9, sa12_mc_round9, sa22_mc_round9, sa32_mc_round9} = mix_col(sa02_sr_round9,sa12_sr_round9,sa22_sr_round9,sa32_sr_round9);
|
assign {sa03_mc_round9, sa13_mc_round9, sa23_mc_round9, sa33_mc_round9} = mix_col(sa03_sr_round9,sa13_sr_round9,sa23_sr_round9,sa33_sr_round9);
|
assign {sa03_mc_round9, sa13_mc_round9, sa23_mc_round9, sa33_mc_round9} = mix_col(sa03_sr_round9,sa13_sr_round9,sa23_sr_round9,sa33_sr_round9);
|
|
|
|
|
//add round key
|
//add round key
|
assign sa33_next_round10 = sa33_mc_round9 ^ w39[07:00];
|
assign sa33_next_round10 = sa33_mc_round9 ^ w39[07:00];
|
assign sa23_next_round10 = sa23_mc_round9 ^ w39[15:08];
|
assign sa23_next_round10 = sa23_mc_round9 ^ w39[15:08];
|
assign sa13_next_round10 = sa13_mc_round9 ^ w39[23:16];
|
assign sa13_next_round10 = sa13_mc_round9 ^ w39[23:16];
|
assign sa03_next_round10 = sa03_mc_round9 ^ w39[31:24];
|
assign sa03_next_round10 = sa03_mc_round9 ^ w39[31:24];
|
assign sa32_next_round10 = sa32_mc_round9 ^ w38[07:00];
|
assign sa32_next_round10 = sa32_mc_round9 ^ w38[07:00];
|
assign sa22_next_round10 = sa22_mc_round9 ^ w38[15:08];
|
assign sa22_next_round10 = sa22_mc_round9 ^ w38[15:08];
|
assign sa12_next_round10 = sa12_mc_round9 ^ w38[23:16];
|
assign sa12_next_round10 = sa12_mc_round9 ^ w38[23:16];
|
assign sa02_next_round10 = sa02_mc_round9 ^ w38[31:24];
|
assign sa02_next_round10 = sa02_mc_round9 ^ w38[31:24];
|
assign sa31_next_round10 = sa31_mc_round9 ^ w37[07:00];
|
assign sa31_next_round10 = sa31_mc_round9 ^ w37[07:00];
|
assign sa21_next_round10 = sa21_mc_round9 ^ w37[15:08];
|
assign sa21_next_round10 = sa21_mc_round9 ^ w37[15:08];
|
assign sa11_next_round10 = sa11_mc_round9 ^ w37[23:16];
|
assign sa11_next_round10 = sa11_mc_round9 ^ w37[23:16];
|
assign sa01_next_round10 = sa01_mc_round9 ^ w37[31:24];
|
assign sa01_next_round10 = sa01_mc_round9 ^ w37[31:24];
|
assign sa30_next_round10 = sa30_mc_round9 ^ w36[07:00];
|
assign sa30_next_round10 = sa30_mc_round9 ^ w36[07:00];
|
assign sa20_next_round10 = sa20_mc_round9 ^ w36[15:08];
|
assign sa20_next_round10 = sa20_mc_round9 ^ w36[15:08];
|
assign sa10_next_round10 = sa10_mc_round9 ^ w36[23:16];
|
assign sa10_next_round10 = sa10_mc_round9 ^ w36[23:16];
|
assign sa00_next_round10 = sa00_mc_round9 ^ w36[31:24];
|
assign sa00_next_round10 = sa00_mc_round9 ^ w36[31:24];
|
|
|
|
|
|
|
always @(posedge clk)
|
always @(posedge clk)
|
begin
|
begin
|
text_out_stage9[127:120] <= sa00_next_round10;
|
text_out_stage9[127:120] <= sa00_next_round10;
|
text_out_stage9[095:088] <= sa01_next_round10;
|
text_out_stage9[095:088] <= sa01_next_round10;
|
text_out_stage9[063:056] <= sa02_next_round10;
|
text_out_stage9[063:056] <= sa02_next_round10;
|
text_out_stage9[031:024] <= sa03_next_round10;
|
text_out_stage9[031:024] <= sa03_next_round10;
|
text_out_stage9[119:112] <= sa10_next_round10;
|
text_out_stage9[119:112] <= sa10_next_round10;
|
text_out_stage9[087:080] <= sa11_next_round10;
|
text_out_stage9[087:080] <= sa11_next_round10;
|
text_out_stage9[055:048] <= sa12_next_round10;
|
text_out_stage9[055:048] <= sa12_next_round10;
|
text_out_stage9[023:016] <= sa13_next_round10;
|
text_out_stage9[023:016] <= sa13_next_round10;
|
text_out_stage9[111:104] <= sa20_next_round10;
|
text_out_stage9[111:104] <= sa20_next_round10;
|
text_out_stage9[079:072] <= sa21_next_round10;
|
text_out_stage9[079:072] <= sa21_next_round10;
|
text_out_stage9[047:040] <= sa22_next_round10;
|
text_out_stage9[047:040] <= sa22_next_round10;
|
text_out_stage9[015:008] <= sa23_next_round10;
|
text_out_stage9[015:008] <= sa23_next_round10;
|
text_out_stage9[103:096] <= sa30_next_round10;
|
text_out_stage9[103:096] <= sa30_next_round10;
|
text_out_stage9[071:064] <= sa31_next_round10;
|
text_out_stage9[071:064] <= sa31_next_round10;
|
text_out_stage9[039:032] <= sa32_next_round10;
|
text_out_stage9[039:032] <= sa32_next_round10;
|
text_out_stage9[007:000] <= sa33_next_round10;
|
text_out_stage9[007:000] <= sa33_next_round10;
|
|
|
end
|
end
|
|
|
|
|
|
|
////////////////////// round 10 //////////////////////////////////
|
////////////////////// round 10 //////////////////////////////////
|
|
|
//sbox lookup
|
//sbox lookup
|
aes_sbox us00_round10( .a(text_out_stage9[127:120] ), .d( sa00_sub_round10 ));
|
aes_sbox us00_round10( .a(text_out_stage9[127:120] ), .d( sa00_sub_round10 ));
|
aes_sbox us01_round10( .a(text_out_stage9[095:088] ), .d( sa01_sub_round10 ));
|
aes_sbox us01_round10( .a(text_out_stage9[095:088] ), .d( sa01_sub_round10 ));
|
aes_sbox us02_round10( .a(text_out_stage9[063:056] ), .d( sa02_sub_round10 ));
|
aes_sbox us02_round10( .a(text_out_stage9[063:056] ), .d( sa02_sub_round10 ));
|
aes_sbox us03_round10( .a(text_out_stage9[031:024] ), .d( sa03_sub_round10 ));
|
aes_sbox us03_round10( .a(text_out_stage9[031:024] ), .d( sa03_sub_round10 ));
|
aes_sbox us10_round10( .a(text_out_stage9[119:112] ), .d( sa10_sub_round10 ));
|
aes_sbox us10_round10( .a(text_out_stage9[119:112] ), .d( sa10_sub_round10 ));
|
aes_sbox us11_round10( .a(text_out_stage9[087:080] ), .d( sa11_sub_round10 ));
|
aes_sbox us11_round10( .a(text_out_stage9[087:080] ), .d( sa11_sub_round10 ));
|
aes_sbox us12_round10( .a(text_out_stage9[055:048] ), .d( sa12_sub_round10 ));
|
aes_sbox us12_round10( .a(text_out_stage9[055:048] ), .d( sa12_sub_round10 ));
|
aes_sbox us13_round10( .a(text_out_stage9[023:016] ), .d( sa13_sub_round10 ));
|
aes_sbox us13_round10( .a(text_out_stage9[023:016] ), .d( sa13_sub_round10 ));
|
aes_sbox us20_round10( .a(text_out_stage9[111:104] ), .d( sa20_sub_round10 ));
|
aes_sbox us20_round10( .a(text_out_stage9[111:104] ), .d( sa20_sub_round10 ));
|
aes_sbox us21_round10( .a(text_out_stage9[079:072] ), .d( sa21_sub_round10 ));
|
aes_sbox us21_round10( .a(text_out_stage9[079:072] ), .d( sa21_sub_round10 ));
|
aes_sbox us22_round10( .a(text_out_stage9[047:040] ), .d( sa22_sub_round10 ));
|
aes_sbox us22_round10( .a(text_out_stage9[047:040] ), .d( sa22_sub_round10 ));
|
aes_sbox us23_round10( .a(text_out_stage9[015:008] ), .d( sa23_sub_round10 ));
|
aes_sbox us23_round10( .a(text_out_stage9[015:008] ), .d( sa23_sub_round10 ));
|
aes_sbox us30_round10( .a(text_out_stage9[103:096] ), .d( sa30_sub_round10 ));
|
aes_sbox us30_round10( .a(text_out_stage9[103:096] ), .d( sa30_sub_round10 ));
|
aes_sbox us31_round10( .a(text_out_stage9[071:064] ), .d( sa31_sub_round10 ));
|
aes_sbox us31_round10( .a(text_out_stage9[071:064] ), .d( sa31_sub_round10 ));
|
aes_sbox us32_round10( .a(text_out_stage9[039:032] ), .d( sa32_sub_round10 ));
|
aes_sbox us32_round10( .a(text_out_stage9[039:032] ), .d( sa32_sub_round10 ));
|
aes_sbox us33_round10( .a(text_out_stage9[007:000] ), .d( sa33_sub_round10 ));
|
aes_sbox us33_round10( .a(text_out_stage9[007:000] ), .d( sa33_sub_round10 ));
|
|
|
|
|
|
|
//shift rows
|
//shift rows
|
|
|
assign sa00_sr_round10 = sa00_sub_round10; //
|
assign sa00_sr_round10 = sa00_sub_round10; //
|
assign sa01_sr_round10 = sa01_sub_round10; //no shift
|
assign sa01_sr_round10 = sa01_sub_round10; //no shift
|
assign sa02_sr_round10 = sa02_sub_round10; //
|
assign sa02_sr_round10 = sa02_sub_round10; //
|
assign sa03_sr_round10 = sa03_sub_round10; //
|
assign sa03_sr_round10 = sa03_sub_round10; //
|
|
|
assign sa10_sr_round10 = sa11_sub_round10; //
|
assign sa10_sr_round10 = sa11_sub_round10; //
|
assign sa11_sr_round10 = sa12_sub_round10; // left shift by 1
|
assign sa11_sr_round10 = sa12_sub_round10; // left shift by 1
|
assign sa12_sr_round10 = sa13_sub_round10; //
|
assign sa12_sr_round10 = sa13_sub_round10; //
|
assign sa13_sr_round10 = sa10_sub_round10; //
|
assign sa13_sr_round10 = sa10_sub_round10; //
|
|
|
assign sa20_sr_round10 = sa22_sub_round10; //
|
assign sa20_sr_round10 = sa22_sub_round10; //
|
assign sa21_sr_round10 = sa23_sub_round10; // left shift by 2
|
assign sa21_sr_round10 = sa23_sub_round10; // left shift by 2
|
assign sa22_sr_round10 = sa20_sub_round10; //
|
assign sa22_sr_round10 = sa20_sub_round10; //
|
assign sa23_sr_round10 = sa21_sub_round10; //
|
assign sa23_sr_round10 = sa21_sub_round10; //
|
|
|
assign sa30_sr_round10 = sa33_sub_round10; //
|
assign sa30_sr_round10 = sa33_sub_round10; //
|
assign sa31_sr_round10 = sa30_sub_round10; // left shift by 3
|
assign sa31_sr_round10 = sa30_sub_round10; // left shift by 3
|
assign sa32_sr_round10 = sa31_sub_round10; //
|
assign sa32_sr_round10 = sa31_sub_round10; //
|
assign sa33_sr_round10 = sa32_sub_round10; //
|
assign sa33_sr_round10 = sa32_sub_round10; //
|
|
|
|
|
// Final text output
|
// Final text output
|
|
|
|
|
always @(posedge clk)
|
always @(posedge clk)
|
if(aes_en && ~rst)
|
|
begin
|
begin
|
/* $strobe($time,": round_key2 is %h\n",{w4,w5,w6,w7});
|
/* $strobe($time,": round_key2 is %h\n",{w4,w5,w6,w7});
|
$strobe($time,": roundkeyeven = %h, text_out_even is %h\n",{w4,w5,w6,w7},text_out);*/
|
$strobe($time,": roundkeyeven = %h, text_out_even is %h\n",{w4,w5,w6,w7},text_out);*/
|
text_out[127:120] <= sa00_sr_round10 ^ w40[31:24];
|
text_out[127:120] <= sa00_sr_round10 ^ w40[31:24];
|
text_out[095:088] <= sa01_sr_round10 ^ w41[31:24];
|
text_out[095:088] <= sa01_sr_round10 ^ w41[31:24];
|
text_out[063:056] <= sa02_sr_round10 ^ w42[31:24];
|
text_out[063:056] <= sa02_sr_round10 ^ w42[31:24];
|
text_out[031:024] <= sa03_sr_round10 ^ w43[31:24];
|
text_out[031:024] <= sa03_sr_round10 ^ w43[31:24];
|
text_out[119:112] <= sa10_sr_round10 ^ w40[23:16];
|
text_out[119:112] <= sa10_sr_round10 ^ w40[23:16];
|
text_out[087:080] <= sa11_sr_round10 ^ w41[23:16];
|
text_out[087:080] <= sa11_sr_round10 ^ w41[23:16];
|
text_out[055:048] <= sa12_sr_round10 ^ w42[23:16];
|
text_out[055:048] <= sa12_sr_round10 ^ w42[23:16];
|
text_out[023:016] <= sa13_sr_round10 ^ w43[23:16];
|
text_out[023:016] <= sa13_sr_round10 ^ w43[23:16];
|
text_out[111:104] <= sa20_sr_round10 ^ w40[15:08];
|
text_out[111:104] <= sa20_sr_round10 ^ w40[15:08];
|
text_out[079:072] <= sa21_sr_round10 ^ w41[15:08];
|
text_out[079:072] <= sa21_sr_round10 ^ w41[15:08];
|
text_out[047:040] <= sa22_sr_round10 ^ w42[15:08];
|
text_out[047:040] <= sa22_sr_round10 ^ w42[15:08];
|
text_out[015:008] <= sa23_sr_round10 ^ w43[15:08];
|
text_out[015:008] <= sa23_sr_round10 ^ w43[15:08];
|
text_out[103:096] <= sa30_sr_round10 ^ w40[07:00];
|
text_out[103:096] <= sa30_sr_round10 ^ w40[07:00];
|
text_out[071:064] <= sa31_sr_round10 ^ w41[07:00];
|
text_out[071:064] <= sa31_sr_round10 ^ w41[07:00];
|
text_out[039:032] <= sa32_sr_round10 ^ w42[07:00];
|
text_out[039:032] <= sa32_sr_round10 ^ w42[07:00];
|
text_out[007:000] <= sa33_sr_round10 ^ w43[07:00];
|
text_out[007:000] <= sa33_sr_round10 ^ w43[07:00];
|
end
|
end
|
|
|
else
|
|
text_out <= 128'hx;
|
|
|
|
|
|
always @(posedge clk)
|
|
begin
|
|
/* $strobe($time,": text_out_temp is %h\n",text_out_temp);
|
|
|
|
|
|
*/ /*
|
|
$strobe($time,": subbytes is %h\n",{sa00_sub, sa01_sub, sa02_sub, sa03_sub,
|
|
sa10_sub, sa11_sub, sa12_sub, sa13_sub,
|
|
sa20_sub, sa21_sub, sa22_sub, sa23_sub,
|
|
sa30_sub, sa31_sub, sa32_sub, sa33_sub});
|
|
|
|
$strobe($time,": shiftrows is %h\n",{sa00_sr, sa01_sr, sa02_sr, sa03_sr,
|
|
sa10_sr, sa11_sr, sa12_sr, sa13_sr,
|
|
sa20_sr, sa21_sr, sa22_sr, sa23_sr,
|
|
sa30_sr, sa31_sr, sa32_sr, sa33_sr});
|
|
|
|
$strobe($time,": mixcolumn is %h\n",{sa00_mc, sa01_mc, sa02_mc, sa03_mc,
|
|
sa10_mc, sa11_mc, sa12_mc, sa13_mc,
|
|
sa20_mc, sa21_mc, sa22_mc, sa23_mc,
|
|
sa30_mc, sa31_mc, sa32_mc, sa33_mc});
|
|
|
|
$strobe($time,": sa_next_into_even is %h\n",{sa00_next_round2, sa01_next_round2, sa02_next_round2, sa03_next_round2,
|
|
sa10_next_round2, sa11_next_round2, sa12_next_round2, sa13_next_round2,
|
|
sa20_next_round2, sa21_next_round2, sa22_next_round2, sa23_next_round2,
|
|
sa30_next_round2, sa31_next_round2, sa32_next_round2, sa33_next_round2});
|
|
|
|
$strobe($time,": subbytes_e is %h\n",{sa00_sub_round2, sa01_sub_round2, sa02_sub_round2, sa03_sub_round2,
|
|
sa10_sub_round2, sa11_sub_round2, sa12_sub_round2, sa13_sub_round2,
|
|
sa20_sub_round2, sa21_sub_round2, sa22_sub_round2, sa23_sub_round2,
|
|
sa30_sub_round2, sa31_sub_round2, sa32_sub_round2, sa33_sub_round2});
|
|
|
|
$strobe($time,": shiftrows_e is %h\n",{sa00_sr_round2, sa01_sr_round2, sa02_sr_round2, sa03_sr_round2,
|
|
sa10_sr_round2, sa11_sr_round2, sa12_sr_round2, sa13_sr_round2,
|
|
sa20_sr_round2, sa21_sr_round2, sa22_sr_round2, sa23_sr_round2,
|
|
sa30_sr_round2, sa31_sr_round2, sa32_sr_round2, sa33_sr_round2});
|
|
|
|
$strobe($time,": mixcolumn_e is %h\n",{sa00_mc_round2, sa01_mc_round2, sa02_mc_round2, sa03_mc_round2,
|
|
sa10_mc_round2, sa11_mc_round2, sa12_mc_round2, sa13_mc_round2,
|
|
sa20_mc_round2, sa21_mc_round2, sa22_mc_round2, sa23_mc_round2,
|
|
sa30_mc_round2, sa31_mc_round2, sa32_mc_round2, sa33_mc_round2});
|
|
*/
|
|
end
|
|
|
|
|
|
/*
|
|
always @(posedge clk)
|
|
begin
|
|
if(done)
|
|
begin
|
|
text_out_64 <= text_out[127:64];
|
|
// done2 <= 1;
|
|
end
|
|
else if(~done)
|
|
text_out_64 <= text_out[63:0];
|
|
end
|
|
*/
|
|
|
|
/*
|
|
always @(posedge clk)
|
|
begin
|
|
if(done2)
|
|
begin
|
|
text_out_64 <= text_out[63:0];
|
|
end
|
|
end
|
|
*/
|
|
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
//
|
//
|
// Generic Functions
|
// Generic Functions
|
//
|
//
|
|
|
function [31:0] mix_col;
|
function [31:0] mix_col;
|
input [7:0] s0,s1,s2,s3;
|
input [7:0] s0,s1,s2,s3;
|
//reg [7:0] s0_o,s1_o,s2_o,s3_o;
|
//reg [7:0] s0_o,s1_o,s2_o,s3_o;
|
begin
|
begin
|
mix_col[31:24]=xtime(s0)^xtime(s1)^s1^s2^s3;
|
mix_col[31:24]=xtime(s0)^xtime(s1)^s1^s2^s3;
|
mix_col[23:16]=s0^xtime(s1)^xtime(s2)^s2^s3;
|
mix_col[23:16]=s0^xtime(s1)^xtime(s2)^s2^s3;
|
mix_col[15:08]=s0^s1^xtime(s2)^xtime(s3)^s3;
|
mix_col[15:08]=s0^s1^xtime(s2)^xtime(s3)^s3;
|
mix_col[07:00]=xtime(s0)^s0^s1^s2^xtime(s3);
|
mix_col[07:00]=xtime(s0)^s0^s1^s2^xtime(s3);
|
end
|
end
|
endfunction
|
endfunction
|
|
|
function [7:0] xtime;
|
function [7:0] xtime;
|
input [7:0] b; xtime={b[6:0],1'b0}^(8'h1b&{8{b[7]}});
|
input [7:0] b; xtime={b[6:0],1'b0}^(8'h1b&{8{b[7]}});
|
endfunction
|
endfunction
|
|
|
|
|
|
|
endmodule
|
endmodule
|
|
|
|
|
|
|
|
|