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

📄 des_sbox.v

📁 一个快速实现3des的算法
💻 V
📖 第 1 页 / 共 2 页
字号:
/*##########################################################################----                                                                       ----  Module      : des_sbox.v                                             ----  Last Update : 08/01/2001--                                                                       ----  Description : DES S-box constants					 ----                                                                       ----                                                                       ----  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                                    ----                                                                       ----                                                                       ----                                                                       ----#########################################################################*/// Include Synplify Virtex-II/ Virtex-E library// `include "virtex2.v"//`include "virtexe.v"module SB1(addr,da,db);input [1:6] addr;output [1:4] da;output [1:4] db;reg [1:4] d0;reg [1:4] d1;reg [1:4] d2;reg [1:4] d3;always @(addr) begincase (addr[2:5])    0:  d0 = 14;     1:  d0 = 4;    2:  d0 = 13;    3:  d0 = 1;    4:  d0 = 2;    5:  d0 = 15;    6:  d0 = 11;    7:  d0 = 8;    8:  d0 = 3;    9:  d0 = 10;    10: d0 = 6;    11: d0 = 12;    12: d0 = 5;    13: d0 = 9;    14: d0 = 0;    15: d0 = 7;endcaseendalways @(addr) begincase (addr[2:5])    0:  d1 = 0;    1:  d1 = 15;    2:  d1 = 7;    3:  d1 = 4;    4:  d1 = 14;    5:  d1 = 2;    6:  d1 = 13;    7:  d1 = 1;    8:  d1 = 10;    9:  d1 = 6;    10: d1 = 12;    11: d1 = 11;    12: d1 = 9;    13: d1 = 5;    14: d1 = 3;    15: d1 = 8;    default: d1 = 0;    endcaseendalways @(addr) begincase (addr[2:5])    0:  d2 = 4;    1:  d2 = 1;    2:  d2 = 14;    3:  d2 = 8;    4:  d2 = 13;    5:  d2 = 6;    6:  d2 = 2;    7:  d2 = 11;    8:  d2 = 15;    9:  d2 = 12;    10: d2 = 9;    11: d2 = 7;    12: d2 = 3;    13: d2 = 10;    14: d2 = 5;    15: d2 = 0;endcaseendalways @(addr) begincase (addr[2:5])    0:  d3 = 15;    1:  d3 = 12;    2:  d3 = 8;    3:  d3 = 2;    4:  d3 = 4;    5:  d3 = 9;    6:  d3 = 1;    7:  d3 = 7;    8:  d3 = 5;    9:  d3 = 11;    10: d3 = 3;    11: d3 = 14;    12: d3 = 10;    13: d3 = 0;    14: d3 = 6;    15: d3 = 13;endcaseend// mux the first two together in F5 muxesMUXF5 s10 ( .I0(d0[1]), .I1(d1[1]), .S(addr[6]), .O(da[1]) );MUXF5 s11 ( .I0(d0[2]), .I1(d1[2]), .S(addr[6]), .O(da[2]) );MUXF5 s12 ( .I0(d0[3]), .I1(d1[3]), .S(addr[6]), .O(da[3]) );MUXF5 s13 ( .I0(d0[4]), .I1(d1[4]), .S(addr[6]), .O(da[4]) );// mux the second two together in F5 muxesMUXF5 s20 ( .I0(d2[1]), .I1(d3[1]), .S(addr[6]), .O(db[1]) );MUXF5 s21 ( .I0(d2[2]), .I1(d3[2]), .S(addr[6]), .O(db[2]) );MUXF5 s22 ( .I0(d2[3]), .I1(d3[3]), .S(addr[6]), .O(db[3]) );MUXF5 s23 ( .I0(d2[4]), .I1(d3[4]), .S(addr[6]), .O(db[4]) );endmodule/*   SBOX 2 */module SB2(addr,da,db);input [1:6] addr;output [1:4] da;output [1:4] db;reg [1:4] d0;reg [1:4] d1;reg [1:4] d2;reg [1:4] d3;always @(addr) begincase(addr[2:5])    0 :  d0 =  15;    1 :  d0 =  1;    2 :  d0 =  8;    3 :  d0 =  14;    4 :  d0 =  6;    5 :  d0 =  11;    6 :  d0 =  3;    7 :  d0 =  4;    8 :  d0 =  9;    9 :  d0 =  7;    10:  d0 =  2;    11:  d0 =  13;    12:  d0 =  12;    13:  d0 =  0;    14:  d0 =  5;    15:  d0 =  10;endcaseendalways @(addr) begincase (addr[2:5])    0:  d1 =  3;    1:  d1 =  13;    2:  d1 =  4;    3:  d1 =  7;    4:  d1 =  15;    5:  d1 =  2;    6:  d1 =  8;    7:  d1 =  14;    8:  d1 =  12;    9:  d1 =  0;    10: d1 =  1;    11: d1 =  10;    12: d1 =  6;    13: d1 =  9;    14: d1 =  11;    15: d1 =  5;endcaseendalways @(addr) begincase (addr[2:5])    0:  d2 =  0;    1:  d2 =  14;    2:  d2 =  7;    3:  d2 =  11;    4:  d2 =  10;    5:  d2 =  4;    6:  d2 =  13;    7:  d2 =  1;    8:  d2 =  5;    9:  d2 =  8;    10: d2 =  12;    11: d2 =  6;    12: d2 =  9;    13: d2 =  3;    14: d2 =  2;    15: d2 =  15;endcaseendalways @(addr) begincase (addr[2:5])    0:  d3 =  13;    1:  d3 =  8;    2:  d3 =  10;    3:  d3 =  1;    4:  d3 =  3;    5:  d3 =  15;    6:  d3 =  4;    7:  d3 =  2;    8:  d3 =  11;    9:  d3 =  6;    10: d3 =  7;    11: d3 =  12;    12: d3 =  0;    13: d3 =  5;    14: d3 =  14;    15: d3 =  9;endcaseend// mux the first two together in F5 muxesMUXF5 s10 ( .I0(d0[1]), .I1(d1[1]), .S(addr[6]), .O(da[1]) );MUXF5 s11 ( .I0(d0[2]), .I1(d1[2]), .S(addr[6]), .O(da[2]) );MUXF5 s12 ( .I0(d0[3]), .I1(d1[3]), .S(addr[6]), .O(da[3]) );MUXF5 s13 ( .I0(d0[4]), .I1(d1[4]), .S(addr[6]), .O(da[4]) );// mux the second two together in F5 muxesMUXF5 s20 ( .I0(d2[1]), .I1(d3[1]), .S(addr[6]), .O(db[1]) );MUXF5 s21 ( .I0(d2[2]), .I1(d3[2]), .S(addr[6]), .O(db[2]) );MUXF5 s22 ( .I0(d2[3]), .I1(d3[3]), .S(addr[6]), .O(db[3]) );MUXF5 s23 ( .I0(d2[4]), .I1(d3[4]), .S(addr[6]), .O(db[4]) );endmodule/* Sbox 3 */module SB3(addr,da,db);input [1:6] addr;output [1:4] da;output [1:4] db;reg [1:4] d0;reg [1:4] d1;reg [1:4] d2;reg [1:4] d3;always @(addr) begincase (addr[2:5])    0:  d0 = 10;    1:  d0 = 0;    2:  d0 = 9;    3:  d0 = 14;    4:  d0 = 6;    5:  d0 = 3;    6:  d0 = 15;    7:  d0 = 5;    8:  d0 = 1;    9:  d0 = 13;    10: d0 = 12;    11: d0 = 7;    12: d0 = 11;    13: d0 = 4;    14: d0 = 2;    15: d0 = 8;endcaseendalways @(addr) begincase (addr[2:5])    0:  d1 = 13;    1:  d1 = 7;    2:  d1 = 0;    3:  d1 = 9;    4:  d1 = 3;    5:  d1 = 4;    6:  d1 = 6;    7:  d1 = 10;    8:  d1 = 2;    9:  d1 = 8;    10: d1 = 5;    11: d1 = 14;    12: d1 = 12;    13: d1 = 11;    14: d1 = 15;    15: d1 = 1;endcaseendalways @(addr) begincase (addr[2:5])    0:  d2 = 13;    1:  d2 = 6;    2:  d2 = 4;    3:  d2 = 9;    4:  d2 = 8;    5:  d2 = 15;    6:  d2 = 3;    7:  d2 = 0;    8:  d2 = 11;    9:  d2 = 1;    10: d2 = 2;    11: d2 = 12;    12: d2 = 5;    13: d2 = 10;    14: d2 = 14;    15: d2 = 7;endcaseendalways @(addr) begincase (addr[2:5])    0:  d3 = 1;    1:  d3 = 10;    2:  d3 = 13;    3:  d3 = 0;    4:  d3 = 6;    5:  d3 = 9;    6:  d3 = 8;    7:  d3 = 7;    8:  d3 = 4;    9:  d3 = 15;    10: d3 = 14;    11: d3 = 3;    12: d3 = 11;    13: d3 = 5;    14: d3 = 2;    15: d3 = 12;endcaseend// mux the first two together in F5 muxesMUXF5 s10 ( .I0(d0[1]), .I1(d1[1]), .S(addr[6]), .O(da[1]) );MUXF5 s11 ( .I0(d0[2]), .I1(d1[2]), .S(addr[6]), .O(da[2]) );MUXF5 s12 ( .I0(d0[3]), .I1(d1[3]), .S(addr[6]), .O(da[3]) );MUXF5 s13 ( .I0(d0[4]), .I1(d1[4]), .S(addr[6]), .O(da[4]) );// mux the second two together in F5 muxesMUXF5 s20 ( .I0(d2[1]), .I1(d3[1]), .S(addr[6]), .O(db[1]) );MUXF5 s21 ( .I0(d2[2]), .I1(d3[2]), .S(addr[6]), .O(db[2]) );MUXF5 s22 ( .I0(d2[3]), .I1(d3[3]), .S(addr[6]), .O(db[3]) );MUXF5 s23 ( .I0(d2[4]), .I1(d3[4]), .S(addr[6]), .O(db[4]) );endmodule/* Sbox 4 */module SB4(addr,da,db);input [1:6] addr;output [1:4] da;output [1:4] db;reg [1:4] d0;reg [1:4] d1;reg [1:4] d2;reg [1:4] d3;always @(addr) begincase (addr[2:5])    0:   d0 = 7;    1:   d0 = 13;    2:   d0 = 14;    3:   d0 = 3;    4:   d0 = 0;    5:   d0 = 6;    6:   d0 = 9;    7:   d0 = 10;    8:   d0 = 1;    9:   d0 = 2;    10:  d0 = 8;    11:  d0 = 5;    12:  d0 = 11;    13:  d0 = 12;    14:  d0 = 4;    15:  d0 = 15;endcaseendalways @(addr) begincase (addr[2:5])    0:   d1 = 13;    1:   d1 = 8;    2:   d1 = 11;    3:   d1 = 5;    4:   d1 = 6;    5:   d1 = 15;    6:   d1 = 0;    7:   d1 = 3;    8:   d1 = 4;    9:   d1 = 7;    10:  d1 = 2;    11:  d1 = 12;    12:  d1 = 1;    13:  d1 = 10;    14:  d1 = 14;    15:  d1 = 9;endcaseendalways @(addr) begincase (addr[2:5])    0:   d2 = 10;    1:   d2 = 6;    2:   d2 = 9;    3:   d2 = 0;    4:   d2 = 12;    5:   d2 = 11;    6:   d2 = 7;    7:   d2 = 13;    8:   d2 = 15;    9:   d2 = 1;    10:  d2 = 3;    11:  d2 = 14;    12:  d2 = 5;    13:  d2 = 2;    14:  d2 = 8;    15:  d2 = 4;endcaseendalways @(addr) begincase (addr[2:5])    0:   d3 = 3;    1:   d3 = 15;    2:   d3 = 0;    3:   d3 = 6;    4:   d3 = 10;    5:   d3 = 1;    6:   d3 = 13;    7:   d3 = 8;    8:   d3 = 9;    9:   d3 = 4;    10:  d3 = 5;    11:  d3 = 11;    12:  d3 = 12;    13:  d3 = 7;    14:  d3 = 2;    15:  d3 = 14;endcaseend// mux the first two together in F5 muxesMUXF5 s10 ( .I0(d0[1]), .I1(d1[1]), .S(addr[6]), .O(da[1]) );MUXF5 s11 ( .I0(d0[2]), .I1(d1[2]), .S(addr[6]), .O(da[2]) );

⌨️ 快捷键说明

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