OSDN Git Service

still test environment set 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 \r
13     signal dbg_cpu_clk  : out std_logic;\r
14     signal dbg_ppu_clk  : out std_logic;\r
15     signal dbg_addr : out std_logic_vector( 16 - 1 downto 0);\r
16     signal dbg_d_io : out std_logic_vector( 8 - 1 downto 0);\r
17     signal dbg_vram_ad  : out std_logic_vector (7 downto 0);\r
18     signal dbg_vram_a   : out std_logic_vector (13 downto 8);\r
19 \r
20         base_clk        : in std_logic;
21         rst_n           : in std_logic;
22         joypad1     : in std_logic_vector(7 downto 0);
23         joypad2     : in std_logic_vector(7 downto 0);
24         vga_clk     : out std_logic;
25         h_sync_n    : out std_logic;
26         v_sync_n    : out std_logic;
27         r           : out std_logic_vector(3 downto 0);
28         g           : out std_logic_vector(3 downto 0);
29         b           : out std_logic_vector(3 downto 0)
30          );
31 end de1_nes;
32
33 architecture rtl of de1_nes is
34     component mos6502
35         generic (   dsize : integer := 8;
36                     asize : integer :=16
37                 );
38         port (  input_clk   : in std_logic; --phi0 input pin.
39                 rdy         : in std_logic;
40                 rst_n       : in std_logic;
41                 irq_n       : in std_logic;
42                 nmi_n       : in std_logic;
43                 dbe         : in std_logic;
44                 r_nw        : out std_logic;
45                 phi1        : out std_logic;
46                 phi2        : out std_logic;
47                 addr        : out std_logic_vector ( asize - 1 downto 0);
48                 d_io        : inout std_logic_vector ( dsize - 1 downto 0)
49         );
50     end component;
51
52     component clock_divider
53         port (  base_clk    : in std_logic;
54                 reset_n     : in std_logic;
55                 cpu_clk     : out std_logic;
56                 ppu_clk     : out std_logic;
57                 vga_clk     : out std_logic
58             );
59     end component;
60
61     component address_decoder
62     generic (abus_size : integer := 16; dbus_size : integer := 8);
63         port (  phi2        : in std_logic;
64                 R_nW        : in std_logic; 
65                 addr       : in std_logic_vector (abus_size - 1 downto 0);
66                 d_io       : inout std_logic_vector (dbus_size - 1 downto 0);
67                 ppu_ce_n    : out std_logic;
68                 apu_ce_n    : out std_logic
69     );
70     end component;
71
72     component ppu
73     port (  clk         : in std_logic;
74             ce_n        : in std_logic;
75             rst_n       : in std_logic;
76             r_nw        : in std_logic;
77             cpu_addr    : in std_logic_vector (2 downto 0);
78             cpu_d       : inout std_logic_vector (7 downto 0);
79             vblank_n    : out std_logic;
80             rd_n        : out std_logic;
81             wr_n        : out std_logic;
82             ale         : out std_logic;
83             vram_ad     : inout std_logic_vector (7 downto 0);
84             vram_a      : out std_logic_vector (13 downto 8);
85             vga_clk     : in std_logic;
86             h_sync_n    : out std_logic;
87             v_sync_n    : out std_logic;
88             r           : out std_logic_vector(3 downto 0);
89             g           : out std_logic_vector(3 downto 0);
90             b           : out std_logic_vector(3 downto 0)
91     );
92     end component;
93
94     component v_address_decoder
95     generic (abus_size : integer := 14; dbus_size : integer := 8);
96         port (  clk         : in std_logic; 
97                 rd_n        : in std_logic;
98                 wr_n        : in std_logic;
99                 ale         : in std_logic;
100                 vram_ad     : inout std_logic_vector (7 downto 0);
101                 vram_a      : in std_logic_vector (13 downto 8)
102             );
103     end component;
104
105     component apu
106         port (  clk         : in std_logic;
107                 ce_n        : in std_logic;
108                 rst_n       : in std_logic;
109                 r_nw        : inout std_logic;
110                 cpu_addr    : inout std_logic_vector (15 downto 0);
111                 cpu_d       : inout std_logic_vector (7 downto 0);
112                 rdy         : out std_logic
113         );
114     end component;
115
116     constant data_size : integer := 8;
117     constant addr_size : integer := 16;
118     constant size14    : integer := 14;
119
120     signal cpu_clk  : std_logic;
121     signal ppu_clk  : std_logic;
122     signal vga_out_clk   : std_logic;
123
124     signal rdy, irq_n, nmi_n, dbe, r_nw : std_logic;
125     signal phi1, phi2 : std_logic;
126     signal addr : std_logic_vector( addr_size - 1 downto 0);
127     signal d_io : std_logic_vector( data_size - 1 downto 0);
128
129     signal ppu_ce_n : std_logic;
130     signal apu_ce_n : std_logic;
131     signal rd_n     : std_logic;
132     signal wr_n     : std_logic;
133     signal ale      : std_logic;
134     signal vram_ad  : std_logic_vector (7 downto 0);
135     signal vram_a   : std_logic_vector (13 downto 8);
136 \r
137     --test...
138     signal nmi_n2 : std_logic;
139
140 begin
141
142     irq_n <= '0';
143     vga_clk <= vga_out_clk;
144
145     --ppu/cpu clock generator
146     clock_inst : clock_divider port map 
147         (base_clk, rst_n, cpu_clk, ppu_clk, vga_out_clk);
148
149     --mos 6502 cpu instance
150     cpu_inst : mos6502 generic map (data_size, addr_size) 
151         port map (cpu_clk, rdy, rst_n, irq_n, nmi_n, dbe, r_nw, 
152                 phi1, phi2, addr, d_io);
153
154     addr_dec_inst : address_decoder generic map (addr_size, data_size) 
155         port map (phi2, r_nw, addr, d_io, ppu_ce_n, apu_ce_n);
156
157     --nes ppu instance
158     ppu_inst : ppu 
159         port map (ppu_clk, ppu_ce_n, rst_n, r_nw, addr(2 downto 0), d_io, 
160                 nmi_n, rd_n, wr_n, ale, vram_ad, vram_a,
161                 vga_out_clk, h_sync_n, v_sync_n, r, g, b);
162
163     ppu_addr_decoder : v_address_decoder generic map (size14, data_size) 
164         port map (ppu_clk, rd_n, wr_n, ale, vram_ad, vram_a);
165
166     apu_inst : apu
167         port map (cpu_clk, apu_ce_n, rst_n, r_nw, addr, d_io, rdy);\r
168 \r
169 \r
170 --    dbg_cpu_clk  <= cpu_clk;\r
171 --    dbg_ppu_clk  <= ppu_clk;\r
172 --    dbg_addr <= addr;\r
173     dbg_d_io <= d_io;\r
174 --    dbg_vram_ad  <= vram_ad ;\r
175 --    dbg_vram_a   <= vram_a  ;\r
176
177
178 end rtl;
179