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

Subversion Repositories oms8051mini

[/] [oms8051mini/] [trunk/] [verif/] [tb/] [tb_top.v] - Blame information for rev 2

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

Line No. Rev Author Line
1 2 dinesha
//////////////////////////////////////////////////////////////////////
2
////                                                              ////
3
////                                                              ////
4
////  This file is part of the OMS 8051 cores project             ////
5
////  http://www.opencores.org/cores/oms8051/                     ////
6
////                                                              ////
7
////  Description                                                 ////
8
////  OMS 8051 definitions.                                       ////
9
////                                                              ////
10
////  To Do:                                                      ////
11
////    nothing                                                   ////
12
////                                                              ////
13
////  Author(s):                                                  ////
14
////      - Dinesh Annayya, dinesha@opencores.org                 ////
15
////                                                              ////
16
//////////////////////////////////////////////////////////////////////
17
////                                                              ////
18
//// Copyright (C) 2000 Authors and OPENCORES.ORG                 ////
19
////                                                              ////
20
//// This source file may be used and distributed without         ////
21
//// restriction provided that this copyright statement is not    ////
22
//// removed from the file and that any derivative work contains  ////
23
//// the original copyright notice and the associated disclaimer. ////
24
////                                                              ////
25
//// This source file is free software; you can redistribute it   ////
26
//// and/or modify it under the terms of the GNU Lesser General   ////
27
//// Public License as published by the Free Software Foundation; ////
28
//// either version 2.1 of the License, or (at your option) any   ////
29
//// later version.                                               ////
30
////                                                              ////
31
//// This source is distributed in the hope that it will be       ////
32
//// useful, but WITHOUT ANY WARRANTY; without even the implied   ////
33
//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR      ////
34
//// PURPOSE.  See the GNU Lesser General Public License for more ////
35
//// details.                                                     ////
36
////                                                              ////
37
//// You should have received a copy of the GNU Lesser General    ////
38
//// Public License along with this source; if not, download it   ////
39
//// from http://www.opencores.org/lgpl.shtml                     ////
40
////                                                              ////
41
//////////////////////////////////////////////////////////////////////
42
 
43
 
44
 
45
`include "tb_defines.v"
46
 
47
module tb_top;
48
 
49
 
50
reg    reset_n;
51
reg    reset;
52
reg    xtal_clk;
53
reg    ref_clk_125;
54
wire   app_clk;
55
reg    ref_clk_50;
56
reg    uart_clk_16x;
57
 
58
 
59
parameter XTAL_CLK_PERIOD = 10; // 100MHZ 40; // 25Mhz
60
parameter APP_CLK_PERIOD = 10;
61
parameter REF_CLK_125_PERIOD = 8;
62
parameter REF_CLK_50_PERIOD = 20;
63
parameter UART_REF_CLK_PERIOD = 20;
64
 
65
reg[31:0] events_log;
66
 
67
initial
68
begin
69
        reset_n = 1;
70
   #100 reset_n = 0;
71
   #100 reset_n = 1;
72
end
73
 
74
 
75
initial begin
76
  xtal_clk = 1'b0;
77
  forever #(XTAL_CLK_PERIOD/2.0) xtal_clk = ~xtal_clk;
78
end
79
 
80
 
81
//initial begin
82
//  app_clk = 1'b0;
83
//  forever #(APP_CLK_PERIOD/2.0) app_clk = ~app_clk;
84
//end
85
 
86
initial begin
87
  ref_clk_125 = 1'b0;
88
  forever #(REF_CLK_125_PERIOD/2.0) ref_clk_125 = ~ref_clk_125;
89
end
90
 
91
initial begin
92
  ref_clk_50 = 1'b0;
93
  forever #(REF_CLK_50_PERIOD/2.0) ref_clk_50 = ~ref_clk_50;
94
end
95
 
96
 
97
initial begin
98
  uart_clk_16x = 1'b0;
99
  forever #(UART_REF_CLK_PERIOD/2.0) uart_clk_16x = ~uart_clk_16x;
100
end
101
 
102
 
103
wire [3:0]   phy_txd            ;
104
wire [3:0]   phy_rxd            ;
105
 
106
//---------------------------------
107
// Reg Bus Interface Signal
108
//---------------------------------
109
reg                reg_cs     ;
110
reg [3:0]          reg_id     ;
111
reg                reg_wr         ;
112
reg  [14:0]        reg_addr       ;
113
reg  [31:0]        reg_wdata      ;
114
reg  [3:0]         reg_be         ;
115
 
116
// Outputs
117
wire  [31:0]        reg_rdata      ;
118
wire                reg_ack        ;
119
 
120
reg                 master_mode   ;
121
reg                 ea_in   ;   // 1--> Internal Memory
122
 
123
 
124
wire         spi_sck            ;
125
wire         spi_so             ;
126
wire         spi_si             ;
127
wire [3:0]   spi_cs_n           ;
128
 
129
wire         clkout             ;
130
wire         reset_out_n        ;
131
 
132
//----------------------------------------
133
// 8051 core ROM related signals
134
//---------------------------------------
135
wire  [15:0]   wb_xrom_adr       ; // instruction address
136
wire           wb_xrom_ack       ; // instruction acknowlage
137
wire           wb_xrom_err       ; // instruction error
138
wire           wb_xrom_wr        ; // instruction error
139
wire    [31:0] wb_xrom_rdata     ; // rom data input
140
wire   [31:0]  wb_xrom_wdata     ; // rom data input
141
 
142
wire           wb_xrom_stb       ; // instruction strobe
143
wire           wb_xrom_cyc       ; // instruction cycle
144
 
145
 
146
//----------------------------------------
147
// 8051 core RAM related signals
148
//---------------------------------------
149
wire   [15:0] wb_xram_adr        ; // data-ram address
150
wire          wb_xram_ack        ; // data-ram acknowlage
151
wire          wb_xram_err        ; // data-ram error
152
wire          wb_xram_wr         ; // data-ram error
153
wire   [3:0]  wb_xram_be         ; // data-ram error
154
wire   [31:0] wb_xram_rdata      ; // ram data input
155
wire   [31:0] wb_xram_wdata      ; // ram data input
156
 
157
wire          wb_xram_stb        ; // data-ram strobe
158
wire          wb_xram_cyc        ; // data-ram cycle
159
 
160
//----------------------------------------
161
 
162
digital_core  u_core (
163
 
164
             . reset_n             (reset_n            ),
165
             . fastsim_mode        (1'b1               ),
166
             . mastermode          (master_mode        ),
167
 
168
             . xtal_clk            (xtal_clk           ),
169
             . clkout              (app_clk            ),
170
             . reset_out_n         (reset_out_n        ),
171
 
172
        // Reg Bus Interface Signal
173
             . ext_reg_cs          (reg_cs             ),
174
             . ext_reg_tid         (reg_id             ),
175
             . ext_reg_wr          (reg_wr             ),
176
             . ext_reg_addr        (reg_addr[14:0]     ),
177
             . ext_reg_wdata       (reg_wdata          ),
178
             . ext_reg_be          (reg_be             ),
179
 
180
            // Outputs
181
             . ext_reg_rdata       (reg_rdata          ),
182
             . ext_reg_ack         (reg_ack            ),
183
 
184
 
185
 
186
       // UART Line Interface
187
             .si                   (si                 ),
188
             .so                   (so                 ),
189
 
190
 
191
             .spi_sck              (spi_sck            ),
192
             .spi_so               (spi_so             ),
193
             .spi_si               (spi_si             ),
194
             .spi_cs_n             (spi_cs_n           ),
195
 
196
         // External ROM interface
197
               .wb_xrom_adr        (wb_xrom_adr        ),
198
               .wb_xrom_ack        (wb_xrom_ack        ),
199
               .wb_xrom_err        (wb_xrom_err        ),
200
               .wb_xrom_wr         (wb_xrom_wr         ),
201
               .wb_xrom_rdata      (wb_xrom_rdata      ),
202
               .wb_xrom_wdata      (wb_xrom_wdata      ),
203
 
204
               .wb_xrom_stb        (wb_xrom_stb        ),
205
               .wb_xrom_cyc        (wb_xrom_cyc        ),
206
 
207
         // External RAM interface
208
               .wb_xram_adr        (wb_xram_adr        ),
209
               .wb_xram_ack        (wb_xram_ack        ),
210
               .wb_xram_err        (wb_xram_err        ),
211
               .wb_xram_wr         (wb_xram_wr         ),
212
               .wb_xram_be         (wb_xram_be         ),
213
               .wb_xram_rdata      (wb_xram_rdata      ),
214
               .wb_xram_wdata      (wb_xram_wdata      ),
215
 
216
               .wb_xram_stb        (wb_xram_stb        ),
217
               .wb_xram_cyc        (wb_xram_cyc        ),
218
 
219
               .ea_in              (ea_in               ) // internal ROM
220
 
221
        );
222
 
223
 
224
  oc8051_xrom oc8051_xrom1
225
      (
226
             .rst                ( !reset_n         ),
227
             .clk                ( app_clk          ),
228
             .addr               ( wb_xrom_adr      ),
229
             .data               ( wb_xrom_rdata    ),
230
             .stb_i              ( wb_xrom_stb      ),
231
             .cyc_i              ( wb_xrom_cyc      ),
232
             .ack_o              ( wb_xrom_ack      )
233
      );
234
 
235
   defparam oc8051_xrom1.DELAY = 0;
236
 
237
 
238
//
239
// external data ram
240
//
241
oc8051_xram oc8051_xram1 (
242
          .clk               (app_clk       ),
243
          .rst               (!reset_n      ),
244
          .wr                (wb_xram_wr    ),
245
          .be                (wb_xram_be    ),
246
          .addr              (wb_xram_adr   ),
247
          .data_in           (wb_xram_wdata ),
248
          .data_out          (wb_xram_rdata ),
249
          .ack               (wb_xram_ack   ),
250
          .stb               (wb_xram_stb   )
251
      );
252
 
253
 
254
defparam oc8051_xram1.DELAY = 2;
255
 
256
 
257
 uart_agent tb_uart (
258
               . test_clk          (uart_clk_16x       ),
259
               . sin               (si                 ),
260
               . dsr_n             (                   ),
261
               . cts_n             (                   ),
262
               . dcd_n             (                   ),
263
 
264
               . sout              (so                 ),
265
               . dtr_n             (1'b0               ),
266
               . rts_n             (1'b0               ),
267
               . out1_n            (1'b0               ),
268
               . out2_n            (1'b0               )
269
       );
270
 
271
 
272
//----------------------- SPI Agents
273
 
274
m25p20 i_m25p20_0 (
275
               .c                  (spi_sck            ),
276
               .s                  (spi_cs_n[0]        ), // Include selection logic
277
               .w                  (1'b1               ), // Write protect is always disabled
278
               .hold               (1'b1               ), // Hold support not used
279
               .data_in            (spi_so             ),
280
               .data_out           (spi_si             )
281
             );
282
 
283
 
284
AT45DB321 i_AT45DB321_0 (
285
               .CSB                (spi_cs_n[1]        ),
286
               .SCK                (spi_sck            ),
287
               .SI                 (spi_so             ),
288
               .WPB                (1'b1               ),
289
               .RESETB             (1'b1               ),
290
               .RDY_BUSYB          (                   ),
291
               .SO                 (spi_si             )
292
      );
293
/***************
294
spi_agent_3120 spi_agent_3120_0 (
295
               .cs_b               (spi_cs_n[2]        ),
296
               .spi_din            (spi_si             ),
297
               .spi_dout           (spi_so             ),
298
               .spi_clk            (spi_sck            )
299
       );
300
 
301
spi_agent_3120 spi_agent_3120_1 (
302
               .cs_b               (spi_cs_n[3]        ),
303
               .spi_din            (spi_si             ),
304
               .spi_dout           (spi_so             ),
305
               .spi_clk            (spi_sck            )
306
       );
307
*****************/
308
 
309
tb_glbl  tb_glbl ();
310
 
311
 
312
`ifdef DUMP_ENABLE
313
initial begin
314
   if ( $test$plusargs("DUMP") ) begin
315
          $fsdbDumpfile("../dump/test_1.fsdb");
316
      $fsdbDumpvars;
317
      $fsdbDumpon;
318
   end
319
end
320
`endif
321
 
322
initial begin //{
323
   $display ("--> Dumpping the design");
324
   $shm_open("simvision.shm");
325
   $shm_probe("AC");
326
end //}
327
 
328
 
329
initial begin
330
 
331
   if ( $test$plusargs("INTERNAL_ROM") )  begin
332
      ea_in       = 1;
333
      master_mode = 1;
334
   end else if ( $test$plusargs("EXTERNAL_ROM") ) begin
335
      ea_in       = 0;
336
      master_mode = 1;
337
   end else begin
338
      ea_in       = 0;
339
      master_mode = 0;
340
   end
341
 
342
  `TB_GLBL.init;
343
 
344
   #1000 wait(reset_out_n == 1);
345
 
346
   if ( $test$plusargs("uart_test_1") )
347
       uart_test1();
348
   else if ( $test$plusargs("spi_test_1") )
349
       spi_test1();
350
   else begin
351
     // 8051 Test Cases
352
     #80000000
353
     $display("time ",$time, "\n faulire: end of time\n \n");
354
   end
355
 
356
   `TB_GLBL.test_stats;
357
   `TB_GLBL.test_finish;
358
   #1000 $finish;
359
end
360
 
361
wire [7:0] p2_out = u_core.u_8051_core.p2_o;
362
wire [7:0] p3_out = u_core.u_8051_core.p3_o;
363
always @(p2_out or p3_out)
364
begin
365
  if((p2_out == 8'haa) &&      // fib.c
366
     (p3_out == 8'haa )) begin
367
      $display("################################");
368
      $display("time ",$time, " Passed");
369
      $display("################################");
370
      #100
371
      $finish;
372
  end else if(p2_out == 8'h55) begin     // fib.c
373
      $display("");
374
      $display("time ",$time," Error: %h", p3_out);
375
      $display("");
376
      #100
377
      $finish;
378
  end
379
end
380
 
381
 
382
 
383
 
384
`include "uart_test1.v"
385
`include "spi_test1.v"
386
`include "tb_tasks.v"
387
`include "spi_tasks.v"
388
 
389
 
390
endmodule
391
`include "tb_glbl.v"

powered by: WebSVN 2.1.0

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