Browse Subversion Repository
Contents of /trunk/Toriya/des_pipeline.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: 3698 byte(s)
「本物の鳥屋」ついに公開です。
たぶん 2005/09 頃のものです。
もしかするとあと一度ほど、改良するかもね。
| 1 |
/**********************************************************-*-verilog-*- |
| 2 |
* |
| 3 |
* DES Pipeline(x16) |
| 4 |
* シーケンシャルキー専用のDESパイプライン |
| 5 |
* |
| 6 |
* $Id$ |
| 7 |
* |
| 8 |
*/ |
| 9 |
|
| 10 |
module des_pipeline(clk5, |
| 11 |
i_l, i_r, i_k, k_0, |
| 12 |
o_l, o_r, o_k, |
| 13 |
salt, |
| 14 |
kp, |
| 15 |
clk, s_we, s_a, s_d); |
| 16 |
|
| 17 |
input clk5; |
| 18 |
|
| 19 |
// 入力 |
| 20 |
input [1:32] i_l; |
| 21 |
input [1:32] i_r; |
| 22 |
input [55:0] i_k; |
| 23 |
input [55:0] k_0; |
| 24 |
|
| 25 |
// 出力 |
| 26 |
output [1:32] o_l; |
| 27 |
output [1:32] o_r; |
| 28 |
output [55:0] o_k; |
| 29 |
|
| 30 |
// 調味料 |
| 31 |
input [11:0] salt; |
| 32 |
|
| 33 |
// phase cache 参照用 |
| 34 |
input [55:0] kp; |
| 35 |
|
| 36 |
// S5-8への書き込みインタフェイス |
| 37 |
input clk; |
| 38 |
input s_we; |
| 39 |
input [10:0] s_a; |
| 40 |
input [15:0] s_d; |
| 41 |
|
| 42 |
// パイプライン化キーマスク |
| 43 |
parameter kmsk = 56'b0000_0000_1111_1111_111_111_111_111_000_000_000_000_000_000_000_000_0000; |
| 44 |
|
| 45 |
/* |
| 46 |
* S1-S4のセットアップ |
| 47 |
* a[9:6] が、各ステージ(0-f)へのweとなる。 |
| 48 |
* a[5:0] は、RAMへのアドレス(すなわち入力ビットパターン) |
| 49 |
* d は、合成済みデータである。 |
| 50 |
*/ |
| 51 |
wire [6:0] a; |
| 52 |
wire we0, we1, we2, we3, we4, we5, we6, we7; |
| 53 |
wire we8, we9, wea, web, wec, wed, wee, wef; |
| 54 |
|
| 55 |
assign a = s_a[10:4]; |
| 56 |
assign we0 = bk_we(s_we, s_a, 4'h0); |
| 57 |
assign we1 = bk_we(s_we, s_a, 4'h1); |
| 58 |
assign we2 = bk_we(s_we, s_a, 4'h2); |
| 59 |
assign we3 = bk_we(s_we, s_a, 4'h3); |
| 60 |
assign we4 = bk_we(s_we, s_a, 4'h4); |
| 61 |
assign we5 = bk_we(s_we, s_a, 4'h5); |
| 62 |
assign we6 = bk_we(s_we, s_a, 4'h6); |
| 63 |
assign we7 = bk_we(s_we, s_a, 4'h7); |
| 64 |
assign we8 = bk_we(s_we, s_a, 4'h8); |
| 65 |
assign we9 = bk_we(s_we, s_a, 4'h9); |
| 66 |
assign wea = bk_we(s_we, s_a, 4'ha); |
| 67 |
assign web = bk_we(s_we, s_a, 4'hb); |
| 68 |
assign wec = bk_we(s_we, s_a, 4'hc); |
| 69 |
assign wed = bk_we(s_we, s_a, 4'hd); |
| 70 |
assign wee = bk_we(s_we, s_a, 4'he); |
| 71 |
assign wef = bk_we(s_we, s_a, 4'hf); |
| 72 |
|
| 73 |
/* |
| 74 |
* 各パイプラインに必要な配線 |
| 75 |
* このうち、KLはパイプライン伝播しないのでダミー |
| 76 |
*/ |
| 77 |
wire [1:32] l01, l12, l23, l34, l45, l56, l67, l78; |
| 78 |
wire [1:32] l89, l9a, lab, lbc, lcd, lde, lef; |
| 79 |
wire [1:32] r01, r12, r23, r34, r45, r56, r67, r78; |
| 80 |
wire [1:32] r89, r9a, rab, rbc, rcd, rde, ref; |
| 81 |
wire [55:0] k01, k12, k23, k34, k45, k56, k67, k78; |
| 82 |
wire [55:0] k89, k9a, kab, kbc, kcd, kde, kef; |
| 83 |
|
| 84 |
/* |
| 85 |
* 各ステージのレイテンシは2である。 |
| 86 |
* 各ステージの入力段および出力段はラッチされていない。 |
| 87 |
* 最終段(i_*, o_*)の扱いには注意せよ。 |
| 88 |
*/ |
| 89 |
des12 #(kmsk, 8'b0000_0000, 1) stage_0(i_l, i_r, i_k, k_0, l01, r01, k01, clk5, salt, kp); |
| 90 |
des12 #(kmsk, 8'b0100_1001, 2) stage_1(l01, r01, i_k, k01, l12, r12, k12, clk5, salt, kp); |
| 91 |
des12 #(kmsk, 8'b1111_1111, 4) stage_2(l12, r12, i_k, k12, l23, r23, k23, clk5, salt, kp); |
| 92 |
des12 #(kmsk, 8'b1111_1111, 6) stage_3(l23, r23, i_k, k23, l34, r34, k34, clk5, salt, kp); |
| 93 |
des24 #(kmsk, 8'b0000_0001, 8) stage45(l34, r34, i_k, k34, l56, r56, k56, clk5, salt, kp); |
| 94 |
des24 #(kmsk, 8'b0000_0000, 12) stage67(l56, r56, i_k, k56, l78, r78, k78, clk5, salt, kp); |
| 95 |
des24 #(kmsk, 8'b0000_0000, 15) stage89(l78, r78, i_k, k78, l9a, r9a, k9a, clk5, salt, kp); |
| 96 |
des24 #(kmsk, 8'b0000_1000, 19) stageab(l9a, r9a, i_k, k9a, lbc, rbc, kbc, clk5, salt, kp); |
| 97 |
des12 #(kmsk, 8'b1111_1111, 23) stage_c(lbc, rbc, i_k, kbc, lcd, rcd, kcd, clk5, salt, kp); |
| 98 |
des12 #(kmsk, 8'b1111_1111, 25) stage_d(lcd, rcd, i_k, kcd, lde, rde, kde, clk5, salt, kp); |
| 99 |
des12 #(kmsk, 8'b1111_1111, 27) stage_e(lde, rde, i_k, kde, lef, ref, kef, clk5, salt, kp); |
| 100 |
des12 #(kmsk, 8'b0000_0000, 28) stage_f(lef, ref, i_k, kef, o_r, o_l, o_k, clk5, salt, kp); |
| 101 |
/*** 最終段では LR が入れ替わる ***/ |
| 102 |
|
| 103 |
/**************************************************************/ |
| 104 |
|
| 105 |
// 特定バンクへのwe |
| 106 |
function bk_we; |
| 107 |
input we; |
| 108 |
input [10:0] a; |
| 109 |
input [3:0] b; |
| 110 |
bk_we = we && (a[3:0] == b); |
| 111 |
endfunction |
| 112 |
|
| 113 |
endmodule |
| 114 |
|
| 115 |
/* |
| 116 |
* Local variables: |
| 117 |
* tab-width: 4 |
| 118 |
* End: |
| 119 |
*/ |
Properties
| svn:eol-style |
native
|
| svn:keywords |
Author Date Id Rev URL
|
| |