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

Subversion Repositories zx_ula

[/] [zx_ula/] [branches/] [xilinx/] [spectrum_48k_for_digilent_spartan3_starter_kit/] [spectrum48k_tld.v] - Blame information for rev 8

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

Line No. Rev Author Line
1 8 mcleod_ide
`timescale 1ns / 1ps
2
//////////////////////////////////////////////////////////////////////////////////
3
// Company:        Dept. Architecture and Computing Technology. University of Seville
4
// Engineer:       Miguel Angel Rodriguez Jodar. rodriguj@atc.us.es
5
// 
6
// Create Date:    19:13:39 4-Apr-2012 
7
// Design Name:    ZX Spectrum
8
// Module Name:    tld_spartan3_sp48k
9
// Project Name: 
10
// Target Devices: 
11
// Tool versions: 
12
// Description: 
13
//
14
// Dependencies: 
15
//
16
// Revision: 
17
// Revision 1.00 - File Created
18
// Additional Comments: GPL License policies apply to the contents of this file.
19
//
20
//////////////////////////////////////////////////////////////////////////////////
21
module tld_spartan3_sp48k (
22
    input clk50,
23
         input reset,
24
    output r,
25
    output g,
26
    output b,
27
    output i,
28
    output csync,
29
        // ULA I/O 
30
         input ear,
31
         output audio_out,
32
         output [7:0] kbd_rows,
33
         input [4:0] kbd_columns,
34
        // diagnostics
35
         output [7:0] leds,
36
        // SRAM memory
37
         output [17:0] sa,
38
         inout [7:0] sd1,
39
         output sramce1,
40
         output sramub1,
41
         output sramlb1,
42
         output sramoe,
43
         output sramwe
44
    );
45
 
46
        // CPU signals
47
        wire [15:0] a;
48
        wire [7:0] cpudout;
49
        wire [7:0] cpudin;
50
        wire clkcpu;
51
        wire mreq_n;
52
        wire iorq_n;
53
        wire wr_n;
54
        wire rd_n;
55
        wire rfsh_n;
56
        wire int_n;
57
 
58
        // VRAM signals
59
        wire [13:0] va;
60
        wire [7:0] vramdin;
61
        wire [7:0] vramdout;
62
        wire vramoe;
63
        wire vramcs;
64
        wire vramwe;
65
 
66
        // I/O
67
        wire mic;
68
        wire spk;
69
        assign audio_out = spk;
70
 
71
        // ULA data bus
72
        wire [7:0] uladout;
73
        wire [7:0] uladin;
74
 
75
        // SRAM data bus
76
        wire [7:0] sramdout;
77
        wire [7:0] sramdin;
78
 
79
        // ROM data bus
80
        wire [7:0] romdout;
81
 
82
        wire sram_cs = a[15] & !mreq_n;
83
        wire ula_cs = !a[0] & !iorq_n;
84
        wire vram_cs = !a[15] & a[14] & !mreq_n;
85
        wire port255_cs = !iorq_n && a[7:0]==8'hFF && !rd_n;
86
        wire rom_cs = !a[15] & !a[14] & !mreq_n & !rd_n;
87
 
88
        /////////////////////////////////////
89
        // Master clock (14MHz) generation
90
        /////////////////////////////////////
91
        wire clk28mhz;
92
   master_clock clock28mhz (
93
    .CLKIN_IN(clk50),
94
    .CLKFX_OUT(clk28mhz),
95
    .CLKIN_IBUFG_OUT(),
96
    .CLK0_OUT()
97
    );
98
        reg clk14 = 0;
99
        always @(posedge clk28mhz) begin
100
                clk14 = !clk14;
101
        end
102
        wire clkula = clk14;
103
        wire clkmem = clk28mhz;
104
 
105
   /////////////////////////////////////
106
   // ROM
107
   /////////////////////////////////////        
108
        rom the_rom (
109
                .clka(clkmem),
110
                .ena(rom_cs),
111
                .addra(a[13:0]),
112
                .douta(romdout)
113
        );
114
 
115
//   /////////////////////////////////////
116
//   // VRAM (first 16K of RAM)
117
//   /////////////////////////////////////      
118
//      vram lower_ram (
119
//              .clka(clkmem),
120
//              .addra(va),
121
//              .dina(vramdin),
122
//              .douta(vramdout),
123
//              .ena(vramcs),
124
//              .wea(vramwe)
125
//      );
126
 
127
//   /////////////////////////////////////
128
//   // SRAM (top 32K of RAM). External SRAM chip
129
//   /////////////////////////////////////      
130
//   ram32k upper_ram (
131
//              .a(a[14:0]),
132
//              .cs_n(!sram_cs),
133
//              .oe_n(rd_n),
134
//              .we_n(wr_n),
135
//              .din(sramdin),
136
//              .dout(sramdout),
137
//              .sa(sa),
138
//              .sd(sd1),
139
//              .sramce(sramce1),
140
//              .sramub(sramub1),
141
//              .sramlb(sramlb1),
142
//              .sramoe(sramoe),
143
//              .sramwe(sramwe)
144
//      );
145
 
146
   /////////////////////////////////////
147
   // VRAM and upper RAM banks
148
   /////////////////////////////////////        
149
   ram_controller vram_and_upper_ram (
150
                .clk(clkmem),
151
                // Bank 1 (VRAM)
152
                .a1({2'b00,va}),
153
                .cs1_n(!vramcs),
154
                .oe1_n(!vramoe),
155
                .we1_n(!vramwe),
156
                .din1(vramdin),
157
                .dout1(vramdout),
158
                // Bank 2 (upper RAM)
159
                .a2({1'b0,a[14:0]}),
160
                .cs2_n(!sram_cs),
161
                .oe2_n(rd_n),
162
                .we2_n(wr_n),
163
                .din2(sramdin),
164
                .dout2(sramdout),
165
                // Outputs to actual SRAM on board
166
                .sa(sa),
167
                .sd(sd1),
168
                .sramce(sramce1),
169
                .sramub(sramub1),
170
                .sramlb(sramlb1),
171
                .sramoe(sramoe),
172
                .sramwe(sramwe)
173
        );
174
 
175
   /////////////////////////////////////
176
   // The ULA
177
   /////////////////////////////////////        
178
        ula the_ula (
179
                .clk14(clkula),
180
                .a(a),
181
                .din(uladin),
182
                .dout(uladout),
183
                .mreq_n(mreq_n),
184
                .iorq_n(iorq_n),
185
                .rd_n(rd_n),
186
                .wr_n(wr_n),
187
                .rfsh_n(rfsh_n),
188
                .clkcpu(clkcpu),
189
                .msk_int_n(int_n),
190
                .va(va),
191
                .vramdout(vramdout),
192
                .vramdin(vramdin),
193
                .vramoe(vramoe),
194
                .vramcs(vramcs),
195
                .vramwe(vramwe),
196
                .ear(ear),
197
                .mic(mic),
198
                .spk(spk),
199
                .kbrows(kbd_rows),
200
                .kbcolumns(kbd_columns),
201
                .r(r),
202
                .g(g),
203
                .b(b),
204
                .i(i),
205
                .csync(csync)
206
        );
207
 
208
   /////////////////////////////////////
209
   // The CPU Z80A
210
   /////////////////////////////////////        
211
   tv80n cpu (
212
                // Outputs
213
                .m1_n(),
214
                .mreq_n(mreq_n),
215
                .iorq_n(iorq_n),
216
                .rd_n(rd_n),
217
                .wr_n(wr_n),
218
                .rfsh_n(rfsh_n),
219
                .halt_n(),
220
                .busak_n(),
221
                .A(a),
222
                .dout(cpudout),
223
                // Inputs
224
                .reset_n(!reset),
225
                .clk(clkcpu),
226
                .wait_n(1'b1),
227
                .int_n(int_n),
228
                .nmi_n(1'b1),
229
                .busrq_n(1'b1),
230
                .di(cpudin)
231
   );
232
 
233
//   T80s cpu (
234
//              // Outputs
235
//              .M1_n(),
236
//              .MREQ_n(mreq_n),
237
//              .IORQ_n(iorq_n),
238
//              .RD_n(rd_n),
239
//              .WR_n(wr_n),
240
//              .RFSH_n(rfsh_n),
241
//              .HALT_n(),
242
//              .BUSAK_n(),
243
//              .A(a),
244
//              .DO(cpudout), 
245
//              // Inputs
246
//              .RESET_n(!reset),
247
//              .CLK_n(clkcpu),
248
//              .WAIT_n(1'b1),
249
//              .INT_n(int_n),
250
//              .NMI_n(1'b1),
251
//              .BUSRQ_n(1'b1),
252
//              .DI(cpudin)
253
//   );
254
 
255
   /////////////////////////////////////
256
   // Connecting all togther
257
   /////////////////////////////////////        
258
        assign sramdin = cpudout;
259
        assign uladin = cpudout;
260
        assign cpudin = (rom_cs)? romdout :
261
                        (ula_cs | vram_cs | port255_cs)? uladout :
262
                                                 (sram_cs)? sramdout :
263
                                                            8'hFF;
264
 
265
   /////////////////////////////////////
266
   // Diagnostics
267
   /////////////////////////////////////        
268
        reg [7:0] rLeds = 8'b10000000;
269
        assign leds = rLeds;
270
        reg [1:0] cntleds = 2'b00;
271
        always @(posedge int_n) begin
272
                cntleds <= cntleds + 1;
273
                if (cntleds == 2'b11) begin
274
                        rLeds <= { rLeds[0], rLeds[7:1] };
275
                end
276
        end
277
 
278
endmodule

powered by: WebSVN 2.1.0

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