Guest User

Untitled

a guest
Aug 22nd, 2018
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module shifrator(
  2.  
  3. input clk,
  4.  
  5. input rst,
  6.  
  7. input [63:0] N_in,//input data
  8.  
  9. input [31:0] X_in,//key
  10.  
  11. output reg[63:0] N_out
  12.  
  13. );
  14.  
  15. //states for state-machine
  16.  
  17. parameter state1 = 3'b000;
  18.  
  19. parameter state2 = 3'b001;
  20.  
  21. parameter state3 = 3'b010;
  22.  
  23. parameter state4 = 3'b011;
  24.  
  25. parameter state5 = 3'b100;
  26.  
  27. parameter state6 = 3'b101;
  28.  
  29. parameter out = 3'b110;
  30.  
  31. reg [4:0] cnt;
  32.  
  33. reg [2:0] state;
  34.  
  35. reg [31:0] S;
  36.  
  37. reg [31:0] N1;
  38.  
  39. reg [31:0] N2;
  40.  
  41. reg [3:0]mass8[15:0]; reg [3:0]mass4[15:0];
  42.  
  43. reg [3:0]mass7[15:0]; reg [3:0]mass3[15:0];
  44.  
  45. reg [3:0]mass6[15:0]; reg [3:0]mass2[15:0];
  46.  
  47. reg [3:0]mass5[15:0]; reg [3:0]mass1[15:0];
  48.  
  49. always@(posedge clk or posedge rst) begin
  50.  
  51. if(rst) begin
  52.  
  53. state <=state1;
  54.  
  55. cnt <=0;
  56.  
  57. S <=0;
  58.  
  59. N1 <=0;
  60.  
  61. N2 <=0;
  62.  
  63. N_out <=0;
  64.  
  65. //Tablica koeficientov
  66.  
  67. mass1 [0] <=4; mass2 [0]<=14; mass3 [0]<=5 ; mass4 [0]<=7 ; mass5 [0]<=6 ; mass6 [0]<=4 ; mass7 [0]<=13; mass8 [0]<=1 ;
  68.  
  69. mass1 [1] <=10; mass2 [1]<=11; mass3 [1]<=8 ; mass4 [1]<=13; mass5 [1]<=12; mass6 [1]<=11; mass7 [1]<=11; mass8 [1]<=15;
  70.  
  71. mass1 [2] <=9; mass2 [2]<=4; mass3 [2]<=1 ; mass4 [2]<=10; mass5 [2]<=7 ; mass6 [2]<=10; mass7 [2]<=4 ; mass8 [2]<=13;
  72.  
  73. mass1 [3] <=2; mass2 [3]<=12; mass3 [3]<=13 ; mass4 [3]<=1 ; mass5 [3]<=1 ; mass6 [3]<=0 ; mass7 [3]<=1 ; mass8 [3]<=0 ;
  74.  
  75. mass1 [4] <=13; mass2 [4]<=6; mass3 [4]<=10 ; mass4 [4]<=0 ; mass5 [4]<=5 ; mass6 [4]<=7 ; mass7 [4]<=3 ; mass8 [4]<=5 ;
  76.  
  77. mass1 [5] <=8; mass2 [5]<=13; mass3 [5]<=3 ; mass4 [5]<=8 ; mass5 [5]<=15; mass6 [5]<=2 ; mass7 [5]<=15; mass8 [5]<=7 ;
  78.  
  79. mass1 [6] <=0; mass2 [6]<=15; mass3 [6]<=4 ; mass4 [6]<=9 ; mass5 [6]<=13; mass6 [6]<=1 ; mass7 [6]<=5 ; mass8 [6]<=10;
  80.  
  81. mass1 [7] <=4; mass2 [7]<=10; mass3 [7]<=2 ; mass4 [7]<=15; mass5 [7]<=8 ; mass6 [7]<=13; mass7 [7]<=9 ; mass8 [7]<=4 ;
  82.  
  83. mass1 [8] <=6; mass2 [8]<=2; mass3 [8]<=14 ; mass4 [8]<=14; mass5 [8]<=4 ; mass6 [8]<=3 ; mass7 [8]<=0 ; mass8 [8]<=9 ;
  84.  
  85. mass1 [9] <=11; mass2 [9]<=3; mass3 [9] <=15; mass4 [9] <=4; mass5 [9]<=10; mass6 [9] <=6; mass7 [9]<=10; mass8 [9] <=2;
  86.  
  87. mass1[10]<=1; mass2[10]<=8; mass3[10]<=12 ; mass4[10]<=6 ; mass5[10]<=9 ; mass6[10]<=8 ; mass7[10]<=14; mass8[10]<=3 ;
  88.  
  89. mass1[11]<=12; mass2[11]<=1; mass3[11]<=7 ; mass4[11]<=12; mass5[11]<=14; mass6[11]<=5 ; mass7[11]<=7 ; mass8[11]<=14;
  90.  
  91. mass1[12]<=7; mass2[12]<=0; mass3[12]<=6 ; mass4[12]<=11; mass5[12]<=0 ; mass6[12]<=9 ; mass7[12]<=6 ; mass8[12]<=6 ;
  92.  
  93. mass1[13]<=15; mass2[13]<=7; mass3[13]<=0 ; mass4[13]<=2 ; mass5[13]<=3 ; mass6[13]<=12; mass7[13]<=8 ; mass8[13]<=11;
  94.  
  95. mass1[14]<=5; mass2[14]<=5; mass3[14]<=9 ; mass4[14]<=5 ; mass5[14]<=11; mass6[14]<=15; mass7[14]<=2 ; mass8[14]<=8 ;
  96.  
  97. mass1[15]<=3; mass2[15]<=9; mass3[15]<=11 ; mass4[15]<=3 ; mass5[15]<=2 ; mass6[15]<=14; mass7[15]<=12; mass8[15]<=12;
  98.  
  99. end
  100.  
  101. /*<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=<=*/
  102.  
  103. else begin
  104.  
  105. case (state)
  106.  
  107. state1: begin
  108.  
  109. N1 <=N_in[31:0];
  110.  
  111. N2 <=N_in[63:32];
  112.  
  113. state <=state2;
  114.  
  115. end
  116.  
  117. //------2)adding with key---------------------
  118.  
  119. state2: begin
  120.  
  121. S<=N1+X_in;
  122.  
  123. state<=state3;
  124.  
  125. end
  126.  
  127. //----------(3)-------------------------------
  128.  
  129. state3: begin
  130.  
  131. S[3:0] <=mass1[S[3:0]];
  132.  
  133. S[7:4] <=mass2[S[7:4]];
  134.  
  135. S[11:8] <=mass3[S[11:8]];
  136.  
  137. S[15:12]<=mass4[S[15:12]];
  138.  
  139. S[19:16]<=mass5[S[19:16]];
  140.  
  141. S[23:20]<=mass6[S[23:20]];
  142.  
  143. S[27:24]<=mass7[S[27:24]];
  144.  
  145. S[31:28]<=mass8[S[31:28]];
  146.  
  147. state<=state4;
  148.  
  149. end
  150.  
  151. //---------(4)circular shift-----------------
  152.  
  153. state4: begin
  154.  
  155. S<={S[21:0],S[31:22]};
  156.  
  157. state<=state5;
  158.  
  159. end
  160.  
  161. //--------------(5)--------------------------
  162.  
  163. state5: begin
  164.  
  165. S[31]<=S[31]^N2[31]; S[15]<=S[15]^N2[15];
  166.  
  167. S[30]<=S[30]^N2[30]; S[14]<=S[14]^N2[14];
  168.  
  169. S[29]<=S[29]^N2[29]; S[13]<=S[13]^N2[13];
  170.  
  171. S[28]<=S[28]^N2[28]; S[12]<=S[12]^N2[12];
  172.  
  173. S[27]<=S[27]^N2[27]; S[11]<=S[11]^N2[11];
  174.  
  175. S[26]<=S[26]^N2[26]; S[10]<=S[10]^N2[10];
  176.  
  177. S[25]<=S[25]^N2[25]; S[9]<=S[9]^N2[9];
  178.  
  179. S[24]<=S[24]^N2[24]; S[8]<=S[8]^N2[8];
  180.  
  181. S[23]<=S[23]^N2[23]; S[7]<=S[7]^N2[7];
  182.  
  183. S[22]<=S[22]^N2[22]; S[6]<=S[6]^N2[6];
  184.  
  185. S[21]<=S[21]^N2[21]; S[5]<=S[5]^N2[5];
  186.  
  187. S[20]<=S[20]^N2[20]; S[4]<=S[4]^N2[4];
  188.  
  189. S[19]<=S[19]^N2[19]; S[3]<=S[3]^N2[3];
  190.  
  191. S[18]<=S[18]^N2[18]; S[2]<=S[2]^N2[2];
  192.  
  193. S[17]<=S[17]^N2[17]; S[1]<=S[1]^N2[1];
  194.  
  195. S[16]<=S[16]^N2[16]; S[0]<=S[0]^N2[0];
  196.  
  197. state<=state6;
  198.  
  199. end
  200.  
  201. //-------------6)-------------------------
  202.  
  203. state6: begin
  204.  
  205. cnt<=cnt+1;
  206.  
  207. N2<=N1;
  208.  
  209. N1<=S;
  210.  
  211. if(cnt==5'b11111) begin state<=out; cnt<=0; end
  212.  
  213. else state<=state1;
  214.  
  215. end
  216.  
  217. //---------------OUT-------------------------
  218.  
  219. out: begin
  220.  
  221. N_out[63:32] <=N2;
  222.  
  223. N_out[31:0] <=N1;
  224.  
  225. state <=state1;
  226.  
  227. end
  228.  
  229. endcase
  230.  
  231. end
  232.  
  233. end
  234.  
  235. endmodule
Add Comment
Please, Sign In to add comment