⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 aes_top.v

📁 aes加密算法实现
💻 V
字号:
`timescale 1ns / 10ps

module aes_top    (clk, 
                   rst, 
                   aes_en,
                   aes_datai,
                   aes_oe,
                   aes_we,
                   aes_addr,
                   aes_datao,
                   aes_done
                   );
                   
input clk;
input rst;
input aes_en;
input [7:0]aes_datai;

output aes_oe;
output aes_we;
output [7:0]aes_addr;
output [7:0]aes_datao;
output aes_done;            

reg aes_oe;
reg aes_we;
reg [7:0]aes_addr;
reg [7:0]aes_datao;
reg aes_done;         
reg [5:0]counter;
reg [127:0]M;
reg [127:0]K;
reg ld;
reg kld0;
reg [31:0]key;
wire [127:0]text_out;
reg [31:0]text_in;
wire done;
wire [7:0]aes_datai;



always@(posedge clk)
   if (rst)
     begin
           aes_oe <=1;
           aes_we<=0;
           aes_addr<= 8'd0;
           aes_datao<=0;
           aes_done<=0;
           key <= 32'hx;
           text_in <= 32'hx;
           ld <=0;
           kld0 <=0;
      end
    else
      begin 
         case(counter)
           'd0:  begin
                            aes_oe<=1;
                            aes_addr<= 8'd15;
                   end
           'd1:begin
                            aes_addr<= 8'd14;
                 end  
           'd2:begin
                            aes_addr<= 8'd13;
                            K[127:120]<=aes_datai;
                 end  
           'd3:begin
                            aes_addr<= 8'd12;
                            K[119:112]<=aes_datai;
                 end  
           'd4:begin
                            aes_addr<= 8'd11;
                            K[111:104]<=aes_datai;
                 end  
           'd5:begin
                            aes_addr<= 8'd10;
                            K[103:96]<=aes_datai;
                 end  
           'd6:begin
                            aes_addr<= 8'd9;
                            K[95:88]<=aes_datai;
                 end  
           'd7:begin
                            aes_addr<= 8'd8;
                            K[87:80]<=aes_datai;
                 end  
           'd8:begin
                            aes_addr<= 8'd7;
                            K[79:72]<=aes_datai;
                 end
           'd9:begin
                            aes_addr<= 8'd6;
                            K[71:64]<=aes_datai;
                 end    
           'd10:  begin
                            aes_addr<= 8'd5;
                            K[63:56]<=aes_datai;
                   end
           'd11:begin
                            aes_addr<= 8'd4;
                            K[55:48]<=aes_datai;
                 end  
           'd12:begin
                            aes_addr<= 8'd3;
                            K[47:40]<=aes_datai;
                 end  
           'd13:begin
                            aes_addr<= 8'd2;
                            K[39:32]<=aes_datai;
                 end  
           'd14:begin
                            aes_addr<= 8'd1;
                            K[31:24]<=aes_datai;
                 end  
           'd15:begin
                            aes_addr<= 8'd0;
                            K[23:16]<=aes_datai;
                 end  
           'd16:begin
                            aes_addr<= 8'd31;
                            K[15:8]<=aes_datai;
                 end  
           'd17:begin
                            aes_addr<= 8'd30;
                            K[7:0]<=aes_datai;
                 end  
           'd18:begin
                            aes_addr<= 8'd29;
                            M[127:120]<=aes_datai;
                 end
           'd19:begin
                            aes_addr<= 8'd28;
                            M[119:112]<=aes_datai;
                 end    
           'd20:  begin
                            aes_addr<= 8'd27;
                            M[111:104]<=aes_datai;
                   end
           'd21:begin
                            aes_addr<= 8'd26;
                            M[103:96]<=aes_datai;
                 end  
           'd22:begin
                            aes_addr<= 8'd25;
                            M[95:88]<=aes_datai;
                 end  
           'd23:begin
                            aes_addr<= 8'd24;
                            M[87:80]<=aes_datai;
                 end  
           'd24:begin
                            aes_addr<= 8'd23;
                            M[79:72]<=aes_datai;
                 end  
           'd25:begin
                            aes_addr<= 8'd22;
                            M[71:64]<=aes_datai;
                 end  
           'd26:begin
                            aes_addr<= 8'd21;
                            M[63:56]<=aes_datai;
                 end  
           'd27:begin
                            aes_addr<= 8'd20;
                            M[55:48]<=aes_datai;
                 end  
           'd28:begin
                            aes_addr<= 8'd19;
                            M[47:40]<=aes_datai;
                 end
           'd29:begin
                            aes_addr<= 8'd18;
                            M[39:32]<=aes_datai;
                 end    
           'd30:  begin
                            aes_addr<= 8'd17;
                            M[31:24]<=aes_datai;
                   end
           'd31:begin
                            aes_addr<= 8'd16;
                            M[23:16]<=aes_datai;
                 end
           'd32:begin
                            M[15:8]<=aes_datai;
                  end  
           'd33:begin
                            aes_oe<=0;
                            M[7:0]<=aes_datai;
                            ld <=1;
                            kld0 <=1;
                            text_in <=M[127:96];
                            key <= K[127:96];
                  end  
           'd34:begin
                            ld <=0;
                            kld0 <=0;
                            text_in <=M[95:64];
                            key <= K[95:64];
                  end  
           'd35:begin
                            text_in <=M[63:32];
                            key <= K[63:32];
                  end  
           'd36:begin
                            text_in <=M[31:0];
                            key <= K[31:0];
                  end
           'd37:begin
                              key <= 32'hx;
                              text_in <= 32'hx;  
                  end
           'd38:begin
                              aes_we <=1;                      
                  end
           'd39:begin
                              aes_addr<= 8'd31;        
                              aes_datao <= text_out[127:120];
                   end        
           'd40:begin
                              aes_addr<= 8'd30;    
                              aes_datao <= text_out[119:112];
                   end        
           'd41:begin
                              aes_addr<= 8'd29;    
                              aes_datao <= text_out[111:104];
                   end        
           'd42:begin
                              aes_addr<= 8'd28;    
                              aes_datao <= text_out[103:96];
                   end        
           'd43:begin
                              aes_addr<= 8'd27;    
                              aes_datao <= text_out[95:88];
                   end        
           'd44:begin
                              aes_addr<= 8'd26;    
                              aes_datao <= text_out[87:80];
                   end        
           'd45:begin
                              aes_addr<= 8'd25;    
                              aes_datao <= text_out[79:72];
                   end        
           'd46:begin
                              aes_addr<= 8'd24;    
                              aes_datao <= text_out[71:64];
                   end        
           'd47:begin
                              aes_addr<= 8'd23;    
                              aes_datao <= text_out[63:56];
                   end        
           'd48:begin
                              aes_addr<= 8'd22;    
                              aes_datao <= text_out[55:48];
                   end        
           'd49:begin
                              aes_addr<= 8'd21;    
                              aes_datao <= text_out[47:40];
                   end        
           'd50:begin
                              aes_addr<= 8'd20;    
                              aes_datao <= text_out[39:32];
                   end        
           'd51:begin
                              aes_addr<= 8'd19;    
                              aes_datao <= text_out[31:24];
                   end        
           'd52:begin
                              aes_addr<= 8'd18;    
                              aes_datao <= text_out[23:16];
                   end        
           'd53:begin
                              aes_addr<= 8'd17;    
                              aes_datao <= text_out[15:8];
                   end      
           'd54:begin
                              aes_addr<= 8'd16;    
                              aes_datao <= text_out[7:0];  
                              aes_done <=1;
                   end     
           'd55:begin
                              aes_done <=0;
                   end                 
           default: ;                   
           endcase
          end       
          
    always@(posedge clk)
     if(rst)
       counter <=0;              
     else if (aes_en)  
          begin    
                if (counter < 6'd37 | done)
                      counter <= counter +1;
                else
                      counter <= counter;
         end     
                  
                  
aes   myaes    (   .clk(clk), 
                   .rst(rst), 
                   .kld0(kld0), 
                   .ld(ld), 
                   .done(done),
                   .key(key), 
                   .text_in(text_in), 
                   .text_out(text_out) 
                   );
                                  
                 
  
                   
                   
                   endmodule
                   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -