OpenCores
URL https://opencores.org/ocsvn/sha_core/sha_core/trunk

Subversion Repositories sha_core

[/] [sha_core/] [trunk/] [bench/] [test_sha1.v] - Blame information for rev 5

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 marsgod
/////////////////////////////////////////////////////////////////////
2
////                                                             ////
3
////  SHA-160                                                    ////
4
////  Secure Hash Algorithm (SHA-160)   testbench                ////
5
////                                                             ////
6
////  Author: marsgod                                            ////
7
////          marsgod@opencores.org                              ////
8
////                                                             ////
9
////                                                             ////
10
////  Downloaded from: http://www.opencores.org/cores/sha_core/  ////
11
////                                                             ////
12
/////////////////////////////////////////////////////////////////////
13
////                                                             ////
14
//// Copyright (C) 2002-2004 marsgod                             ////
15
////                         marsgod@opencores.org               ////
16
////                                                             ////
17
////                                                             ////
18
//// This source file may be used and distributed without        ////
19
//// restriction provided that this copyright statement is not   ////
20
//// removed from the file and that any derivative work contains ////
21
//// the original copyright notice and the associated disclaimer.////
22
////                                                             ////
23
////     THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY     ////
24
//// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED   ////
25
//// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS   ////
26
//// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR      ////
27
//// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,         ////
28
//// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES    ////
29
//// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE   ////
30
//// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR        ////
31
//// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF  ////
32
//// LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT  ////
33
//// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT  ////
34
//// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE         ////
35
//// POSSIBILITY OF SUCH DAMAGE.                                 ////
36
////                                                             ////
37
/////////////////////////////////////////////////////////////////////
38
 
39
 
40
`timescale 1ns/10ps
41
 
42
`define SHA1_TEST               "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
43
`define SHA1_TEST_PADDING       {1'b1,63'b0,448'b0,64'd448}     // 448 bit
44
`define SHA1_TEST_RESULT        160'h84983e44_1c3bd26e_baae4aa1_f95129e5_e54670f1
45
 
46
module test_sha;
47
 
48
reg clk,rst,cmd_w_i;
49
reg [31:0] text_i;
50
 
51
reg [2:0] cmd_i;
52
 
53
wire [31:0] text_o;
54
wire [3:0] cmd_o;
55
 
56
initial
57
begin
58
//      $sdf_annotate("syn/data/sha1.sdf",sha_core);
59
 
60
        clk = 1'b0;
61
        rst = 1'b0;
62
        cmd_w_i = 1'b0;
63
        cmd_i = 3'b0;
64
 
65
        #21;
66
        rst = 1'b1;
67
        #17;
68
        rst = 1'b0;
69
 
70
        test_SHA1;
71
        @(posedge clk);
72
        @(posedge clk);
73
        @(posedge clk);
74
        @(posedge clk);
75
        @(posedge clk);
76
 
77
        $finish;
78
end
79
 
80
 
81
always #5 clk = ~clk;
82
 
83
sha1 sha_core(
84
        .clk_i(clk),
85
        .rst_i(rst),
86
        .text_i(text_i),
87
        .text_o(text_o),
88
        .cmd_i(cmd_i),
89
        .cmd_w_i(cmd_w_i),
90
        .cmd_o(cmd_o)
91
        );
92
 
93
task test_SHA1;
94
integer i;
95
reg [1023:0] all_message;
96
reg [511:0] tmp_i;
97
reg [159:0] tmp_o;
98
reg [31:0] tmp;
99
begin
100
        all_message = {`SHA1_TEST,`SHA1_TEST_PADDING};
101
        tmp_i = all_message[1023:512];
102
        tmp_o = `SHA1_TEST_RESULT;
103
 
104
        #100;
105
 
106
 
107
        @(posedge clk);
108
        cmd_i = 3'b010;
109
        cmd_w_i = 1'b1;
110
 
111
        for (i=0;i<16;i=i+1)
112
        begin
113
                @(posedge clk);
114
                cmd_w_i = 1'b0;
115
                text_i = tmp_i[16*32-1:15*32];
116
                tmp_i = tmp_i << 32;
117
        end
118
 
119
        @(posedge clk);
120
        @(posedge clk);
121
        @(posedge clk);
122
        @(posedge clk);
123
        @(posedge clk);
124
 
125
        while (cmd_o[3])
126
                @(posedge clk);
127
 
128
        @(posedge clk);
129
        @(posedge clk);
130
        @(posedge clk);
131
        @(posedge clk);
132
        @(posedge clk);
133
 
134
        #100;
135
 
136
 
137
        tmp_i = all_message[511:0];
138
        @(posedge clk);
139
        cmd_i = 3'b110;
140
        cmd_w_i = 1'b1;
141
 
142
        for (i=0;i<16;i=i+1)
143
        begin
144
                @(posedge clk);
145
                cmd_w_i = 1'b0;
146
                text_i = tmp_i[16*32-1:15*32];
147
                tmp_i = tmp_i << 32;
148
        end
149
 
150
        @(posedge clk);
151
        @(posedge clk);
152
        @(posedge clk);
153
        @(posedge clk);
154
        @(posedge clk);
155
 
156
        while (cmd_o[3])
157
                @(posedge clk);
158
 
159
        @(posedge clk);
160
        @(posedge clk);
161
        @(posedge clk);
162
        @(posedge clk);
163
        @(posedge clk);
164
 
165
        cmd_i = 6'b001;
166
        cmd_w_i = 1'b1;
167
 
168
        @(posedge clk);
169
        cmd_w_i = 1'b0;
170
        for (i=0;i<5;i=i+1)
171
        begin
172
                @(posedge clk);
173
                #1;
174
                tmp = tmp_o[5*32-1:4*32];
175
                if (text_o !== tmp | (|text_o)===1'bx)
176
                begin
177
                        $display("ERROR(SHA-160-%02d) Expected %x, Got %x", i,tmp, text_o);
178
                end
179
                else
180
                begin
181
                        $display("OK(SHA-160-%02d),Expected %x, Got %x", i,tmp, text_o);
182
                end
183
                tmp_o = tmp_o << 32;
184
        end
185
        @(posedge clk);
186
        @(posedge clk);
187
        @(posedge clk);
188
        @(posedge clk);
189
        @(posedge clk);
190
        #100;
191
end
192
endtask
193
 
194
 
195
endmodule

powered by: WebSVN 2.1.0

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