DES IC の シミュレーションによる動作検証
テストベンチ desif_test.v
`timescale 1ns/1ns
module desif_test;
reg [1:64] di;
reg [1:64] key;
reg CLK, RST, SI, KE, ST, DE;
reg [1:64] do;
wire pe, so, led;
integer i;
initial
begin
$shm_open("waves.shm");
$shm_probe("as");
end
initial
begin
CLK = 0;
while(1)
CLK = #50 ~CLK;
end
initial
begin
di = #0 64'b01010100_01100101_01110011_01110100_01010100_01100101_01110011_01110100;
do = #0 64'h00000000_00000000;
key= #0 64'b00010011_11001011_01110011_10111111_10100001_11000001_11101100_01011011;
RST= #0 1;
SI = 0;
KE = 0;
ST = 0;
DE = 0;
RST= #100 0;
SI = 0;
KE = 1;
ST = 0;
DE = 0;
for( i=0 ; i<64 ; i=i+1 )
begin
{ key, SI } = { 1'b0, key };
#100;
end
//
KE = 0;
ST = 1;
for( i=0 ; i<64 ; i=i+1 )
begin
{ di, SI } = { 1'b0, di };
#100;
end
//
KE = 0;
ST = 0;
#100;
//
SI = 0;
KE = 0;
ST = 1;
for( i=0 ; i<64 ; i=i+1 )
begin
#100;
do = { so, do[1:63] };
end
//
ST = 0;
#100;
di = do;
#100;
ST = 1;
for( i=0 ; i<64 ; i=i+1 )
begin
{ di, SI } = { 1'b0, di };
#100;
end
//
KE = 0;
ST = 0;
DE = 1;
#200;
DE = 0;
//
SI = 0;
KE = 0;
ST = 1;
for( i=0 ; i<64 ; i=i+1 )
begin
#100;
do = { so, do[1:63] };
end
//
ST = 0;
#400;
$finish;
end
desif desif0 ( .CLK(CLK), .RST(RST), .SI(SI), .KEY(KE), .STR(ST),
.DE(DE), .SO(so), .PE(pe), .LED(led) );
endmodule
シミュレーションコマンド
verilog desif_test.v desif.v des.v ffunc.v sbox.v keysched.v
波形ビューア
simvision
初期設定として0nsで
desif_test.di = 64'h54657374_54657374
desif_test.key= 64'h13CB73BF_A1C1EC5B
が設定されている。100nsでリセットが解除され、150nsでkeyの最下位ビット
を転送している。
6,450nsでkeyをすべて転送したため、パリティエラー信号(PE)が'0'になっている。
6,550nsから入力文の最下位ビットを転送している。
12,850nsで入力文をすべて転送したため、desif_test.desif0.DI
が64'h54657374_54657374 になり、暗号文もDES_OUTに生成されている。
入力文から暗号文の生成が12,850nsで直ちに生成されているが、これは遅延時
間を考慮しない機能シミュレーションのためである。
12,950nsで暗号文をdesif_test.desif0.DOに転送している。
13,050nsで暗号文の最下位ビットから転送を始めている
19,350nsで暗号文をすべて転送したが、受け取り側は19,400nsでdesif_test.doに暗号文を取り込んでいる。
19,500nsで受け取った暗号文を入力文として使えるようdesif_test.diに転送している。
19,650nsで暗号文の最下位ビットから転送を始めている
25,950nsで暗号文を入力文としてすべて転送した。
26,000-26,200nsでDE信号を1にしたため、回路が復号モードになり、復号した情報が
DES_OUTに現れている。
復号文の生成が26,000nsで直ちに生成されているが、これは遅延時間を考慮しない機能シミュレーションのためである。
26,050nsまたは26,150nsで復号文をdesif_test.desif0.DOに転送している。
これは、暗号・復号のための処理時間が実際には50ns以上は必要なため、確実
に復号文を取り込めるようにするためである。
26,250nsで復号文の最下位ビットから転送を始めている
32,550nsで復号文をすべて転送したが、受け取り側は32,600nsでdesif_test.doに復号文を取り込んでいる。
受け取った暗号文は64'h54657374_54657374であることから、
暗号化した文を同じ鍵で復号すると、元の入力文に戻っていることが確認でき
る。
次は、 FPGAへの実装 を行う。
| Back |