Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module shifrator(
- input clk,
- input rst,
- input [63:0] N_in,//input data
- input [31:0] X_in,//key
- output reg[63:0] N_out
- );
- //states for state-machine
- parameter state1 = 3'b000;
- parameter state2 = 3'b001;
- parameter state3 = 3'b010;
- parameter state4 = 3'b011;
- parameter state5 = 3'b100;
- parameter state6 = 3'b101;
- parameter out = 3'b110;
- reg [4:0] cnt;
- reg [2:0] state;
- reg [31:0] S;
- reg [31:0] N1;
- reg [31:0] N2;
- reg [3:0]mass8[15:0]; reg [3:0]mass4[15:0];
- reg [3:0]mass7[15:0]; reg [3:0]mass3[15:0];
- reg [3:0]mass6[15:0]; reg [3:0]mass2[15:0];
- reg [3:0]mass5[15:0]; reg [3:0]mass1[15:0];
- always@(posedge clk or posedge rst) begin
- if(rst) begin
- state <=state1;
- cnt <=0;
- S <=0;
- N1 <=0;
- N2 <=0;
- N_out <=0;
- //Tablica koeficientov
- mass1 [0] <=4; mass2 [0]<=14; mass3 [0]<=5 ; mass4 [0]<=7 ; mass5 [0]<=6 ; mass6 [0]<=4 ; mass7 [0]<=13; mass8 [0]<=1 ;
- mass1 [1] <=10; mass2 [1]<=11; mass3 [1]<=8 ; mass4 [1]<=13; mass5 [1]<=12; mass6 [1]<=11; mass7 [1]<=11; mass8 [1]<=15;
- mass1 [2] <=9; mass2 [2]<=4; mass3 [2]<=1 ; mass4 [2]<=10; mass5 [2]<=7 ; mass6 [2]<=10; mass7 [2]<=4 ; mass8 [2]<=13;
- mass1 [3] <=2; mass2 [3]<=12; mass3 [3]<=13 ; mass4 [3]<=1 ; mass5 [3]<=1 ; mass6 [3]<=0 ; mass7 [3]<=1 ; mass8 [3]<=0 ;
- mass1 [4] <=13; mass2 [4]<=6; mass3 [4]<=10 ; mass4 [4]<=0 ; mass5 [4]<=5 ; mass6 [4]<=7 ; mass7 [4]<=3 ; mass8 [4]<=5 ;
- mass1 [5] <=8; mass2 [5]<=13; mass3 [5]<=3 ; mass4 [5]<=8 ; mass5 [5]<=15; mass6 [5]<=2 ; mass7 [5]<=15; mass8 [5]<=7 ;
- mass1 [6] <=0; mass2 [6]<=15; mass3 [6]<=4 ; mass4 [6]<=9 ; mass5 [6]<=13; mass6 [6]<=1 ; mass7 [6]<=5 ; mass8 [6]<=10;
- mass1 [7] <=4; mass2 [7]<=10; mass3 [7]<=2 ; mass4 [7]<=15; mass5 [7]<=8 ; mass6 [7]<=13; mass7 [7]<=9 ; mass8 [7]<=4 ;
- mass1 [8] <=6; mass2 [8]<=2; mass3 [8]<=14 ; mass4 [8]<=14; mass5 [8]<=4 ; mass6 [8]<=3 ; mass7 [8]<=0 ; mass8 [8]<=9 ;
- mass1 [9] <=11; mass2 [9]<=3; mass3 [9] <=15; mass4 [9] <=4; mass5 [9]<=10; mass6 [9] <=6; mass7 [9]<=10; mass8 [9] <=2;
- mass1[10]<=1; mass2[10]<=8; mass3[10]<=12 ; mass4[10]<=6 ; mass5[10]<=9 ; mass6[10]<=8 ; mass7[10]<=14; mass8[10]<=3 ;
- mass1[11]<=12; mass2[11]<=1; mass3[11]<=7 ; mass4[11]<=12; mass5[11]<=14; mass6[11]<=5 ; mass7[11]<=7 ; mass8[11]<=14;
- mass1[12]<=7; mass2[12]<=0; mass3[12]<=6 ; mass4[12]<=11; mass5[12]<=0 ; mass6[12]<=9 ; mass7[12]<=6 ; mass8[12]<=6 ;
- mass1[13]<=15; mass2[13]<=7; mass3[13]<=0 ; mass4[13]<=2 ; mass5[13]<=3 ; mass6[13]<=12; mass7[13]<=8 ; mass8[13]<=11;
- mass1[14]<=5; mass2[14]<=5; mass3[14]<=9 ; mass4[14]<=5 ; mass5[14]<=11; mass6[14]<=15; mass7[14]<=2 ; mass8[14]<=8 ;
- mass1[15]<=3; mass2[15]<=9; mass3[15]<=11 ; mass4[15]<=3 ; mass5[15]<=2 ; mass6[15]<=14; mass7[15]<=12; mass8[15]<=12;
- end
- /*<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=*/
- else begin
- case (state)
- state1: begin
- N1 <=N_in[31:0];
- N2 <=N_in[63:32];
- state <=state2;
- end
- //------2)adding with key---------------------
- state2: begin
- S<=N1+X_in;
- state<=state3;
- end
- //----------(3)-------------------------------
- state3: begin
- S[3:0] <=mass1[S[3:0]];
- S[7:4] <=mass2[S[7:4]];
- S[11:8] <=mass3[S[11:8]];
- S[15:12]<=mass4[S[15:12]];
- S[19:16]<=mass5[S[19:16]];
- S[23:20]<=mass6[S[23:20]];
- S[27:24]<=mass7[S[27:24]];
- S[31:28]<=mass8[S[31:28]];
- state<=state4;
- end
- //---------(4)circular shift-----------------
- state4: begin
- S<={S[21:0],S[31:22]};
- state<=state5;
- end
- //--------------(5)--------------------------
- state5: begin
- S[31]<=S[31]^N2[31]; S[15]<=S[15]^N2[15];
- S[30]<=S[30]^N2[30]; S[14]<=S[14]^N2[14];
- S[29]<=S[29]^N2[29]; S[13]<=S[13]^N2[13];
- S[28]<=S[28]^N2[28]; S[12]<=S[12]^N2[12];
- S[27]<=S[27]^N2[27]; S[11]<=S[11]^N2[11];
- S[26]<=S[26]^N2[26]; S[10]<=S[10]^N2[10];
- S[25]<=S[25]^N2[25]; S[9]<=S[9]^N2[9];
- S[24]<=S[24]^N2[24]; S[8]<=S[8]^N2[8];
- S[23]<=S[23]^N2[23]; S[7]<=S[7]^N2[7];
- S[22]<=S[22]^N2[22]; S[6]<=S[6]^N2[6];
- S[21]<=S[21]^N2[21]; S[5]<=S[5]^N2[5];
- S[20]<=S[20]^N2[20]; S[4]<=S[4]^N2[4];
- S[19]<=S[19]^N2[19]; S[3]<=S[3]^N2[3];
- S[18]<=S[18]^N2[18]; S[2]<=S[2]^N2[2];
- S[17]<=S[17]^N2[17]; S[1]<=S[1]^N2[1];
- S[16]<=S[16]^N2[16]; S[0]<=S[0]^N2[0];
- state<=state6;
- end
- //-------------6)-------------------------
- state6: begin
- cnt<=cnt+1;
- N2<=N1;
- N1<=S;
- if(cnt==5'b11111) begin state<=out; cnt<=0; end
- else state<=state1;
- end
- //---------------OUT-------------------------
- out: begin
- N_out[63:32] <=N2;
- N_out[31:0] <=N1;
- state <=state1;
- end
- endcase
- end
- end
- endmodule
Add Comment
Please, Sign In to add comment