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

Subversion Repositories 8051

[/] [8051/] [trunk/] [rtl/] [verilog/] [oc8051_top.v] - Blame information for rev 148

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

Line No. Rev Author Line
1 72 simont
//////////////////////////////////////////////////////////////////////
2
////                                                              ////
3
////  8051 cores top level module                                 ////
4
////                                                              ////
5
////  This file is part of the 8051 cores project                 ////
6
////  http://www.opencores.org/cores/8051/                        ////
7
////                                                              ////
8
////  Description                                                 ////
9
////  8051 definitions.                                           ////
10
////                                                              ////
11
////  To Do:                                                      ////
12
////    nothing                                                   ////
13
////                                                              ////
14
////  Author(s):                                                  ////
15
////      - Simon Teran, simont@opencores.org                     ////
16
////                                                              ////
17
//////////////////////////////////////////////////////////////////////
18
////                                                              ////
19
//// Copyright (C) 2000 Authors and OPENCORES.ORG                 ////
20
////                                                              ////
21
//// This source file may be used and distributed without         ////
22
//// restriction provided that this copyright statement is not    ////
23
//// removed from the file and that any derivative work contains  ////
24
//// the original copyright notice and the associated disclaimer. ////
25
////                                                              ////
26
//// This source file is free software; you can redistribute it   ////
27
//// and/or modify it under the terms of the GNU Lesser General   ////
28
//// Public License as published by the Free Software Foundation; ////
29
//// either version 2.1 of the License, or (at your option) any   ////
30
//// later version.                                               ////
31
////                                                              ////
32
//// This source is distributed in the hope that it will be       ////
33
//// useful, but WITHOUT ANY WARRANTY; without even the implied   ////
34
//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR      ////
35
//// PURPOSE.  See the GNU Lesser General Public License for more ////
36
//// details.                                                     ////
37
////                                                              ////
38
//// You should have received a copy of the GNU Lesser General    ////
39
//// Public License along with this source; if not, download it   ////
40
//// from http://www.opencores.org/lgpl.shtml                     ////
41
////                                                              ////
42
//////////////////////////////////////////////////////////////////////
43
//
44
// CVS Revision History
45
//
46 54 simont
// $Log: not supported by cvs2svn $
47 148 simont
// Revision 1.29  2003/05/07 12:36:03  simont
48
// chsnge comp.des to des1
49
//
50 144 simont
// Revision 1.28  2003/05/06 09:41:35  simont
51
// remove define OC8051_AS2_PCL, chane signal src_sel2 to 2 bit wide.
52
//
53 141 simont
// Revision 1.27  2003/05/05 15:46:37  simont
54
// add aditional alu destination to solve critical path.
55
//
56 139 simont
// Revision 1.26  2003/04/29 11:24:31  simont
57
// fix bug in case execution of two data dependent instructions.
58
//
59 134 simont
// Revision 1.25  2003/04/25 17:15:51  simont
60
// change branch instruction execution (reduse needed clock periods).
61
//
62 132 simont
// Revision 1.24  2003/04/11 10:05:59  simont
63
// deifne OC8051_ROM added
64
//
65 122 simont
// Revision 1.23  2003/04/10 12:43:19  simont
66
// defines for pherypherals added
67
//
68 120 simont
// Revision 1.22  2003/04/09 16:24:04  simont
69
// change wr_sft to 2 bit wire.
70
//
71 118 simont
// Revision 1.21  2003/04/09 15:49:42  simont
72
// Register oc8051_sfr dato output, add signal wait_data.
73
//
74 117 simont
// Revision 1.20  2003/04/03 19:13:28  simont
75
// Include instruction cache.
76
//
77 107 simont
// Revision 1.19  2003/04/02 15:08:30  simont
78
// raname signals.
79
//
80 102 simont
// Revision 1.18  2003/01/13 14:14:41  simont
81
// replace some modules
82
//
83 82 simont
// Revision 1.17  2002/11/05 17:23:54  simont
84
// add module oc8051_sfr, 256 bytes internal ram
85
//
86 76 simont
// Revision 1.16  2002/10/28 14:55:00  simont
87
// fix bug in interface to external data ram
88
//
89 72 simont
// Revision 1.15  2002/10/23 16:53:39  simont
90
// fix bugs in instruction interface
91
//
92 62 simont
// Revision 1.14  2002/10/17 18:50:00  simont
93
// cahnge interface to instruction rom
94
//
95 54 simont
// Revision 1.13  2002/09/30 17:33:59  simont
96
// prepared header
97 72 simont
//
98
//
99
 
100
// synopsys translate_off
101
`include "oc8051_timescale.v"
102
// synopsys translate_on
103
 
104 148 simont
`include "oc8051_defines.v"
105 72 simont
 
106 102 simont
module oc8051_top (wb_rst_i, wb_clk_i,
107
//interface to instruction rom
108 120 simont
                wbi_adr_o,
109
                wbi_dat_i,
110
                wbi_stb_o,
111
                wbi_ack_i,
112
                wbi_cyc_o,
113
                wbi_err_i,
114
 
115 102 simont
//interface to data ram
116 120 simont
                wbd_dat_i,
117
                wbd_dat_o,
118
                wbd_adr_o,
119
                wbd_we_o,
120 132 simont
                wbd_ack_i,
121 120 simont
                wbd_stb_o,
122
                wbd_cyc_o,
123
                wbd_err_i,
124
 
125 102 simont
// interrupt interface
126 120 simont
                int0_i,
127
                int1_i,
128
 
129
 
130 102 simont
// port interface
131 120 simont
  `ifdef OC8051_PORTS
132
        `ifdef OC8051_PORT0
133
                p0_i,
134
                p0_o,
135
        `endif
136
 
137
        `ifdef OC8051_PORT1
138
                p1_i,
139
                p1_o,
140
        `endif
141
 
142
        `ifdef OC8051_PORT2
143
                p2_i,
144
                p2_o,
145
        `endif
146
 
147
        `ifdef OC8051_PORT3
148
                p3_i,
149
                p3_o,
150
        `endif
151
  `endif
152
 
153 102 simont
// serial interface
154 120 simont
        `ifdef OC8051_UART
155 102 simont
                rxd_i, txd_o,
156 120 simont
        `endif
157
 
158 102 simont
// counter interface
159 120 simont
        `ifdef OC8051_TC01
160
                t0_i, t1_i,
161
        `endif
162 72 simont
 
163 120 simont
        `ifdef OC8051_TC2
164 148 simont
                t2_i, t2ex_i,
165 120 simont
        `endif
166 148 simont
 
167
// external access (active low)
168
                ea_in
169 120 simont
                );
170 72 simont
 
171
 
172 120 simont
 
173 102 simont
input         wb_rst_i,         // reset input
174
              wb_clk_i,         // clock input
175
              int0_i,           // interrupt 0
176
              int1_i,           // interrupt 1
177
              ea_in,            // external access
178
              wbd_ack_i,        // data acknowalge
179
              wbi_ack_i,        // instruction acknowlage
180
              wbd_err_i,        // data error
181 120 simont
              wbi_err_i;        // instruction error
182 72 simont
 
183 120 simont
input [7:0]   wbd_dat_i; // ram data input
184 102 simont
input [31:0]  wbi_dat_i; // rom data input
185 72 simont
 
186 102 simont
output        wbd_we_o,         // data write enable
187
              wbd_stb_o,        // data strobe
188
              wbd_cyc_o,        // data cycle
189
              wbi_stb_o,        // instruction strobe
190
              wbi_cyc_o;        // instruction cycle
191 82 simont
 
192 120 simont
output [7:0]  wbd_dat_o; // data output
193 102 simont
 
194
output [15:0] wbd_adr_o, // data address
195
              wbi_adr_o;        // instruction address
196
 
197 120 simont
`ifdef OC8051_PORTS
198 102 simont
 
199 120 simont
`ifdef OC8051_PORT0
200
input  [7:0]  p0_i;              // port 0 input
201
output [7:0]  p0_o;              // port 0 output
202
`endif
203 72 simont
 
204 120 simont
`ifdef OC8051_PORT1
205
input  [7:0]  p1_i;              // port 1 input
206
output [7:0]  p1_o;              // port 1 output
207
`endif
208 72 simont
 
209 120 simont
`ifdef OC8051_PORT2
210
input  [7:0]  p2_i;              // port 2 input
211
output [7:0]  p2_o;              // port 2 output
212
`endif
213 72 simont
 
214 120 simont
`ifdef OC8051_PORT3
215
input  [7:0]  p3_i;              // port 3 input
216
output [7:0]  p3_o;              // port 3 output
217
`endif
218 72 simont
 
219 120 simont
`endif
220 72 simont
 
221
 
222
 
223
 
224
 
225
 
226 120 simont
`ifdef OC8051_UART
227
input         rxd_i;            // receive
228
output        txd_o;            // transnmit
229
`endif
230 72 simont
 
231 120 simont
`ifdef OC8051_TC01
232
input         t0_i,             // counter 0 input
233
              t1_i;             // counter 1 input
234
`endif
235 72 simont
 
236 120 simont
`ifdef OC8051_TC2
237
input         t2_i,             // counter 2 input
238
              t2ex_i;           //
239
`endif
240 72 simont
 
241 148 simont
wire [7:0]  dptr_hi,
242 120 simont
            dptr_lo,
243
            ri,
244
            data_out,
245
            op1,
246
            op2,
247
            op3,
248
            acc,
249
            p0_out,
250
            p1_out,
251
            p2_out,
252
            p3_out,
253
            sp,
254
            sp_w;
255 72 simont
 
256 148 simont
wire [31:0] idat_onchip;
257
 
258 120 simont
wire [15:0] pc;
259 72 simont
 
260 120 simont
assign wbd_cyc_o = wbd_stb_o;
261 72 simont
 
262 120 simont
wire        src_sel3;
263 141 simont
wire [1:0]  wr_sfr,
264
            src_sel2;
265 120 simont
wire [2:0]  ram_rd_sel,  // ram read
266
            ram_wr_sel, // ram write
267
            src_sel1;
268
 
269
wire [7:0]  ram_data,
270
            ram_out,    //data from ram
271
            sfr_out,
272
            wr_dat,
273
            wr_addr,    //ram write addres
274
            rd_addr;    //data ram read addres
275
wire        sfr_bit;
276
 
277
wire [1:0]  cy_sel,      //carry select; from decoder to cy_selct1
278
            bank_sel;
279
wire        rom_addr_sel,       //rom addres select; alu or pc
280
            rmw,
281
            ea_int;
282
 
283
wire        reti,
284
            intr,
285
            int_ack,
286
            istb;
287
wire [7:0]  int_src;
288
 
289
wire        mem_wait;
290
wire [2:0]  mem_act;
291
wire [3:0]  alu_op;      //alu operation (from decoder)
292
wire [1:0]  psw_set;    //write to psw or not; from decoder to psw (through register)
293
 
294
wire [7:0]  src1,        //alu sources 1
295
            src2,       //alu sources 2
296
            src3,       //alu sources 3
297 139 simont
            des_acc,
298 120 simont
            des1,       //alu destination 1
299 132 simont
            des2;       //alu destinations 2
300 120 simont
wire        desCy,      //carry out
301
            desAc,
302
            desOv,      //overflow
303
            alu_cy,
304
            wr,         //write to data ram
305
            wr_o;
306
 
307
wire        rd,         //read program rom
308
            pc_wr;
309
wire [2:0]  pc_wr_sel;   //program counter write select (from decoder to pc)
310
 
311
wire [7:0]  op1_n, //from memory_interface to decoder
312
            op2_n,
313
            op3_n;
314
 
315
wire [1:0]  comp_sel;    //select source1 and source2 to compare
316
wire        eq,         //result (from comp1 to decoder)
317
            srcAc,
318
            cy,
319
            rd_ind,
320 132 simont
            wr_ind,
321
            comp_wait;
322 120 simont
wire [2:0]  op1_cur;
323
 
324
wire        bit_addr,   //bit addresable instruction
325
            bit_data,   //bit data from ram to ram_select
326
            bit_out,    //bit data from ram_select to alu and cy_select
327
            bit_addr_o,
328
            wait_data;
329
 
330 72 simont
//
331 107 simont
// cpu to cache/wb_interface
332
wire        iack_i,
333
            istb_o,
334
            icyc_o;
335
wire [31:0] idat_i;
336
wire [15:0] iadr_o;
337 72 simont
 
338
 
339
//
340
// decoder
341 120 simont
oc8051_decoder oc8051_decoder1(.clk(wb_clk_i),
342
                               .rst(wb_rst_i),
343
                               .op_in(op1_n),
344
                               .op1_c(op1_cur),
345
                               .ram_rd_sel_o(ram_rd_sel),
346
                               .ram_wr_sel_o(ram_wr_sel),
347
                               .bit_addr(bit_addr),
348 72 simont
 
349 120 simont
                               .src_sel1(src_sel1),
350
                               .src_sel2(src_sel2),
351
                               .src_sel3(src_sel3),
352 72 simont
 
353 120 simont
                               .alu_op_o(alu_op),
354
                               .psw_set(psw_set),
355
                               .cy_sel(cy_sel),
356
                               .wr_o(wr),
357
                               .pc_wr(pc_wr),
358
                               .pc_sel(pc_wr_sel),
359
                               .comp_sel(comp_sel),
360
                               .eq(eq),
361
                               .wr_sfr_o(wr_sfr),
362
                               .rd(rd),
363
                               .rmw(rmw),
364
                               .istb(istb),
365
                               .mem_act(mem_act),
366
                               .mem_wait(mem_wait),
367
                               .wait_data(wait_data));
368
 
369
 
370 148 simont
wire [7:0] sub_result;
371 72 simont
//
372
//alu
373 148 simont
oc8051_alu oc8051_alu1(.rst(wb_rst_i),
374 139 simont
                       .clk(wb_clk_i),
375 120 simont
                       .op_code(alu_op),
376 132 simont
                       .src1(src1),
377 148 simont
                       .src2(src2),
378
                       .src3(src3),
379
                       .srcCy(alu_cy),
380 120 simont
                       .srcAc(srcAc),
381 139 simont
                       .des_acc(des_acc),
382 148 simont
                       .sub_result(sub_result),
383 132 simont
                       .des1(des1),
384
                       .des2(des2),
385 120 simont
                       .desCy(desCy),
386 148 simont
                       .desAc(desAc),
387
                       .desOv(desOv),
388 120 simont
                       .bit_in(bit_out));
389 72 simont
 
390
//
391
//data ram
392 134 simont
oc8051_ram_top oc8051_ram_top1(.clk(wb_clk_i),
393 148 simont
                               .rst(wb_rst_i),
394
                               .rd_addr(rd_addr),
395 120 simont
                               .rd_data(ram_data),
396 148 simont
                               .wr_addr(wr_addr),
397
                               .bit_addr(bit_addr_o),
398
                               .wr_data(wr_dat),
399 120 simont
                               .wr(wr_o && (!wr_addr[7] || wr_ind)),
400 148 simont
                               .bit_data_in(desCy),
401 120 simont
                               .bit_data_out(bit_data));
402 72 simont
 
403
//
404
 
405 148 simont
oc8051_alu_src_sel oc8051_alu_src_sel1(.clk(wb_clk_i),
406
                                       .rst(wb_rst_i),
407 120 simont
                                       .rd(rd),
408 82 simont
 
409 120 simont
                                       .sel1(src_sel1),
410
                                       .sel2(src_sel2),
411
                                       .sel3(src_sel3),
412 82 simont
 
413 120 simont
                                       .acc(acc),
414
                                       .ram(ram_out),
415
                                       .pc(pc),
416
                                       .dptr({dptr_hi, dptr_lo}),
417
                                       .op1(op1_n),
418
                                       .op2(op2_n),
419
                                       .op3(op3_n),
420
 
421
                                       .src1(src1),
422
                                       .src2(src2),
423
                                       .src3(src3));
424
 
425
 
426 72 simont
//
427
//
428 120 simont
oc8051_comp oc8051_comp1(.sel(comp_sel),
429 132 simont
                         .eq(eq),
430
                         .b_in(bit_out),
431
                         .cy(cy),
432
                         .acc(acc),
433 148 simont
                         .des(sub_result)
434 132 simont
                         );
435 72 simont
 
436
 
437
//
438
//program rom
439 122 simont
`ifdef OC8051_ROM
440
  oc8051_rom oc8051_rom1(.rst(wb_rst_i),
441
                       .clk(wb_clk_i),
442
                       .ea_int(ea_int),
443 120 simont
                       .addr(iadr_o),
444 148 simont
                       .data_o(idat_onchip)
445
                       );
446 122 simont
`else
447
  assign ea_int = 1'b0;
448 148 simont
  assign idat_onchip = 32'h0;
449 122 simont
`endif
450 72 simont
 
451
//
452
//
453 120 simont
oc8051_cy_select oc8051_cy_select1(.cy_sel(cy_sel),
454
                                   .cy_in(cy),
455
                                   .data_in(bit_out),
456
                                   .data_out(alu_cy));
457 72 simont
//
458
//
459 120 simont
oc8051_indi_addr oc8051_indi_addr1 (.clk(wb_clk_i),
460
                                    .rst(wb_rst_i),
461
                                    .wr_addr(wr_addr),
462 139 simont
                                    .data_in(wr_dat),
463 134 simont
                                    .wr(wr_o),
464 120 simont
                                    .wr_bit(bit_addr_o),
465 139 simont
                                    .ri_out(ri),
466
                                    .sel(op1_cur[0]),
467 120 simont
                                    .bank(bank_sel));
468 72 simont
 
469
 
470 107 simont
 
471
assign icyc_o = istb_o;
472 72 simont
//
473
//
474 120 simont
oc8051_memory_interface oc8051_memory_interface1(.clk(wb_clk_i),
475
                       .rst(wb_rst_i),
476 107 simont
// internal ram
477 120 simont
                       .wr_i(wr),
478
                       .wr_o(wr_o),
479
                       .wr_bit_i(bit_addr),
480
                       .wr_bit_o(bit_addr_o),
481
                       .wr_dat(wr_dat),
482 139 simont
                       .des_acc(des_acc),
483 132 simont
                       .des1(des1),
484 120 simont
                       .des2(des2),
485 139 simont
                       .rd_addr(rd_addr),
486 120 simont
                       .wr_addr(wr_addr),
487
                       .wr_ind(wr_ind),
488 139 simont
                       .bit_in(bit_data),
489 120 simont
                       .in_ram(ram_data),
490 139 simont
                       .sfr(sfr_out),
491
                       .sfr_bit(sfr_bit),
492 134 simont
                       .bit_out(bit_out),
493 120 simont
                       .iram_out(ram_out),
494 72 simont
 
495 107 simont
// external instrauction rom
496 120 simont
                       .iack_i(iack_i),
497
                       .iadr_o(iadr_o),
498
                       .idat_i(idat_i),
499
                       .istb_o(istb_o),
500 82 simont
 
501 107 simont
// internal instruction rom
502 148 simont
                       .idat_onchip(idat_onchip),
503 82 simont
 
504 107 simont
// data memory
505 139 simont
                       .dadr_o(wbd_adr_o),
506 120 simont
                       .ddat_o(wbd_dat_o),
507 139 simont
                       .dwe_o(wbd_we_o),
508 120 simont
                       .dstb_o(wbd_stb_o),
509 139 simont
                       .ddat_i(wbd_dat_i),
510 120 simont
                       .dack_i(wbd_ack_i),
511 107 simont
 
512
// from decoder
513 139 simont
                       .rd_sel(ram_rd_sel),
514
                       .wr_sel(ram_wr_sel),
515 134 simont
                       .rn({bank_sel, op1_cur}),
516
                       .rd_ind(rd_ind),
517 120 simont
                       .rd(rd),
518 139 simont
                       .mem_act(mem_act),
519 120 simont
                       .mem_wait(mem_wait),
520 107 simont
 
521
// external access
522 139 simont
                       .ea(ea_in),
523 120 simont
                       .ea_int(ea_int),
524 107 simont
 
525
// instructions outputs to cpu
526 139 simont
                       .op1_out(op1_n),
527
                       .op2_out(op2_n),
528 120 simont
                       .op3_out(op3_n),
529 82 simont
 
530 107 simont
// interrupt interface
531 120 simont
                       .intr(intr),
532
                       .int_v(int_src),
533
                       .int_ack(int_ack),
534
                       .istb(istb),
535
                       .reti(reti),
536 107 simont
 
537 82 simont
//pc
538 120 simont
                       .pc_wr_sel(pc_wr_sel),
539 132 simont
                       .pc_wr(pc_wr & comp_wait),
540 120 simont
                       .pc(pc),
541 82 simont
 
542 107 simont
// sfr's
543 120 simont
                       .sp_w(sp_w),
544
                       .dptr({dptr_hi, dptr_lo}),
545
                       .ri(ri),
546 139 simont
                       .acc(acc),
547 120 simont
                       .sp(sp)
548
                       );
549 82 simont
 
550 107 simont
 
551 72 simont
//
552
//
553
 
554 120 simont
oc8051_sfr oc8051_sfr1(.rst(wb_rst_i),
555
                       .clk(wb_clk_i),
556
                       .adr0(rd_addr[7:0]),
557
                       .adr1(wr_addr[7:0]),
558 139 simont
                       .dat0(sfr_out),
559
                       .dat1(wr_dat),
560
                       .dat2(des2),
561
                       .des_acc(des_acc),
562
                       .we(wr_o && !wr_ind),
563 120 simont
                       .bit_in(desCy),
564
                       .bit_out(sfr_bit),
565 134 simont
                       .wr_bit(bit_addr_o),
566
                       .ram_rd_sel(ram_rd_sel),
567 120 simont
                       .ram_wr_sel(ram_wr_sel),
568
                       .wr_sfr(wr_sfr),
569 132 simont
                       .comp_sel(comp_sel),
570
                       .comp_wait(comp_wait),
571 76 simont
// acc
572 120 simont
                       .acc(acc),
573 76 simont
// sp
574 120 simont
                       .sp(sp),
575
                       .sp_w(sp_w),
576 76 simont
// psw
577 120 simont
                       .bank_sel(bank_sel),
578
                       .desAc(desAc),
579
                       .desOv(desOv),
580
                       .psw_set(psw_set),
581
                       .srcAc(srcAc),
582
                       .cy(cy),
583 76 simont
// ports
584 120 simont
                       .rmw(rmw),
585
 
586
  `ifdef OC8051_PORTS
587
        `ifdef OC8051_PORT0
588
                       .p0_out(p0_o),
589
                       .p0_in(p0_i),
590
        `endif
591
 
592
        `ifdef OC8051_PORT1
593
                       .p1_out(p1_o),
594
                       .p1_in(p1_i),
595
        `endif
596
 
597
        `ifdef OC8051_PORT2
598
                       .p2_out(p2_o),
599
                       .p2_in(p2_i),
600
        `endif
601
 
602
        `ifdef OC8051_PORT3
603
                       .p3_out(p3_o),
604
                       .p3_in(p3_i),
605
        `endif
606
  `endif
607
 
608 76 simont
// uart
609 120 simont
        `ifdef OC8051_UART
610
                       .rxd(rxd_i), .txd(txd_o),
611
        `endif
612
 
613 76 simont
// int
614 120 simont
                       .int_ack(int_ack),
615
                       .intr(intr),
616
                       .int0(int0_i),
617
                       .int1(int1_i),
618 148 simont
                       .reti(reti),
619 120 simont
                       .int_src(int_src),
620
 
621
// t/c 0,1
622
        `ifdef OC8051_TC01
623
                       .t0(t0_i),
624
                       .t1(t1_i),
625
        `endif
626
 
627
// t/c 2
628
        `ifdef OC8051_TC2
629
                       .t2(t2_i),
630
                       .t2ex(t2ex_i),
631
        `endif
632
 
633 76 simont
// dptr
634 120 simont
                       .dptr_hi(dptr_hi),
635
                       .dptr_lo(dptr_lo),
636
                       .wait_data(wait_data)
637
                       );
638 72 simont
 
639 82 simont
 
640 107 simont
 
641
 
642
`ifdef OC8051_CACHE
643
 
644
 
645 148 simont
  oc8051_icache oc8051_icache1(.rst(wb_rst_i), .clk(wb_clk_i),
646
  // cpu
647 107 simont
        .adr_i(iadr_o),
648
        .dat_o(idat_i),
649
        .stb_i(istb_o),
650
        .ack_o(iack_i),
651
        .cyc_i(icyc_o),
652 148 simont
  // pins
653 107 simont
        .dat_i(wbi_dat_i),
654
        .stb_o(wbi_stb_o),
655
        .adr_o(wbi_adr_o),
656
        .ack_i(wbi_ack_i),
657
        .cyc_o(wbi_cyc_o));
658
 
659 148 simont
  defparam oc8051_icache1.ADR_WIDTH = 6;  // cache address wihth
660
  defparam oc8051_icache1.LINE_WIDTH = 2; // line address width (2 => 4x32)
661
  defparam oc8051_icache1.BL_NUM = 15; // number of blocks (2^BL_WIDTH-1); BL_WIDTH = ADR_WIDTH - LINE_WIDTH
662
  defparam oc8051_icache1.CACHE_RAM = 64; // cache ram x 32 (2^ADR_WIDTH)
663 107 simont
 
664
//
665
//    no cache
666
//
667
`else
668
 
669 148 simont
  `ifdef OC8051_WB
670
 
671
    oc8051_wb_iinterface oc8051_wb_iinterface(.rst(wb_rst_i), .clk(wb_clk_i),
672
    // cpu
673 107 simont
        .adr_i(iadr_o),
674
        .dat_o(idat_i),
675
        .stb_i(istb_o),
676
        .ack_o(iack_i),
677
        .cyc_i(icyc_o),
678 148 simont
    // external rom
679 107 simont
        .dat_i(wbi_dat_i),
680
        .stb_o(wbi_stb_o),
681
        .adr_o(wbi_adr_o),
682
        .ack_i(wbi_ack_i),
683
        .cyc_o(wbi_cyc_o));
684
 
685 148 simont
  `else
686 107 simont
 
687 148 simont
    assign wbi_adr_o = iadr_o    ;
688
    assign idat_i    = wbi_dat_i ;
689
    assign wbi_stb_o = 1'b1      ;
690
    assign iack_i    = wbi_ack_i ;
691
    assign wbi_cyc_o = 1'b1      ;
692
 
693
  `endif
694
 
695 107 simont
`endif
696
 
697
 
698
 
699 72 simont
endmodule

powered by: WebSVN 2.1.0

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