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

📄 des.v

📁 xilinx公司三重DES加密代码
💻 V
字号:
/*##########################################################################----                                                                       ----  Module      : DES.v                                                  ----  Last Update : 08/01/2001--                                                                       ----  Description : DES Top level module                                   ----                                                                       ----                                                                       ----  Designers   : Steve Trimberger & Vikram Pasham                       ----  Company     : Xilinx & Inc.                                          ----                                                                       ----                                                                       ----  Disclaimer  : THESE DESIGNS ARE PROVIDED "AS IS" WITH NO WARRANTY    ----                WHATSOEVER AND XILINX SPECIFICALLY DISCLAIMS ANY       ----                IMPLIED WARRANTIES OF MERCHANTABILITY & FITNESS FOR    ----                A PARTICULAR PURPOSE, OR AGAINST INFRINGEMENT.         ----                THEY ARE ONLY INTENDED TO BE USED BY XILINX            ----                CUSTOMERS, AND WITHIN XILINX DEVICES.                  ----                                                                       ----                Copyright (c) 2000 Xilinx, Inc.                        ----                All rights reserved                                    ----                                                                       ----                                                                       ----                                                                       ----#########################################################################*////////////////////////////////////////////////////////////////////////////////// Top-level module: Single DES Pipelined encryptor/decryptor//                   48 cycle latency on encryption/decryption///////////////////////////////////////////////////////////////////////////////`include "des_const.v"module des(reset, clk, data_bus, e_data_rdy, key, decrypt, data_out, d_data_rdy);input reset;input [1:64] data_bus;      // input bus for carrying en/decrypted data.input e_data_rdy;           // Signal indicates data bus is valid datainput [1:64] key;           // Encryption/decryption keyinput decrypt;              // 0 = encrypt; 1 = decryptinput clk;                  // Clockoutput [1:64] data_out;     // output bus carrying en/decrypted data.output d_data_rdy;          // 1=valid data is on data bus (==e_data delayed)//reg d_data_rdy;             // 1=en/decrypted data is on data_outreg [1:64] data_bus_reg;       // input data busreg [1:64] key_reg;// Intermediate states in the en(de)cryptionwire [1:28] perm_key_l, perm_key_r;       // Permuted keywire [1:32] iperm_data_l, iperm_data_r;   // initially permuted encrypted datawire [1:64] f_out_rl;                     // Final F outputwire [1:64] reverse_perm;   // Output of reverse permutation step // wires between pipeline blocks -- KEYSwire [1:28] key1_l, key1_r;wire [1:28] key2_l, key2_r;wire [1:28] key3_l, key3_r;wire [1:28] key4_l, key4_r;wire [1:28] key5_l, key5_r;wire [1:28] key6_l, key6_r;wire [1:28] key7_l, key7_r;wire [1:28] key8_l, key8_r;wire [1:28] key9_l, key9_r;wire [1:28] key10_l, key10_r;wire [1:28] key11_l, key11_r;wire [1:28] key12_l, key12_r;wire [1:28] key13_l, key13_r;wire [1:28] key14_l, key14_r;wire [1:28] key15_l, key15_r;wire [1:28] key16_l, key16_r;wire [1:48] key1, key2, key3, key4, key5, key6, key7, key8;wire [1:48] key9, key10, key11, key12, key13, key14, key15, key16;// wires between pipeline blocks -- DATAwire [1:32] f1_l, f1_r;wire [1:32] f2_l, f2_r;wire [1:32] f3_l, f3_r;wire [1:32] f4_l, f4_r;wire [1:32] f5_l, f5_r;wire [1:32] f6_l, f6_r;wire [1:32] f7_l, f7_r;wire [1:32] f8_l, f8_r;wire [1:32] f9_l, f9_r;wire [1:32] f10_l, f10_r;wire [1:32] f11_l, f11_r;wire [1:32] f12_l, f12_r;wire [1:32] f13_l, f13_r;wire [1:32] f14_l, f14_r;wire [1:32] f15_l, f15_r;wire [1:32] f16_l, f16_r;// encrypt/decrypt and data_valid flags// triple since we tripled the pipeline inside F and KEY     wire decrypt1;wire decrypt2;wire decrypt3;wire decrypt4;wire decrypt5;wire decrypt6;wire decrypt7;wire decrypt8;wire decrypt9;wire decrypt10;wire decrypt11;wire decrypt12;wire decrypt13;wire decrypt14;wire decrypt15;wire decrypt16; reg [1:3] decrypt1_reg;reg [1:3] decrypt2_reg;reg [1:3] decrypt3_reg;reg [1:3] decrypt4_reg;reg [1:3] decrypt5_reg;reg [1:3] decrypt6_reg;reg [1:3] decrypt7_reg;reg [1:3] decrypt8_reg;reg [1:3] decrypt9_reg;reg [1:3] decrypt10_reg;reg [1:3] decrypt11_reg;reg [1:3] decrypt12_reg;reg [1:3] decrypt13_reg;reg [1:3] decrypt14_reg;reg [1:3] decrypt15_reg;reg [1:3] decrypt16_reg;reg decrypt_reg;reg e_data_rdy_reg;integer count;always @(posedge reset or  posedge clk )begin	if(reset)	 begin	  data_bus_reg <= 64'b0;	  key_reg <= 64'b0;	  e_data_rdy_reg <= 1'b0;	  decrypt_reg <= 1'b0;	 end        else	 begin	  data_bus_reg <= data_bus;	  	  key_reg <= key;	  e_data_rdy_reg <= e_data_rdy;	  decrypt_reg <= decrypt;	 endendalways @(posedge reset or posedge clk)begin	if(reset)	  count <= 0;	else	 begin	  if(count < 48 && e_data_rdy_reg == 1'b1)	    count <= count +1;	 end	endassign d_data_rdy = (count == 48)? 1'b1 : 1'b0;always @ (posedge reset or posedge clk)begin  if(reset)   begin    decrypt1_reg <= 3'b0;   decrypt2_reg <= 3'b0;   decrypt3_reg <= 3'b0;   decrypt4_reg <= 3'b0;   decrypt5_reg <= 3'b0;   decrypt6_reg <= 3'b0;   decrypt7_reg <= 3'b0;   decrypt8_reg <= 3'b0;   decrypt9_reg <= 3'b0;   decrypt10_reg <= 3'b0;   decrypt11_reg <= 3'b0;   decrypt12_reg <= 3'b0;   decrypt13_reg <= 3'b0;   decrypt14_reg <= 3'b0;   decrypt15_reg <= 3'b0;   end  else   begin    decrypt1_reg <= {decrypt_reg, decrypt1_reg[1:2]};   decrypt2_reg <= {decrypt1_reg[3], decrypt2_reg[1:2]};   decrypt3_reg <= {decrypt2_reg[3], decrypt3_reg[1:2]};   decrypt4_reg <= {decrypt3_reg[3], decrypt4_reg[1:2]};      decrypt5_reg <= {decrypt4_reg[3], decrypt5_reg[1:2]};   decrypt6_reg <= {decrypt5_reg[3], decrypt6_reg[1:2]};   decrypt7_reg <= {decrypt6_reg[3], decrypt7_reg[1:2]};   decrypt8_reg <= {decrypt7_reg[3], decrypt8_reg[1:2]};   decrypt9_reg <= {decrypt8_reg[3], decrypt9_reg[1:2]};   decrypt10_reg <= {decrypt9_reg[3], decrypt10_reg[1:2]};   decrypt11_reg <= {decrypt10_reg[3], decrypt1_reg[1:2]};   decrypt12_reg <= {decrypt11_reg[3], decrypt2_reg[1:2]};   decrypt13_reg <= {decrypt12_reg[3], decrypt3_reg[1:2]};   decrypt14_reg <= {decrypt13_reg[3], decrypt4_reg[1:2]};      decrypt15_reg <= {decrypt14_reg[3], decrypt5_reg[1:2]};   endend          assign  decrypt1 = decrypt1_reg[3];assign  decrypt2 = decrypt2_reg[3];assign  decrypt3 = decrypt3_reg[3];assign  decrypt4 = decrypt4_reg[3];assign  decrypt5 = decrypt5_reg[3];assign  decrypt6 = decrypt6_reg[3];assign  decrypt7 = decrypt7_reg[3];assign  decrypt8 = decrypt8_reg[3];assign  decrypt9 = decrypt9_reg[3];assign  decrypt10 = decrypt10_reg[3];assign  decrypt11 = decrypt11_reg[3];assign  decrypt12 = decrypt12_reg[3];assign  decrypt13 = decrypt13_reg[3];assign  decrypt14 = decrypt14_reg[3];assign  decrypt15 = decrypt15_reg[3];////////////////////////////////////////////////////////////////// Perform initial permutation on key. Permuted key is 56 bits. //////////////////////////////////////////////////////////////////assign perm_key_l = {    key_reg[57], key_reg[49], key_reg[41], key_reg[33],    key_reg[25], key_reg[17], key_reg[9],  key_reg[1],    key_reg[58], key_reg[50], key_reg[42], key_reg[34],    key_reg[26], key_reg[18], key_reg[10], key_reg[2],    key_reg[59], key_reg[51], key_reg[43], key_reg[35],    key_reg[27], key_reg[19], key_reg[11], key_reg[3],    key_reg[60], key_reg[52], key_reg[44], key_reg[36]};assign perm_key_r = {    key_reg[63], key_reg[55], key_reg[47], key_reg[39],    key_reg[31], key_reg[23], key_reg[15], key_reg[7],    key_reg[62], key_reg[54], key_reg[46], key_reg[38],    key_reg[30], key_reg[22], key_reg[14], key_reg[6],    key_reg[61], key_reg[53], key_reg[45], key_reg[37],    key_reg[29], key_reg[21], key_reg[13], key_reg[5],    key_reg[28], key_reg[20], key_reg[12], key_reg[4]};////////////////////////////////////////////////////////////////// Instantiate key shift modules //////////////////////////////////////////////////////////////////des_key #(`S1) Ides_key01(clk, perm_key_l, perm_key_r, key1_l, key1_r, key1, decrypt_reg);des_key #(`S2) Ides_key02(clk, key1_l, key1_r, key2_l, key2_r, key2, decrypt1);des_key #(`S3) Ides_key03(clk, key2_l, key2_r, key3_l, key3_r, key3, decrypt2);des_key #(`S4) Ides_key04(clk, key3_l, key3_r, key4_l, key4_r, key4, decrypt3);des_key #(`S5) Ides_key05(clk, key4_l, key4_r, key5_l, key5_r, key5, decrypt4);des_key #(`S6) Ides_key06(clk, key5_l, key5_r, key6_l, key6_r, key6, decrypt5);des_key #(`S7) Ides_key07(clk, key6_l, key6_r, key7_l, key7_r, key7, decrypt6);des_key #(`S8) Ides_key08(clk, key7_l, key7_r, key8_l, key8_r, key8, decrypt7);des_key #(`S9) Ides_key09(clk, key8_l, key8_r, key9_l, key9_r, key9, decrypt8);des_key #(`S10) Ides_key10(clk, key9_l, key9_r, key10_l, key10_r, key10, decrypt9);des_key #(`S11) Ides_key11(clk, key10_l, key10_r, key11_l, key11_r, key11, decrypt10);des_key #(`S12) Ides_key12(clk, key11_l, key11_r, key12_l, key12_r, key12, decrypt11);des_key #(`S13) Ides_key13(clk, key12_l, key12_r, key13_l, key13_r, key13, decrypt12);des_key #(`S14) Ides_key14(clk, key13_l, key13_r, key14_l, key14_r, key14, decrypt13);des_key #(`S15) Ides_key15(clk, key14_l, key14_r, key15_l, key15_r, key15, decrypt14);des_key #(`S16) Ides_key16(clk, key15_l, key15_r, key16_l, key16_r, key16, decrypt15);////////////////////////////////////////////////////////////////// Perform initial permutation on encrypted data //////////////////////////////////////////////////////////////////assign iperm_data_l = {    data_bus_reg[58], data_bus_reg[50], data_bus_reg[42], data_bus_reg[34],    data_bus_reg[26], data_bus_reg[18], data_bus_reg[10], data_bus_reg[2],    data_bus_reg[60], data_bus_reg[52], data_bus_reg[44], data_bus_reg[36],    data_bus_reg[28], data_bus_reg[20], data_bus_reg[12], data_bus_reg[4],    data_bus_reg[62], data_bus_reg[54], data_bus_reg[46], data_bus_reg[38],    data_bus_reg[30], data_bus_reg[22], data_bus_reg[14], data_bus_reg[6],    data_bus_reg[64], data_bus_reg[56], data_bus_reg[48], data_bus_reg[40],    data_bus_reg[32], data_bus_reg[24], data_bus_reg[16], data_bus_reg[8]};assign iperm_data_r = {    data_bus_reg[57], data_bus_reg[49], data_bus_reg[41], data_bus_reg[33],    data_bus_reg[25], data_bus_reg[17], data_bus_reg[9],  data_bus_reg[1],    data_bus_reg[59], data_bus_reg[51], data_bus_reg[43], data_bus_reg[35],    data_bus_reg[27], data_bus_reg[19], data_bus_reg[11], data_bus_reg[3],    data_bus_reg[61], data_bus_reg[53], data_bus_reg[45], data_bus_reg[37],    data_bus_reg[29], data_bus_reg[21], data_bus_reg[13], data_bus_reg[5],    data_bus_reg[63], data_bus_reg[55], data_bus_reg[47], data_bus_reg[39],    data_bus_reg[31], data_bus_reg[23], data_bus_reg[15], data_bus_reg[7]};////////////////////////////////////////////////////////////////// Instantiate f function modules //////////////////////////////////////////////////////////////////des_f Ides_f01(reset, clk, iperm_data_l, iperm_data_r, f1_l, f1_r, key1);des_f Ides_f02(reset, clk, f1_l, f1_r, f2_l, f2_r, key2);des_f Ides_f03(reset, clk, f2_l, f2_r, f3_l, f3_r, key3);des_f Ides_f04(reset, clk, f3_l, f3_r, f4_l, f4_r, key4);des_f Ides_f05(reset, clk, f4_l, f4_r, f5_l, f5_r, key5);des_f Ides_f06(reset, clk, f5_l, f5_r, f6_l, f6_r, key6);des_f Ides_f07(reset, clk, f6_l, f6_r, f7_l, f7_r, key7);des_f Ides_f08(reset, clk, f7_l, f7_r, f8_l, f8_r, key8);des_f Ides_f09(reset, clk, f8_l, f8_r, f9_l, f9_r, key9);des_f Ides_f10(reset, clk, f9_l, f9_r, f10_l, f10_r, key10);des_f Ides_f11(reset, clk, f10_l, f10_r, f11_l, f11_r, key11);des_f Ides_f12(reset, clk, f11_l, f11_r, f12_l, f12_r, key12);des_f Ides_f13(reset, clk, f12_l, f12_r, f13_l, f13_r, key13);des_f Ides_f14(reset, clk, f13_l, f13_r, f14_l, f14_r, key14);des_f Ides_f15(reset, clk, f14_l, f14_r, f15_l, f15_r, key15);des_f Ides_f16(reset, clk, f15_l, f15_r, f16_l, f16_r, key16);////////////////////////////////////////////////////////////////// Swap final left and right results for reverse permutation //////////////////////////////////////////////////////////////////assign f_out_rl = { f16_r, f16_l};////////////////////////////////////////////////////////////////// Reverse permutaion //////////////////////////////////////////////////////////////////assign reverse_perm = {    f_out_rl[40], f_out_rl[ 8], f_out_rl[48], f_out_rl[16],    f_out_rl[56], f_out_rl[24], f_out_rl[64], f_out_rl[32],    f_out_rl[39], f_out_rl[ 7], f_out_rl[47], f_out_rl[15],    f_out_rl[55], f_out_rl[23], f_out_rl[63], f_out_rl[31],    f_out_rl[38], f_out_rl[ 6], f_out_rl[46], f_out_rl[14],    f_out_rl[54], f_out_rl[22], f_out_rl[62], f_out_rl[30],    f_out_rl[37], f_out_rl[ 5], f_out_rl[45], f_out_rl[13],    f_out_rl[53], f_out_rl[21], f_out_rl[61], f_out_rl[29],    f_out_rl[36], f_out_rl[ 4], f_out_rl[44], f_out_rl[12],    f_out_rl[52], f_out_rl[20], f_out_rl[60], f_out_rl[28],    f_out_rl[35], f_out_rl[ 3], f_out_rl[43], f_out_rl[11],    f_out_rl[51], f_out_rl[19], f_out_rl[59], f_out_rl[27],    f_out_rl[34], f_out_rl[ 2], f_out_rl[42], f_out_rl[10],    f_out_rl[50], f_out_rl[18], f_out_rl[58], f_out_rl[26],    f_out_rl[33], f_out_rl[ 1], f_out_rl[41], f_out_rl[ 9],    f_out_rl[49], f_out_rl[17], f_out_rl[57], f_out_rl[25]};////////////////////////////////////////////////////////////////// Place decrypted data on data bus  //////////////////////////////////////////////////////////////////assign data_out = reverse_perm;endmodule // des //

⌨️ 快捷键说明

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