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

📄 all-desvf.v

📁 一个关于DES算法的verilog语言实现,包括了各个实现模块以及测试模块
💻 V
📖 第 1 页 / 共 4 页
字号:
/////////////////////////////////////////////////////////////////////
////                                                             ////
////            实现模块                                         ////
////                                                             ////
/////////////////////////////////////////////////////////////////////

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 + -