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

Subversion Repositories trigonometric_functions_in_double_fpu

[/] [trigonometric_functions_in_double_fpu/] [trunk/] [testbench/] [top_tb.v] - Blame information for rev 21

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 21 draunzer
/////////////////////////////////////////////////////////////////////
2
////                                                             ////
3
////                                                             ////
4
////  Trigonometric functions using                              ////
5
////  double precision Floating Point Unit                       ////
6
////                                                             ////
7
////  Author: Muni Aditya                                        ////
8
////          muni_aditya@yahoo.com                              ////
9
////                                                             ////
10
/////////////////////////////////////////////////////////////////////
11
////                                                             ////
12
//// Copyright (C) 2013 Muni Aditya                              ////
13
////                  muni_aditya@yahoo.com                      ////
14
////                                                             ////
15
//// This source file may be used and distributed without        ////
16
//// restriction provided that this copyright statement is not   ////
17
//// removed from the file and that any derivative work contains ////
18
//// the original copyright notice and the associated disclaimer.////
19
////                                                             ////
20
////     THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY     ////
21
//// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED   ////
22
//// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS   ////
23
//// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR      ////
24
//// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,         ////
25
//// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES    ////
26
//// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE   ////
27
//// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR        ////
28
//// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF  ////
29
//// LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT  ////
30
//// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT  ////
31
//// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE         ////
32
//// POSSIBILITY OF SUCH DAMAGE.                                 ////
33
////                                                             ////
34
/////////////////////////////////////////////////////////////////////
35
 
36
`include "../verilog/sine.v"
37
`include "../verilog/cosine.v"
38
`include "../verilog/tangent.v"
39
`include "../verilog/cosecant.v"
40
`include "../verilog/secant.v"
41
`include "../verilog/cotangent.v"
42
`include "../verilog/divider.v"
43
`include "../verilog/top.v"
44
 
45
 
46
`timescale 1ns / 100ps
47
 
48
`define INPUT_WIDTH 32
49
 
50
/*
51
3'b000:         sin
52
3'b001:         cos
53
3'b010:         tan
54
3'b011:         csc
55
3'b100:         sec
56
3'b101:                 cot
57
 
58
*/
59
 
60
 
61
module top_tb;
62
 
63
 
64
reg enable;
65
reg [`INPUT_WIDTH-1:0] degrees ;
66
reg rst;
67
reg [2:0] actv;
68
reg clk;
69
wire [63:0] data1;
70
 
71
 
72
top u1 (.enable(enable), .degrees(degrees), .data1(data1), .rst(rst), .actv(actv), .clk(clk));
73
 
74
always  #5 clk = !clk;
75
 
76
initial
77
 
78
 
79
 
80
begin
81
  rst = 1'b0 ;
82
  clk = 1'b0 ;
83
 #100
84
 @(posedge clk) ;
85
  rst <= 1'b0 ;
86
 
87
 @(posedge clk) ;
88
 @(posedge clk) ;
89
 @(posedge clk) ;
90
 enable <= 1'b1;
91
 
92
 
93
#50
94
 
95
 
96
  degrees <= `INPUT_WIDTH'd1023;
97
  actv <= 3'b101;
98
  enable = 1'b1;
99
 
100
 @(posedge clk) ;
101
 @(posedge clk) ;
102
 @(posedge clk) ;
103
 @(posedge clk) ;
104
 @(posedge clk) ;
105
 @(posedge clk) ;
106
 @(posedge clk) ;
107
 @(posedge clk) ;
108
 if (data1==64'hbff8a34971bd7010)
109
        $display($time,"ps For input %d Answer is correct %h", degrees, data1);
110
else
111
        $display($time,"ps Error! for input %d out is incorrect %h", degrees, data1);
112
 
113
 
114
  @(posedge clk) ;
115
  @(posedge clk) ;
116
  degrees <= `INPUT_WIDTH'd112;
117
  actv <= 3'b010;
118
  enable <= 1'b1;
119
  @(posedge clk) ;
120
  @(posedge clk) ;
121
  @(posedge clk) ;
122
  @(posedge clk) ;
123
  @(posedge clk) ;
124
  @(posedge clk) ;
125
  @(posedge clk) ;
126
   if (data1==64'hc003ccfa561175d3)
127
        $display($time,"ps For input %d Answer is correct %h", degrees, data1);
128
else
129
        $display($time,"ps Error! for input %d out is incorrect %h", degrees, data1);
130
 
131
 
132
  @(posedge clk) ;
133
  @(posedge clk) ;
134
  degrees <= `INPUT_WIDTH'd199;
135
  actv <= 3'b001;
136
  enable <= 1'b1;
137
  @(posedge clk) ;
138
  @(posedge clk) ;
139
  @(posedge clk) ;
140
  @(posedge clk) ;
141
  @(posedge clk) ;
142
  @(posedge clk) ;
143
  @(posedge clk) ;
144
  @(posedge clk) ;
145
  if (data1==64'hbfee41b02bfeb4cb)
146
        $display($time,"ps For input %d Answer is correct %h", degrees, data1);
147
else
148
        $display($time,"ps Error! for input %d out is incorrect %h", degrees, data1);
149
 
150
 
151
  @(posedge clk) ;
152
  @(posedge clk) ;
153
  @(posedge clk) ;
154
  @(posedge clk) ;
155
  @(posedge clk) ;
156
  degrees <= `INPUT_WIDTH'd286;
157
  actv <= 3'b011;
158
  enable <= 1'b1;
159
  @(posedge clk) ;
160
  @(posedge clk) ;
161
  @(posedge clk) ;
162
  @(posedge clk) ;
163
  @(posedge clk) ;
164
  @(posedge clk) ;
165
  @(posedge clk) ;
166
  @(posedge clk) ;
167
   if (data1==64'hbff0a51105712a50)
168
        $display($time,"ps For input %d Answer is correct %h", degrees, data1);
169
else
170
        $display($time,"ps Error! for input %d out is incorrect %h", degrees, data1);
171
 
172
 
173
  @(posedge clk) ;
174
  @(posedge clk) ;
175
  degrees <= `INPUT_WIDTH'd400;
176
  actv <= 3'b000;
177
  enable <= 1'b1;
178
  @(posedge clk) ;
179
  @(posedge clk) ;
180
  @(posedge clk) ;
181
  @(posedge clk) ;
182
  @(posedge clk) ;
183
  @(posedge clk) ;
184
  if (data1==64'h3fe491b7523c161c)
185
        $display($time,"ps For input %d Answer is correct %h", degrees, data1);
186
else
187
        $display($time,"ps Error! for input %d out is incorrect %h", degrees, data1);
188
 
189
 
190
 
191
  @(posedge clk) ;
192
  @(posedge clk) ;
193
  @(posedge clk) ;
194
  degrees <= `INPUT_WIDTH'd90;
195
  actv <= 3'b100;
196
  enable <= 1'b1;
197
  @(posedge clk) ;
198
  @(posedge clk) ;
199
  @(posedge clk) ;
200
  @(posedge clk) ;
201
  @(posedge clk) ;
202
  @(posedge clk) ;
203
  @(posedge clk) ;
204
  @(posedge clk) ;
205
  @(posedge clk) ;
206
  @(posedge clk) ;
207
   if (data1==64'h7ff0000000000000)
208
        $display($time,"ps For input %d Answer is correct %h", degrees, data1);
209
else
210
        $display($time,"ps Error! for input %d out is incorrect %h", degrees, data1);
211
 
212
 
213
 
214
  @(posedge clk) ;
215
  @(posedge clk) ;
216
  degrees <= `INPUT_WIDTH'd156;
217
  actv <= 3'b101;
218
  enable <= 1'b1;
219
  @(posedge clk) ;
220
  @(posedge clk) ;
221
  @(posedge clk) ;
222
  @(posedge clk) ;
223
  @(posedge clk) ;
224
  @(posedge clk) ;
225
  @(posedge clk) ;
226
  @(posedge clk) ;
227
  @(posedge clk) ;
228
  @(posedge clk) ;
229
  if (data1==64'hc001f7e220cc4172)
230
        $display($time,"ps For input %d Answer is correct %h", degrees, data1);
231
else
232
        $display($time,"ps Error! for input %d out is incorrect %h", degrees, data1);
233
 
234
 
235
 @(posedge clk) ;
236
  @(posedge clk) ;
237
  @(posedge clk) ;
238
  degrees <= `INPUT_WIDTH'd8769;
239
  actv <= 3'b001;
240
  enable = 1'b1;
241
 
242
 @(posedge clk) ;
243
 @(posedge clk) ;
244
 @(posedge clk) ;
245
 @(posedge clk) ;
246
 @(posedge clk) ;
247
 @(posedge clk) ;
248
 @(posedge clk) ;
249
 @(posedge clk) ;
250
  if (data1==64'hbfe4236484487abe)
251
        $display($time,"ps For input %d Answer is correct %h", degrees, data1);
252
else
253
        $display($time,"ps Error! for input %d out is incorrect %h", degrees, data1);
254
 
255
 
256
 
257
  @(posedge clk) ;
258
  @(posedge clk) ;
259
  @(posedge clk) ;
260
  degrees <= `INPUT_WIDTH'd2240;
261
  actv <= 3'b101;
262
  enable = 1'b1;
263
 
264
 @(posedge clk) ;
265
 @(posedge clk) ;
266
 @(posedge clk) ;
267
 @(posedge clk) ;
268
 @(posedge clk) ;
269
 @(posedge clk) ;
270
 @(posedge clk) ;
271
 @(posedge clk) ;
272
 if (data1==64'h3fc691e1ebc5cbbf)
273
        $display($time,"ps For input %d Answer is correct %h", degrees, data1);
274
else
275
        $display($time,"ps Error! for input %d out is incorrect %h", degrees, data1);
276
 
277
 
278
 
279
 
280
  @(posedge clk) ;
281
  @(posedge clk) ;
282
  @(posedge clk) ;
283
  degrees <= `INPUT_WIDTH'd346;
284
  actv <= 3'b000;
285
  enable = 1'b1;
286
 
287
 @(posedge clk) ;
288
 @(posedge clk) ;
289
 @(posedge clk) ;
290
 @(posedge clk) ;
291
 @(posedge clk) ;
292
 @(posedge clk) ;
293
 @(posedge clk) ;
294
 @(posedge clk) ;
295
  if (data1==64'hbfcef74bf2e4b91d)
296
        $display($time,"ps For input %d Answer is correct %h", degrees, data1);
297
else
298
        $display($time,"ps Error! for input %d out is incorrect %h", degrees, data1);
299
 
300
 
301
 
302
  @(posedge clk) ;
303
  @(posedge clk) ;
304
  @(posedge clk) ;
305
  degrees <= `INPUT_WIDTH'd789;
306
  actv <= 3'b010;
307
  enable = 1'b1;
308
 
309
 @(posedge clk) ;
310
 @(posedge clk) ;
311
 @(posedge clk) ;
312
 @(posedge clk) ;
313
 @(posedge clk) ;
314
 @(posedge clk) ;
315
 @(posedge clk) ;
316
 @(posedge clk) ;
317
   if (data1==64'h4004d738ef803785)
318
        $display($time,"ps For input %d Answer is correct %h", degrees, data1);
319
else
320
        $display($time,"ps Error! for input %d out is incorrect %h", degrees, data1);
321
 
322
 
323
 
324
 
325
  @(posedge clk) ;
326
  @(posedge clk) ;
327
  @(posedge clk) ;
328
  degrees <= `INPUT_WIDTH'd869;
329
  actv <= 3'b100;
330
  enable = 1'b1;
331
 
332
 @(posedge clk) ;
333
 @(posedge clk) ;
334
 @(posedge clk) ;
335
 @(posedge clk) ;
336
 @(posedge clk) ;
337
 @(posedge clk) ;
338
 @(posedge clk) ;
339
 @(posedge clk) ;
340
   if (data1==64'hbff2aa87c7f7612a)
341
        $display($time,"ps For input %d Answer is correct %h", degrees, data1);
342
else
343
        $display($time,"ps Error! for input %d out is incorrect %h", degrees, data1);
344
 
345
 
346
 
347
 
348
  @(posedge clk) ;
349
  @(posedge clk) ;
350
  @(posedge clk) ;
351
  degrees <= `INPUT_WIDTH'd1027;
352
  actv <= 3'b011;
353
  enable = 1'b1;
354
 
355
 @(posedge clk) ;
356
 @(posedge clk) ;
357
 @(posedge clk) ;
358
 @(posedge clk) ;
359
 @(posedge clk) ;
360
 @(posedge clk) ;
361
 @(posedge clk) ;
362
 @(posedge clk) ;
363
  if (data1==64'hbffa9613f8fd7862)
364
        $display($time,"ps For input %d Answer is correct %h", degrees, data1);
365
else
366
        $display($time,"ps Error! for input %d out is incorrect %h", degrees, data1);
367
 
368
 
369
 
370
 
371
  @(posedge clk) ;
372
  @(posedge clk) ;
373
  @(posedge clk) ;
374
  degrees <= `INPUT_WIDTH'd12679;
375
  actv <= 3'b000;
376
  enable = 1'b1;
377
 
378
 @(posedge clk) ;
379
 @(posedge clk) ;
380
 @(posedge clk) ;
381
 @(posedge clk) ;
382
 @(posedge clk) ;
383
 @(posedge clk) ;
384
 @(posedge clk) ;
385
 @(posedge clk) ;
386
  if (data1==64'h3fef697d6938b6c2)
387
        $display($time,"ps For input %d Answer is correct %h", degrees, data1);
388
else
389
        $display($time,"ps Error! for input %d out is incorrect %h", degrees, data1);
390
 
391
 
392
 
393
  @(posedge clk) ;
394
  @(posedge clk) ;
395
  @(posedge clk) ;
396
  degrees <= `INPUT_WIDTH'd127;
397
  actv <= 3'b100;
398
  enable = 1'b1;
399
 
400
 @(posedge clk) ;
401
 @(posedge clk) ;
402
 @(posedge clk) ;
403
 @(posedge clk) ;
404
 @(posedge clk) ;
405
 @(posedge clk) ;
406
 @(posedge clk) ;
407
 @(posedge clk) ;
408
  if (data1==64'hbffa9613f8fd7861)
409
        $display($time,"ps For input %d Answer is correct %h", degrees, data1);
410
else
411
        $display($time,"ps Error! for input %d out is incorrect %h", degrees, data1);
412
 
413
 
414
 
415
 
416
 
417
  @(posedge clk) ;
418
  @(posedge clk) ;
419
  @(posedge clk) ;
420
  degrees <= `INPUT_WIDTH'd40;
421
  actv <= 3'b101;
422
  enable = 1'b1;
423
 
424
 @(posedge clk) ;
425
 @(posedge clk) ;
426
 @(posedge clk) ;
427
 @(posedge clk) ;
428
 @(posedge clk) ;
429
 @(posedge clk) ;
430
 @(posedge clk) ;
431
 @(posedge clk) ;
432
 if (data1==64'h3ff3116c3711527e)
433
        $display($time,"ps For input %d Answer is correct %h", degrees, data1);
434
else
435
        $display($time,"ps Error! for input %d out is incorrect %h", degrees, data1);
436
 
437
 
438
 
439
 
440
 
441
  @(posedge clk) ;
442
  @(posedge clk) ;
443
  @(posedge clk) ;
444
  degrees <= `INPUT_WIDTH'd299;
445
  actv <= 3'b010;
446
  enable = 1'b1;
447
 
448
 @(posedge clk) ;
449
 @(posedge clk) ;
450
 @(posedge clk) ;
451
 @(posedge clk) ;
452
 @(posedge clk) ;
453
 @(posedge clk) ;
454
 @(posedge clk) ;
455
 @(posedge clk) ;
456
  if (data1==64'hbffcdd612dd501f3)
457
        $display($time,"ps For input %d Answer is correct %h", degrees, data1);
458
else
459
        $display($time,"ps Error! for input %d out is incorrect %h", degrees, data1);
460
 
461
 
462
 
463
 
464
  @(posedge clk) ;
465
  @(posedge clk) ;
466
  @(posedge clk) ;
467
  degrees <= `INPUT_WIDTH'd186;
468
  actv <= 3'b001;
469
  enable = 1'b1;
470
 
471
 @(posedge clk) ;
472
 @(posedge clk) ;
473
 @(posedge clk) ;
474
 @(posedge clk) ;
475
 @(posedge clk) ;
476
 @(posedge clk) ;
477
 @(posedge clk) ;
478
 @(posedge clk) ;
479
  if (data1==64'hbfefd31f94f867c6)
480
        $display($time,"ps For input %d Answer is correct %h", degrees, data1);
481
else
482
        $display($time,"ps Error! for input %d out is incorrect %h", degrees, data1);
483
 
484
 
485
 
486
 
487
  @(posedge clk) ;
488
  @(posedge clk) ;
489
  @(posedge clk) ;
490
  degrees <= `INPUT_WIDTH'd225;
491
  actv <= 3'b001;
492
  enable = 1'b1;
493
 
494
 @(posedge clk) ;
495
 @(posedge clk) ;
496
 @(posedge clk) ;
497
 @(posedge clk) ;
498
 @(posedge clk) ;
499
 @(posedge clk) ;
500
 @(posedge clk) ;
501
 @(posedge clk) ;
502
  if (data1==64'hbfe6a09e667f3bcd)
503
        $display($time,"ps For input %d Answer is correct %h", degrees, data1);
504
else
505
        $display($time,"ps Error! for input %d out is incorrect %h", degrees, data1);
506
 
507
 
508
 
509
 
510
  @(posedge clk) ;
511
  @(posedge clk) ;
512
  @(posedge clk) ;
513
  degrees <= `INPUT_WIDTH'd9999;
514
  actv <= 3'b000;
515
  enable = 1'b1;
516
 
517
 @(posedge clk) ;
518
 @(posedge clk) ;
519
 @(posedge clk) ;
520
 @(posedge clk) ;
521
 @(posedge clk) ;
522
  if (data1==64'hbfc4060b67a85375)
523
        $display($time,"ps For input %d Answer is correct %h", degrees, data1);
524
else
525
        $display($time,"ps Error! for input %d out is incorrect %h", degrees, data1);
526
 
527
 
528
 
529
 
530
 @(posedge clk) ;
531
 @(posedge clk) ;
532
 @(posedge clk) ;
533
  degrees <= `INPUT_WIDTH'd1800;
534
  actv <= 3'b010;
535
  enable = 1'b1;
536
 
537
 @(posedge clk) ;
538
 @(posedge clk) ;
539
 @(posedge clk) ;
540
 @(posedge clk) ;
541
 @(posedge clk) ;
542
 @(posedge clk) ;
543
 @(posedge clk) ;
544
 @(posedge clk) ;
545
   if (data1==64'h0000000000000000)
546
        $display($time,"ps For input %d Answer is correct %h", degrees, data1);
547
else
548
        $display($time,"ps Error! for input %d out is incorrect %h", degrees, data1);
549
 
550
 
551
 
552
 
553
 @(posedge clk) ;
554
 @(posedge clk) ;
555
 @(posedge clk) ;
556
  degrees <= `INPUT_WIDTH'd4020;
557
  actv <= 3'b011;
558
  enable = 1'b1;
559
 
560
 @(posedge clk) ;
561
 @(posedge clk) ;
562
 @(posedge clk) ;
563
 @(posedge clk) ;
564
 @(posedge clk) ;
565
 @(posedge clk) ;
566
 @(posedge clk) ;
567
 @(posedge clk) ;
568
    if (data1==64'h3ff279a74590331d)
569
        $display($time,"ps For input %d Answer is correct %h", degrees, data1);
570
else
571
        $display($time,"ps Error! for input %d out is incorrect %h", degrees, data1);
572
 
573
 
574
 
575
 
576
  #50
577
 
578
  $finish;
579
 
580
  end
581
 initial begin
582
        $dumpfile("fpu.vcd");
583
        $dumpvars;
584
end
585
 
586
endmodule

powered by: WebSVN 2.1.0

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