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

Subversion Repositories ag_6502

[/] [ag_6502/] [trunk/] [agat7/] [ag_main.v] - Blame information for rev 2

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

Line No. Rev Author Line
1 2 olegodints
`timescale 1ns / 1ps
2
//////////////////////////////////////////////////////////////////////////////////
3
// Company:   BMSTU
4
// Engineer:  Oleg Odintsov
5
// 
6
// Create Date:    15:09:47 01/19/2012 
7
// Design Name: 
8
// Module Name:    ag_main
9
// Project Name:    Agat Hardware Project
10
// Target Devices: 
11
// Tool versions: 
12
// Description: 
13
//
14
// Dependencies: 
15
//
16
// Revision: 
17
// Revision 0.01 - File Created
18
// Additional Comments: 
19
//
20
//////////////////////////////////////////////////////////////////////////////////
21
 
22
module ROM2kx8(input[10:0] adr, input cs, output[7:0] DO);
23
        reg[7:0] mem[0:2047];
24
        assign DO = cs?mem[adr]:8'bZ;
25
        initial begin
26
                `include "monitor7.v"
27
        end
28
endmodule
29
 
30
module ag_main(
31
    input clk50,
32
         input[3:0] btns,
33
         output[7:0] leds,
34
         output[3:0] controls,
35
         output[4:0] vga_bus,
36
         input[1:0] ps2_bus_in
37
    );
38
 
39
//      assign leds = 0;
40
//      assign controls = 0;
41
//      assign vga_bus = 0;
42
 
43
        wire clk1, clk10;
44
        clk_div#5 cd5(clk50, clk10);
45
   clk_div#10 cd10(clk10, clk1);
46
 
47
 
48
        wire clk_vram;
49
        wire[13:0] AB2;
50
        wire[15:0] DI2;
51
 
52
        wire [15:0] AB;  // address bus
53
        wire [7:0] DI;           // data in, read bus
54
        wire [7:0] DO;           // data out, write bus
55
        wire read;
56
        wire rom_cs, ram_cs;
57
        wire phi_1, phi_2;
58
 
59
        RAM32Kx8x16 base_ram(phi_2, AB[14:0], ram_cs, read, DI, DO,
60
                                                        clk_vram, AB2, 1, DI2);
61
        ROM2kx8 rom1(AB[10:0], rom_cs, DI);
62
 
63
        wire [3:0] AB_HH = AB[15:12];
64
        wire [3:0] AB_HL = AB[11:8];
65
        wire [3:0] AB_LH = AB[7:4];
66
        wire [3:0] AB_LL = AB[3:0];
67
        wire [7:0] AB_H = AB[15:8];
68
        wire [7:0] AB_L = AB[7:0];
69
        wire AB_CXXX = (AB_HH == 4'hC);
70
        wire AB_FXXX = (AB_HH == 4'hF);
71
 
72
        wire AB_C0XX = AB_CXXX && !AB_HL;
73
 
74
        wire AB_C00X = AB_C0XX && (AB_LH == 4'h0);
75
        wire AB_C01X = AB_C0XX && (AB_LH == 4'h1);
76
        wire AB_C02X = AB_C0XX && (AB_LH == 4'h2);
77
        wire AB_C03X = AB_C0XX && (AB_LH == 4'h3);
78
        wire AB_C7XX = AB_CXXX && (AB_HL == 4'h7);
79
 
80
        assign rom_cs = AB_FXXX && AB[11]; // F800-FFFF
81
        assign ram_cs = !AB[15];
82
 
83
 
84
        reg reset_auto = 1;
85
        wire reset;
86
        wire WE = ~read;                // write enable
87
        supply0 IRQ;            // interrupt request
88
        supply0 NMI;            // non-maskable interrupt request
89
        supply1 RDY;            // Ready signal. Pauses CPU when RDY=0 
90
        supply1 SO;                     // Set Overflow, not used.
91
        wire SYNC;
92
 
93
 
94
 
95
        reg[7:0] vmode = 0;
96
        wire[7:0] key_reg;
97
        wire key_rus;
98
        reg key_clear = 0;
99
        wire key_rst, key_pause;
100
 
101
        reg beep_reg = 0, tape_out_reg = 0;
102
 
103
 
104
        assign reset  = btns[0];
105
        assign leds = AB[11:4];
106
        assign controls = {1'b0, beep_reg ^ tape_out_reg, tape_out_reg, beep_reg};
107
 
108
        ag_video video(clk50, vmode, clk_vram, AB2, DI2, vga_bus);
109
 
110
 
111
        wire[1:0] ps2_bus;
112
 
113
        signal_filter sf1(clk1, ps2_bus_in[0], ps2_bus[0]);
114
        signal_filter sf2(clk1, ps2_bus_in[1], ps2_bus[1]);
115
 
116
 
117
        ag_keyb keyb(phi_2, ps2_bus, key_reg, key_clear, key_rus, key_rst, key_pause);
118
 
119
        assign DI = (AB_C00X && !WE)?key_reg:8'bZ;
120
 
121
        always @(posedge phi_2) begin
122
                key_clear <= AB_C01X;
123
                if (AB_C02X) tape_out_reg <= ~tape_out_reg;
124
                if (AB_C03X) beep_reg <= ~beep_reg;
125
                if (AB_C7XX) vmode <= AB_L;
126
        end
127
        always @(posedge vga_bus[0]) begin
128
                reset_auto <= 0;
129
        end
130
 
131
        ag6502_ext_clock clk(clk50, clk1, phi_1, phi_2);
132
        ag6502 cpu(clk1, phi_1, phi_2, AB, read, DI, DO,
133
                                        RDY & ~key_pause, ~(reset | reset_auto | key_rst), ~IRQ, ~NMI, SO, SYNC);
134
 
135
endmodule

powered by: WebSVN 2.1.0

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