# DES 算法 Verilog 课设

DES算法的veirlog的实现。

module keshe(
input clk,
input rst,
input model,//?ù????????¨???????????
output reg [7:0]num1,
output reg [7:0]num2,
output reg [7:0]num3,
output reg [7:0]num4,
output reg [7:0]num5,
output reg [7:0]num6,
output reg [7:0]num7,
output reg [7:0]num8
);

reg  [64:1] memory ;//????????????
reg  [1:64]key;//?????

reg [32:1] L0;
reg [32:1] R0;

reg [28:1] C0;
reg [28:1] D0;

reg [47:0] subkey1;
reg [47:0] subkey2;
reg [47:0] subkey3;
reg [47:0] subkey4;
reg [47:0] subkey5;
reg [47:0] subkey6;
reg [47:0] subkey7;
reg [47:0] subkey8;
reg [47:0] subkey9;
reg [47:0] subkey10;
reg [47:0] subkey11;
reg [47:0] subkey12;
reg [47:0] subkey13;
reg [47:0] subkey14;
reg [47:0] subkey15;
reg [47:0] subkey16;
reg [3:0] S1[0:3][0:15];
reg [3:0] S2[0:3][0:15];
reg [3:0] S3[0:3][0:15];
reg [3:0] S4[0:3][0:15];
reg [3:0] S5[0:3][0:15];
reg [3:0] S6[0:3][0:15];
reg [3:0] S7[0:3][0:15];
reg [3:0] S8[0:3][0:15];
reg [1:32] result;

reg [3:0] state;
parameter IPzhihuan=0,Miyuezhihuan=1,Lunhuan=2,Createsubkey=3,Etuozhan=4,Pzhihuan=5,IP_1=6;

reg [47:0]tempresult;

wire [1:64]dummy;
assign dummy={R0,L0};

reg [0:63] outdata;
reg [3:0] count;//????

wire [1:56] tempCD;
assign tempCD={C0,D0};

always@(R0 or count)begin
case(count)
0:tempresult={R0[1],R0[32],R0[31],R0[30],R0[29],R0[28],R0[29],R0[28],R0[27],R0[26],R0[25],R0[24],R0[25],R0[24],R0[23],R0[22],R0[21],R0[20],R0[21],R0[20],R0[19],R0[18],R0[17],R0[16],R0[17],R0[16],R0[15],R0[14],R0[13],R0[12],R0[13],R0[12],R0[11],R0[10],R0[9],R0[8],R0[9],R0[8],R0[7],R0[6],R0[5],R0[4],R0[5],R0[4],R0[3],R0[2],R0[1],R0[32]}^subkey1;
1:tempresult={R0[1],R0[32],R0[31],R0[30],R0[29],R0[28],R0[29],R0[28],R0[27],R0[26],R0[25],R0[24],R0[25],R0[24],R0[23],R0[22],R0[21],R0[20],R0[21],R0[20],R0[19],R0[18],R0[17],R0[16],R0[17],R0[16],R0[15],R0[14],R0[13],R0[12],R0[13],R0[12],R0[11],R0[10],R0[9],R0[8],R0[9],R0[8],R0[7],R0[6],R0[5],R0[4],R0[5],R0[4],R0[3],R0[2],R0[1],R0[32]}^subkey2;
2:tempresult={R0[1],R0[32],R0[31],R0[30],R0[29],R0[28],R0[29],R0[28],R0[27],R0[26],R0[25],R0[24],R0[25],R0[24],R0[23],R0[22],R0[21],R0[20],R0[21],R0[20],R0[19],R0[18],R0[17],R0[16],R0[17],R0[16],R0[15],R0[14],R0[13],R0[12],R0[13],R0[12],R0[11],R0[10],R0[9],R0[8],R0[9],R0[8],R0[7],R0[6],R0[5],R0[4],R0[5],R0[4],R0[3],R0[2],R0[1],R0[32]}^subkey3;
3:tempresult={R0[1],R0[32],R0[31],R0[30],R0[29],R0[28],R0[29],R0[28],R0[27],R0[26],R0[25],R0[24],R0[25],R0[24],R0[23],R0[22],R0[21],R0[20],R0[21],R0[20],R0[19],R0[18],R0[17],R0[16],R0[17],R0[16],R0[15],R0[14],R0[13],R0[12],R0[13],R0[12],R0[11],R0[10],R0[9],R0[8],R0[9],R0[8],R0[7],R0[6],R0[5],R0[4],R0[5],R0[4],R0[3],R0[2],R0[1],R0[32]}^subkey4;
4:tempresult={R0[1],R0[32],R0[31],R0[30],R0[29],R0[28],R0[29],R0[28],R0[27],R0[26],R0[25],R0[24],R0[25],R0[24],R0[23],R0[22],R0[21],R0[20],R0[21],R0[20],R0[19],R0[18],R0[17],R0[16],R0[17],R0[16],R0[15],R0[14],R0[13],R0[12],R0[13],R0[12],R0[11],R0[10],R0[9],R0[8],R0[9],R0[8],R0[7],R0[6],R0[5],R0[4],R0[5],R0[4],R0[3],R0[2],R0[1],R0[32]}^subkey5;
5:tempresult={R0[1],R0[32],R0[31],R0[30],R0[29],R0[28],R0[29],R0[28],R0[27],R0[26],R0[25],R0[24],R0[25],R0[24],R0[23],R0[22],R0[21],R0[20],R0[21],R0[20],R0[19],R0[18],R0[17],R0[16],R0[17],R0[16],R0[15],R0[14],R0[13],R0[12],R0[13],R0[12],R0[11],R0[10],R0[9],R0[8],R0[9],R0[8],R0[7],R0[6],R0[5],R0[4],R0[5],R0[4],R0[3],R0[2],R0[1],R0[32]}^subkey6;
6:tempresult={R0[1],R0[32],R0[31],R0[30],R0[29],R0[28],R0[29],R0[28],R0[27],R0[26],R0[25],R0[24],R0[25],R0[24],R0[23],R0[22],R0[21],R0[20],R0[21],R0[20],R0[19],R0[18],R0[17],R0[16],R0[17],R0[16],R0[15],R0[14],R0[13],R0[12],R0[13],R0[12],R0[11],R0[10],R0[9],R0[8],R0[9],R0[8],R0[7],R0[6],R0[5],R0[4],R0[5],R0[4],R0[3],R0[2],R0[1],R0[32]}^subkey7;
7:tempresult={R0[1],R0[32],R0[31],R0[30],R0[29],R0[28],R0[29],R0[28],R0[27],R0[26],R0[25],R0[24],R0[25],R0[24],R0[23],R0[22],R0[21],R0[20],R0[21],R0[20],R0[19],R0[18],R0[17],R0[16],R0[17],R0[16],R0[15],R0[14],R0[13],R0[12],R0[13],R0[12],R0[11],R0[10],R0[9],R0[8],R0[9],R0[8],R0[7],R0[6],R0[5],R0[4],R0[5],R0[4],R0[3],R0[2],R0[1],R0[32]}^subkey8;
8:tempresult={R0[1],R0[32],R0[31],R0[30],R0[29],R0[28],R0[29],R0[28],R0[27],R0[26],R0[25],R0[24],R0[25],R0[24],R0[23],R0[22],R0[21],R0[20],R0[21],R0[20],R0[19],R0[18],R0[17],R0[16],R0[17],R0[16],R0[15],R0[14],R0[13],R0[12],R0[13],R0[12],R0[11],R0[10],R0[9],R0[8],R0[9],R0[8],R0[7],R0[6],R0[5],R0[4],R0[5],R0[4],R0[3],R0[2],R0[1],R0[32]}^subkey9;
9:tempresult={R0[1],R0[32],R0[31],R0[30],R0[29],R0[28],R0[29],R0[28],R0[27],R0[26],R0[25],R0[24],R0[25],R0[24],R0[23],R0[22],R0[21],R0[20],R0[21],R0[20],R0[19],R0[18],R0[17],R0[16],R0[17],R0[16],R0[15],R0[14],R0[13],R0[12],R0[13],R0[12],R0[11],R0[10],R0[9],R0[8],R0[9],R0[8],R0[7],R0[6],R0[5],R0[4],R0[5],R0[4],R0[3],R0[2],R0[1],R0[32]}^subkey10;
10:tempresult={R0[1],R0[32],R0[31],R0[30],R0[29],R0[28],R0[29],R0[28],R0[27],R0[26],R0[25],R0[24],R0[25],R0[24],R0[23],R0[22],R0[21],R0[20],R0[21],R0[20],R0[19],R0[18],R0[17],R0[16],R0[17],R0[16],R0[15],R0[14],R0[13],R0[12],R0[13],R0[12],R0[11],R0[10],R0[9],R0[8],R0[9],R0[8],R0[7],R0[6],R0[5],R0[4],R0[5],R0[4],R0[3],R0[2],R0[1],R0[32]}^subkey11;
11:tempresult={R0[1],R0[32],R0[31],R0[30],R0[29],R0[28],R0[29],R0[28],R0[27],R0[26],R0[25],R0[24],R0[25],R0[24],R0[23],R0[22],R0[21],R0[20],R0[21],R0[20],R0[19],R0[18],R0[17],R0[16],R0[17],R0[16],R0[15],R0[14],R0[13],R0[12],R0[13],R0[12],R0[11],R0[10],R0[9],R0[8],R0[9],R0[8],R0[7],R0[6],R0[5],R0[4],R0[5],R0[4],R0[3],R0[2],R0[1],R0[32]}^subkey12;
12:tempresult={R0[1],R0[32],R0[31],R0[30],R0[29],R0[28],R0[29],R0[28],R0[27],R0[26],R0[25],R0[24],R0[25],R0[24],R0[23],R0[22],R0[21],R0[20],R0[21],R0[20],R0[19],R0[18],R0[17],R0[16],R0[17],R0[16],R0[15],R0[14],R0[13],R0[12],R0[13],R0[12],R0[11],R0[10],R0[9],R0[8],R0[9],R0[8],R0[7],R0[6],R0[5],R0[4],R0[5],R0[4],R0[3],R0[2],R0[1],R0[32]}^subkey13;
13:tempresult={R0[1],R0[32],R0[31],R0[30],R0[29],R0[28],R0[29],R0[28],R0[27],R0[26],R0[25],R0[24],R0[25],R0[24],R0[23],R0[22],R0[21],R0[20],R0[21],R0[20],R0[19],R0[18],R0[17],R0[16],R0[17],R0[16],R0[15],R0[14],R0[13],R0[12],R0[13],R0[12],R0[11],R0[10],R0[9],R0[8],R0[9],R0[8],R0[7],R0[6],R0[5],R0[4],R0[5],R0[4],R0[3],R0[2],R0[1],R0[32]}^subkey14;
14:tempresult={R0[1],R0[32],R0[31],R0[30],R0[29],R0[28],R0[29],R0[28],R0[27],R0[26],R0[25],R0[24],R0[25],R0[24],R0[23],R0[22],R0[21],R0[20],R0[21],R0[20],R0[19],R0[18],R0[17],R0[16],R0[17],R0[16],R0[15],R0[14],R0[13],R0[12],R0[13],R0[12],R0[11],R0[10],R0[9],R0[8],R0[9],R0[8],R0[7],R0[6],R0[5],R0[4],R0[5],R0[4],R0[3],R0[2],R0[1],R0[32]}^subkey15;
15:tempresult={R0[1],R0[32],R0[31],R0[30],R0[29],R0[28],R0[29],R0[28],R0[27],R0[26],R0[25],R0[24],R0[25],R0[24],R0[23],R0[22],R0[21],R0[20],R0[21],R0[20],R0[19],R0[18],R0[17],R0[16],R0[17],R0[16],R0[15],R0[14],R0[13],R0[12],R0[13],R0[12],R0[11],R0[10],R0[9],R0[8],R0[9],R0[8],R0[7],R0[6],R0[5],R0[4],R0[5],R0[4],R0[3],R0[2],R0[1],R0[32]}^subkey16;

endcase
end

always@(posedge clk)begin
if(!rst)begin
state<=IPzhihuan;

count<=0;//???????ò??????????????1

S1[0][0]<=14;S1[0][1]<=4;S1[0][2]<=13;S1[0][3]<=1;S1[0][4]<=2;S1[0][5]<=15;S1[0][6]<=11;S1[0][7]<=8;S1[0][8]<=3;S1[0][9]<=10;S1[0][10]<=6;S1[0][11]<=12;S1[0][12]<=5;S1[0][13]<=9;S1[0][14]<=0;S1[0][15]<=7;S1[1][0]<=0;S1[1][1]<=15;S1[1][2]<=7;S1[1][3]<=4;S1[1][4]<=14;S1[1][5]<=2;S1[1][6]<=13;S1[1][7]<=1;S1[1][8]<=10;S1[1][9]<=6;S1[1][10]<=12;S1[1][11]<=11;S1[1][12]<=9;S1[1][13]<=5;S1[1][14]<=3;S1[1][15]<=8;S1[2][0]<=4;S1[2][1]<=1;S1[2][2]<=14;S1[2][3]<=8;S1[2][4]<=13;S1[2][5]<=6;S1[2][6]<=2;S1[2][7]<=11;S1[2][8]<=15;S1[2][9]<=12;S1[2][10]<=9;S1[2][11]<=7;S1[2][12]<=3;S1[2][13]<=10;S1[2][14]<=5;S1[2][15]<=0;S1[3][0]<=15;S1[3][1]<=12;S1[3][2]<=8;S1[3][3]<=2;S1[3][4]<=4;S1[3][5]<=9;S1[3][6]<=1;S1[3][7]<=7;S1[3][8]<=5;S1[3][9]<=11;S1[3][10]<=3;S1[3][11]<=14;S1[3][12]<=10;S1[3][13]<=0;S1[3][14]<=6;S1[3][15]<=13;

S2[0][0]<=15;S2[0][1]<=1;S2[0][2]<=8;S2[0][3]<=14;S2[0][4]<=6;S2[0][5]<=11;S2[0][6]<=3;S2[0][7]<=4;S2[0][8]<=9;S2[0][9]<=7;S2[0][10]<=2;S2[0][11]<=13;S2[0][12]<=12;S2[0][13]<=0;S2[0][14]<=5;S2[0][15]<=10;S2[1][0]<=3;S2[1][1]<=13;S2[1][2]<=4;S2[1][3]<=7;S2[1][4]<=15;S2[1][5]<=2;S2[1][6]<=8;S2[1][7]<=14;S2[1][8]<=12;S2[1][9]<=0;S2[1][10]<=1;S2[1][11]<=10;S2[1][12]<=6;S2[1][13]<=9;S2[1][14]<=11;S2[1][15]<=5;S2[2][0]<=0;S2[2][1]<=14;S2[2][2]<=7;S2[2][3]<=11;S2[2][4]<=10;S2[2][5]<=4;S2[2][6]<=13;S2[2][7]<=1;S2[2][8]<=5;S2[2][9]<=8;S2[2][10]<=12;S2[2][11]<=6;S2[2][12]<=9;S2[2][13]<=3;S2[2][14]<=2;S2[2][15]<=15;S2[3][0]<=13;S2[3][1]<=8;S2[3][2]<=10;S2[3][3]<=1;S2[3][4]<=3;S2[3][5]<=15;S2[3][6]<=4;S2[3][7]<=2;S2[3][8]<=11;S2[3][9]<=6;S2[3][10]<=7;S2[3][11]<=12;S2[3][12]<=0;S2[3][13]<=5;S2[3][14]<=14;S2[3][15]<=9;

S3[0][0]<=10;S3[0][1]<=0;S3[0][2]<=9;S3[0][3]<=14;S3[0][4]<=6;S3[0][5]<=3;S3[0][6]<=15;S3[0][7]<=5;S3[0][8]<=1;S3[0][9]<=13;S3[0][10]<=12;S3[0][11]<=7;S3[0][12]<=11;S3[0][13]<=4;S3[0][14]<=2;S3[0][15]<=8;S3[1][0]<=13;S3[1][1]<=7;S3[1][2]<=0;S3[1][3]<=9;S3[1][4]<=3;S3[1][5]<=4;S3[1][6]<=6;S3[1][7]<=10;S3[1][8]<=2;S3[1][9]<=8;S3[1][10]<=5;S3[1][11]<=14;S3[1][12]<=12;S3[1][13]<=11;S3[1][14]<=15;S3[1][15]<=1;S3[2][0]<=13;S3[2][1]<=6;S3[2][2]<=4;S3[2][3]<=9;S3[2][4]<=8;S3[2][5]<=15;S3[2][6]<=3;S3[2][7]<=0;S3[2][8]<=11;S3[2][9]<=1;S3[2][10]<=2;S3[2][11]<=12;S3[2][12]<=5;S3[2][13]<=10;S3[2][14]<=14;S3[2][15]<=7;S3[3][0]<=1;S3[3][1]<=10;S3[3][2]<=13;S3[3][3]<=0;S3[3][4]<=6;S3[3][5]<=9;S3[3][6]<=8;S3[3][7]<=7;S3[3][8]<=4;S3[3][9]<=15;S3[3][10]<=14;S3[3][11]<=3;S3[3][12]<=11;S3[3][13]<=5;S3[3][14]<=2;S3[3][15]<=12;

S4[0][0]<=7;S4[0][1]<=13;S4[0][2]<=14;S4[0][3]<=3;S4[0][4]<=0;S4[0][5]<=6;S4[0][6]<=9;S4[0][7]<=10;S4[0][8]<=1;S4[0][9]<=2;S4[0][10]<=8;S4[0][11]<=5;S4[0][12]<=11;S4[0][13]<=12;S4[0][14]<=4;S4[0][15]<=15;S4[1][0]<=13;S4[1][1]<=8;S4[1][2]<=11;S4[1][3]<=5;S4[1][4]<=6;S4[1][5]<=15;S4[1][6]<=0;S4[1][7]<=3;S4[1][8]<=4;S4[1][9]<=7;S4[1][10]<=2;S4[1][11]<=12;S4[1][12]<=1;S4[1][13]<=10;S4[1][14]<=14;S4[1][15]<=9;S4[2][0]<=10;S4[2][1]<=6;S4[2][2]<=9;S4[2][3]<=0;S4[2][4]<=12;S4[2][5]<=11;S4[2][6]<=7;S4[2][7]<=13;S4[2][8]<=15;S4[2][9]<=1;S4[2][10]<=3;S4[2][11]<=14;S4[2][12]<=5;S4[2][13]<=2;S4[2][14]<=8;S4[2][15]<=4;S4[3][0]<=3;S4[3][1]<=15;S4[3][2]<=0;S4[3][3]<=6;S4[3][4]<=10;S4[3][5]<=1;S4[3][6]<=13;S4[3][7]<=8;S4[3][8]<=9;S4[3][9]<=4;S4[3][10]<=5;S4[3][11]<=11;S4[3][12]<=12;S4[3][13]<=7;S4[3][14]<=2;S4[3][15]<=14;

S5[0][0]<=2;S5[0][1]<=12;S5[0][2]<=4;S5[0][3]<=1;S5[0][4]<=7;S5[0][5]<=10;S5[0][6]<=11;S5[0][7]<=6;S5[0][8]<=8;S5[0][9]<=5;S5[0][10]<=3;S5[0][11]<=15;S5[0][12]<=13;S5[0][13]<=0;S5[0][14]<=14;S5[0][15]<=9;S5[1][0]<=14;S5[1][1]<=11;S5[1][2]<=2;S5[1][3]<=12;S5[1][4]<=4;S5[1][5]<=7;S5[1][6]<=13;S5[1][7]<=1;S5[1][8]<=5;S5[1][9]<=0;S5[1][10]<=15;S5[1][11]<=10;S5[1][12]<=3;S5[1][13]<=9;S5[1][14]<=8;S5[1][15]<=6;S5[2][0]<=4;S5[2][1]<=2;S5[2][2]<=1;S5[2][3]<=11;S5[2][4]<=10;S5[2][5]<=13;S5[2][6]<=7;S5[2][7]<=8;S5[2][8]<=15;S5[2][9]<=9;S5[2][10]<=12;S5[2][11]<=5;S5[2][12]<=6;S5[2][13]<=3;S5[2][14]<=0;S5[2][15]<=14;S5[3][0]<=11;S5[3][1]<=8;S5[3][2]<=12;S5[3][3]<=7;S5[3][4]<=1;S5[3][5]<=14;S5[3][6]<=2;S5[3][7]<=13;S5[3][8]<=6;S5[3][9]<=15;S5[3][10]<=0;S5[3][11]<=9;S5[3][12]<=10;S5[3][13]<=4;S5[3][14]<=5;S5[3][15]<=3;

S6[0][0]<=12;S6[0][1]<=1;S6[0][2]<=10;S6[0][3]<=15;S6[0][4]<=9;S6[0][5]<=2;S6[0][6]<=6;S6[0][7]<=8;S6[0][8]<=0;S6[0][9]<=13;S6[0][10]<=3;S6[0][11]<=4;S6[0][12]<=14;S6[0][13]<=7;S6[0][14]<=5;S6[0][15]<=11;S6[1][0]<=10;S6[1][1]<=15;S6[1][2]<=4;S6[1][3]<=2;S6[1][4]<=7;S6[1][5]<=12;S6[1][6]<=9;S6[1][7]<=5;S6[1][8]<=6;S6[1][9]<=1;S6[1][10]<=13;S6[1][11]<=14;S6[1][12]<=0;S6[1][13]<=11;S6[1][14]<=3;S6[1][15]<=8;S6[2][0]<=9;S6[2][1]<=14;S6[2][2]<=15;S6[2][3]<=5;S6[2][4]<=2;S6[2][5]<=8;S6[2][6]<=12;S6[2][7]<=3;S6[2][8]<=7;S6[2][9]<=0;S6[2][10]<=4;S6[2][11]<=10;S6[2][12]<=1;S6[2][13]<=13;S6[2][14]<=11;S6[2][15]<=6;S6[3][0]<=4;S6[3][1]<=3;S6[3][2]<=2;S6[3][3]<=12;S6[3][4]<=9;S6[3][5]<=5;S6[3][6]<=15;S6[3][7]<=10;S6[3][8]<=11;S6[3][9]<=14;S6[3][10]<=1;S6[3][11]<=7;S6[3][12]<=6;S6[3][13]<=0;S6[3][14]<=8;S6[3][15]<=13;

S7[0][0]<=4;S7[0][1]<=11;S7[0][2]<=2;S7[0][3]<=14;S7[0][4]<=15;S7[0][5]<=0;S7[0][6]<=8;S7[0][7]<=13;S7[0][8]<=3;S7[0][9]<=12;S7[0][10]<=9;S7[0][11]<=7;S7[0][12]<=5;S7[0][13]<=10;S7[0][14]<=6;S7[0][15]<=1;S7[1][0]<=13;S7[1][1]<=0;S7[1][2]<=11;S7[1][3]<=7;S7[1][4]<=4;S7[1][5]<=9;S7[1][6]<=1;S7[1][7]<=10;S7[1][8]<=14;S7[1][9]<=3;S7[1][10]<=5;S7[1][11]<=12;S7[1][12]<=2;S7[1][13]<=15;S7[1][14]<=8;S7[1][15]<=6;S7[2][0]<=1;S7[2][1]<=4;S7[2][2]<=11;S7[2][3]<=13;S7[2][4]<=12;S7[2][5]<=3;S7[2][6]<=7;S7[2][7]<=14;S7[2][8]<=10;S7[2][9]<=15;S7[2][10]<=6;S7[2][11]<=8;S7[2][12]<=0;S7[2][13]<=5;S7[2][14]<=9;S7[2][15]<=2;S7[3][0]<=6;S7[3][1]<=11;S7[3][2]<=13;S7[3][3]<=8;S7[3][4]<=1;S7[3][5]<=4;S7[3][6]<=10;S7[3][7]<=7;S7[3][8]<=9;S7[3][9]<=5;S7[3][10]<=0;S7[3][11]<=15;S7[3][12]<=14;S7[3][13]<=2;S7[3][14]<=3;S7[3][15]<=12;

S8[0][0]<=13;S8[0][1]<=2;S8[0][2]<=8;S8[0][3]<=4;S8[0][4]<=6;S8[0][5]<=15;S8[0][6]<=11;S8[0][7]<=1;S8[0][8]<=10;S8[0][9]<=9;S8[0][10]<=3;S8[0][11]<=14;S8[0][12]<=5;S8[0][13]<=0;S8[0][14]<=12;S8[0][15]<=7;S8[1][0]<=1;S8[1][1]<=15;S8[1][2]<=13;S8[1][3]<=8;S8[1][4]<=10;S8[1][5]<=3;S8[1][6]<=7;S8[1][7]<=4;S8[1][8]<=12;S8[1][9]<=5;S8[1][10]<=6;S8[1][11]<=11;S8[1][12]<=0;S8[1][13]<=14;S8[1][14]<=9;S8[1][15]<=2;S8[2][0]<=7;S8[2][1]<=11;S8[2][2]<=4;S8[2][3]<=1;S8[2][4]<=9;S8[2][5]<=12;S8[2][6]<=14;S8[2][7]<=2;S8[2][8]<=0;S8[2][9]<=6;S8[2][10]<=10;S8[2][11]<=13;S8[2][12]<=15;S8[2][13]<=3;S8[2][14]<=5;S8[2][15]<=8;S8[3][0]<=2;S8[3][1]<=1;S8[3][2]<=14;S8[3][3]<=7;S8[3][4]<=4;S8[3][5]<=10;S8[3][6]<=8;S8[3][7]<=13;S8[3][8]<=15;S8[3][9]<=12;S8[3][10]<=9;S8[3][11]<=0;S8[3][12]<=3;S8[3][13]<=5;S8[3][14]<=6;S8[3][15]<=11;

end

else begin
case(state)
IPzhihuan:begin
state<=Miyuezhihuan;

R0<={memory[8],memory[16],memory[24],memory[32],memory[40],memory[48],memory[56],memory[64],memory[6],memory[14],memory[22],memory[30],memory[38],memory[46],memory[54],memory[62],memory[4],memory[12],memory[20],memory[28],memory[36],memory[44],memory[52],memory[60],memory[2],memory[10],memory[18],memory[26],memory[34],memory[42],memory[50],memory[58]};
L0<={memory[7],memory[15],memory[23],memory[31],memory[39],memory[47],memory[55],memory[63],memory[5],memory[13],memory[21],memory[29],memory[37],memory[45],memory[53],memory[61],memory[3],memory[11],memory[19],memory[27],memory[35],memory[43],memory[51],memory[59],memory[1],memory[9],memory[17],memory[25],memory[33],memory[41],memory[49],memory[57]};

end
Miyuezhihuan:begin
state<=Lunhuan;

C0<={
key[57],key[49],key[41],key[33],key[25],key[17],key[9],key[1],key[58],key[50],key[42],key[34],key[26],key[18],key[10],key[2],key[59],key[51],key[43],key[35],key[27],key[19],key[11],key[3],key[60],key[52],key[44],key[36]};

D0<={
key[63],key[55],key[47],key[39],key[31],key[23],key[15],key[7],key[62],key[54],key[46],key[38],key[30],key[22],key[14],key[6],key[61],key[53],key[45],key[37],key[29],key[21],key[13],key[5],key[28],key[20],key[12],key[4]};
$display("D0 %h",{key[63],key[55],key[47],key[39],key[31],key[23],key[15],key[7],key[62],key[54],key[46],key[38],key[30],key[22],key[14],key[6],key[61],key[53],key[45],key[37],key[29],key[21],key[13],key[5],key[28],key[20],key[12],key[4]});$display("key %h",key);
end
Lunhuan:begin //?ú??16??subkey

if(count==0||
count==1||
count==8||
count==15
)begin
C0<={C0[27:1],C0[28]};
D0<={D0[27:1],D0[28]};
end
else begin
C0<={C0[26:1],C0[28:27]};
D0<={D0[26:1],D0[28:27]};
end
count<=count+1;
state<=Createsubkey;

end

Createsubkey:begin
case (count)

1:begin
subkey1<={tempCD[14],tempCD[17],tempCD[11],tempCD[24],tempCD[1],tempCD[5],tempCD[3],tempCD[28],tempCD[15],tempCD[6],tempCD[21],tempCD[10],tempCD[23],tempCD[19],tempCD[12],tempCD[4],tempCD[26],tempCD[8],tempCD[16],tempCD[7],tempCD[27],tempCD[20],tempCD[13],tempCD[2],tempCD[41],tempCD[52],tempCD[31],tempCD[37],tempCD[47],tempCD[55],tempCD[30],tempCD[40],tempCD[51],tempCD[45],tempCD[33],tempCD[48],tempCD[44],tempCD[49],tempCD[39],tempCD[56],tempCD[34],tempCD[53],tempCD[46],tempCD[42],tempCD[50],tempCD[36],tempCD[29],tempCD[32]};
end
2:begin
subkey2<={tempCD[14],tempCD[17],tempCD[11],tempCD[24],tempCD[1],tempCD[5],tempCD[3],tempCD[28],tempCD[15],tempCD[6],tempCD[21],tempCD[10],tempCD[23],tempCD[19],tempCD[12],tempCD[4],tempCD[26],tempCD[8],tempCD[16],tempCD[7],tempCD[27],tempCD[20],tempCD[13],tempCD[2],tempCD[41],tempCD[52],tempCD[31],tempCD[37],tempCD[47],tempCD[55],tempCD[30],tempCD[40],tempCD[51],tempCD[45],tempCD[33],tempCD[48],tempCD[44],tempCD[49],tempCD[39],tempCD[56],tempCD[34],tempCD[53],tempCD[46],tempCD[42],tempCD[50],tempCD[36],tempCD[29],tempCD[32]};
end
3:begin
subkey3<={tempCD[14],tempCD[17],tempCD[11],tempCD[24],tempCD[1],tempCD[5],tempCD[3],tempCD[28],tempCD[15],tempCD[6],tempCD[21],tempCD[10],tempCD[23],tempCD[19],tempCD[12],tempCD[4],tempCD[26],tempCD[8],tempCD[16],tempCD[7],tempCD[27],tempCD[20],tempCD[13],tempCD[2],tempCD[41],tempCD[52],tempCD[31],tempCD[37],tempCD[47],tempCD[55],tempCD[30],tempCD[40],tempCD[51],tempCD[45],tempCD[33],tempCD[48],tempCD[44],tempCD[49],tempCD[39],tempCD[56],tempCD[34],tempCD[53],tempCD[46],tempCD[42],tempCD[50],tempCD[36],tempCD[29],tempCD[32]};
end
4:begin
subkey4<={tempCD[14],tempCD[17],tempCD[11],tempCD[24],tempCD[1],tempCD[5],tempCD[3],tempCD[28],tempCD[15],tempCD[6],tempCD[21],tempCD[10],tempCD[23],tempCD[19],tempCD[12],tempCD[4],tempCD[26],tempCD[8],tempCD[16],tempCD[7],tempCD[27],tempCD[20],tempCD[13],tempCD[2],tempCD[41],tempCD[52],tempCD[31],tempCD[37],tempCD[47],tempCD[55],tempCD[30],tempCD[40],tempCD[51],tempCD[45],tempCD[33],tempCD[48],tempCD[44],tempCD[49],tempCD[39],tempCD[56],tempCD[34],tempCD[53],tempCD[46],tempCD[42],tempCD[50],tempCD[36],tempCD[29],tempCD[32]};
end
5:begin
subkey5<={tempCD[14],tempCD[17],tempCD[11],tempCD[24],tempCD[1],tempCD[5],tempCD[3],tempCD[28],tempCD[15],tempCD[6],tempCD[21],tempCD[10],tempCD[23],tempCD[19],tempCD[12],tempCD[4],tempCD[26],tempCD[8],tempCD[16],tempCD[7],tempCD[27],tempCD[20],tempCD[13],tempCD[2],tempCD[41],tempCD[52],tempCD[31],tempCD[37],tempCD[47],tempCD[55],tempCD[30],tempCD[40],tempCD[51],tempCD[45],tempCD[33],tempCD[48],tempCD[44],tempCD[49],tempCD[39],tempCD[56],tempCD[34],tempCD[53],tempCD[46],tempCD[42],tempCD[50],tempCD[36],tempCD[29],tempCD[32]};
end
6:begin
subkey6<={tempCD[14],tempCD[17],tempCD[11],tempCD[24],tempCD[1],tempCD[5],tempCD[3],tempCD[28],tempCD[15],tempCD[6],tempCD[21],tempCD[10],tempCD[23],tempCD[19],tempCD[12],tempCD[4],tempCD[26],tempCD[8],tempCD[16],tempCD[7],tempCD[27],tempCD[20],tempCD[13],tempCD[2],tempCD[41],tempCD[52],tempCD[31],tempCD[37],tempCD[47],tempCD[55],tempCD[30],tempCD[40],tempCD[51],tempCD[45],tempCD[33],tempCD[48],tempCD[44],tempCD[49],tempCD[39],tempCD[56],tempCD[34],tempCD[53],tempCD[46],tempCD[42],tempCD[50],tempCD[36],tempCD[29],tempCD[32]};
end
7:begin
subkey7<={tempCD[14],tempCD[17],tempCD[11],tempCD[24],tempCD[1],tempCD[5],tempCD[3],tempCD[28],tempCD[15],tempCD[6],tempCD[21],tempCD[10],tempCD[23],tempCD[19],tempCD[12],tempCD[4],tempCD[26],tempCD[8],tempCD[16],tempCD[7],tempCD[27],tempCD[20],tempCD[13],tempCD[2],tempCD[41],tempCD[52],tempCD[31],tempCD[37],tempCD[47],tempCD[55],tempCD[30],tempCD[40],tempCD[51],tempCD[45],tempCD[33],tempCD[48],tempCD[44],tempCD[49],tempCD[39],tempCD[56],tempCD[34],tempCD[53],tempCD[46],tempCD[42],tempCD[50],tempCD[36],tempCD[29],tempCD[32]};
end
8:begin
subkey8<={tempCD[14],tempCD[17],tempCD[11],tempCD[24],tempCD[1],tempCD[5],tempCD[3],tempCD[28],tempCD[15],tempCD[6],tempCD[21],tempCD[10],tempCD[23],tempCD[19],tempCD[12],tempCD[4],tempCD[26],tempCD[8],tempCD[16],tempCD[7],tempCD[27],tempCD[20],tempCD[13],tempCD[2],tempCD[41],tempCD[52],tempCD[31],tempCD[37],tempCD[47],tempCD[55],tempCD[30],tempCD[40],tempCD[51],tempCD[45],tempCD[33],tempCD[48],tempCD[44],tempCD[49],tempCD[39],tempCD[56],tempCD[34],tempCD[53],tempCD[46],tempCD[42],tempCD[50],tempCD[36],tempCD[29],tempCD[32]};
end
9:begin
subkey9<={tempCD[14],tempCD[17],tempCD[11],tempCD[24],tempCD[1],tempCD[5],tempCD[3],tempCD[28],tempCD[15],tempCD[6],tempCD[21],tempCD[10],tempCD[23],tempCD[19],tempCD[12],tempCD[4],tempCD[26],tempCD[8],tempCD[16],tempCD[7],tempCD[27],tempCD[20],tempCD[13],tempCD[2],tempCD[41],tempCD[52],tempCD[31],tempCD[37],tempCD[47],tempCD[55],tempCD[30],tempCD[40],tempCD[51],tempCD[45],tempCD[33],tempCD[48],tempCD[44],tempCD[49],tempCD[39],tempCD[56],tempCD[34],tempCD[53],tempCD[46],tempCD[42],tempCD[50],tempCD[36],tempCD[29],tempCD[32]};
end
10:begin
subkey10<={tempCD[14],tempCD[17],tempCD[11],tempCD[24],tempCD[1],tempCD[5],tempCD[3],tempCD[28],tempCD[15],tempCD[6],tempCD[21],tempCD[10],tempCD[23],tempCD[19],tempCD[12],tempCD[4],tempCD[26],tempCD[8],tempCD[16],tempCD[7],tempCD[27],tempCD[20],tempCD[13],tempCD[2],tempCD[41],tempCD[52],tempCD[31],tempCD[37],tempCD[47],tempCD[55],tempCD[30],tempCD[40],tempCD[51],tempCD[45],tempCD[33],tempCD[48],tempCD[44],tempCD[49],tempCD[39],tempCD[56],tempCD[34],tempCD[53],tempCD[46],tempCD[42],tempCD[50],tempCD[36],tempCD[29],tempCD[32]};
end
11:begin
subkey11<={tempCD[14],tempCD[17],tempCD[11],tempCD[24],tempCD[1],tempCD[5],tempCD[3],tempCD[28],tempCD[15],tempCD[6],tempCD[21],tempCD[10],tempCD[23],tempCD[19],tempCD[12],tempCD[4],tempCD[26],tempCD[8],tempCD[16],tempCD[7],tempCD[27],tempCD[20],tempCD[13],tempCD[2],tempCD[41],tempCD[52],tempCD[31],tempCD[37],tempCD[47],tempCD[55],tempCD[30],tempCD[40],tempCD[51],tempCD[45],tempCD[33],tempCD[48],tempCD[44],tempCD[49],tempCD[39],tempCD[56],tempCD[34],tempCD[53],tempCD[46],tempCD[42],tempCD[50],tempCD[36],tempCD[29],tempCD[32]};
end
12:begin
subkey12<={tempCD[14],tempCD[17],tempCD[11],tempCD[24],tempCD[1],tempCD[5],tempCD[3],tempCD[28],tempCD[15],tempCD[6],tempCD[21],tempCD[10],tempCD[23],tempCD[19],tempCD[12],tempCD[4],tempCD[26],tempCD[8],tempCD[16],tempCD[7],tempCD[27],tempCD[20],tempCD[13],tempCD[2],tempCD[41],tempCD[52],tempCD[31],tempCD[37],tempCD[47],tempCD[55],tempCD[30],tempCD[40],tempCD[51],tempCD[45],tempCD[33],tempCD[48],tempCD[44],tempCD[49],tempCD[39],tempCD[56],tempCD[34],tempCD[53],tempCD[46],tempCD[42],tempCD[50],tempCD[36],tempCD[29],tempCD[32]};
end
13:begin
subkey13<={tempCD[14],tempCD[17],tempCD[11],tempCD[24],tempCD[1],tempCD[5],tempCD[3],tempCD[28],tempCD[15],tempCD[6],tempCD[21],tempCD[10],tempCD[23],tempCD[19],tempCD[12],tempCD[4],tempCD[26],tempCD[8],tempCD[16],tempCD[7],tempCD[27],tempCD[20],tempCD[13],tempCD[2],tempCD[41],tempCD[52],tempCD[31],tempCD[37],tempCD[47],tempCD[55],tempCD[30],tempCD[40],tempCD[51],tempCD[45],tempCD[33],tempCD[48],tempCD[44],tempCD[49],tempCD[39],tempCD[56],tempCD[34],tempCD[53],tempCD[46],tempCD[42],tempCD[50],tempCD[36],tempCD[29],tempCD[32]};
end
14:begin
subkey14<={tempCD[14],tempCD[17],tempCD[11],tempCD[24],tempCD[1],tempCD[5],tempCD[3],tempCD[28],tempCD[15],tempCD[6],tempCD[21],tempCD[10],tempCD[23],tempCD[19],tempCD[12],tempCD[4],tempCD[26],tempCD[8],tempCD[16],tempCD[7],tempCD[27],tempCD[20],tempCD[13],tempCD[2],tempCD[41],tempCD[52],tempCD[31],tempCD[37],tempCD[47],tempCD[55],tempCD[30],tempCD[40],tempCD[51],tempCD[45],tempCD[33],tempCD[48],tempCD[44],tempCD[49],tempCD[39],tempCD[56],tempCD[34],tempCD[53],tempCD[46],tempCD[42],tempCD[50],tempCD[36],tempCD[29],tempCD[32]};
end
15:begin
subkey15<={tempCD[14],tempCD[17],tempCD[11],tempCD[24],tempCD[1],tempCD[5],tempCD[3],tempCD[28],tempCD[15],tempCD[6],tempCD[21],tempCD[10],tempCD[23],tempCD[19],tempCD[12],tempCD[4],tempCD[26],tempCD[8],tempCD[16],tempCD[7],tempCD[27],tempCD[20],tempCD[13],tempCD[2],tempCD[41],tempCD[52],tempCD[31],tempCD[37],tempCD[47],tempCD[55],tempCD[30],tempCD[40],tempCD[51],tempCD[45],tempCD[33],tempCD[48],tempCD[44],tempCD[49],tempCD[39],tempCD[56],tempCD[34],tempCD[53],tempCD[46],tempCD[42],tempCD[50],tempCD[36],tempCD[29],tempCD[32]};
end
0:begin
subkey16<={tempCD[14],tempCD[17],tempCD[11],tempCD[24],tempCD[1],tempCD[5],tempCD[3],tempCD[28],tempCD[15],tempCD[6],tempCD[21],tempCD[10],tempCD[23],tempCD[19],tempCD[12],tempCD[4],tempCD[26],tempCD[8],tempCD[16],tempCD[7],tempCD[27],tempCD[20],tempCD[13],tempCD[2],tempCD[41],tempCD[52],tempCD[31],tempCD[37],tempCD[47],tempCD[55],tempCD[30],tempCD[40],tempCD[51],tempCD[45],tempCD[33],tempCD[48],tempCD[44],tempCD[49],tempCD[39],tempCD[56],tempCD[34],tempCD[53],tempCD[46],tempCD[42],tempCD[50],tempCD[36],tempCD[29],tempCD[32]};
end
endcase

if(count!=0)
state<=Lunhuan;
else
state<=Etuozhan;
end

Etuozhan:begin
case(count)

0:begin

result<={
S1[ {tempresult[47],tempresult[42]}][tempresult[46:43]],S2[ {tempresult[41],tempresult[36]}][tempresult[40:37]],S3[ {tempresult[35],tempresult[30]}][tempresult[34:31]],S4[ {tempresult[29],tempresult[24]}][tempresult[28:25]],S5[ {tempresult[23],tempresult[18]}][tempresult[22:19]],S6[ {tempresult[17],tempresult[12]}][tempresult[16:13]],S7[  {tempresult[11],tempresult[ 6]}][tempresult[10:7]],S8[   {tempresult[ 5],tempresult[ 0]}][tempresult[4:1]]};

state<=Pzhihuan;
end

1:begin

result<={
S1[ {tempresult[47],tempresult[42]}][tempresult[46:43]],S2[ {tempresult[41],tempresult[36]}][tempresult[40:37]],S3[ {tempresult[35],tempresult[30]}][tempresult[34:31]],S4[ {tempresult[29],tempresult[24]}][tempresult[28:25]],S5[ {tempresult[23],tempresult[18]}][tempresult[22:19]],S6[ {tempresult[17],tempresult[12]}][tempresult[16:13]],S7[  {tempresult[11],tempresult[ 6]}][tempresult[10:7]],S8[   {tempresult[ 5],tempresult[ 0]}][tempresult[4:1]]};

state<=Pzhihuan;
end

2:begin

result<={
S1[ {tempresult[47],tempresult[42]}][tempresult[46:43]],S2[ {tempresult[41],tempresult[36]}][tempresult[40:37]],S3[ {tempresult[35],tempresult[30]}][tempresult[34:31]],S4[ {tempresult[29],tempresult[24]}][tempresult[28:25]],S5[ {tempresult[23],tempresult[18]}][tempresult[22:19]],S6[ {tempresult[17],tempresult[12]}][tempresult[16:13]],S7[  {tempresult[11],tempresult[ 6]}][tempresult[10:7]],S8[   {tempresult[ 5],tempresult[ 0]}][tempresult[4:1]]};

state<=Pzhihuan;
end

3:begin

result<={
S1[ {tempresult[47],tempresult[42]}][tempresult[46:43]],S2[ {tempresult[41],tempresult[36]}][tempresult[40:37]],S3[ {tempresult[35],tempresult[30]}][tempresult[34:31]],S4[ {tempresult[29],tempresult[24]}][tempresult[28:25]],S5[ {tempresult[23],tempresult[18]}][tempresult[22:19]],S6[ {tempresult[17],tempresult[12]}][tempresult[16:13]],S7[  {tempresult[11],tempresult[ 6]}][tempresult[10:7]],S8[   {tempresult[ 5],tempresult[ 0]}][tempresult[4:1]]};

state<=Pzhihuan;
end

4:begin

result<={
S1[ {tempresult[47],tempresult[42]}][tempresult[46:43]],S2[ {tempresult[41],tempresult[36]}][tempresult[40:37]],S3[ {tempresult[35],tempresult[30]}][tempresult[34:31]],S4[ {tempresult[29],tempresult[24]}][tempresult[28:25]],S5[ {tempresult[23],tempresult[18]}][tempresult[22:19]],S6[ {tempresult[17],tempresult[12]}][tempresult[16:13]],S7[  {tempresult[11],tempresult[ 6]}][tempresult[10:7]],S8[   {tempresult[ 5],tempresult[ 0]}][tempresult[4:1]]};

state<=Pzhihuan;
end

5:begin

result<={
S1[ {tempresult[47],tempresult[42]}][tempresult[46:43]],S2[ {tempresult[41],tempresult[36]}][tempresult[40:37]],S3[ {tempresult[35],tempresult[30]}][tempresult[34:31]],S4[ {tempresult[29],tempresult[24]}][tempresult[28:25]],S5[ {tempresult[23],tempresult[18]}][tempresult[22:19]],S6[ {tempresult[17],tempresult[12]}][tempresult[16:13]],S7[  {tempresult[11],tempresult[ 6]}][tempresult[10:7]],S8[   {tempresult[ 5],tempresult[ 0]}][tempresult[4:1]]};

state<=Pzhihuan;
end

6:begin

result<={
S1[ {tempresult[47],tempresult[42]}][tempresult[46:43]],S2[ {tempresult[41],tempresult[36]}][tempresult[40:37]],S3[ {tempresult[35],tempresult[30]}][tempresult[34:31]],S4[ {tempresult[29],tempresult[24]}][tempresult[28:25]],S5[ {tempresult[23],tempresult[18]}][tempresult[22:19]],S6[ {tempresult[17],tempresult[12]}][tempresult[16:13]],S7[  {tempresult[11],tempresult[ 6]}][tempresult[10:7]],S8[   {tempresult[ 5],tempresult[ 0]}][tempresult[4:1]]};

state<=Pzhihuan;
end

7:begin

result<={
S1[ {tempresult[47],tempresult[42]}][tempresult[46:43]],S2[ {tempresult[41],tempresult[36]}][tempresult[40:37]],S3[ {tempresult[35],tempresult[30]}][tempresult[34:31]],S4[ {tempresult[29],tempresult[24]}][tempresult[28:25]],S5[ {tempresult[23],tempresult[18]}][tempresult[22:19]],S6[ {tempresult[17],tempresult[12]}][tempresult[16:13]],S7[  {tempresult[11],tempresult[ 6]}][tempresult[10:7]],S8[   {tempresult[ 5],tempresult[ 0]}][tempresult[4:1]]};

state<=Pzhihuan;
end

8:begin

result<={
S1[ {tempresult[47],tempresult[42]}][tempresult[46:43]],S2[ {tempresult[41],tempresult[36]}][tempresult[40:37]],S3[ {tempresult[35],tempresult[30]}][tempresult[34:31]],S4[ {tempresult[29],tempresult[24]}][tempresult[28:25]],S5[ {tempresult[23],tempresult[18]}][tempresult[22:19]],S6[ {tempresult[17],tempresult[12]}][tempresult[16:13]],S7[  {tempresult[11],tempresult[ 6]}][tempresult[10:7]],S8[   {tempresult[ 5],tempresult[ 0]}][tempresult[4:1]]};

state<=Pzhihuan;
end

9:begin

result<={
S1[ {tempresult[47],tempresult[42]}][tempresult[46:43]],S2[ {tempresult[41],tempresult[36]}][tempresult[40:37]],S3[ {tempresult[35],tempresult[30]}][tempresult[34:31]],S4[ {tempresult[29],tempresult[24]}][tempresult[28:25]],S5[ {tempresult[23],tempresult[18]}][tempresult[22:19]],S6[ {tempresult[17],tempresult[12]}][tempresult[16:13]],S7[  {tempresult[11],tempresult[ 6]}][tempresult[10:7]],S8[   {tempresult[ 5],tempresult[ 0]}][tempresult[4:1]]};

state<=Pzhihuan;
end

10:begin

result<={
S1[ {tempresult[47],tempresult[42]}][tempresult[46:43]],S2[ {tempresult[41],tempresult[36]}][tempresult[40:37]],S3[ {tempresult[35],tempresult[30]}][tempresult[34:31]],S4[ {tempresult[29],tempresult[24]}][tempresult[28:25]],S5[ {tempresult[23],tempresult[18]}][tempresult[22:19]],S6[ {tempresult[17],tempresult[12]}][tempresult[16:13]],S7[  {tempresult[11],tempresult[ 6]}][tempresult[10:7]],S8[   {tempresult[ 5],tempresult[ 0]}][tempresult[4:1]]};

state<=Pzhihuan;
end

11:begin

result<={
S1[ {tempresult[47],tempresult[42]}][tempresult[46:43]],S2[ {tempresult[41],tempresult[36]}][tempresult[40:37]],S3[ {tempresult[35],tempresult[30]}][tempresult[34:31]],S4[ {tempresult[29],tempresult[24]}][tempresult[28:25]],S5[ {tempresult[23],tempresult[18]}][tempresult[22:19]],S6[ {tempresult[17],tempresult[12]}][tempresult[16:13]],S7[  {tempresult[11],tempresult[ 6]}][tempresult[10:7]],S8[   {tempresult[ 5],tempresult[ 0]}][tempresult[4:1]]};

state<=Pzhihuan;
end

12:begin

result<={
S1[ {tempresult[47],tempresult[42]}][tempresult[46:43]],S2[ {tempresult[41],tempresult[36]}][tempresult[40:37]],S3[ {tempresult[35],tempresult[30]}][tempresult[34:31]],S4[ {tempresult[29],tempresult[24]}][tempresult[28:25]],S5[ {tempresult[23],tempresult[18]}][tempresult[22:19]],S6[ {tempresult[17],tempresult[12]}][tempresult[16:13]],S7[  {tempresult[11],tempresult[ 6]}][tempresult[10:7]],S8[   {tempresult[ 5],tempresult[ 0]}][tempresult[4:1]]};

state<=Pzhihuan;
end

13:begin

result<={
S1[ {tempresult[47],tempresult[42]}][tempresult[46:43]],S2[ {tempresult[41],tempresult[36]}][tempresult[40:37]],S3[ {tempresult[35],tempresult[30]}][tempresult[34:31]],S4[ {tempresult[29],tempresult[24]}][tempresult[28:25]],S5[ {tempresult[23],tempresult[18]}][tempresult[22:19]],S6[ {tempresult[17],tempresult[12]}][tempresult[16:13]],S7[  {tempresult[11],tempresult[ 6]}][tempresult[10:7]],S8[   {tempresult[ 5],tempresult[ 0]}][tempresult[4:1]]};

state<=Pzhihuan;
end

14:begin

result<={
S1[ {tempresult[47],tempresult[42]}][tempresult[46:43]],S2[ {tempresult[41],tempresult[36]}][tempresult[40:37]],S3[ {tempresult[35],tempresult[30]}][tempresult[34:31]],S4[ {tempresult[29],tempresult[24]}][tempresult[28:25]],S5[ {tempresult[23],tempresult[18]}][tempresult[22:19]],S6[ {tempresult[17],tempresult[12]}][tempresult[16:13]],S7[  {tempresult[11],tempresult[ 6]}][tempresult[10:7]],S8[   {tempresult[ 5],tempresult[ 0]}][tempresult[4:1]]};

state<=Pzhihuan;
end

15:begin

result<={
S1[ {tempresult[47],tempresult[42]}][tempresult[46:43]],S2[ {tempresult[41],tempresult[36]}][tempresult[40:37]],S3[ {tempresult[35],tempresult[30]}][tempresult[34:31]],S4[ {tempresult[29],tempresult[24]}][tempresult[28:25]],S5[ {tempresult[23],tempresult[18]}][tempresult[22:19]],S6[ {tempresult[17],tempresult[12]}][tempresult[16:13]],S7[  {tempresult[11],tempresult[ 6]}][tempresult[10:7]],S8[   {tempresult[ 5],tempresult[ 0]}][tempresult[4:1]]};

state<=Pzhihuan;
end

endcase
count<=count+1;
end

Pzhihuan:begin
R0<={
result[16],result[7],result[20],result[21],result[29],result[12],result[28],result[17],result[1],result[15],result[23],result[26],result[5],result[18],result[31],result[10],result[2],result[8],result[24],result[14],result[32],result[27],result[3],result[9],result[19],result[13],result[30],result[6],result[22],result[11],result[4],result[25]}^L0;
$display("Ptuozhanzhihoudeshuzi %h",({ result[16],result[7],result[20],result[21],result[29],result[12],result[28],result[17],result[1],result[15],result[23],result[26],result[5],result[18],result[31],result[10],result[2],result[8],result[24],result[14],result[32],result[27],result[3],result[9],result[19],result[13],result[30],result[6],result[22],result[11],result[4],result[25]}));$display("result is  %h",result);
L0<=R0;
state<=Etuozhan;
if(count==0)
state<=IP_1;

end
IP_1:begin

outdata<={dummy[40],dummy[8],dummy[48],dummy[16],dummy[56],dummy[24],dummy[64],dummy[32],dummy[39],dummy[7],dummy[47],dummy[15],dummy[55],dummy[23],dummy[63],dummy[31],dummy[38],dummy[6],dummy[46],dummy[14],dummy[54],dummy[22],dummy[62],dummy[30],dummy[37],dummy[5],dummy[45],dummy[13],dummy[53],dummy[21],dummy[61],dummy[29],dummy[36],dummy[4],dummy[44],dummy[12],dummy[52],dummy[20],dummy[60],dummy[28],dummy[35],dummy[3],dummy[43],dummy[11],dummy[51],dummy[19],dummy[59],dummy[27],dummy[34],dummy[2],dummy[42],dummy[10],dummy[50],dummy[18],dummy[58],dummy[26],dummy[33],dummy[1],dummy[41],dummy[9],dummy[49],dummy[17],dummy[57],dummy[25]};
state<=IP_1;
end

endcase

end

end
initial begin
key   =   64'h5987423651456987;
memory=   64'h5469875321456045;
end

endmodule