|
- `timescale 1ns / 1ps
- //////////////////////////////////////////////////////////////////////////////////
- // Company:
- // Engineer:
- //
- // Create Date: 2021/06/30 22:22:08
- // Design Name:
- // Module Name: keccakf_1t
- // Project Name:
- // Target Devices:
- // Tool Versions:
- // Description:
- //
- // Dependencies:
- //
- // Revision:
- // Revision 0.01 - File Created
- // Additional Comments:
- //
- //////////////////////////////////////////////////////////////////////////////////
-
-
- module keccakf_1t(
- input wire [1599:0]in,
- input wire [63:0]RC,
- output wire [1599:0]out
- );
-
-
-
- wire [63:0]A_in[24:0];
- wire [63:0]A_the[24:0];
- wire [63:0]A_rho[24:0];
- wire [63:0]A_pi[24:0];
- wire [63:0]A_out[24:0];
-
- wire [63:0]C[4:0];
- wire [63:0]D[4:0];
- wire [63:0]E[24:0];
-
- assign A_in[0] = in[ 63 : 0];
- assign A_in[1] = in[ 127 : 64];
- assign A_in[2] = in[ 191 : 128];
- assign A_in[3] = in[ 255 : 192];
- assign A_in[4] = in[ 319 : 256];
- assign A_in[5] = in[ 383 : 320];
- assign A_in[6] = in[ 447 : 384];
- assign A_in[7] = in[ 511 : 448];
- assign A_in[8] = in[ 575 : 512];
- assign A_in[9] = in[ 639 : 576];
- assign A_in[10] = in[ 703 : 640];
- assign A_in[11] = in[ 767 : 704];
- assign A_in[12] = in[ 831 : 768];
- assign A_in[13] = in[ 895 : 832];
- assign A_in[14] = in[ 959 : 896];
- assign A_in[15] = in[ 1023 : 960];
- assign A_in[16] = in[ 1087 : 1024];
- assign A_in[17] = in[ 1151 : 1088];
- assign A_in[18] = in[ 1215 : 1152];
- assign A_in[19] = in[ 1279 : 1216];
- assign A_in[20] = in[ 1343 : 1280];
- assign A_in[21] = in[ 1407 : 1344];
- assign A_in[22] = in[ 1471 : 1408];
- assign A_in[23] = in[ 1535 : 1472];
- assign A_in[24] = in[ 1599 : 1536];
-
- //theta
- assign C[0] = A_in[0]^A_in[5]^A_in[10]^A_in[15]^A_in[20];
- assign C[1] = A_in[1]^A_in[6]^A_in[11]^A_in[16]^A_in[21];
- assign C[2] = A_in[2]^A_in[7]^A_in[12]^A_in[17]^A_in[22];
- assign C[3] = A_in[3]^A_in[8]^A_in[13]^A_in[18]^A_in[23];
- assign C[4] = A_in[4]^A_in[9]^A_in[14]^A_in[19]^A_in[24];
-
- assign D[0] = C[4] ^ {C[1][62:0], C[1][63:63]};
- assign D[1] = C[0] ^ {C[2][62:0], C[2][63:63]};
- assign D[2] = C[1] ^ {C[3][62:0], C[3][63:63]};
- assign D[3] = C[2] ^ {C[4][62:0], C[4][63:63]};
- assign D[4] = C[3] ^ {C[0][62:0], C[0][63:63]};
-
- assign A_the[0] = A_in[0]^D[0];
- assign A_the[1] = A_in[1]^D[1];
- assign A_the[2] = A_in[2]^D[2];
- assign A_the[3] = A_in[3]^D[3];
- assign A_the[4] = A_in[4]^D[4];
- assign A_the[5] = A_in[5]^D[0];
- assign A_the[6] = A_in[6]^D[1];
- assign A_the[7] = A_in[7]^D[2];
- assign A_the[8] = A_in[8]^D[3];
- assign A_the[9] = A_in[9]^D[4];
- assign A_the[10] = A_in[10]^D[0];
- assign A_the[11] = A_in[11]^D[1];
- assign A_the[12] = A_in[12]^D[2];
- assign A_the[13] = A_in[13]^D[3];
- assign A_the[14] = A_in[14]^D[4];
- assign A_the[15] = A_in[15]^D[0];
- assign A_the[16] = A_in[16]^D[1];
- assign A_the[17] = A_in[17]^D[2];
- assign A_the[18] = A_in[18]^D[3];
- assign A_the[19] = A_in[19]^D[4];
- assign A_the[20] = A_in[20]^D[0];
- assign A_the[21] = A_in[21]^D[1];
- assign A_the[22] = A_in[22]^D[2];
- assign A_the[23] = A_in[23]^D[3];
- assign A_the[24] = A_in[24]^D[4];
-
- assign A_rho[0]={A_the[0]};
- assign A_rho[1]={A_the[1][62:0],A_the[1][63:63]};
- assign A_rho[2]={A_the[2][1:0],A_the[2][63:2]};
- assign A_rho[3]={A_the[3][35:0],A_the[3][63:36]};
- assign A_rho[4]={A_the[4][36:0],A_the[4][63:37]};
- assign A_rho[5]={A_the[5][27:0],A_the[5][63:28]};
- assign A_rho[6]={A_the[6][19:0],A_the[6][63:20]};
- assign A_rho[7]={A_the[7][57:0],A_the[7][63:58]};
- assign A_rho[8]={A_the[8][8:0],A_the[8][63:9]};
- assign A_rho[9]={A_the[9][43:0],A_the[9][63:44]};
- assign A_rho[10]={A_the[10][60:0],A_the[10][63:61]};
- assign A_rho[11]={A_the[11][53:0],A_the[11][63:54]};
- assign A_rho[12]={A_the[12][20:0],A_the[12][63:21]};
- assign A_rho[13]={A_the[13][38:0],A_the[13][63:39]};
- assign A_rho[14]={A_the[14][24:0],A_the[14][63:25]};
- assign A_rho[15]={A_the[15][22:0],A_the[15][63:23]};
- assign A_rho[16]={A_the[16][18:0],A_the[16][63:19]};
- assign A_rho[17]={A_the[17][48:0],A_the[17][63:49]};
- assign A_rho[18]={A_the[18][42:0],A_the[18][63:43]};
- assign A_rho[19]={A_the[19][55:0],A_the[19][63:56]};
- assign A_rho[20]={A_the[20][45:0],A_the[20][63:46]};
- assign A_rho[21]={A_the[21][61:0],A_the[21][63:62]};
- assign A_rho[22]={A_the[22][2:0],A_the[22][63:3]};
- assign A_rho[23]={A_the[23][7:0],A_the[23][63:8]};
- assign A_rho[24]={A_the[24][49:0],A_the[24][63:50]};
-
- assign A_pi[0] = A_rho[0];
- assign A_pi[10] = A_rho[1];
- assign A_pi[20] = A_rho[2];
- assign A_pi[5] = A_rho[3];
- assign A_pi[15] = A_rho[4];
- assign A_pi[16] = A_rho[5];
- assign A_pi[1] = A_rho[6];
- assign A_pi[11] = A_rho[7];
- assign A_pi[21] = A_rho[8];
- assign A_pi[6] = A_rho[9];
- assign A_pi[7] = A_rho[10];
- assign A_pi[17] = A_rho[11];
- assign A_pi[2] = A_rho[12];
- assign A_pi[12] = A_rho[13];
- assign A_pi[22] = A_rho[14];
- assign A_pi[23] = A_rho[15];
- assign A_pi[8] = A_rho[16];
- assign A_pi[18] = A_rho[17];
- assign A_pi[3] = A_rho[18];
- assign A_pi[13] = A_rho[19];
- assign A_pi[14] = A_rho[20];
- assign A_pi[24] = A_rho[21];
- assign A_pi[9] = A_rho[22];
- assign A_pi[19] = A_rho[23];
- assign A_pi[4] = A_rho[24];
-
- assign E[0] = A_pi[0] ^ ((~A_pi[1]) & A_pi[2]);
- assign E[1] = A_pi[1] ^ ((~A_pi[2]) & A_pi[3]);
- assign E[2] = A_pi[2] ^ ((~A_pi[3]) & A_pi[4]);
- assign E[3] = A_pi[3] ^ ((~A_pi[4]) & A_pi[0]);
- assign E[4] = A_pi[4] ^ ((~A_pi[0]) & A_pi[1]);
- assign E[5] = A_pi[5] ^ ((~A_pi[6]) & A_pi[7]);
- assign E[6] = A_pi[6] ^ ((~A_pi[7]) & A_pi[8]);
- assign E[7] = A_pi[7] ^ ((~A_pi[8]) & A_pi[9]);
- assign E[8] = A_pi[8] ^ ((~A_pi[9]) & A_pi[5]);
- assign E[9] = A_pi[9] ^ ((~A_pi[5]) & A_pi[6]);
- assign E[10] = A_pi[10] ^ ((~A_pi[11]) & A_pi[12]);
- assign E[11] = A_pi[11] ^ ((~A_pi[12]) & A_pi[13]);
- assign E[12] = A_pi[12] ^ ((~A_pi[13]) & A_pi[14]);
- assign E[13] = A_pi[13] ^ ((~A_pi[14]) & A_pi[10]);
- assign E[14] = A_pi[14] ^ ((~A_pi[10]) & A_pi[11]);
- assign E[15] = A_pi[15] ^ ((~A_pi[16]) & A_pi[17]);
- assign E[16] = A_pi[16] ^ ((~A_pi[17]) & A_pi[18]);
- assign E[17] = A_pi[17] ^ ((~A_pi[18]) & A_pi[19]);
- assign E[18] = A_pi[18] ^ ((~A_pi[19]) & A_pi[15]);
- assign E[19] = A_pi[19] ^ ((~A_pi[15]) & A_pi[16]);
- assign E[20] = A_pi[20] ^ ((~A_pi[21]) & A_pi[22]);
- assign E[21] = A_pi[21] ^ ((~A_pi[22]) & A_pi[23]);
- assign E[22] = A_pi[22] ^ ((~A_pi[23]) & A_pi[24]);
- assign E[23] = A_pi[23] ^ ((~A_pi[24]) & A_pi[20]);
- assign E[24] = A_pi[24] ^ ((~A_pi[20]) & A_pi[21]);
-
- assign A_out[ 0 ] = E[ 0 ]^RC;
- assign A_out[ 1 ] = E[ 1 ];
- assign A_out[ 2 ] = E[ 2 ];
- assign A_out[ 3 ] = E[ 3 ];
- assign A_out[ 4 ] = E[ 4 ];
- assign A_out[ 5 ] = E[ 5 ];
- assign A_out[ 6 ] = E[ 6 ];
- assign A_out[ 7 ] = E[ 7 ];
- assign A_out[ 8 ] = E[ 8 ];
- assign A_out[ 9 ] = E[ 9 ];
- assign A_out[ 10 ] = E[ 10 ];
- assign A_out[ 11 ] = E[ 11 ];
- assign A_out[ 12 ] = E[ 12 ];
- assign A_out[ 13 ] = E[ 13 ];
- assign A_out[ 14 ] = E[ 14 ];
- assign A_out[ 15 ] = E[ 15 ];
- assign A_out[ 16 ] = E[ 16 ];
- assign A_out[ 17 ] = E[ 17 ];
- assign A_out[ 18 ] = E[ 18 ];
- assign A_out[ 19 ] = E[ 19 ];
- assign A_out[ 20 ] = E[ 20 ];
- assign A_out[ 21 ] = E[ 21 ];
- assign A_out[ 22 ] = E[ 22 ];
- assign A_out[ 23 ] = E[ 23 ];
- assign A_out[ 24 ] = E[ 24 ];
-
- assign out = {A_out[24],A_out[23],A_out[22],A_out[21],A_out[20],A_out[19],A_out[18],A_out[17],A_out[16],A_out[15],A_out[14],A_out[13],A_out[12],A_out[11],A_out[10],A_out[9],A_out[8],A_out[7],A_out[6],A_out[5],A_out[4],A_out[3],A_out[2],A_out[1],A_out[0]};
-
- endmodule
|