OSDN Git Service

clean up
[motonesfpga/motonesfpga.git] / de1_nes / de1_nes.vhd
1 library ieee;
2 use ieee.std_logic_1164.all;
3 use ieee.std_logic_unsigned.conv_integer;
4
5 --  
6 --   MOTO NES FPGA On GHDL Simulation Environment Virtual Cuicuit Board
7 --   All of the components are assembled and instanciated on this board.
8 --  
9
10 entity de1_nes is 
11     port (\r
12 --debug signal\r
13     signal dbg_cpu_clk  : out std_logic;\r
14     signal dbg_ppu_clk  : out std_logic;\r
15     signal dbg_mem_clk  : out std_logic;\r
16     signal dbg_addr : out std_logic_vector( 16 - 1 downto 0);\r
17     signal dbg_d_io : out std_logic_vector( 8 - 1 downto 0);\r
18     signal dbg_vram_ad  : out std_logic_vector (7 downto 0);\r
19     signal dbg_vram_a   : out std_logic_vector (13 downto 8);\r
20 ---monitor inside cpu\r
21     signal dbg_instruction  : out std_logic_vector(7 downto 0);\r
22     signal dbg_int_d_bus  : out std_logic_vector(7 downto 0);\r
23 \r
24 --NES instance\r
25         base_clk        : in std_logic;
26         rst_n           : in std_logic;
27         joypad1     : in std_logic_vector(7 downto 0);
28         joypad2     : in std_logic_vector(7 downto 0);
29         vga_clk     : out std_logic;
30         h_sync_n    : out std_logic;
31         v_sync_n    : out std_logic;
32         r           : out std_logic_vector(3 downto 0);
33         g           : out std_logic_vector(3 downto 0);
34         b           : out std_logic_vector(3 downto 0)
35          );
36 end de1_nes;
37
38 architecture rtl of de1_nes is
39     component mos6502
40         generic (   dsize : integer := 8;
41                     asize : integer :=16
42                 );
43         port (  \r
44     signal dbg_instruction  : out std_logic_vector(7 downto 0);\r
45     signal dbg_int_d_bus  : out std_logic_vector(7 downto 0);\r
46 \r
47                 input_clk   : in std_logic; --phi0 input pin.
48                 rdy         : in std_logic;
49                 rst_n       : in std_logic;
50                 irq_n       : in std_logic;
51                 nmi_n       : in std_logic;
52                 dbe         : in std_logic;
53                 r_nw        : out std_logic;
54                 phi1        : out std_logic;
55                 phi2        : out std_logic;
56                 addr        : out std_logic_vector ( asize - 1 downto 0);
57                 d_io        : inout std_logic_vector ( dsize - 1 downto 0)
58         );
59     end component;
60
61     component clock_divider
62         port (  base_clk    : in std_logic;
63                 reset_n     : in std_logic;
64                 cpu_clk     : out std_logic;
65                 ppu_clk     : out std_logic;
66                 mem_clk     : out std_logic;\r
67                 vga_clk     : out std_logic
68             );
69     end component;
70
71     component address_decoder
72     generic (abus_size : integer := 16; dbus_size : integer := 8);
73         port (\r
74                 phi2        : in std_logic;
75                 mem_clk     : in std_logic;\r
76                 R_nW        : in std_logic; 
77                 addr       : in std_logic_vector (abus_size - 1 downto 0);
78                 d_io       : inout std_logic_vector (dbus_size - 1 downto 0);
79                 ppu_ce_n    : out std_logic;
80                 apu_ce_n    : out std_logic
81     );
82     end component;
83
84     component ppu
85     port (  clk         : in std_logic;
86             ce_n        : in std_logic;
87             rst_n       : in std_logic;
88             r_nw        : in std_logic;
89             cpu_addr    : in std_logic_vector (2 downto 0);
90             cpu_d       : inout std_logic_vector (7 downto 0);
91             vblank_n    : out std_logic;
92             rd_n        : out std_logic;
93             wr_n        : out std_logic;
94             ale         : out std_logic;
95             vram_ad     : inout std_logic_vector (7 downto 0);
96             vram_a      : out std_logic_vector (13 downto 8);
97             vga_clk     : in std_logic;
98             h_sync_n    : out std_logic;
99             v_sync_n    : out std_logic;
100             r           : out std_logic_vector(3 downto 0);
101             g           : out std_logic_vector(3 downto 0);
102             b           : out std_logic_vector(3 downto 0)
103     );
104     end component;
105
106     component v_address_decoder
107     generic (abus_size : integer := 14; dbus_size : integer := 8);
108         port (  clk         : in std_logic; 
109                 rd_n        : in std_logic;
110                 wr_n        : in std_logic;
111                 ale         : in std_logic;
112                 vram_ad     : inout std_logic_vector (7 downto 0);
113                 vram_a      : in std_logic_vector (13 downto 8)
114             );
115     end component;
116
117     component apu
118         port (  clk         : in std_logic;
119                 ce_n        : in std_logic;
120                 rst_n       : in std_logic;
121                 r_nw        : inout std_logic;
122                 cpu_addr    : inout std_logic_vector (15 downto 0);
123                 cpu_d       : inout std_logic_vector (7 downto 0);
124                 rdy         : out std_logic
125         );
126     end component;
127
128     constant data_size : integer := 8;
129     constant addr_size : integer := 16;
130     constant size14    : integer := 14;
131
132     signal cpu_clk  : std_logic;
133     signal ppu_clk  : std_logic;
134     signal mem_clk  : std_logic;\r
135     signal vga_out_clk   : std_logic;
136
137     signal rdy, irq_n, nmi_n, dbe, r_nw : std_logic;
138     signal phi1, phi2 : std_logic;
139     signal addr : std_logic_vector( addr_size - 1 downto 0);
140     signal d_io : std_logic_vector( data_size - 1 downto 0);
141
142     signal ppu_ce_n : std_logic;
143     signal apu_ce_n : std_logic;
144     signal rd_n     : std_logic;
145     signal wr_n     : std_logic;
146     signal ale      : std_logic;
147     signal vram_ad  : std_logic_vector (7 downto 0);
148     signal vram_a   : std_logic_vector (13 downto 8);
149 \r
150 begin
151
152     irq_n <= '0';
153     vga_clk <= vga_out_clk;
154
155     --ppu/cpu clock generator
156     clock_inst : clock_divider port map 
157         (base_clk, rst_n, cpu_clk, ppu_clk, mem_clk, vga_out_clk);
158
159     --mos 6502 cpu instance
160     cpu_inst : mos6502 generic map (data_size, addr_size) 
161         port map (\r
162     dbg_instruction,\r
163     dbg_int_d_bus,\r
164                 cpu_clk, rdy, rst_n, irq_n, nmi_n, dbe, r_nw, 
165                 phi1, phi2, addr, d_io);
166
167     addr_dec_inst : address_decoder generic map (addr_size, data_size) 
168         port map (phi2, mem_clk, r_nw, addr, d_io, ppu_ce_n, apu_ce_n);
169 \r
170 --    --nes ppu instance
171 --    ppu_inst : ppu 
172 --        port map (ppu_clk, ppu_ce_n, rst_n, r_nw, addr(2 downto 0), d_io, 
173 --                nmi_n, rd_n, wr_n, ale, vram_ad, vram_a,
174 --                vga_out_clk, h_sync_n, v_sync_n, r, g, b);
175
176 --    ppu_addr_decoder : v_address_decoder generic map (size14, data_size) 
177 --        port map (ppu_clk, rd_n, wr_n, ale, vram_ad, vram_a);
178
179     apu_inst : apu
180         port map (cpu_clk, apu_ce_n, rst_n, r_nw, addr, d_io, rdy);\r
181 \r
182     dbg_cpu_clk <= cpu_clk;\r
183     dbg_ppu_clk <= ppu_clk;\r
184     dbg_mem_clk <= mem_clk;\r
185     dbg_addr <= addr;\r
186 --    dbg_d_io <= d_io;\r
187 --    dbg_vram_ad  <= vram_ad ;\r
188 --    dbg_vram_a   <= vram_a  ;\r
189
190
191 end rtl;
192