DES 算法 Verilog 课设

本文详细介绍了使用Verilog语言实现DES算法的过程,内容涵盖电科专业课设的相关知识。
摘要由CSDN通过智能技术生成

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值