DES的verilog代码实现

模块流程图

顶层模块(DES_top)

IP置换模块(IP)

//IP置换
module  IP(IPin,IPout);

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

IP置换模块测试代码

`timescale 1ns/10ps
module IP_tb;

reg  [1:64] IPin;
wire  [1:64] IPout;

IP IP(.IPin(IPin),.IPout(IPout));

initial begin
	IPin<=64'b01100011_01011100_00111011_10110101_00010111_10000001_00111000_00100110;
end

endmodule


轮函数模块(desL)

//轮运算

module  desL(inR,inL,KEY,outL,outR);

input [1:32]  inL,inR;
input [1:48]  KEY;
output [1:32]  outL, outR;
wire [1:32]  t;
wire [1:32]  outL,outR;

 desf  desf(.fin(inR),.K(KEY),.fout(t));

assign        outL = inR;
assign        outR = inL^t;

endmodule

F函数模块(desf)

//F函数

module  desf(fin,K,fout);

input  [1:32]  fin;
input  [1:48]  K;
output [1:32]  fout;
wire [1:48] m,n;

  E_box  E_box(.in(fin),.out(m));

  assign  n=m^K;

wire  [1:32]  c;

  S_box  S_box (.in(n),.out(c));

  P      P     (.in(c),.out(fout));

endmodule

E盒置换模块(E_box)
//扩展E盒

module  E_box(in,out);

input  [1:32]  in;
output [1:48]  out;
wire   [1:48]  out;

    assign   out  ={in[32],in[1],in[2],in[3],in[4],in[5],
                    in[4],in[5],in[6],in[7],in[8],in[9],
                    in[8],in[9],in[10],in[11],in[12],in[13],
                    in[12],in[13],in[14],in[15],in[16],in[17],
                    in[16],in[17],in[18],in[19],in[20],in[21],
                    in[20],in[21],in[22],in[23],in[24],in[25],
                    in[24],in[25],in[26],in[27],in[28],in[29],
                    in[28],in[29],in[30],in[31],in[32],in[1]};

endmodule

S盒置换模块(S_box)
//S盒

module  S_box (in,out);

input [1:48] in;
output  [1:32] out;

S1 S1(in[1:6],out[1:4]);
S2 S2(in[7:12],out[5:8]);
S3 S3(in[13:18],out[9:12]);
S4 S4(in[19:24],out[13:16]);
S5 S5(in[25:30],out[17:20]);
S6 S6(in[31:36],out[21:24]);
S7 S7(in[37:42],out[25:28]);
S8 S8(in[43:48],out[29:32]);

endmodule

S1
module S1(in,out);

input [1:6] in;
output  [1:4] out;

reg    [1:4] out;

always @ (in[1:6])
  begin
       case(in[1:6]) 
          6'b000000 :    out[1:4] =  4'd14;
          6'b000001 :    out[1:4] =  4'd0;
          6'b000010 :    out[1:4] =  4'd4;
          6'b000011 :    out[1:4] =  4'd15;
          6'b000100 :    out[1:4] =  4'd13;
          6'b000101 :    out[1:4] =  4'd7;
          6'b000110 :    out[1:4] =  4'd1;
          6'b000111 :    out[1:4] =  4'd4;
          6'b001000 :    out[1:4] =  4'd2;
          6'b001001 :    out[1:4] =  4'd14;
          6'b001010 :    out[1:4] =  4'd15;
          6'b001011 :    out[1:4] =  4'd2;
          6'b001100 :    out[1:4] =  4'd11;
          6'b001101 :    out[1:4] =  4'd13;
          6'b001110 :    out[1:4] =  4'd8;
          6'b001111 :    out[1:4] =  4'd1;
          6'b010000 :    out[1:4] =  4'd3;
          6'b010001 :    out[1:4] =  4'd10;
          6'b010010 :    out[1:4] =  4'd10;
          6'b010011 :    out[1:4] =  4'd6;
          6'b010100 :    out[1:4] =  4'd6;
          6'b010101 :    out[1:4] =  4'd12;
          6'b010110 :    out[1:4] =  4'd12;
          6'b010111 :    out[1:4] =  4'd11;
          6'b011000 :    out[1:4] =  4'd5;
          6'b011001 :    out[1:4] =  4'd9;
          6'b011010 :    out[1:4] =  4'd9;
          6'b011011 :    out[1:4] =  4'd5;
          6'b011100 :    out[1:4] =  4'd0;
          6'b011101 :    out[1:4] =  4'd3;
          6'b011110 :    out[1:4] =  4'd7;
          6'b011111 :    out[1:4] =  4'd8;
          6'b100000 :    out[1:4] =  4'd4;
          6'b100001 :    out[1:4] =  4'd15;
          6'b100010 :    out[1:4] =  4'd1;
          6'b100011 :    out[1:4] =  4'd12;
          6'b100100 :    out[1:4] =  4'd14;
          6'b100101 :    out[1:4] =  4'd8;
          6'b100110 :    out[1:4] =  4'd8;
          6'b100111 :    out[1:4] =  4'd2;
          6'b101000 :    out[1:4] =  4'd13;
          6'b101001 :    out[1:4] =  4'd4;
          6'b101010 :    out[1:4] =  4'd6;
          6'b101011 :    out[1:4] =  4'd9;
          6'b101100 :    out[1:4] =  4'd2;
          6'b101101 :    out[1:4] =  4'd1;
          6'b101110 :    out[1:4] =  4'd11;
          6'b101111 :    out[1:4] =  4'd7;
          6'b110000 :    out[1:4] =  4'd15;
          6'b110001 :    out[1:4] =  4'd5;
          6'b110010 :    out[1:4] =  4'd12;
          6'b110011 :    out[1:4] =  4'd11;
          6'b110100 :    out[1:4] =  4'd9;
          6'b110101 :    out[1:4] =  4'd3;
          6'b110110 :    out[1:4] =  4'd7;
          6'b110111 :    out[1:4] =  4'd14;
          6'b111000 :    out[1:4] =  4'd3;
          6'b111001 :    out[1:4] =  4'd10;
          6'b111010 :    out[1:4] =  4'd10;
          6'b111011 :    out[1:4] =  4'd0;
          6'b111100 :    out[1:4] =  4'd5;
          6'b111101 :    out[1:4] =  4'd6;
          6'b111110 :    out[1:4] =  4'd0;
          6'b111111 :    out[1:4] =  4'd13;

         endcase

 end

endmodule

S2
module S1(in,out);

input [1:6] in;
output  [1:4] out;

reg    [1:4] out;

always @ (in[1:6])
  begin
       case(in[1:6]) 
          6'b000000 :    out[1:4] =  4'd14;
          6'b000001 :    out[1:4] =  4'd0;
          6'b000010 :    out[1:4] =  4'd4;
          6'b000011 :    out[1:4] =  4'd15;
          6'b000100 :    out[1:4] =  4'd13;
          6'b000101 :    out[1:4] =  4'd7;
          6'b000110 :    out[1:4] =  4'd1;
          6'b000111 :    out[1:4] =  4'd4;
          6'b001000 :    out[1:4] =  4'd2;
          6'b001001 :    out[1:4] =  4'd14;
          6'b001010 :    out[1:4] =  4'd15;
          6'b001011 :    out[1:4] =  4'd2;
          6'b001100 :    out[1:4] =  4'd11;
          6'b001101 :    out[1:4] =  4'd13;
          6'b001110 :    out[1:4] =  4'd8;
          6'b001111 :    out[1:4] =  4'd1;
          6'b010000 :    out[1:4] =  4'd3;
          6'b010001 :    out[1:4] =  4'd10;
          6'b010010 :    out[1:4] =  4'd10;
          6'b010011 :    out[1:4] =  4'd6;
          6'b010100 :    out[1:4] =  4'd6;
          6'b010101 :    out[1:4] =  4'd12;
          6'b010110 :    out[1:4] =  4'd12;
          6'b010111 :    out[1:4] =  4'd11;
          6'b011000 :    out[1:4] =  4'd5;
          6'b011001 :    out[1:4] =  4'd9;
          6'b011010 :    out[1:4] =  4'd9;
          6'b011011 :    out[1:4] =  4'd5;
          6'b011100 :    out[1:4] =  4'd0;
          6'b011101 :    out[1:4] =  4'd3;
          6'b011110 :    out[1:4] =  4'd7;
          6'b011111 :    out[1:4] =  4'd8;
          6'b100000 :    out[1:4] =  4'd4;
          6'b100001 :    out[1:4] =  4'd15;
          6'b100010 :    out[1:4] =  4'd1;
          6'b100011 :    out[1:4] =  4'd12;
          6'b100100 :    out[1:4] =  4'd14;
          6'b100101 :    out[1:4] =  4'd8;
          6'b100110 :    out[1:4] =  4'd8;
          6'b100111 :    out[1:4] =  4'd2;
          6'b101000 :    out[1:4] =  4'd13;
          6'b101001 :    out[1:4] =  4'd4;
          6'b101010 :    out[1:4] =  4'd6;
          6'b101011 :    out[1:4] =  4'd9;
          6'b101100 :    out[1:4] =  4'd2;
          6'b101101 :    out[1:4] =  4'd1;
          6'b101110 :    out[1:4] =  4'd11;
          6'b101111 :    out[1:4] =  4'd7;
          6'b110000 :    out[1:4] =  4'd15;
          6'b110001 :    out[1:4] =  4'd5;
          6'b110010 :    out[1:4] =  4'd12;
          6'b110011 :    out[1:4] =  4'd11;
          6'b110100 :    out[1:4] =  4'd9;
          6'b110101 :    out[1:4] =  4'd3;
          6'b110110 :    out[1:4] =  4'd7;
          6'b110111 :    out[1:4] =  4'd14;
          6'b111000 :    out[1:4] =  4'd3;
          6'b111001 :    out[1:4] =  4'd10;
          6'b111010 :    out[1:4] =  4'd10;
          6'b111011 :    out[1:4] =  4'd0;
          6'b111100 :    out[1:4] =  4'd5;
          6'b111101 :    out[1:4] =  4'd6;
          6'b111110 :    out[1:4] =  4'd0;
          6'b111111 :    out[1:4] =  4'd13;

         endcase

 end

endmodule

S3
module S3(in,out);

input [1:6] in;

output  [1:4] out;

reg    [1:4] out;

 

always @ (in[1:6])

 begin

       case(in[1:6]) 

          6'b000000 :    out[1:4] =  4'd10;
          6'b000001 :    out[1:4] =  4'd13;
          6'b000010 :    out[1:4] =  4'd0;
          6'b000011 :    out[1:4] =  4'd7;
          6'b000100 :    out[1:4] =  4'd9;
          6'b000101 :    out[1:4] =  4'd0;
          6'b000110 :    out[1:4] =  4'd14;
          6'b000111 :    out[1:4] =  4'd9;
          6'b001000 :    out[1:4] =  4'd6;
          6'b001001 :    out[1:4] =  4'd3;
          6'b001010 :    out[1:4] =  4'd3;
          6'b001011 :    out[1:4] =  4'd4;
          6'b001100 :    out[1:4] =  4'd15;
          6'b001101 :    out[1:4] =  4'd6;
          6'b001110 :    out[1:4] =  4'd5;
          6'b001111 :    out[1:4] =  4'd10;
          6'b010000 :    out[1:4] =  4'd1;
          6'b010001 :    out[1:4] =  4'd2;
          6'b010010 :    out[1:4] =  4'd13;
          6'b010011 :    out[1:4] =  4'd8;
          6'b010100 :    out[1:4] =  4'd12;
          6'b010101 :    out[1:4] =  4'd5;
          6'b010110 :    out[1:4] =  4'd7;
          6'b010111 :    out[1:4] =  4'd14;
          6'b011000 :    out[1:4] =  4'd11;
          6'b011001 :    out[1:4] =  4'd12;
          6'b011010 :    out[1:4] =  4'd4;
          6'b011011 :    out[1:4] =  4'd11;
          6'b011100 :    out[1:4] =  4'd2;
          6'b011101 :    out[1:4] =  4'd15;
          6'b011110 :    out[1:4] =  4'd8;
          6'b011111 :    out[1:4] =  4'd1;
          6'b100000 :    out[1:4] =  4'd13;
          6'b100001 :    out[1:4] =  4'd1;
          6'b100010 :    out[1:4] =  4'd6;
          6'b100011 :    out[1:4] =  4'd10;
          6'b100100 :    out[1:4] =  4'd4;
          6'b100101 :    out[1:4] =  4'd13;
          6'b100110 :    out[1:4] =  4'd9;
          6'b100111 :    out[1:4] =  4'd0;
          6'b101000 :    out[1:4] =  4'd8;
          6'b101001 :    out[1:4] =  4'd6;
          6'b101010 :    out[1:4] =  4'd15;
          6'b101011 :    out[1:4] =  4'd9;
          6'b101100 :    out[1:4] =  4'd3;
          6'b101101 :    out[1:4] =  4'd8;
          6'b101110 :    out[1:4] =  4'd0;
          6'b101111 :    out[1:4] =  4'd7;
          6'b110000 :    out[1:4] =  4'd11;
          6'b110001 :    out[1:4] =  4'd4;
          6'b110010 :    out[1:4] =  4'd1;
          6'b110011 :    out[1:4] =  4'd15;
          6'b110100 :    out[1:4] =  4'd2;
          6'b110101 :    out[1:4] =  4'd14;
          6'b110110 :    out[1:4] =  4'd12;
          6'b110111 :    out[1:4] =  4'd3;
          6'b111000 :    out[1:4] =  4'd5;
          6'b111001 :    out[1:4] =  4'd11;
          6'b111010 :    out[1:4] =  4'd10;
          6'b111011 :    out[1:4] =  4'd5;
          6'b111100 :    out[1:4] =  4'd14;
          6'b111101 :    out[1:4] =  4'd2;
          6'b111110 :    out[1:4] =  4'd7;
          6'b111111 :    out[1:4] =  4'd12;

         

       endcase

end

 

endmodule

S4
module S4(in,out);

input [1:6] in;

output  [1:4] out;

reg    [1:4] out;

always @ (in[1:6])

   begin

       case(in[1:6]) 

          6'b000000 :    out[1:4] =  4'd7;

          6'b000001 :    out[1:4] =  4'd13;

          6'b000010 :    out[1:4] =  4'd13;

          6'b000011 :    out[1:4] =  4'd8;

          6'b000100 :    out[1:4] =  4'd14;

          6'b000101 :    out[1:4] =  4'd11;

          6'b000110 :    out[1:4] =  4'd3;

          6'b000111 :    out[1:4] =  4'd5;

          6'b001000 :    out[1:4] =  4'd0;

          6'b001001 :    out[1:4] =  4'd6;

          6'b001010 :    out[1:4] =  4'd6;

          6'b001011 :    out[1:4] =  4'd15;

          6'b001100 :    out[1:4] =  4'd9;

          6'b001101 :    out[1:4] =  4'd0;

          6'b001110 :    out[1:4] =  4'd10;

          6'b001111 :    out[1:4] =  4'd3;

          6'b010000 :    out[1:4] =  4'd1;

          6'b010001 :    out[1:4] =  4'd4;

          6'b010010 :    out[1:4] =  4'd2;

          6'b010011 :    out[1:4] =  4'd7;

          6'b010100 :    out[1:4] =  4'd8;

          6'b010101 :    out[1:4] =  4'd2;

          6'b010110 :    out[1:4] =  4'd5;

          6'b010111 :    out[1:4] =  4'd12;

          6'b011000 :    out[1:4] =  4'd11;

          6'b011001 :    out[1:4] =  4'd1;

          6'b011010 :    out[1:4] =  4'd12;

          6'b011011 :    out[1:4] =  4'd10;

          6'b011100 :    out[1:4] =  4'd4;

          6'b011101 :    out[1:4] =  4'd14;

          6'b011110 :    out[1:4] =  4'd15;

          6'b011111 :    out[1:4] =  4'd9;

          6'b100000 :    out[1:4] =  4'd10;

          6'b100001 :    out[1:4] =  4'd3;

          6'b100010 :    out[1:4] =  4'd6;

          6'b100011 :    out[1:4] =  4'd15;

          6'b100100 :    out[1:4] =  4'd9;

          6'b100101 :    out[1:4] =  4'd0;

          6'b100110 :    out[1:4] =  4'd0;

          6'b100111 :    out[1:4] =  4'd6;

          6'b101000 :    out[1:4] =  4'd12;

          6'b101001 :    out[1:4] =  4'd10;

          6'b101010 :    out[1:4] =  4'd11;

          6'b101011 :    out[1:4] =  4'd1;

          6'b101100 :    out[1:4] =  4'd7;

          6'b101101 :    out[1:4] =  4'd13;

          6'b101110 :    out[1:4] =  4'd13;

          6'b101111 :    out[1:4] =  4'd8;

          6'b110000 :    out[1:4] =  4'd15;

          6'b110001 :    out[1:4] =  4'd9;

          6'b110010 :    out[1:4] =  4'd1;

          6'b110011 :    out[1:4] =  4'd4;

          6'b110100 :    out[1:4] =  4'd3;

          6'b110101 :    out[1:4] =  4'd5;

          6'b110110 :    out[1:4] =  4'd14;

          6'b110111 :    out[1:4] =  4'd11;

          6'b111000 :    out[1:4] =  4'd5;

          6'b111001 :    out[1:4] =  4'd12;

          6'b111010 :    out[1:4] =  4'd2;

          6'b111011 :    out[1:4] =  4'd7;

          6'b111100 :    out[1:4] =  4'd8;

          6'b111101 :    out[1:4] =  4'd2;

          6'b111110 :    out[1:4] =  4'd4;

          6'b111111 :    out[1:4] =  4'd14;

        

       endcase

 end

endmodule

S5
module S5(in,out);

input [1:6] in;

output  [1:4] out;

reg    [1:4] out;

always @ (in[1:6])

   begin

       case(in[1:6]) 

          6'b000000 :    out[1:4] =  4'd2;

          6'b000001 :    out[1:4] =  4'd14;

          6'b000010 :     out[1:4] =  4'd12;

          6'b000011 :     out[1:4] =  4'd11;

          6'b000100 :     out[1:4] =  4'd4;

          6'b000101 :     out[1:4] =  4'd2;

          6'b000110 :     out[1:4] =  4'd1;

          6'b000111 :     out[1:4] =  4'd12;

          6'b001000 :     out[1:4] =  4'd7;

          6'b001001 :     out[1:4] =  4'd4;

          6'b001010 :     out[1:4] =  4'd10;

          6'b001011 :     out[1:4] =  4'd7;

          6'b001100 :     out[1:4] =  4'd11;

          6'b001101 :     out[1:4] =  4'd13;

          6'b001110 :     out[1:4] =  4'd6;

          6'b001111 :     out[1:4] =  4'd1;

          6'b010000 :     out[1:4] =  4'd8;

          6'b010001 :     out[1:4] =  4'd5;

          6'b010010 :     out[1:4] =  4'd5;

          6'b010011 :     out[1:4] =  4'd0;

          6'b010100 :     out[1:4] =  4'd3;

          6'b010101 :     out[1:4] =  4'd15;

          6'b010110 :     out[1:4] =  4'd15;

          6'b010111 :     out[1:4] =  4'd10;

          6'b011000 :     out[1:4] =  4'd13;

          6'b011001 :     out[1:4] =  4'd3;

          6'b011010 :     out[1:4] =  4'd0;

          6'b011011 :     out[1:4] =  4'd9;

          6'b011100 :     out[1:4] =  4'd14;

          6'b011101 :     out[1:4] =  4'd8;

          6'b011110 :     out[1:4] =  4'd9;

          6'b011111 :     out[1:4] =  4'd6;

          6'b100000 :     out[1:4] =  4'd4;

          6'b100001 :     out[1:4] =  4'd11;

          6'b100010 :     out[1:4] =  4'd2;

          6'b100011 :     out[1:4] =  4'd8;

          6'b100100 :     out[1:4] =  4'd1;

          6'b100101 :     out[1:4] =  4'd12;

          6'b100110 :     out[1:4] =  4'd11;

          6'b100111 :     out[1:4] =  4'd7;

          6'b101000 :     out[1:4] =  4'd10;

          6'b101001 :     out[1:4] =  4'd1;

          6'b101010 :     out[1:4] =  4'd13;

          6'b101011 :     out[1:4] =  4'd14;

          6'b101100 :     out[1:4] =  4'd7;

          6'b101101 :     out[1:4] =  4'd2;

          6'b101110 :     out[1:4] =  4'd8;

          6'b101111 :     out[1:4] =  4'd13;

          6'b110000 :     out[1:4] =  4'd15;

          6'b110001 :     out[1:4] =  4'd6;

          6'b110010 :     out[1:4] =  4'd9;

          6'b110011 :     out[1:4] =  4'd15;

          6'b110100 :     out[1:4] =  4'd12;

          6'b110101 :     out[1:4] =  4'd0;

          6'b110110 :     out[1:4] =  4'd5;

          6'b110111 :     out[1:4] =  4'd9;

          6'b111000 :     out[1:4] =  4'd6;

          6'b111001 :     out[1:4] =  4'd10;

          6'b111010 :     out[1:4] =  4'd3;

          6'b111011 :     out[1:4] =  4'd4;

          6'b111100 :     out[1:4] =  4'd0;

          6'b111101 :     out[1:4] =  4'd5;

          6'b111110 :     out[1:4] =  4'd14;

          6'b111111 :     out[1:4] =  4'd3;

        

       endcase

    end

 

endmodule
S6
module S6(in,out);

input [1:6] in;

output  [1:4] out;

reg    [1:4] out;

always @ (in[1:6])

   begin

       case(in[1:6])

          6'b000000 :    out[1:4] =  4'd12;

          6'b000001 :    out[1:4] =  4'd10;

          6'b000010 :    out[1:4] =  4'd1;

          6'b000011 :    out[1:4] =  4'd15;

          6'b000100 :    out[1:4] =  4'd10;

          6'b000101 :    out[1:4] =  4'd4;

          6'b000110 :    out[1:4] =  4'd15;

          6'b000111 :    out[1:4] =  4'd2;

          6'b001000 :    out[1:4] =  4'd9;

          6'b001001 :    out[1:4] =  4'd7;

          6'b001010 :    out[1:4] =  4'd2;

          6'b001011 :    out[1:4] =  4'd12;

          6'b001100 :    out[1:4] =  4'd6;

          6'b001101 :    out[1:4] =  4'd9;

          6'b001110 :    out[1:4] =  4'd8;

          6'b001111 :    out[1:4] =  4'd5;

          6'b010000 :    out[1:4] =  4'd0;

          6'b010001 :    out[1:4] =  4'd6;

          6'b010010 :    out[1:4] =  4'd13;

          6'b010011 :    out[1:4] =  4'd1;

          6'b010100 :    out[1:4] =  4'd3;

          6'b010101 :    out[1:4] =  4'd13;

          6'b010110 :    out[1:4] =  4'd4;

          6'b010111 :    out[1:4] =  4'd14;

          6'b011000 :    out[1:4] =  4'd14;

          6'b011001 :    out[1:4] =  4'd0;

          6'b011010 :    out[1:4] =  4'd7;

          6'b011011 :    out[1:4] =  4'd11;

          6'b011100 :    out[1:4] =  4'd5;

          6'b011101 :    out[1:4] =  4'd3;

          6'b011110 :    out[1:4] =  4'd11;

          6'b011111 :    out[1:4] =  4'd8;

          6'b100000 :    out[1:4] =  4'd9;

          6'b100001 :    out[1:4] =  4'd4;

          6'b100010 :    out[1:4] =  4'd14;

          6'b100011 :    out[1:4] =  4'd3;

          6'b100100 :    out[1:4] =  4'd15;

          6'b100101 :    out[1:4] =  4'd2;

          6'b100110 :    out[1:4] =  4'd5;

          6'b100111 :    out[1:4] =  4'd12;

          6'b101000 :    out[1:4] =  4'd2;

          6'b101001 :    out[1:4] =  4'd9;

          6'b101010 :    out[1:4] =  4'd8;

          6'b101011 :    out[1:4] =  4'd5;

          6'b101100 :    out[1:4] =  4'd12;

          6'b101101 :    out[1:4] =  4'd15;

          6'b101110 :    out[1:4] =  4'd3;

          6'b101111 :    out[1:4] =  4'd10;

          6'b110000 :    out[1:4] =  4'd7;

          6'b110001 :    out[1:4] =  4'd11;

          6'b110010 :    out[1:4] =  4'd0;

          6'b110011 :    out[1:4] =  4'd14;

          6'b110100 :    out[1:4] =  4'd4;

          6'b110101 :    out[1:4] =  4'd1;

          6'b110110 :    out[1:4] =  4'd10;

          6'b110111 :    out[1:4] =  4'd7;

          6'b111000 :    out[1:4] =  4'd1;

          6'b111001 :    out[1:4] =  4'd6;

          6'b111010 :    out[1:4] =  4'd13;

          6'b111011 :    out[1:4] =  4'd0;

          6'b111100 :    out[1:4] =  4'd11;

          6'b111101 :    out[1:4] =  4'd8;

          6'b111110 :    out[1:4] =  4'd6;

          6'b111111 :    out[1:4] =  4'd13;

         

       endcase

    end

endmodule

S7
module S7(in,out);

input [1:6] in;

output  [1:4] out;

reg    [1:4] out;

always @ (in[1:6])

   begin

      case(in[1:6])

          6'b000000 :    out[1:4] =  4'd4;

          6'b000001 :    out[1:4] =  4'd13;

          6'b000010 :    out[1:4] =  4'd11;

          6'b000011 :    out[1:4] =  4'd0;

          6'b000100 :    out[1:4] =  4'd2;

          6'b000101 :    out[1:4] =  4'd11;

          6'b000110 :    out[1:4] =  4'd14;

          6'b000111 :    out[1:4] =  4'd7;

          6'b001000 :    out[1:4] =  4'd15;

          6'b001001 :    out[1:4] =  4'd4;

          6'b001010 :    out[1:4] =  4'd0;

          6'b001011 :    out[1:4] =  4'd9;

          6'b001100 :    out[1:4] =  4'd8;

          6'b001101 :    out[1:4] =  4'd1;

          6'b001110 :    out[1:4] =  4'd13;

          6'b001111 :    out[1:4] =  4'd10;

          6'b010000 :    out[1:4] =  4'd3;

          6'b010001 :    out[1:4] =  4'd14;

          6'b010010 :    out[1:4] =  4'd12;

          6'b010011 :    out[1:4] =  4'd3;

          6'b010100 :    out[1:4] =  4'd9;

          6'b010101 :    out[1:4] =  4'd5;

          6'b010110 :    out[1:4] =  4'd7;

          6'b010111 :    out[1:4] =  4'd12;

          6'b011000 :    out[1:4] =  4'd5;

          6'b011001 :    out[1:4] =  4'd2;

          6'b011010 :    out[1:4] =  4'd10;

          6'b011011 :    out[1:4] =  4'd15;

          6'b011100 :    out[1:4] =  4'd6;

          6'b011101 :    out[1:4] =  4'd8;

          6'b011110 :    out[1:4] =  4'd1;

          6'b011111 :    out[1:4] =  4'd6;

          6'b100000 :    out[1:4] =  4'd1;

          6'b100001 :    out[1:4] =  4'd6;

          6'b100010 :    out[1:4] =  4'd4;

          6'b100011 :    out[1:4] =  4'd11;

          6'b100100 :    out[1:4] =  4'd11;

          6'b100101 :    out[1:4] =  4'd13;

          6'b100110 :    out[1:4] =  4'd13;

          6'b100111 :    out[1:4] =  4'd8;

          6'b101000 :    out[1:4] =  4'd12;

          6'b101001 :    out[1:4] =  4'd1;

          6'b101010 :    out[1:4] =  4'd3;

          6'b101011 :    out[1:4] =  4'd4;

          6'b101100 :    out[1:4] =  4'd7;

          6'b101101 :    out[1:4] =  4'd10;

          6'b101110 :    out[1:4] =  4'd14;

          6'b101111 :    out[1:4] =  4'd7;

          6'b110000 :    out[1:4] =  4'd10;

          6'b110001 :    out[1:4] =  4'd9;

          6'b110010 :    out[1:4] =  4'd15;

          6'b110011 :    out[1:4] =  4'd5;

          6'b110100 :    out[1:4] =  4'd6;

          6'b110101 :    out[1:4] =  4'd0;

          6'b110110 :    out[1:4] =  4'd8;

          6'b110111 :    out[1:4] =  4'd15;

          6'b111000 :    out[1:4] =  4'd0;

          6'b111001 :    out[1:4] =  4'd14;

          6'b111010 :    out[1:4] =  4'd5;

          6'b111011 :    out[1:4] =  4'd2;

          6'b111100 :    out[1:4] =  4'd9;

          6'b111101 :    out[1:4] =  4'd3;

          6'b111110 :    out[1:4] =  4'd2;

          6'b111111 :    out[1:4] =  4'd12;

      

       endcase

    end

endmodule

S8
module S8(in,out);

input [1:6] in;

output  [1:4] out;

reg    [1:4] out;

always @ (in[1:6])

   begin

       case(in[1:6]) 

          6'b000000 :    out[1:4] =  4'd13;

          6'b000001 :    out[1:4] =  4'd1;

          6'b000010 :    out[1:4] =  4'd2;

          6'b000011 :    out[1:4] =  4'd15;

          6'b000100 :    out[1:4] =  4'd8;

          6'b000101 :    out[1:4] =  4'd13;

          6'b000110 :    out[1:4] =  4'd4;

          6'b000111 :    out[1:4] =  4'd8;

          6'b001000 :    out[1:4] =  4'd6;

          6'b001001 :    out[1:4] =  4'd10;

          6'b001010 :    out[1:4] =  4'd15;

          6'b001011 :    out[1:4] =  4'd3;

          6'b001100 :    out[1:4] =  4'd11;

          6'b001101 :    out[1:4] =  4'd7;

          6'b001110 :    out[1:4] =  4'd1;

          6'b001111 :    out[1:4] =  4'd4;

          6'b010000 :    out[1:4] =  4'd10;

          6'b010001 :    out[1:4] =  4'd12;

          6'b010010 :    out[1:4] =  4'd9;

          6'b010011 :    out[1:4] =  4'd5;

          6'b010100 :    out[1:4] =  4'd3;

          6'b010101 :    out[1:4] =  4'd6;

          6'b010110 :    out[1:4] =  4'd14;

          6'b010111 :    out[1:4] =  4'd11;

          6'b011000 :    out[1:4] =  4'd5;

          6'b011001 :    out[1:4] =  4'd0;

          6'b011010 :    out[1:4] =  4'd0;

          6'b011011 :    out[1:4] =  4'd14;

          6'b011100 :    out[1:4] =  4'd12;

          6'b011101 :    out[1:4] =  4'd9;

          6'b011110 :    out[1:4] =  4'd7;

          6'b011111 :    out[1:4] =  4'd2;

          6'b100000 :    out[1:4] =  4'd7;

          6'b100001 :    out[1:4] =  4'd2;

          6'b100010 :    out[1:4] =  4'd11;

          6'b100011 :    out[1:4] =  4'd1;

          6'b100100 :    out[1:4] =  4'd4;

          6'b100101 :    out[1:4] =  4'd14;

          6'b100110 :    out[1:4] =  4'd1;

          6'b100111 :    out[1:4] =  4'd7;

          6'b101000 :    out[1:4] =  4'd9;

          6'b101001 :    out[1:4] =  4'd4;

          6'b101010 :    out[1:4] =  4'd12;

          6'b101011 :    out[1:4] =  4'd10;

          6'b101100 :    out[1:4] =  4'd14;

          6'b101101 :    out[1:4] =  4'd8;

          6'b101110 :    out[1:4] =  4'd2;

          6'b101111 :    out[1:4] =  4'd13;

          6'b110000 :    out[1:4] =  4'd0;

          6'b110001 :    out[1:4] =  4'd15;

          6'b110010 :    out[1:4] =  4'd6;

          6'b110011 :    out[1:4] =  4'd12;

          6'b110100 :    out[1:4] =  4'd10;

          6'b110101 :    out[1:4] =  4'd9;

          6'b110110 :    out[1:4] =  4'd13;

          6'b110111 :    out[1:4] =  4'd0;

          6'b111000 :    out[1:4] =  4'd15;

          6'b111001 :    out[1:4] =  4'd3;

          6'b111010 :    out[1:4] =  4'd3;

          6'b111011 :    out[1:4] =  4'd5;

          6'b111100 :    out[1:4] =  4'd5;

          6'b111101 :    out[1:4] =  4'd6;

          6'b111110 :    out[1:4] =  4'd8;

          6'b111111 :    out[1:4] =  4'd11;

     

       endcase

    end

endmodule

P盒置换模块(P)
//置换运算P

module P(in,out);

input[1:32]in;
output[1:32]out;
wire [1:32] out;

assign    out={in[16],in[7],in[20],in[21],
               in[29],in[12],in[28],in[17],
               in[1],in[15],in[23],in[26],
               in[5],in[18],in[31],in[10],
               in[2],in[8],in[24],in[14],
               in[32],in[27],in[3],in[9],
               in[19],in[13],in[30],in[6],
               in[22],in[11],in[4],in[25]}; 
               
endmodule

IP逆置换模块(IP_1)

//IP逆置换

module  IP_1(IP_1in,IP_1out);

input    [1:64]  IP_1in;
output   [1:64]  IP_1out;
wire     [1:64]  IP_1out;

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

endmodule

密钥生成模块(key_top)

module   key_top(key_in,key1,key2,key3,key4,key5,key6,key7,key8,key9,key10,key11,key12,key13,key14,key15,key16);

input      [1:64]  key_in;
output   [1:48]   key1,key2,key3,key4,key5,key6,key7,key8,key9,key10,key11,key12,key13,key14,key15,key16 ;
wire  [1:56]   i;
wire  [1:28]   k1_c,k1_d,k2_c,k2_d,k3_c,k3_d,k4_c,k4_d,k5_c,k5_d,k6_c,k6_d,k7_c,k7_d,k8_c,k8_d,k9_c,k9_d,k10_c,k10_d,k11_c,k11_d,k12_c,k12_d,k13_c,k13_d,k14_c,k14_d,k15_c,k15_d,k16_c,k16_d;

key   key(.in(key_in),.C0(i[1:28]),.D0(i[29:56]));

 left_shiftera   left_shiftera1 (.in(i[1:28]),.outM(k1_c)),
	 left_shiftera2 (.in(i[29:56]),.outM(k1_d)),
                 left_shiftera3 (.in(k1_c),.outM(k2_c)),
                 left_shiftera4 (.in(k1_d),.outM(k2_d)),
                 left_shiftera5 (.in(k8_c),.outM(k9_c)),
                 left_shiftera6 (.in(k8_d),.outM(k9_d)),
                 left_shiftera7 (.in(k15_c),.outM(k16_c)),
                 left_shiftera8 (.in(k15_d),.outM(k16_d));

 left_shifterb   left_shifterb1(.in(k2_c),.outN(k3_c)),
	 left_shifterb2(.in(k2_d),.outN(k3_d)),
                 left_shifterb3(.in(k3_c),.outN(k4_c)),
                 left_shifterb4(.in(k3_d),.outN(k4_d)),
                 left_shifterb5(.in(k4_c),.outN(k5_c)),
                 left_shifterb6(.in(k4_d),.outN(k5_d)),
                 left_shifterb7(.in(k5_c),.outN(k6_c)),
                 left_shifterb8(.in(k5_d),.outN(k6_d)),
                 left_shifterb9(.in(k6_c),.outN(k7_c)),
                 left_shifterb10(.in(k6_d),.outN(k7_d)),
                 left_shifterb11(.in(k7_c),.outN(k8_c)),
                 left_shifterb12(.in(k7_d),.outN(k8_d)),
                 left_shifterb13(.in(k9_c),.outN(k10_c)),
                 left_shifterb14(.in(k9_d),.outN(k10_d)),
                 left_shifterb15(.in(k10_c),.outN(k11_c)),
                 left_shifterb16(.in(k10_d),.outN(k11_d)),
                 left_shifterb17(.in(k11_c),.outN(k12_c)),
                 left_shifterb18(.in(k11_d),.outN(k12_d)),
                 left_shifterb19(.in(k12_c),.outN(k13_c)),
                 left_shifterb20(.in(k12_d),.outN(k13_d)),
                 left_shifterb21(.in(k13_c),.outN(k14_c)),
                 left_shifterb22(.in(k13_d),.outN(k14_d)),
                 left_shifterb23(.in(k14_c),.outN(k15_c)),
                 left_shifterb24(.in(k14_d),.outN(k15_d));

keys       keys1(.C(k1_c),.D(k1_d),.out(key1)),
           keys2(.C(k2_c),.D(k2_d),.out(key2)),
           keys3(.C(k3_c),.D(k3_d),.out(key3)),
           keys4(.C(k4_c),.D(k4_d),.out(key4)),
           keys5(.C(k5_c),.D(k5_d),.out(key5)),
           keys6(.C(k6_c),.D(k6_d),.out(key6)),
           keys7(.C(k7_c),.D(k7_d),.out(key7)),
           keys8(.C(k8_c),.D(k8_d),.out(key8)),
           key1s9(.C(k9_c),.D(k9_d),.out(key9)),
           keys10(.C(k10_c),.D(k10_d),.out(key10)),
           keys11(.C(k11_c),.D(k11_d),.out(key11)),
           keys12(.C(k12_c),.D(k12_d),.out(key12)),
           keys13(.C(k13_c),.D(k13_d),.out(key13)),
           keys14(.C(k14_c),.D(k14_d),.out(key14)),
           keys15(.C(k15_c),.D(k15_d),.out(key15)),
           keys16(.C(k16_c),.D(k16_d),.out(key16));

endmodule

PC_1

//置换选择1,以及将密钥分为两个部分
module  key (in,C0,D0);

input  [1:64]  in;

output [1:28]  C0,D0;

wire [1:28]  C0,D0;

assign        C0={in[57],in[49],in[41],in[33],in[25],in[17],in[9],

                  in[1],in[58],in[50],in[42],in[34],in[26],in[18],

                  in[10],in[2],in[59],in[51],in[43],in[35],in[27],

                  in[19],in[11],in[3],in[60],in[52],in[44],in[36]};

 

assign         D0={in[63],in[55],in[47],in[39],in[31],in[33],in[15],

                   in[7],in[62],in[54],in[46],in[38],in[30],in[22],

                   in[14],in[6],in[61],in[53],in[45],in[37],in[29],

                   in[21],in[13],in[5],in[28],in[20],in[12],in[4]};

endmodule

移位操作

//移位寄存器(左移一位)

module  left_shiftera(in,outM);

input  [1:28]  in;

output [1:28]  outM;

wire  [1:28]  outM;

  assign     outM={in[2:28],in[1]};

endmodule

 


在这里插入代码片//移位操作(左移两位)
module  left_shifterb(in,outN);

input  [1:28]  in;

output [1:28]  outN;

wire  [1:28]  outN;

  assign     outN={in[3:28],in[1:2]};

endmodule

PC_2

//置换选择2,PC_2

module   keys(C,D,out);

input    [1:28]   C,D;
output   [1:48]   out;
wire     [1:56]   in;

  assign   in = {C,D};

  assign   out  =  {in[14],in[17],in[11],in[24],in[1],in[5],

                    in[3],in[28],in[15],in[6],in[21],in[10],

                    in[23],in[19],in[12],in[4],in[26],in[8],

                    in[16],in[7],in[27],in[20],in[13],in[2],

                    in[41],in[52],in[31],in[37],in[47],in[55],

                    in[30],in[40],in[51],in[45],in[33],in[48],

                    in[44],in[49],in[39],in[56],in[34],in[53],

                    in[46],in[42],in[50],in[36],in[29],in[32]};

endmodule

本文是对https://blog.csdn.net/a4qqlht/article/details/4837906文章中的代码进行了一些修改,如果有修改不当的地方,请各位大佬批评指正。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值