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 |