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

Subversion Repositories eco32

[/] [eco32/] [trunk/] [fpga/] [mc/] [boards/] [s3e-500/] [src/] [toplevel/] [eco32.v] - Blame information for rev 290

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 216 hellwig
//
2
// eco32.v -- ECO32 top-level description
3
//
4
 
5
 
6 290 hellwig
`timescale 1ns/10ps
7
`default_nettype none
8
 
9
 
10 216 hellwig
module eco32(clk_in,
11 290 hellwig
             rst_in,
12 216 hellwig
             sdram_ck_p,
13
             sdram_ck_n,
14
             sdram_cke,
15
             sdram_cs_n,
16
             sdram_ras_n,
17
             sdram_cas_n,
18
             sdram_we_n,
19
             sdram_ba,
20
             sdram_a,
21
             sdram_udm,
22
             sdram_ldm,
23
             sdram_udqs,
24
             sdram_ldqs,
25
             sdram_dq,
26
             flash_ce_n,
27
             flash_oe_n,
28
             flash_we_n,
29
             flash_byte_n,
30
             flash_a,
31
             flash_d,
32
             vga_hsync,
33
             vga_vsync,
34
             vga_r,
35
             vga_g,
36
             vga_b,
37
             ps2_clk,
38
             ps2_data,
39
             rs232_0_rxd,
40
             rs232_0_txd,
41
             rs232_1_rxd,
42
             rs232_1_txd,
43
             spi_sck,
44
             spi_mosi,
45
             dac_cs_n,
46
             dac_clr_n,
47
             amp_cs_n,
48
             amp_shdn,
49
             ad_conv,
50
             sw,
51
             led,
52
             lcd_e,
53
             lcd_rw,
54
             lcd_rs,
55
             spi_ss_b,
56
             fpga_init_b);
57
    // clock and reset
58
    input clk_in;
59 290 hellwig
    input rst_in;
60 216 hellwig
    // SDRAM
61
    output sdram_ck_p;
62
    output sdram_ck_n;
63
    output sdram_cke;
64
    output sdram_cs_n;
65
    output sdram_ras_n;
66
    output sdram_cas_n;
67
    output sdram_we_n;
68
    output [1:0] sdram_ba;
69
    output [12:0] sdram_a;
70
    output sdram_udm;
71
    output sdram_ldm;
72
    inout sdram_udqs;
73
    inout sdram_ldqs;
74
    inout [15:0] sdram_dq;
75
    // flash ROM
76
    output flash_ce_n;
77
    output flash_oe_n;
78
    output flash_we_n;
79
    output flash_byte_n;
80
    output [23:0] flash_a;
81
    input [15:0] flash_d;
82
    // VGA display
83
    output vga_hsync;
84
    output vga_vsync;
85
    output vga_r;
86
    output vga_g;
87
    output vga_b;
88
    // keyboard
89
    input ps2_clk;
90
    input ps2_data;
91
    // serial line 0
92
    input rs232_0_rxd;
93
    output rs232_0_txd;
94
    // serial line 1
95
    input rs232_1_rxd;
96
    output rs232_1_txd;
97
    // SPI bus controller
98
    output spi_sck;
99
    output spi_mosi;
100
    output dac_cs_n;
101
    output dac_clr_n;
102
    output amp_cs_n;
103
    output amp_shdn;
104
    output ad_conv;
105
    // board I/O
106
    input [3:0] sw;
107
    output [7:0] led;
108
    output lcd_e;
109
    output lcd_rw;
110
    output lcd_rs;
111
    output spi_ss_b;
112
    output fpga_init_b;
113
 
114 225 hellwig
  // clk_rst
115 216 hellwig
  wire ddr_clk_0;
116
  wire ddr_clk_90;
117
  wire ddr_clk_180;
118
  wire ddr_clk_270;
119
  wire ddr_clk_ok;
120
  wire clk;
121 290 hellwig
  wire rst;
122 216 hellwig
  // cpu
123 290 hellwig
  wire bus_stb;
124
  wire bus_we;
125
  wire [31:2] bus_addr;
126
  wire [31:0] bus_din;
127
  wire [31:0] bus_dout;
128
  wire bus_ack;
129
  wire [15:0] bus_irq;
130 216 hellwig
  // ram
131 290 hellwig
  wire ram_stb;
132
  wire [31:0] ram_dout;
133
  wire ram_ack;
134 216 hellwig
  // rom
135 290 hellwig
  wire rom_stb;
136
  wire [31:0] rom_dout;
137
  wire rom_ack;
138
  // i/o
139
  wire i_o_stb;
140 228 hellwig
  // tmr0
141 290 hellwig
  wire tmr0_stb;
142
  wire [31:0] tmr0_dout;
143
  wire tmr0_ack;
144 228 hellwig
  wire tmr0_irq;
145
  // tmr1
146 290 hellwig
  wire tmr1_stb;
147
  wire [31:0] tmr1_dout;
148
  wire tmr1_ack;
149 228 hellwig
  wire tmr1_irq;
150 216 hellwig
  // dsp
151 290 hellwig
  wire dsp_stb;
152
  wire [15:0] dsp_dout;
153
  wire dsp_ack;
154 216 hellwig
  // kbd
155 290 hellwig
  wire kbd_stb;
156
  wire [7:0] kbd_dout;
157
  wire kbd_ack;
158 216 hellwig
  wire kbd_irq;
159
  // ser0
160 290 hellwig
  wire ser0_stb;
161
  wire [7:0] ser0_dout;
162
  wire ser0_ack;
163 216 hellwig
  wire ser0_irq_r;
164
  wire ser0_irq_t;
165
  // ser1
166 290 hellwig
  wire ser1_stb;
167
  wire [7:0] ser1_dout;
168
  wire ser1_ack;
169 216 hellwig
  wire ser1_irq_r;
170
  wire ser1_irq_t;
171
  // fms
172 290 hellwig
  wire fms_stb;
173
  wire [31:0] fms_dout;
174
  wire fms_ack;
175 216 hellwig
  // spi
176
  wire [15:0] dac_sample_l;
177
  wire [15:0] dac_sample_r;
178
  wire dac_next;
179
  // bio
180 290 hellwig
  wire bio_stb;
181
  wire [31:0] bio_dout;
182
  wire bio_ack;
183 216 hellwig
  wire spi_en;
184
 
185 290 hellwig
  //--------------------------------------
186
  // module instances
187
  //--------------------------------------
188
 
189
  clk_rst clk_rst_1(
190 216 hellwig
    .clk_in(clk_in),
191 290 hellwig
    .rst_in(rst_in),
192 216 hellwig
    .ddr_clk_0(ddr_clk_0),
193
    .ddr_clk_90(ddr_clk_90),
194
    .ddr_clk_180(ddr_clk_180),
195
    .ddr_clk_270(ddr_clk_270),
196
    .ddr_clk_ok(ddr_clk_ok),
197
    .clk(clk),
198 290 hellwig
    .rst(rst)
199 216 hellwig
  );
200
 
201 290 hellwig
  cpu cpu_1(
202 216 hellwig
    .clk(clk),
203 290 hellwig
    .rst(rst),
204
    .bus_stb(bus_stb),
205
    .bus_we(bus_we),
206
    .bus_addr(bus_addr[31:2]),
207
    .bus_din(bus_din[31:0]),
208
    .bus_dout(bus_dout[31:0]),
209
    .bus_ack(bus_ack),
210
    .bus_irq(bus_irq[15:0])
211 216 hellwig
  );
212
 
213 290 hellwig
  ram ram_1(
214 216 hellwig
    .ddr_clk_0(ddr_clk_0),
215
    .ddr_clk_90(ddr_clk_90),
216
    .ddr_clk_180(ddr_clk_180),
217
    .ddr_clk_270(ddr_clk_270),
218
    .ddr_clk_ok(ddr_clk_ok),
219
    .clk(clk),
220 290 hellwig
    .rst(rst),
221
    .stb(ram_stb),
222
    .we(bus_we),
223
    .addr(bus_addr[25:2]),
224
    .data_in(bus_dout[31:0]),
225
    .data_out(ram_dout[31:0]),
226
    .ack(ram_ack),
227 216 hellwig
    .sdram_ck_p(sdram_ck_p),
228
    .sdram_ck_n(sdram_ck_n),
229
    .sdram_cke(sdram_cke),
230
    .sdram_cs_n(sdram_cs_n),
231
    .sdram_ras_n(sdram_ras_n),
232
    .sdram_cas_n(sdram_cas_n),
233
    .sdram_we_n(sdram_we_n),
234
    .sdram_ba(sdram_ba[1:0]),
235
    .sdram_a(sdram_a[12:0]),
236
    .sdram_udm(sdram_udm),
237
    .sdram_ldm(sdram_ldm),
238
    .sdram_udqs(sdram_udqs),
239
    .sdram_ldqs(sdram_ldqs),
240
    .sdram_dq(sdram_dq[15:0])
241
  );
242
 
243 290 hellwig
  rom rom_1(
244 216 hellwig
    .clk(clk),
245 290 hellwig
    .rst(rst),
246
    .stb(rom_stb),
247
    .we(bus_we),
248
    .addr(bus_addr[23:2]),
249
    .data_out(rom_dout[31:0]),
250
    .ack(rom_ack),
251 216 hellwig
    .spi_en(spi_en),
252
    .ce_n(flash_ce_n),
253
    .oe_n(flash_oe_n),
254
    .we_n(flash_we_n),
255
    .byte_n(flash_byte_n),
256
    .a(flash_a[23:0]),
257
    .d(flash_d[15:0])
258
  );
259
 
260 290 hellwig
  tmr tmr_1(
261 216 hellwig
    .clk(clk),
262 290 hellwig
    .rst(rst),
263
    .stb(tmr0_stb),
264
    .we(bus_we),
265
    .addr(bus_addr[3:2]),
266
    .data_in(bus_dout[31:0]),
267
    .data_out(tmr0_dout[31:0]),
268
    .ack(tmr0_ack),
269 228 hellwig
    .irq(tmr0_irq)
270 216 hellwig
  );
271
 
272 290 hellwig
  tmr tmr_2(
273 228 hellwig
    .clk(clk),
274 290 hellwig
    .rst(rst),
275
    .stb(tmr1_stb),
276
    .we(bus_we),
277
    .addr(bus_addr[3:2]),
278
    .data_in(bus_dout[31:0]),
279
    .data_out(tmr1_dout[31:0]),
280
    .ack(tmr1_ack),
281 228 hellwig
    .irq(tmr1_irq)
282
  );
283
 
284 290 hellwig
  dsp dsp_1(
285 216 hellwig
    .clk(clk),
286 290 hellwig
    .rst(rst),
287
    .stb(dsp_stb),
288
    .we(bus_we),
289
    .addr(bus_addr[13:2]),
290
    .data_in(bus_dout[15:0]),
291
    .data_out(dsp_dout[15:0]),
292
    .ack(dsp_ack),
293 216 hellwig
    .hsync(vga_hsync),
294
    .vsync(vga_vsync),
295
    .r(vga_r),
296
    .g(vga_g),
297
    .b(vga_b)
298
  );
299
 
300 290 hellwig
  kbd kbd_1(
301 216 hellwig
    .clk(clk),
302 290 hellwig
    .rst(rst),
303
    .stb(kbd_stb),
304
    .we(bus_we),
305
    .addr(bus_addr[2]),
306
    .data_in(bus_dout[7:0]),
307
    .data_out(kbd_dout[7:0]),
308
    .ack(kbd_ack),
309 216 hellwig
    .irq(kbd_irq),
310
    .ps2_clk(ps2_clk),
311
    .ps2_data(ps2_data)
312
  );
313
 
314 290 hellwig
  ser ser_1(
315 216 hellwig
    .clk(clk),
316 290 hellwig
    .rst(rst),
317
    .stb(ser0_stb),
318
    .we(bus_we),
319
    .addr(bus_addr[3:2]),
320
    .data_in(bus_dout[7:0]),
321
    .data_out(ser0_dout[7:0]),
322
    .ack(ser0_ack),
323 216 hellwig
    .irq_r(ser0_irq_r),
324
    .irq_t(ser0_irq_t),
325
    .rxd(rs232_0_rxd),
326
    .txd(rs232_0_txd)
327
  );
328
 
329 290 hellwig
  ser ser_2(
330 216 hellwig
    .clk(clk),
331 290 hellwig
    .rst(rst),
332
    .stb(ser1_stb),
333
    .we(bus_we),
334
    .addr(bus_addr[3:2]),
335
    .data_in(bus_dout[7:0]),
336
    .data_out(ser1_dout[7:0]),
337
    .ack(ser1_ack),
338 216 hellwig
    .irq_r(ser1_irq_r),
339
    .irq_t(ser1_irq_t),
340
    .rxd(rs232_1_rxd),
341
    .txd(rs232_1_txd)
342
  );
343
 
344 290 hellwig
  fms fms_1(
345 216 hellwig
    .clk(clk),
346 290 hellwig
    .rst(rst),
347
    .stb(fms_stb),
348
    .we(bus_we),
349
    .addr(bus_addr[11:2]),
350
    .data_in(bus_dout[31:0]),
351
    .data_out(fms_dout[31:0]),
352
    .ack(fms_ack),
353 216 hellwig
    .next(dac_next),
354
    .sample_l(dac_sample_l[15:0]),
355
    .sample_r(dac_sample_r[15:0])
356
  );
357
 
358 290 hellwig
  spi spi_1(
359 216 hellwig
    .clk(clk),
360 290 hellwig
    .rst(rst),
361 216 hellwig
    .spi_en(spi_en),
362
    .dac_sample_l(dac_sample_l[15:0]),
363
    .dac_sample_r(dac_sample_r[15:0]),
364
    .dac_next(dac_next),
365
    .spi_sck(spi_sck),
366
    .spi_mosi(spi_mosi),
367
    .dac_cs_n(dac_cs_n),
368
    .dac_clr_n(dac_clr_n),
369
    .amp_cs_n(amp_cs_n),
370
    .amp_shdn(amp_shdn),
371
    .ad_conv(ad_conv)
372
  );
373
 
374 290 hellwig
  bio bio_1(
375 216 hellwig
    .clk(clk),
376 290 hellwig
    .rst(rst),
377
    .stb(bio_stb),
378
    .we(bus_we),
379
    .addr(bus_addr[2]),
380
    .data_in(bus_dout[31:0]),
381
    .data_out(bio_dout[31:0]),
382
    .ack(bio_ack),
383 216 hellwig
    .spi_en(spi_en),
384
    .sw(sw[3:0]),
385
    .led(led[7:0]),
386
    .lcd_e(lcd_e),
387
    .lcd_rw(lcd_rw),
388
    .lcd_rs(lcd_rs),
389
    .spi_ss_b(spi_ss_b),
390
    .fpga_init_b(fpga_init_b)
391
  );
392
 
393 290 hellwig
  //--------------------------------------
394
  // address decoder
395
  //--------------------------------------
396
 
397
  // RAM: architectural limit  = 512 MB
398
  //      implementation limit =  64 MB
399
  assign ram_stb =
400
    (bus_stb == 1 && bus_addr[31:29] == 3'b000
401
                  && bus_addr[28:26] == 3'b000) ? 1 : 0;
402
 
403
  // ROM: architectural limit  = 256 MB
404
  //      implementation limit =  16 MB
405
  assign rom_stb =
406
    (bus_stb == 1 && bus_addr[31:28] == 4'b0010
407
                  && bus_addr[27:24] == 4'b0000) ? 1 : 0;
408
 
409
  // I/O: architectural limit  = 256 MB
410
  assign i_o_stb =
411
    (bus_stb == 1 && bus_addr[31:28] == 4'b0011) ? 1 : 0;
412
  assign tmr0_stb =
413
    (i_o_stb == 1 && bus_addr[27:20] == 8'h00
414
                  && bus_addr[19:12] == 8'h00) ? 1 : 0;
415
  assign tmr1_stb =
416
    (i_o_stb == 1 && bus_addr[27:20] == 8'h00
417
                  && bus_addr[19:12] == 8'h01) ? 1 : 0;
418
  assign dsp_stb =
419
    (i_o_stb == 1 && bus_addr[27:20] == 8'h01) ? 1 : 0;
420
  assign kbd_stb =
421
    (i_o_stb == 1 && bus_addr[27:20] == 8'h02) ? 1 : 0;
422
  assign ser0_stb =
423
    (i_o_stb == 1 && bus_addr[27:20] == 8'h03
424
                  && bus_addr[19:12] == 8'h00) ? 1 : 0;
425
  assign ser1_stb =
426
    (i_o_stb == 1 && bus_addr[27:20] == 8'h03
427
                  && bus_addr[19:12] == 8'h01) ? 1 : 0;
428
  assign fms_stb =
429
    (i_o_stb == 1 && bus_addr[27:20] == 8'h05
430
                  && bus_addr[19:12] == 8'h00) ? 1 : 0;
431
  assign bio_stb =
432
    (i_o_stb == 1 && bus_addr[27:20] == 8'h10
433
                  && bus_addr[19:12] == 8'h00) ? 1 : 0;
434
 
435
  //--------------------------------------
436
  // data and acknowledge multiplexers
437
  //--------------------------------------
438
 
439
  assign bus_din[31:0] =
440
    (ram_stb == 1)  ? ram_dout[31:0] :
441
    (rom_stb == 1)  ? rom_dout[31:0] :
442
    (tmr0_stb == 1) ? tmr0_dout[31:0] :
443
    (tmr1_stb == 1) ? tmr1_dout[31:0] :
444
    (dsp_stb == 1)  ? { 16'h0000, dsp_dout[15:0] } :
445
    (kbd_stb == 1)  ? { 24'h000000, kbd_dout[7:0] } :
446
    (ser0_stb == 1) ? { 24'h000000, ser0_dout[7:0] } :
447
    (ser1_stb == 1) ? { 24'h000000, ser1_dout[7:0] } :
448
    (fms_stb == 1)  ? fms_dout[31:0] :
449
    (bio_stb == 1)  ? bio_dout[31:0] :
450
    32'h00000000;
451
 
452
  assign bus_ack =
453
    (ram_stb == 1)  ? ram_ack :
454
    (rom_stb == 1)  ? rom_ack :
455
    (tmr0_stb == 1) ? tmr0_ack :
456
    (tmr1_stb == 1) ? tmr1_ack :
457
    (dsp_stb == 1)  ? dsp_ack :
458
    (kbd_stb == 1)  ? kbd_ack :
459
    (ser0_stb == 1) ? ser0_ack :
460
    (ser1_stb == 1) ? ser1_ack :
461
    (fms_stb == 1)  ? fms_ack :
462
    (bio_stb == 1)  ? bio_ack :
463
    0;
464
 
465
  //--------------------------------------
466
  // bus interrupt request assignments
467
  //--------------------------------------
468
 
469
  assign bus_irq[15] = tmr1_irq;
470
  assign bus_irq[14] = tmr0_irq;
471
  assign bus_irq[13] = 1'b0;
472
  assign bus_irq[12] = 1'b0;
473
  assign bus_irq[11] = 1'b0;
474
  assign bus_irq[10] = 1'b0;
475
  assign bus_irq[ 9] = 1'b0;
476
  assign bus_irq[ 8] = 1'b0;  //dsk_irq;
477
  assign bus_irq[ 7] = 1'b0;
478
  assign bus_irq[ 6] = 1'b0;
479
  assign bus_irq[ 5] = 1'b0;
480
  assign bus_irq[ 4] = kbd_irq;
481
  assign bus_irq[ 3] = ser1_irq_r;
482
  assign bus_irq[ 2] = ser1_irq_t;
483
  assign bus_irq[ 1] = ser0_irq_r;
484
  assign bus_irq[ 0] = ser0_irq_t;
485
 
486 216 hellwig
endmodule

powered by: WebSVN 2.1.0

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