⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 all-desvf.v

📁 一个关于DES算法的verilog语言实现,包括了各个实现模块以及测试模块
💻 V
📖 第 1 页 / 共 4 页
字号:
assign K3[40] = dec ? K[31] : K[21];
assign K3[41] = dec ? K[14] : K[8];
assign K3[42] = dec ? K[37] : K[0];
assign K3[43] = dec ? K[43] : K[37];
assign K3[44] = dec ? K[15] : K[9];
assign K3[45] = dec ? K[16] : K[38];
assign K3[46] = dec ? K[28] : K[22];
assign K3[47] = dec ? K[38] : K[28];
assign K3[48] = dec ? K[0] : K[49];

assign K2[1] = dec ? K[33] : K[54];
assign K2[2] = dec ? K[54] : K[18];
assign K2[3] = dec ? K[12] : K[33];
assign K2[4] = dec ? K[46] : K[10];
assign K2[5] = dec ? K[24] : K[20];
assign K2[6] = dec ? K[27] : K[48];
assign K2[7] = dec ? K[13] : K[34];
assign K2[8] = dec ? K[17] : K[13];
assign K2[9] = dec ? K[40] : K[4];
assign K2[10] = dec ? K[34] : K[55];
assign K2[11] = dec ? K[25] : K[46];
assign K2[12] = dec ? K[5] : K[26];
assign K2[13] = dec ? K[39] : K[3];
assign K2[14] = dec ? K[11] : K[32];
assign K2[15] = dec ? K[19] : K[40];
assign K2[16] = dec ? K[20] : K[41];
assign K2[17] = dec ? K[3] : K[24];
assign K2[18] = dec ? K[48] : K[12];
assign K2[19] = dec ? K[47] : K[11];
assign K2[20] = dec ? K[41] : K[5];
assign K2[21] = dec ? K[10] : K[6];
assign K2[22] = dec ? K[18] : K[39];
assign K2[23] = dec ? K[26] : K[47];
assign K2[24] = dec ? K[6] : K[27];
assign K2[25] = dec ? K[22] : K[43];
assign K2[26] = dec ? K[44] : K[38];
assign K2[27] = dec ? K[7] : K[28];
assign K2[28] = dec ? K[49] : K[15];
assign K2[29] = dec ? K[9] : K[30];
assign K2[30] = dec ? K[38] : K[0];
assign K2[31] = dec ? K[0] : K[21];
assign K2[32] = dec ? K[15] : K[36];
assign K2[33] = dec ? K[37] : K[31];
assign K2[34] = dec ? K[50] : K[16];
assign K2[35] = dec ? K[21] : K[42];
assign K2[36] = dec ? K[16] : K[37];
assign K2[37] = dec ? K[43] : K[9];
assign K2[38] = dec ? K[23] : K[44];
assign K2[39] = dec ? K[8] : K[29];
assign K2[40] = dec ? K[45] : K[7];
assign K2[41] = dec ? K[28] : K[49];
assign K2[42] = dec ? K[51] : K[45];
assign K2[43] = dec ? K[2] : K[23];
assign K2[44] = dec ? K[29] : K[50];
assign K2[45] = dec ? K[30] : K[51];
assign K2[46] = dec ? K[42] : K[8];
assign K2[47] = dec ? K[52] : K[14];
assign K2[48] = dec ? K[14] : K[35];

assign K1[1] = dec ? K[40]  : K[47];
assign K1[2] = dec ? K[4]   : K[11];
assign K1[3] = dec ? K[19]  : K[26];
assign K1[4] = dec ? K[53]  : K[3];
assign K1[5] = dec ? K[6]   : K[13];
assign K1[6] = dec ? K[34]  : K[41];
assign K1[7] = dec ? K[20]  : K[27];
assign K1[8] = dec ? K[24]  : K[6];
assign K1[9] = dec ? K[47]  : K[54];
assign K1[10] = dec ? K[41] : K[48];
assign K1[11] = dec ? K[32] : K[39];
assign K1[12] = dec ? K[12] : K[19];
assign K1[13] = dec ? K[46] : K[53];
assign K1[14] = dec ? K[18] : K[25];
assign K1[15] = dec ? K[26] : K[33];
assign K1[16] = dec ? K[27] : K[34];
assign K1[17] = dec ? K[10] : K[17];
assign K1[18] = dec ? K[55] : K[5];
assign K1[19] = dec ? K[54] : K[4];
assign K1[20] = dec ? K[48] : K[55];
assign K1[21] = dec ? K[17] : K[24];
assign K1[22] = dec ? K[25] : K[32];
assign K1[23] = dec ? K[33] : K[40];
assign K1[24] = dec ? K[13] : K[20];
assign K1[25] = dec ? K[29] : K[36];
assign K1[26] = dec ? K[51] : K[31];
assign K1[27] = dec ? K[14] : K[21];
assign K1[28] = dec ? K[1]  : K[8];
assign K1[29] = dec ? K[16] : K[23];
assign K1[30] = dec ? K[45] : K[52];
assign K1[31] = dec ? K[7]  : K[14];
assign K1[32] = dec ? K[22] : K[29];
assign K1[33] = dec ? K[44] : K[51];
assign K1[34] = dec ? K[2]  : K[9];
assign K1[35] = dec ? K[28] : K[35];
assign K1[36] = dec ? K[23] : K[30];
assign K1[37] = dec ? K[50] : K[2];
assign K1[38] = dec ? K[30] : K[37];
assign K1[39] = dec ? K[15] : K[22];
assign K1[40] = dec ? K[52] : K[0];
assign K1[41] = dec ? K[35] : K[42];
assign K1[42] = dec ? K[31] : K[38];
assign K1[43] = dec ? K[9]  : K[16];
assign K1[44] = dec ? K[36] : K[43];
assign K1[45] = dec ? K[37] : K[44];
assign K1[46] = dec ? K[49] : K[1];
assign K1[47] = dec ? K[0]  : K[7];
assign K1[48] = dec ? K[21] : K[28];

endmodule


/////////////////////////////////////////////////////////////////////
////                                                             ////
////                                                             ////
////  F函数模块                                                  ////
////                                                             ////
/////////////////////////////////////////////////////////////////////

module  crp(P, R, K_sub);
output	[1:32]	P;
input	[1:32]	R;
input	[1:48]	K_sub;

wire	[1:48] Temp1;
wire	[1:48] Temp2;
wire	[1:32] Temp3;

// 把R换位并扩展为48位,以便和子密钥进行异或运算
assign Temp1[1:48] = {	R[32], R[1], R[2], R[3], R[4], R[5], R[4], R[5],
			R[6], R[7], R[8], R[9], R[8], R[9], R[10], R[11],
			R[12], R[13], R[12], R[13], R[14], R[15], R[16],
			R[17], R[16], R[17], R[18], R[19], R[20], R[21],
			R[20], R[21], R[22], R[23], R[24], R[25], R[24],
			R[25], R[26], R[27], R[28], R[29], R[28], R[29],
			R[30], R[31], R[32], R[1]};

assign Temp2 = Temp1 ^ K_sub;  

// 调用S盒模块,利用Temp2寻址,得出Temp3各位的值 
sbox1 u0( .addr(Temp2[01:06]), .dout(Temp3[01:04]) );
sbox2 u1( .addr(Temp2[07:12]), .dout(Temp3[05:08]) );
sbox3 u2( .addr(Temp2[13:18]), .dout(Temp3[09:12]) );
sbox4 u3( .addr(Temp2[19:24]), .dout(Temp3[13:16]) );
sbox5 u4( .addr(Temp2[25:30]), .dout(Temp3[17:20]) );
sbox6 u5( .addr(Temp2[31:36]), .dout(Temp3[21:24]) );
sbox7 u6( .addr(Temp2[37:42]), .dout(Temp3[25:28]) );
sbox8 u7( .addr(Temp2[43:48]), .dout(Temp3[29:32]) ); 

// 将Temp3换位并赋给输出P
assign P[1:32] = {	Temp3[16], Temp3[7], Temp3[20], Temp3[21], Temp3[29], Temp3[12],
            Temp3[28],Temp3[17], Temp3[1], Temp3[15], Temp3[23], Temp3[26], Temp3[5],
            Temp3[18],Temp3[31], Temp3[10], Temp3[2], Temp3[8], Temp3[24], Temp3[14],
			Temp3[32],Temp3[27], Temp3[3], Temp3[9], Temp3[19], Temp3[13], Temp3[30],
			Temp3[6],Temp3[22], Temp3[11], Temp3[4], Temp3[25]};

endmodule


/////////////////////////////////////////////////////////////////////
////                                                             ////
////  SBOX 1                                                     ////
////                                                             ////
////                                                             ////
/////////////////////////////////////////////////////////////////////

module  sbox1(addr, dout);
input	[1:6] addr;
output	[1:4] dout;
reg	[1:4] dout;

always @(addr) begin
    case ({addr[1], addr[6], addr[2:5]})  //利用addr的值来寻址,确定输出dout
         0:  dout =  14;
         1:  dout =   4;
         2:  dout =  13;
         3:  dout =   1;
         4:  dout =   2;
         5:  dout =  15;
         6:  dout =  11;
         7:  dout =   8;
         8:  dout =   3;
         9:  dout =  10;
        10:  dout =   6;
        11:  dout =  12;
        12:  dout =   5;
        13:  dout =   9;
        14:  dout =   0;
        15:  dout =   7;

        16:  dout =   0;
        17:  dout =  15;
        18:  dout =   7;
        19:  dout =   4;
        20:  dout =  14;
        21:  dout =   2;
        22:  dout =  13;
        23:  dout =   1;
        24:  dout =  10;
        25:  dout =   6;
        26:  dout =  12;
        27:  dout =  11;
        28:  dout =   9;
        29:  dout =   5;
        30:  dout =   3;
        31:  dout =   8;

        32:  dout =   4;
        33:  dout =   1;
        34:  dout =  14;
        35:  dout =   8;
        36:  dout =  13;
        37:  dout =   6;
        38:  dout =   2;
        39:  dout =  11;
        40:  dout =  15;
        41:  dout =  12;
        42:  dout =   9;
        43:  dout =   7;
        44:  dout =   3;
        45:  dout =  10;
        46:  dout =   5;
        47:  dout =   0;

        48:  dout =  15;
        49:  dout =  12;
        50:  dout =   8;
        51:  dout =   2;
        52:  dout =   4;
        53:  dout =   9;
        54:  dout =   1;
        55:  dout =   7;
        56:  dout =   5;
        57:  dout =  11;
        58:  dout =   3;
        59:  dout =  14;
        60:  dout =  10;
        61:  dout =   0;
        62:  dout =   6;
        63:  dout =  13;

    endcase
    end

endmodule


/////////////////////////////////////////////////////////////////////
////                                                             ////
////  SBOX 2                                                     ////
////                                                             ////
////                                                             ////
/////////////////////////////////////////////////////////////////////

module  sbox2(addr, dout);
input	[1:6] addr;
output	[1:4] dout;
reg	[1:4] dout;

always @(addr) begin
    case ({addr[1], addr[6], addr[2:5]})	//利用addr的值来寻址,确定输出dout
         0:  dout = 15;
         1:  dout =  1;
         2:  dout =  8;
         3:  dout = 14;
         4:  dout =  6;
         5:  dout = 11;
         6:  dout =  3;
         7:  dout =  4;
         8:  dout =  9;
         9:  dout =  7;
        10:  dout =  2;
        11:  dout = 13;
        12:  dout = 12;
        13:  dout =  0;
        14:  dout =  5;
        15:  dout = 10;

        16:  dout =  3;
        17:  dout = 13;
        18:  dout =  4;
        19:  dout =  7;
        20:  dout = 15;
        21:  dout =  2;
        22:  dout =  8;
        23:  dout = 14;
        24:  dout = 12;
        25:  dout =  0;
        26:  dout =  1;
        27:  dout = 10;
        28:  dout =  6;
        29:  dout =  9;
        30:  dout = 11;
        31:  dout =  5;

        32:  dout =  0;
        33:  dout = 14;
        34:  dout =  7;
        35:  dout = 11;
        36:  dout = 10;
        37:  dout =  4;
        38:  dout = 13;
        39:  dout =  1;
        40:  dout =  5;
        41:  dout =  8;
        42:  dout = 12;
        43:  dout =  6;
        44:  dout =  9;
        45:  dout =  3;
        46:  dout =  2;
        47:  dout = 15;

        48:  dout = 13;
        49:  dout =  8;
        50:  dout = 10;
        51:  dout =  1;
        52:  dout =  3;
        53:  dout = 15;
        54:  dout =  4;
        55:  dout =  2;
        56:  dout = 11;
        57:  dout =  6;
        58:  dout =  7;
        59:  dout = 12;
        60:  dout =  0;
        61:  dout =  5;
        62:  dout = 14;
        63:  dout =  9;

    endcase
    end

endmodule


/////////////////////////////////////////////////////////////////////
////                                                             ////
////  SBOX 3                                                     ////
////                                                             ////
////                                                             ////
/////////////////////////////////////////////////////////////////////

module  sbox3(addr, dout);
input	[1:6] addr;
output	[1:4] dout;
reg	[1:4] dout;

always @(addr) begin
    case ({addr[1], addr[6], addr[2:5]})	//利用addr的值来寻址,确定输出dout
         0:  dout = 10;
         1:  dout =  0;
         2:  dout =  9;
         3:  dout = 14;
         4:  dout =  6;
         5:  dout =  3;
         6:  dout = 15;
         7:  dout =  5;
         8:  dout =  1;
         9:  dout = 13;
        10:  dout = 12;
        11:  dout =  7;
        12:  dout = 11;
        13:  dout =  4;
        14:  dout =  2;
        15:  dout =  8;

        16:  dout = 13;
        17:  dout =  7;
        18:  dout =  0;
        19:  dout =  9;
        20:  dout =  3;
        21:  dout =  4;
        22:  dout =  6;
        23:  dout = 10;
        24:  dout =  2;
        25:  dout =  8;
        26:  dout =  5;
        27:  dout = 14;
        28:  dout = 12;
        29:  dout = 11;
        30:  dout = 15;
        31:  dout =  1;

        32:  dout = 13;
        33:  dout =  6;
        34:  dout =  4;
        35:  dout =  9;
        36:  dout =  8;
        37:  dout = 15;
        38:  dout =  3;
        39:  dout =  0;
        40:  dout = 11;
        41:  dout =  1;
        42:  dout =  2;
        43:  dout = 12;
        44:  dout =  5;
        45:  dout = 10;
        46:  dout = 14;
        47:  dout =  7;

        48:  dout =  1;
        49:  dout = 10;
        50:  dout = 13;
        51:  dout =  0;
        52:  dout =  6;
        53:  dout =  9;
        54:  dout =  8;
        55:  dout =  7;
        56:  dout =  4;
        57:  dout = 15;
        58:  dout = 14;
        59:  dout =  3;
        60:  dout = 11;
        61:  dout =  5;
        62:  dout =  2;
        63:  dout = 12;

    endcase
    end

endmodule


/////////////////////////////////////////////////////////////////////
////                                                             ////
////  SBOX 4                                                     ////
////                                                             ////
////                                                             ////
/////////////////////////////////////////////////////////////////////

module  sbox4(addr, dout);
input	[1:6] addr;
output	[1:4] dout;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -