DES IC の Key Schedule (KS) の設計
Key Schesule (KS)処理のハードウェアを設計しよう。
以下の雛形を参考にして完成させなさい。
考え方
- input, output にて、変数の入出力定義を行う。
- 内部変数として Cxx, Dxx を定義する。
- pc1_c, pc1_d および pc2 のビット並び替え function を作成する。
- 左ロテートシフトを行うための function を作成する。
なお、シフト量は n=0 のとき1ビット、n=1 のとき2ビットとする。
- 副鍵 Kxx を生成する。雛形ソースにおいて K01 を作成している部分を
参考にして、K16まで作成する。
Key Schedule (KS)
module keysched ( KEY, K01, K02, K03, K04, K05, K06, K07, K08,
K09, K10, K11, K12, K13, K14, K15、K16 );
input [1:64] ...;
output [1:48] ..., ..., ..., ..., ..., ..., ..., ...,
..., ..., ..., ..., ..., ..., ..., ...;
wire [1:28] C00, ..., ..., ..., ..., ..., ..., ...,
..., ..., ..., ..., ..., ..., ..., ..., C16;
wire [1:28] D00, ..., ..., ..., ..., ..., ..., ...,
..., ..., ..., ..., ..., ..., ..., ..., D16;
function [1:28] pc1_c;
input [1:64] di;
pc1_c = {
di[57], ..., ..., ..., ..., ..., ...,
..., ..., ..., ..., ..., ..., ...,
..., ..., ..., ..., ..., ..., ...,
..., ..., ..., ..., ..., ..., di[36] };
endfunction
function [1:28] pc1_d;
input [1:64] di;
pc1_d = {
di[63], ..., ..., ..., ..., ..., ...,
..., ..., ..., ..., ..., ..., ...,
..., ..., ..., ..., ..., ..., ...,
..., ..., ..., ..., ..., ..., di[ 4] };
endfunction
function [1:48] pc2;
input [1:56] di;
pc2 = {
di[14], ..., ..., ..., ..., ...,
..., ..., ..., ..., ..., ...,
..., ..., ..., ..., ..., ...,
..., ..., ..., ..., ..., ...,
..., ..., ..., ..., ..., ...,
..., ..., ..., ..., ..., ...,
..., ..., ..., ..., ..., ...,
..., ..., ..., ..., ..., di[32] };
endfunction
// n=0: 1bit left rotate, n=1: 2bits left rotate
function [1:28] shift;
input [1:28] di;
input n;
shift = ( n == 0 ) ? { di[...:...], di[...] } : { di[...:...], di[...:...] };
endfunction
// 00
assign C00 = pc1_c( KEY );
assign D00 = pc1_d( KEY );
// 01
assign C01 = shift( C00, 0 );
assign D01 = shift( D00, 0 );
assign K01 = pc2( { C01, D01 } );
// 02
...
// 03
...
// 04
...
// 05
...
// 06
...
// 07
...
// 08
...
// 09
...
// 10
...
// 11
...
// 12
...
// 13
...
// 14
...
// 15
...
// 16
...
endmodule
次は、 シミュレーションによる動作検証 を行う。
| Back |