output [128*11-1:0] o_exkey,
output [31:0] o_sbox_din,
ROL = {D[23:0],D[31:24]};
4'd0: r_rcon = 32'h01000000;
4'd1: r_rcon = 32'h02000000;
4'd2: r_rcon = 32'h04000000;
4'd3: r_rcon = 32'h08000000;
4'd4: r_rcon = 32'h10000000;
4'd5: r_rcon = 32'h20000000;
4'd6: r_rcon = 32'h40000000;
4'd7: r_rcon = 32'h80000000;
4'd8: r_rcon = 32'h1B000000;
4'd9: r_rcon = 32'h36000000;
assign s_key = i_key_en ? i_key : r_key;
assign o_sbox_use = s_busy;
assign o_sbox_din = ROL(s_key[31:0]);
assign s_exk[127:96] = s_key[127:96]^i_sbox_dout^r_rcon;
assign s_exk[95:64] = s_key[95:64]^s_exk[127:96];
assign s_exk[63:32] = s_key[63:32]^s_exk[95:64];
assign s_exk[31:0] = s_key[31:0]^s_exk[63:32];
always@(posedge i_clk) begin
always@(posedge i_clk) begin
r_exkey <= #DLY {r_exkey[128*9-1:0],s_exk};
always@(posedge i_clk) begin
r_count <= #DLY r_count + 4'd1;
assign s_busy = ((r_count!=5'd0)||(i_key_en==1'b1)) ? 1'b1 : 1'b0;
always@(posedge i_clk) begin
assign o_key_ok = r_key_ok&(~i_key_en);
assign o_exkey = {i_key,r_exkey};