OpenCores
URL https://opencores.org/ocsvn/aes_highthroughput_lowarea/aes_highthroughput_lowarea/trunk

Subversion Repositories aes_highthroughput_lowarea

[/] [aes_highthroughput_lowarea/] [trunk/] [verilog/] [rtl/] [key_exp.v] - Diff between revs 5 and 7

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 5 Rev 7
Line 12... Line 12...
////      - Luo Dongjun,   dongjun_luo@hotmail.com                ////
////      - Luo Dongjun,   dongjun_luo@hotmail.com                ////
////                                                              ////
////                                                              ////
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
module key_exp (
module key_exp (
   clk,
   clk,
   reset_n,
   reset,
   key_in,
   key_in,
   key_mode,
   key_mode,
   key_start,
   key_start,
   wr,
   wr,
   wr_addr,
   wr_addr,
   wr_data,
   wr_data,
   key_ready
   key_ready
);
);
 
 
input             clk;
input             clk;
input             reset_n;
input             reset;
input   [255:0]   key_in;   // initial key value
input   [255:0]   key_in;   // initial key value
input   [1:0]     key_mode; // 0:128, 1:192, 2:256
input   [1:0]     key_mode; // 0:128, 1:192, 2:256
input             key_start;// start key expansion
input             key_start;// start key expansion
output            wr;       // key expansion ram interface
output            wr;       // key expansion ram interface
output  [4:0]     wr_addr;
output  [4:0]     wr_addr;
Line 62... Line 62...
            GENKEY_256 = 2'b11;
            GENKEY_256 = 2'b11;
 
 
assign max_round_p1[3:0] = (key_mode == 2'b00) ? 4'd11 : (key_mode == 2'b01 ? 4'd13 : 4'd15);
assign max_round_p1[3:0] = (key_mode == 2'b00) ? 4'd11 : (key_mode == 2'b01 ? 4'd13 : 4'd15);
 
 
// rcon generation
// rcon generation
always @ (posedge clk or negedge reset_n)
always @ (posedge clk or posedge reset)
begin
begin
   if (!reset_n)
   if (reset)
   begin
   begin
      rcon[31:0] <= 32'h01000000;
      rcon[31:0] <= 32'h01000000;
      rcon_is_1b <= 1'b0;
      rcon_is_1b <= 1'b0;
   end
   end
   else if (key_start)
   else if (key_start)
Line 95... Line 95...
 
 
/*****************************************************************************/
/*****************************************************************************/
// State machine for Key expansion
// State machine for Key expansion
//
//
//
//
always @ (posedge clk or negedge reset_n)
always @ (posedge clk or posedge reset)
begin
begin
   if (!reset_n)
   if (reset)
   begin
   begin
      state[1:0]  <= IDLE;
      state[1:0]  <= IDLE;
      pstate[1:0] <= IDLE;
      pstate[1:0] <= IDLE;
   end
   end
   else
   else
Line 144... Line 144...
      end
      end
   endcase
   endcase
end
end
 
 
// round counter: 10/12/14
// round counter: 10/12/14
always @ (posedge clk or negedge reset_n)
always @ (posedge clk or posedge reset)
begin
begin
   if (!reset_n)
   if (reset)
      round[3:0] <= 1'b0;
      round[3:0] <= 1'b0;
   else if (nstate[1:0] == IDLE)
   else if (nstate[1:0] == IDLE)
      round[3:0] <= 4'b0;
      round[3:0] <= 4'b0;
   else if (state[1:0] == START)
   else if (state[1:0] == START)
      round[3:0] <= round[3:0] + 1'b1;
      round[3:0] <= round[3:0] + 1'b1;
end
end
 
 
always @ (posedge clk or negedge reset_n)
always @ (posedge clk or posedge reset)
begin
begin
   if (!reset_n)
   if (reset)
   begin
   begin
      sbox_in_valid <= 1'b0;
      sbox_in_valid <= 1'b0;
      sbox_in[31:0] <= 32'b0;
      sbox_in[31:0] <= 32'b0;
   end
   end
   else if (state[1:0] == START) // rotword
   else if (state[1:0] == START) // rotword
Line 180... Line 180...
   end
   end
   else
   else
      sbox_in_valid <= 1'b0;
      sbox_in_valid <= 1'b0;
end
end
 
 
always @ (posedge clk or negedge reset_n)
always @ (posedge clk or posedge reset)
begin
begin
   if (!reset_n)
   if (reset)
      valid[4:0] <= 5'b0;
      valid[4:0] <= 5'b0;
   else
   else
      valid[4:0] <= {valid[3:0],sbox_in_valid};
      valid[4:0] <= {valid[3:0],sbox_in_valid};
end
end
assign sbox_out_valid = valid[1];
assign sbox_out_valid = valid[1];
 
 
sbox u_0(.clk(clk),.reset_n(reset_n),.enable(1'b1),.din(sbox_in[7:0]),.ende(1'b0),.en_dout(sbox_out[7:0]),.de_dout());
sbox u_0(.clk(clk),.reset(reset),.enable(1'b1),.din(sbox_in[7:0]),.ende(1'b0),.en_dout(sbox_out[7:0]),.de_dout());
sbox u_1(.clk(clk),.reset_n(reset_n),.enable(1'b1),.din(sbox_in[15:8]),.ende(1'b0),.en_dout(sbox_out[15:8]),.de_dout());
sbox u_1(.clk(clk),.reset(reset),.enable(1'b1),.din(sbox_in[15:8]),.ende(1'b0),.en_dout(sbox_out[15:8]),.de_dout());
sbox u_2(.clk(clk),.reset_n(reset_n),.enable(1'b1),.din(sbox_in[23:16]),.ende(1'b0),.en_dout(sbox_out[23:16]),.de_dout());
sbox u_2(.clk(clk),.reset(reset),.enable(1'b1),.din(sbox_in[23:16]),.ende(1'b0),.en_dout(sbox_out[23:16]),.de_dout());
sbox u_3(.clk(clk),.reset_n(reset_n),.enable(1'b1),.din(sbox_in[31:24]),.ende(1'b0),.en_dout(sbox_out[31:24]),.de_dout());
sbox u_3(.clk(clk),.reset(reset),.enable(1'b1),.din(sbox_in[31:24]),.ende(1'b0),.en_dout(sbox_out[31:24]),.de_dout());
 
 
/*****************************************************************************/
/*****************************************************************************/
// key expansion calculation
// key expansion calculation
//
//
//
//
Line 209... Line 209...
assign w4_next2[31:0] = sbox_out[31:0] ^ w4[31:0];
assign w4_next2[31:0] = sbox_out[31:0] ^ w4[31:0];
assign w5_next2[31:0] = w4_next2[31:0]^w5[31:0];
assign w5_next2[31:0] = w4_next2[31:0]^w5[31:0];
assign w6_next[31:0] = w5_next2[31:0]^w6[31:0];
assign w6_next[31:0] = w5_next2[31:0]^w6[31:0];
assign w7_next[31:0] = w6_next[31:0]^w7[31:0];
assign w7_next[31:0] = w6_next[31:0]^w7[31:0];
 
 
always @ (posedge clk or negedge reset_n)
always @ (posedge clk or posedge reset)
begin
begin
   if (!reset_n)
   if (reset)
   begin
   begin
      {w0[31:0],w1[31:0],w2[31:0],w3[31:0],w4[31:0],w5[31:0],w6[31:0],w7[31:0]} <= 256'b0;
      {w0[31:0],w1[31:0],w2[31:0],w3[31:0],w4[31:0],w5[31:0],w6[31:0],w7[31:0]} <= 256'b0;
   end
   end
   else if (key_start)
   else if (key_start)
   begin
   begin
Line 263... Line 263...
 
 
assign wr_data1[63:0] = wr_256 ?{w4[31:0],w5[31:0]} : {w0[31:0],w1[31:0]};
assign wr_data1[63:0] = wr_256 ?{w4[31:0],w5[31:0]} : {w0[31:0],w1[31:0]};
assign wr_data2[63:0] = wr_256 ?{w6[31:0],w7[31:0]} : {w2[31:0],w3[31:0]};
assign wr_data2[63:0] = wr_256 ?{w6[31:0],w7[31:0]} : {w2[31:0],w3[31:0]};
assign wr_data3[63:0] = {w4[31:0],w5[31:0]};
assign wr_data3[63:0] = {w4[31:0],w5[31:0]};
 
 
always @ (posedge clk or negedge reset_n)
always @ (posedge clk or posedge reset)
begin
begin
   if (!reset_n)
   if (reset)
      wr_256 <= 1'b0;
      wr_256 <= 1'b0;
   else if (key_start)
   else if (key_start)
      wr_256 <= 1'b0;
      wr_256 <= 1'b0;
   else if (sbox_out_valid && (state[1:0] == GENKEY_256))
   else if (sbox_out_valid && (state[1:0] == GENKEY_256))
      wr_256 <= 1'b1;
      wr_256 <= 1'b1;
   else if (sbox_out_valid)
   else if (sbox_out_valid)
      wr_256 <= 1'b0;
      wr_256 <= 1'b0;
end
end
 
 
always @ (posedge clk or negedge reset_n)
always @ (posedge clk or posedge reset)
begin
begin
   if (!reset_n)
   if (reset)
      {key_start_L3,key_start_L2,key_start_L} <= 3'b0;
      {key_start_L3,key_start_L2,key_start_L} <= 3'b0;
   else
   else
      {key_start_L3,key_start_L2,key_start_L} <= {key_start_L2,key_start_L,key_start};
      {key_start_L3,key_start_L2,key_start_L} <= {key_start_L2,key_start_L,key_start};
end
end
 
 
always @ (posedge clk or negedge reset_n)
always @ (posedge clk or posedge reset)
begin
begin
   if (!reset_n)
   if (reset)
      wr <= 1'b0;
      wr <= 1'b0;
   else
   else
      wr <= wr1 || wr2 || wr3 || init_wr1 || init_wr2 || init_wr3 || init_wr4;
      wr <= wr1 || wr2 || wr3 || init_wr1 || init_wr2 || init_wr3 || init_wr4;
end
end
 
 
always @ (posedge clk or negedge reset_n)
always @ (posedge clk or posedge reset)
begin
begin
   if (!reset_n)
   if (reset)
   begin
   begin
      wr_data[63:0] <= 64'b0;
      wr_data[63:0] <= 64'b0;
   end
   end
   else
   else
   begin
   begin
Line 316... Line 316...
      else if (wr3)
      else if (wr3)
         wr_data[63:0] <= wr_data3[63:0];
         wr_data[63:0] <= wr_data3[63:0];
   end
   end
end
end
 
 
always @ (posedge clk or negedge reset_n)
always @ (posedge clk or posedge reset)
begin
begin
   if (!reset_n)
   if (reset)
      wr_addr[4:0] <= 5'b0;
      wr_addr[4:0] <= 5'b0;
   else if (key_start)
   else if (key_start)
      wr_addr[4:0] <= 5'd0;
      wr_addr[4:0] <= 5'd0;
   else if (wr)
   else if (wr)
      wr_addr[4:0] <= wr_addr[4:0] + 1'b1;
      wr_addr[4:0] <= wr_addr[4:0] + 1'b1;
end
end
 
 
always @ (posedge clk or negedge reset_n)
always @ (posedge clk or posedge reset)
begin
begin
   if (!reset_n)
   if (reset)
      key_ready <= 1'b0;
      key_ready <= 1'b0;
   else if (key_start)
   else if (key_start)
      key_ready <= 1'b0;
      key_ready <= 1'b0;
   else if (wr_addr[4:1] == max_round_p1[3:0])
   else if (wr_addr[4:1] == max_round_p1[3:0])
      key_ready <= 1'b1;
      key_ready <= 1'b1;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.