📄 all-desvf.v
字号:
/////////////////////////////////////////////////////////////////////
//// ////
//// 实现模块 ////
//// ////
/////////////////////////////////////////////////////////////////////
module vdes(desOut,desIn,vkey,dec,clk);
output [63:0] desOut;
input [63:0] desIn;
input [55:0] vkey;
input dec;
input clk;
reg [3:0] cnt;
always @(posedge clk)
begin
$display("");
$display("**************************************");
$display("* Starting DES ... *");
$display("**************************************");
$display("");
$display("desIn=%b",desIn);
$display("");
if(dec==0) //dec=0时解密
begin
$display("Running decrypt ...\n");
for(cnt=0;cnt<15;cnt=cnt+1)
#200;
#10;
$display("desOut=%b", desOut);
end
else if(dec==1) //dec=1时加密
begin
$display("Running encrypt ...\n");
for(cnt=0;cnt<15;cnt=cnt+1)
#200;
#10;
$display("desOut=%b", desOut);
end
$display("");
$display("**************************************");
$display("* DES done ... *");
$display("**************************************");
$display("");
$finish;
end
des des1( .clk( clk ),
.desOut( desOut ),
.desIn( desIn ),
.vkey( vkey ),
.roundSel( cnt ),
.dec( dec )
);
endmodule
/////////////////////////////////////////////////////////////////////
//// ////
//// 加密基本模块 ////
//// ////
//// ////
/////////////////////////////////////////////////////////////////////
module des(desOut, desIn, vkey, dec, roundSel, clk);
output [63:0] desOut; // 64位的密文输出
input [63:0] desIn; // 64位的明文输入
input [55:0] vkey; // 56位密钥
input dec;
input [3:0] roundSel; // 加密轮数控制
input clk;
wire [1:48] K_sub;
wire [1:64] IP, FP;
reg [1:32] L, R;
wire [1:32] Xin;
wire [1:32] Lout, Rout;
wire [1:32] out;
// 初始换位
assign IP[1:64] = { desIn[06], desIn[14], desIn[22], desIn[30], desIn[38], desIn[46],
desIn[54], desIn[62], desIn[04], desIn[12], desIn[20], desIn[28],
desIn[36], desIn[44], desIn[52], desIn[60], desIn[02], desIn[10],
desIn[18], desIn[26], desIn[34], desIn[42], desIn[50], desIn[58],
desIn[00], desIn[08], desIn[16], desIn[24], desIn[32], desIn[40],
desIn[48], desIn[56], desIn[07], desIn[15], desIn[23], desIn[31],
desIn[39], desIn[47], desIn[55], desIn[63], desIn[05], desIn[13],
desIn[21], desIn[29], desIn[37], desIn[45], desIn[53], desIn[61],
desIn[03], desIn[11], desIn[19], desIn[27], desIn[35], desIn[43],
desIn[51], desIn[59], desIn[01], desIn[09], desIn[17], desIn[25],
desIn[33], desIn[41], desIn[49], desIn[57] };
assign Lout = (roundSel == 0) ? IP[33:64] : R;
assign Xin = (roundSel == 0) ? IP[01:32] : L;
// 设置并选择子密钥
vkey_sel vkey_sel1(
.K_sub( K_sub ),
.K( vkey ),
.roundSel( roundSel ),
.dec( dec )
);
crp crp1( .P( out ), .R( Lout ), .K_sub( K_sub ) ); //调用F函数模块
assign Rout = Xin ^ out;
assign FP = { Rout, Lout};
always @(posedge clk)
L <= #1 Lout;
always @(posedge clk)
R <= #1 Rout;
assign desOut = { FP[40], FP[08], FP[48], FP[16], FP[56], FP[24], FP[64], FP[32],
FP[39], FP[07], FP[47], FP[15], FP[55], FP[23], FP[63], FP[31],
FP[38], FP[06], FP[46], FP[14], FP[54], FP[22], FP[62], FP[30],
FP[37], FP[05], FP[45], FP[13], FP[53], FP[21], FP[61], FP[29],
FP[36], FP[04], FP[44], FP[12], FP[52], FP[20], FP[60], FP[28],
FP[35], FP[03], FP[43], FP[11], FP[51], FP[19], FP[59], FP[27],
FP[34], FP[02], FP[42], FP[10], FP[50], FP[18], FP[58], FP[26],
FP[33], FP[01], FP[41], FP[09], FP[49], FP[17], FP[57], FP[25] };
endmodule
/////////////////////////////////////////////////////////////////////
//// ////
//// 密钥设置模块 ////
//// 根据给定的密钥设置16个48位的子密钥 ////
//// ////
/////////////////////////////////////////////////////////////////////
module vkey_sel(K_sub, K, roundSel, dec);
output [1:48] K_sub;
input [55:0] K;
input [3:0] roundSel;
input dec;
reg [1:48] K_sub;
wire [1:48] K1, K2, K3, K4, K5, K6, K7, K8, K9;
wire [1:48] K10, K11, K12, K13, K14, K15, K16;
always @(K1 or K2 or K3 or K4 or K5 or K6 or K7 or K8 or K9 or K10
or K11 or K12 or K13 or K14 or K15 or K16 or roundSel)
case (roundSel) // 明确指定步骤中该使用哪一个子密钥
0: K_sub = K1;
1: K_sub = K2;
2: K_sub = K3;
3: K_sub = K4;
4: K_sub = K5;
5: K_sub = K6;
6: K_sub = K7;
7: K_sub = K8;
8: K_sub = K9;
9: K_sub = K10;
10: K_sub = K11;
11: K_sub = K12;
12: K_sub = K13;
13: K_sub = K14;
14: K_sub = K15;
15: K_sub = K16;
endcase
// 利用dec和密钥K各位的值逐一确定16个子密钥各位的值
assign K16[1] = dec ? K[47] : K[40];
assign K16[2] = dec ? K[11] : K[4];
assign K16[3] = dec ? K[26] : K[19];
assign K16[4] = dec ? K[3] : K[53];
assign K16[5] = dec ? K[13] : K[6];
assign K16[6] = dec ? K[41] : K[34];
assign K16[7] = dec ? K[27] : K[20];
assign K16[8] = dec ? K[6] : K[24];
assign K16[9] = dec ? K[54] : K[47];
assign K16[10] = dec ? K[48] : K[41];
assign K16[11] = dec ? K[39] : K[32];
assign K16[12] = dec ? K[19] : K[12];
assign K16[13] = dec ? K[53] : K[46];
assign K16[14] = dec ? K[25] : K[18];
assign K16[15] = dec ? K[33] : K[26];
assign K16[16] = dec ? K[34] : K[27];
assign K16[17] = dec ? K[17] : K[10];
assign K16[18] = dec ? K[5] : K[55];
assign K16[19] = dec ? K[4] : K[54];
assign K16[20] = dec ? K[55] : K[48];
assign K16[21] = dec ? K[24] : K[17];
assign K16[22] = dec ? K[32] : K[25];
assign K16[23] = dec ? K[40] : K[33];
assign K16[24] = dec ? K[20] : K[13];
assign K16[25] = dec ? K[36] : K[29];
assign K16[26] = dec ? K[31] : K[51];
assign K16[27] = dec ? K[21] : K[14];
assign K16[28] = dec ? K[8] : K[1];
assign K16[29] = dec ? K[23] : K[16];
assign K16[30] = dec ? K[52] : K[45];
assign K16[31] = dec ? K[14] : K[7];
assign K16[32] = dec ? K[29] : K[22];
assign K16[33] = dec ? K[51] : K[44];
assign K16[34] = dec ? K[9] : K[2];
assign K16[35] = dec ? K[35] : K[28];
assign K16[36] = dec ? K[30] : K[23];
assign K16[37] = dec ? K[2] : K[50];
assign K16[38] = dec ? K[37] : K[30];
assign K16[39] = dec ? K[22] : K[15];
assign K16[40] = dec ? K[0] : K[52];
assign K16[41] = dec ? K[42] : K[35];
assign K16[42] = dec ? K[38] : K[31];
assign K16[43] = dec ? K[16] : K[9];
assign K16[44] = dec ? K[43] : K[36];
assign K16[45] = dec ? K[44] : K[37];
assign K16[46] = dec ? K[1] : K[49];
assign K16[47] = dec ? K[7] : K[0];
assign K16[48] = dec ? K[28] : K[21];
assign K15[1] = dec ? K[54] : K[33];
assign K15[2] = dec ? K[18] : K[54];
assign K15[3] = dec ? K[33] : K[12];
assign K15[4] = dec ? K[10] : K[46];
assign K15[5] = dec ? K[20] : K[24];
assign K15[6] = dec ? K[48] : K[27];
assign K15[7] = dec ? K[34] : K[13];
assign K15[8] = dec ? K[13] : K[17];
assign K15[9] = dec ? K[4] : K[40];
assign K15[10] = dec ? K[55] : K[34];
assign K15[11] = dec ? K[46] : K[25];
assign K15[12] = dec ? K[26] : K[5];
assign K15[13] = dec ? K[3] : K[39];
assign K15[14] = dec ? K[32] : K[11];
assign K15[15] = dec ? K[40] : K[19];
assign K15[16] = dec ? K[41] : K[20];
assign K15[17] = dec ? K[24] : K[3];
assign K15[18] = dec ? K[12] : K[48];
assign K15[19] = dec ? K[11] : K[47];
assign K15[20] = dec ? K[5] : K[41];
assign K15[21] = dec ? K[6] : K[10];
assign K15[22] = dec ? K[39] : K[18];
assign K15[23] = dec ? K[47] : K[26];
assign K15[24] = dec ? K[27] : K[6];
assign K15[25] = dec ? K[43] : K[22];
assign K15[26] = dec ? K[38] : K[44];
assign K15[27] = dec ? K[28] : K[7];
assign K15[28] = dec ? K[15] : K[49];
assign K15[29] = dec ? K[30] : K[9];
assign K15[30] = dec ? K[0] : K[38];
assign K15[31] = dec ? K[21] : K[0];
assign K15[32] = dec ? K[36] : K[15];
assign K15[33] = dec ? K[31] : K[37];
assign K15[34] = dec ? K[16] : K[50];
assign K15[35] = dec ? K[42] : K[21];
assign K15[36] = dec ? K[37] : K[16];
assign K15[37] = dec ? K[9] : K[43];
assign K15[38] = dec ? K[44] : K[23];
assign K15[39] = dec ? K[29] : K[8];
assign K15[40] = dec ? K[7] : K[45];
assign K15[41] = dec ? K[49] : K[28];
assign K15[42] = dec ? K[45] : K[51];
assign K15[43] = dec ? K[23] : K[2];
assign K15[44] = dec ? K[50] : K[29];
assign K15[45] = dec ? K[51] : K[30];
assign K15[46] = dec ? K[8] : K[42];
assign K15[47] = dec ? K[14] : K[52];
assign K15[48] = dec ? K[35] : K[14];
assign K14[1] = dec ? K[11] : K[19];
assign K14[2] = dec ? K[32] : K[40];
assign K14[3] = dec ? K[47] : K[55];
assign K14[4] = dec ? K[24] : K[32];
assign K14[5] = dec ? K[34] : K[10];
assign K14[6] = dec ? K[5] : K[13];
assign K14[7] = dec ? K[48] : K[24];
assign K14[8] = dec ? K[27] : K[3];
assign K14[9] = dec ? K[18] : K[26];
assign K14[10] = dec ? K[12] : K[20];
assign K14[11] = dec ? K[3] : K[11];
assign K14[12] = dec ? K[40] : K[48];
assign K14[13] = dec ? K[17] : K[25];
assign K14[14] = dec ? K[46] : K[54];
assign K14[15] = dec ? K[54] : K[5];
assign K14[16] = dec ? K[55] : K[6];
assign K14[17] = dec ? K[13] : K[46];
assign K14[18] = dec ? K[26] : K[34];
assign K14[19] = dec ? K[25] : K[33];
assign K14[20] = dec ? K[19] : K[27];
assign K14[21] = dec ? K[20] : K[53];
assign K14[22] = dec ? K[53] : K[4];
assign K14[23] = dec ? K[4] : K[12];
assign K14[24] = dec ? K[41] : K[17];
assign K14[25] = dec ? K[2] : K[8];
assign K14[26] = dec ? K[52] : K[30];
assign K14[27] = dec ? K[42] : K[52];
assign K14[28] = dec ? K[29] : K[35];
assign K14[29] = dec ? K[44] : K[50];
assign K14[30] = dec ? K[14] : K[51];
assign K14[31] = dec ? K[35] : K[45];
assign K14[32] = dec ? K[50] : K[1];
assign K14[33] = dec ? K[45] : K[23];
assign K14[34] = dec ? K[30] : K[36];
assign K14[35] = dec ? K[1] : K[7];
assign K14[36] = dec ? K[51] : K[2];
assign K14[37] = dec ? K[23] : K[29];
assign K14[38] = dec ? K[31] : K[9];
assign K14[39] = dec ? K[43] : K[49];
assign K14[40] = dec ? K[21] : K[31];
assign K14[41] = dec ? K[8] : K[14];
assign K14[42] = dec ? K[0] : K[37];
assign K14[43] = dec ? K[37] : K[43];
assign K14[44] = dec ? K[9] : K[15];
assign K14[45] = dec ? K[38] : K[16];
assign K14[46] = dec ? K[22] : K[28];
assign K14[47] = dec ? K[28] : K[38];
assign K14[48] = dec ? K[49] : K[0];
assign K13[1] = dec ? K[25] : K[5];
assign K13[2] = dec ? K[46] : K[26];
assign K13[3] = dec ? K[4] : K[41];
assign K13[4] = dec ? K[13] : K[18];
assign K13[5] = dec ? K[48] : K[53];
assign K13[6] = dec ? K[19] : K[24];
assign K13[7] = dec ? K[5] : K[10];
assign K13[8] = dec ? K[41] : K[46];
assign K13[9] = dec ? K[32] : K[12];
assign K13[10] = dec ? K[26] : K[6];
assign K13[11] = dec ? K[17] : K[54];
assign K13[12] = dec ? K[54] : K[34];
assign K13[13] = dec ? K[6] : K[11];
assign K13[14] = dec ? K[3] : K[40];
assign K13[15] = dec ? K[11] : K[48];
assign K13[16] = dec ? K[12] : K[17];
assign K13[17] = dec ? K[27] : K[32];
assign K13[18] = dec ? K[40] : K[20];
assign K13[19] = dec ? K[39] : K[19];
assign K13[20] = dec ? K[33] : K[13];
assign K13[21] = dec ? K[34] : K[39];
assign K13[22] = dec ? K[10] : K[47];
assign K13[23] = dec ? K[18] : K[55];
assign K13[24] = dec ? K[55] : K[3];
assign K13[25] = dec ? K[16] : K[49];
assign K13[26] = dec ? K[7] : K[16];
assign K13[27] = dec ? K[1] : K[38];
assign K13[28] = dec ? K[43] : K[21];
assign K13[29] = dec ? K[31] : K[36];
assign K13[30] = dec ? K[28] : K[37];
assign K13[31] = dec ? K[49] : K[31];
assign K13[32] = dec ? K[9] : K[42];
assign K13[33] = dec ? K[0] : K[9];
assign K13[34] = dec ? K[44] : K[22];
assign K13[35] = dec ? K[15] : K[52];
assign K13[36] = dec ? K[38] : K[43];
assign K13[37] = dec ? K[37] : K[15];
assign K13[38] = dec ? K[45] : K[50];
assign K13[39] = dec ? K[2] : K[35];
assign K13[40] = dec ? K[35] : K[44];
assign K13[41] = dec ? K[22] : K[0];
assign K13[42] = dec ? K[14] : K[23];
assign K13[43] = dec ? K[51] : K[29];
assign K13[44] = dec ? K[23] : K[1];
assign K13[45] = dec ? K[52] : K[2];
assign K13[46] = dec ? K[36] : K[14];
assign K13[47] = dec ? K[42] : K[51];
assign K13[48] = dec ? K[8] : K[45];
assign K12[1] = dec ? K[39] : K[48];
assign K12[2] = dec ? K[3] : K[12];
assign K12[3] = dec ? K[18] : K[27];
assign K12[4] = dec ? K[27] : K[4];
assign K12[5] = dec ? K[5] : K[39];
assign K12[6] = dec ? K[33] : K[10];
assign K12[7] = dec ? K[19] : K[53];
assign K12[8] = dec ? K[55] : K[32];
assign K12[9] = dec ? K[46] : K[55];
assign K12[10] = dec ? K[40] : K[17];
assign K12[11] = dec ? K[6] : K[40];
assign K12[12] = dec ? K[11] : K[20];
assign K12[13] = dec ? K[20] : K[54];
assign K12[14] = dec ? K[17] : K[26];
assign K12[15] = dec ? K[25] : K[34];
assign K12[16] = dec ? K[26] : K[3];
assign K12[17] = dec ? K[41] : K[18];
assign K12[18] = dec ? K[54] : K[6];
assign K12[19] = dec ? K[53] : K[5];
assign K12[20] = dec ? K[47] : K[24];
assign K12[21] = dec ? K[48] : K[25];
assign K12[22] = dec ? K[24] : K[33];
assign K12[23] = dec ? K[32] : K[41];
assign K12[24] = dec ? K[12] : K[46];
assign K12[25] = dec ? K[30] : K[35];
assign K12[26] = dec ? K[21] : K[2];
assign K12[27] = dec ? K[15] : K[51];
assign K12[28] = dec ? K[2] : K[7];
assign K12[29] = dec ? K[45] : K[22];
assign K12[30] = dec ? K[42] : K[23];
assign K12[31] = dec ? K[8] : K[44];
assign K12[32] = dec ? K[23] : K[28];
assign K12[33] = dec ? K[14] : K[50];
assign K12[34] = dec ? K[31] : K[8];
assign K12[35] = dec ? K[29] : K[38];
assign K12[36] = dec ? K[52] : K[29];
assign K12[37] = dec ? K[51] : K[1];
assign K12[38] = dec ? K[0] : K[36];
assign K12[39] = dec ? K[16] : K[21];
assign K12[40] = dec ? K[49] : K[30];
assign K12[41] = dec ? K[36] : K[45];
assign K12[42] = dec ? K[28] : K[9];
assign K12[43] = dec ? K[38] : K[15];
assign K12[44] = dec ? K[37] : K[42];
assign K12[45] = dec ? K[7] : K[43];
assign K12[46] = dec ? K[50] : K[0];
assign K12[47] = dec ? K[1] : K[37];
assign K12[48] = dec ? K[22] : K[31];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -