风也温柔

计算机科学知识库

java实现推荐算法实例 AES算法中S盒的FPGA实现 II

  AES算法中S盒的FPGA实现 II

  语言 : EDA

  工具 :

  仿真 :

  三、S盒FPGA实现的仿真

  一、引言

  在 AES算法中S盒的FPGA实现 I 中简介了S盒的解释和具体的内容java实现推荐算法实例, 本篇博客, 主要讲解如何在FPGA中实现S盒。

  二、S盒的FPGA实现 2.1 模块的FPGA实现

<p><pre>module write_data(

input clk ,
input rst_n,

input[1:0] Sbox_mode,

input          Sbox_write_en,
output reg        Sbox_ready,
output reg[3:0]     data0 ,    
output reg[3:0]     data1 ,
output reg[3:0]     data2 ,    
output reg[3:0]     data3 ,
output reg[3:0]     data4 ,    
output reg[3:0]     data5 ,
output reg[3:0]     data6 ,    
output reg[3:0]     data7 ,
output reg[3:0]     data8 ,    
output reg[3:0]     data9 ,
output reg[3:0]     data10,    
output reg[3:0]     data11,
output reg[3:0]     data12,    
output reg[3:0]     data13,
output reg[3:0]     data14,    
output reg[3:0]     data15,
output reg[3:0]     data16,    
output reg[3:0]     data17,    
output reg[3:0]     data18,
output reg[3:0]     data19,    
output reg[3:0]     data20,
output reg[3:0]     data21,    
output reg[3:0]     data22,
output reg[3:0]     data23,    
output reg[3:0]     data24,
output reg[3:0]     data25,    
output reg[3:0]     data26,
output reg[3:0]     data27,    
output reg[3:0]     data28,
output reg[3:0]     data29,    
output reg[3:0]     data30,
output reg[3:0]     data31,        
output reg[3:0]     wraddr,
output reg         wren  

);
parameter IDLE = 3'd0;
parameter WRITE_CHOOSE = 3'd1;
parameter WRITE_MODE1 = 3'd2;
parameter WRITE_MODE2 = 3'd3;
parameter WRITE_MODE3 = 3'd4;
parameter WRITE_MODE4 = 3'd5;
parameter WRITE_FINISH = 3'd6;
parameter MODE1_DATA = 128'H02010704080F0E030D0A00090B06050C;
parameter MODE2_DATA = 128'H050806030C07020B000A090D010F0E04;
parameter MODE3_DATA = 128'H050C0607030802010B0A040D000F090E;
parameter MODE4_DATA0= 128'H76ABD7FE2B670130C56F6BF27B777C63;
parameter MODE4_DATA1= 128'HC072A49CAFA2D4ADF04759FA7DC982CA;
parameter MODE4_DATA2= 128'H1531D871F1E5A534CCF73F362693FDB7;
parameter MODE4_DATA3= 128'H75B227EBE28012079A059618C323C704;
parameter MODE4_DATA4= 128'H842FE329B3D63B52A05A6E1B1A2C8309;
parameter MODE4_DATA5= 128'HCF584C4A39BECB6A5BB1FC20ED00D153;
parameter MODE4_DATA6= 128'HA89F3C507F02F94585334D43FBAAEFD0;
parameter MODE4_DATA7= 128'HD2F3FF1021DAB6BCF5389D928F40A351;
parameter MODE4_DATA8= 128'H73195D643D7EA7C41744975FEC130CCD;
parameter MODE4_DATA9= 128'HDB0B5EDE14B8EE4688902A22DC4F8160;
parameter MODE4_DATA10=128'H79E4959162ACD3C25C2406490A3A32E0;
parameter MODE4_DATA11=128'H08AE7A65EAF4566CA94ED58D6D37C8E7;
parameter MODE4_DATA12=128'H8A8BBD4B1F74DDE8C6B4A61C2E2578BA;
parameter MODE4_DATA13=128'H9E1DC186B95735610EF6034866B53E70;
parameter MODE4_DATA14=128'HDF2B55CEE9871E9B948ED9691198F8E1;
parameter MODE4_DATA15=128'H16BB54B00F2D99416842E6BF0D89A18C;

reg Sbox_write_en_reg;
wire Sbox_write_en_pos;
reg[2:0] state;
wire Sbox_ready_neg;
assign Sbox_write_en_pos = Sbox_write_en && !Sbox_write_en_reg;
always@(posedge clk or negedge rst_n)
begin

if( !rst_n )
    Sbox_write_en_reg