Browse Subversion Repository
Contents of /trunk/Toriya/des24.v
Parent Directory
| Revision Log
Revision 118 -
( show annotations)
( download)
Wed Apr 11 04:55:06 2007 UTC
(17 years, 1 month ago)
by chapuni
File size: 3294 byte(s)
「本物の鳥屋」ついに公開です。
たぶん 2005/09 頃のものです。
もしかするとあと一度ほど、改良するかもね。
| 1 |
/**********************************************************-*-verilog-*- |
| 2 |
* |
| 3 |
* DES x 2i (latency=4) |
| 4 |
* $Id$ |
| 5 |
* |
| 6 |
*/ |
| 7 |
|
| 8 |
module des24(i_l, i_r, i_fk, i_k, |
| 9 |
l, r, k, |
| 10 |
clk5, salt, kp); |
| 11 |
|
| 12 |
input [1:32] i_l; |
| 13 |
input [1:32] i_r; |
| 14 |
input [55:0] i_fk; |
| 15 |
input [55:0] i_k; |
| 16 |
|
| 17 |
output [1:32] l; |
| 18 |
output [1:32] r; |
| 19 |
output [55:0] k; |
| 20 |
|
| 21 |
input clk5; |
| 22 |
input [11:0] salt; |
| 23 |
input [55:0] kp; // phase cache |
| 24 |
|
| 25 |
parameter kmsk = 56'b0000_0000_1111_1111_111_111_111_111_000_000_000_000_000_000_000_000_0000; |
| 26 |
parameter f_ram = 8'b1111_1111; |
| 27 |
parameter krna = 1; |
| 28 |
parameter krnb = krna + 2; |
| 29 |
|
| 30 |
`include "conf.v" |
| 31 |
`include "func_des.v" |
| 32 |
`include "func_salt.v" |
| 33 |
|
| 34 |
wire [27:0] i_kl, i_kr; |
| 35 |
wire [1:48] ea, eb; |
| 36 |
wire [1:32] lna, lnb; |
| 37 |
|
| 38 |
reg [1:32] lna1, lnb1; |
| 39 |
reg [1:32] ra1, ra2, rb1, rb2; |
| 40 |
reg [55:0] ka1, ka2, kb1, kb2; |
| 41 |
|
| 42 |
wire [1:32] qa1, qa4, qb1, qb4; |
| 43 |
|
| 44 |
// phase cache |
| 45 |
wire [27:0] kp1, kp0; |
| 46 |
assign {kp1, kp0} = kp; |
| 47 |
|
| 48 |
/**************************************************************** |
| 49 |
* |
| 50 |
* Stage A |
| 51 |
* |
| 52 |
*/ |
| 53 |
|
| 54 |
assign {i_kr, i_kl} = kmux(kmsk, i_fk, i_k); |
| 55 |
assign ea = add_salt(salt, tr_e(i_r)) ^ {tr_pc2l(roln(pc1_l(i_kl), krna)), |
| 56 |
tr_pc2r(roln(pc1_r(i_kr), krna))}; |
| 57 |
assign lna = ir_p(i_l); |
| 58 |
|
| 59 |
// pCvCđißé |
| 60 |
always @(posedge clk5) |
| 61 |
begin |
| 62 |
lna1 <= lna; |
| 63 |
ra1 <= i_r; |
| 64 |
ra2 <= ra1; |
| 65 |
ka1 <= {i_kr, i_kl}; |
| 66 |
ka2 <= ka1; |
| 67 |
//ka2 <= wh01k(kra1); |
| 68 |
end |
| 69 |
|
| 70 |
// A-B ÔĘ |
| 71 |
wire [27:0] klb, krb; |
| 72 |
wire [55:0] kb; |
| 73 |
wire [1:32] lb, rb; |
| 74 |
assign kb = ka2; |
| 75 |
assign lb = ra2; |
| 76 |
assign rb = tr_p(rmuxq(f_ram, qa1, qa4)); |
| 77 |
|
| 78 |
/**************************************************************** |
| 79 |
* |
| 80 |
* Stage B |
| 81 |
* |
| 82 |
*/ |
| 83 |
|
| 84 |
assign {krb, klb} = kmux(kmsk, i_fk, kb); |
| 85 |
assign eb = add_salt(salt, tr_e(rb)) ^ {tr_pc2l(roln(pc1_l(klb), krnb)), |
| 86 |
tr_pc2r(roln(pc1_r(krb), krnb))}; |
| 87 |
assign lnb = ir_p(lb); |
| 88 |
|
| 89 |
// pCvCđißé |
| 90 |
always @(posedge clk5) |
| 91 |
begin |
| 92 |
lnb1 <= lnb; |
| 93 |
rb1 <= rb; |
| 94 |
rb2 <= rb1; |
| 95 |
kb1 <= {krb, klb}; |
| 96 |
kb2 <= kb1; |
| 97 |
//krb2 <= wh01k(krb1); |
| 98 |
end |
| 99 |
|
| 100 |
/*************************************************************** |
| 101 |
* |
| 102 |
* oÍi |
| 103 |
* |
| 104 |
*/ |
| 105 |
|
| 106 |
assign k = kb2; |
| 107 |
assign l = rb2; |
| 108 |
assign r = tr_p(rmuxq(f_ram, qb1, qb4)); |
| 109 |
|
| 110 |
/*************************************************************** |
| 111 |
* |
| 112 |
* ROMs |
| 113 |
* |
| 114 |
*/ |
| 115 |
// S1x1-S8x1 đs¤˝ßÉKv |
| 116 |
sbrom12 sb_a(clk5, ea, lna, lna1, qa1); |
| 117 |
sbrom12 sb_b(clk5, eb, lnb, lnb1, qb1); |
| 118 |
|
| 119 |
// 2iŞđCšë! |
| 120 |
sbrom24 sb_ab(clk5, |
| 121 |
ea, eb, lna, lnb, |
| 122 |
qa4, qb4); |
| 123 |
|
| 124 |
/*************************************************************** |
| 125 |
* |
| 126 |
* oÍĚU誯 |
| 127 |
* |
| 128 |
*/ |
| 129 |
function [0:31] rmuxq; |
| 130 |
input [7:0] f; |
| 131 |
input [0:31] q1; |
| 132 |
input [0:31] q0; |
| 133 |
rmuxq = {f_ram[0] ? q1[ 0: 3] : q0[ 0: 3], |
| 134 |
f_ram[1] ? q1[ 4: 7] : q0[ 4: 7], |
| 135 |
f_ram[2] ? q1[ 8:11] : q0[ 8:11], |
| 136 |
f_ram[3] ? q1[12:15] : q0[12:15], |
| 137 |
f_ram[4] ? q1[16:19] : q0[16:19], |
| 138 |
f_ram[5] ? q1[20:23] : q0[20:23], |
| 139 |
f_ram[6] ? q1[24:27] : q0[24:27], |
| 140 |
f_ram[7] ? q1[28:31] : q0[28:31]}; |
| 141 |
endfunction |
| 142 |
|
| 143 |
/* |
| 144 |
* üÍćčAphaseÉś˝L[đŹľÄÔˇ |
| 145 |
* k, kp Í big endian Ĺ éąĆÉÓB |
| 146 |
*/ |
| 147 |
function [27:0] wh01k; |
| 148 |
input [27:0] k; |
| 149 |
wh01k = k /*(k[kbn] |
| 150 |
? {kp1[27:kbn + 1], k[kbn:0]} |
| 151 |
: {kp0[27:kbn + 1], k[kbn:0]})*/; |
| 152 |
endfunction |
| 153 |
|
| 154 |
endmodule |
| 155 |
|
| 156 |
/* |
| 157 |
* Local variables: |
| 158 |
* tab-width: 4 |
| 159 |
* End: |
| 160 |
*/ |
Properties
| svn:eol-style |
native
|
| svn:keywords |
Author Date Id Rev URL
|
| |