OpenCores
URL https://opencores.org/ocsvn/gost28147-89/gost28147-89/trunk

Subversion Repositories gost28147-89

[/] [gost28147-89/] [trunk/] [testbench/] [gost89_ecb_tb.v] - Blame information for rev 5

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 5 fanatid
`timescale 1ns / 1ps
2
 
3
module gost89_ecb_tb;
4
  reg clk;
5
  always
6
    #1 clk = ~clk;
7
 
8
  reg  [511:0] sbox = 512'h 4a92d80e6b1c7f53eb4c6dfa23810759581da342efc7609b7da1089fe46cb2536c715fd84a9e03b24ba0721d36859cfedb413f590ae7682c1fd057a4923e6b8c;
9
  reg  [255:0] key  = 256'h 0475f6e05038fbfad2c7c390edb3ca3d1547124291ae1e8a2f79cd9ed2bcefbd;
10
  wire mode_e = 0, mode_d = 1;
11
  reg reset;
12
  reg load_data;
13
  reg [63:0] in_e1, in_e2, in_d1, in_d2;
14
  wire [63:0] out_e1, out_e2, out_d1, out_d2;
15
  wire busy_e1, busy_e2, busy_d1, busy_d2;
16
 
17
  gost89_ecb
18
    ecb1(clk, reset, mode_e, load_data, sbox, key, in_e1, out_e1, busy_e1),
19
    ecb2(clk, reset, mode_d, load_data, sbox, key, in_d1, out_d1, busy_d1);
20
  gost89_ecb_encrypt
21
    ecb_encrypt(clk, reset, load_data, sbox, key, in_e2, out_e2, busy_e2);
22
  gost89_ecb_decrypt
23
    ecb_decrypt(clk, reset, load_data, sbox, key, in_d2, out_d2, busy_d2);
24
 
25
/*
26
ECB mode:
27
d5a8a608f4f115b4 389eb44a391474c4 379e59c3c96bb2ab 3f38ae3b8f541361
28
d658a36b11cf46eb 7aea1ed18e604249 c35472c91cd78640 3b5834a000fba066
29
*/
30
 
31
  initial begin
32
    $dumpfile("gost89_ecb_tb.vcd");
33
    $dumpvars(0, gost89_ecb_tb);
34
 
35
    clk = 0;
36
    reset = 0;
37
    load_data = 0;
38
 
39
// Normal usage
40
    #1;
41
    in_e1 = 64'h d5a8a608f4f115b4; in_d1 = 64'h d658a36b11cf46eb;
42
    in_e2 = 64'h d5a8a608f4f115b4; in_d2 = 64'h d658a36b11cf46eb;
43
    load_data = 1;
44
    #2;
45
    load_data = 0;
46
    #66;
47
    if (out_e1 != out_e2 || out_e2 != 64'h d658a36b11cf46eb || out_d1 != out_d2 || out_d2 != 64'h d5a8a608f4f115b4)
48
      begin $display("E"); $finish; end
49
    $display("OK");
50
 
51
// After reset
52
    #2;
53
    reset = 1;
54
    #2;
55
    reset = 0;
56
    #2;
57
    in_e1 = 64'h 389eb44a391474c4; in_d1 = 64'h 7aea1ed18e604249;
58
    in_e2 = 64'h 389eb44a391474c4; in_d2 = 64'h 7aea1ed18e604249;
59
    load_data = 1;
60
    #2;
61
    load_data = 0;
62
    #66;
63
    if (out_e1 != out_e2 || out_e2 != 64'h 7aea1ed18e604249 || out_d1 != out_d2 || out_d2 != 64'h 389eb44a391474c4)
64
      begin $display("E"); $finish; end
65
    $display("OK");
66
 
67
// Reset in processing
68
    #2;
69
    in_e1 = 64'h 0123456789abcdef; in_d1 = 64'h 0123456789abcdef;
70
    in_e2 = 64'h 0123456789abcdef; in_d2 = 64'h 0123456789abcdef;
71
    load_data = 1;
72
    #2;
73
    load_data = 0;
74
    #12;
75
    reset = 1;
76
    #2;
77
    reset = 0;
78
    #2;
79
    in_e1 = 64'h 379e59c3c96bb2ab; in_d1 = 64'h c35472c91cd78640;
80
    in_e2 = 64'h 379e59c3c96bb2ab; in_d2 = 64'h c35472c91cd78640;
81
    load_data = 1;
82
    #2;
83
    load_data = 0;
84
    #66;
85
    if (out_e1 != out_e2 || out_e2 != 64'h c35472c91cd78640 || out_d1 != out_d2 || out_d2 != 64'h 379e59c3c96bb2ab)
86
      begin $display("E"); $finish; end
87
    $display("OK");
88
 
89
// Start with reset
90
    #2;
91
    in_e1 = 64'h 3f38ae3b8f541361; in_d1 = 64'h 3b5834a000fba066;
92
    in_e2 = 64'h 3f38ae3b8f541361; in_d2 = 64'h 3b5834a000fba066;
93
    load_data = 1;
94
    reset = 1;
95
    #2;
96
    load_data = 0;
97
    reset = 0;
98
    #66;
99
    if (out_e1 != out_e2 || out_e2 != 64'h 3b5834a000fba066 || out_d1 != out_d2 || out_d2 != 64'h 3f38ae3b8f541361)
100
      begin $display("E"); $finish; end
101
    $display("OK");
102
 
103
    #10;
104
    $display("All passed");
105
    $finish;
106
  end
107
endmodule

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.