2 use ieee.std_logic_1164.all;
3 use ieee.std_logic_unsigned.conv_integer;
6 -- MOTO NES FPGA On GHDL Simulation Environment Virtual Cuicuit Board
7 -- All of the components are assembled and instanciated on this board.
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 signal dbg_exec_cycle : out std_logic_vector (5 downto 0);
\r
26 base_clk : in std_logic;
28 joypad1 : in std_logic_vector(7 downto 0);
29 joypad2 : in std_logic_vector(7 downto 0);
30 vga_clk : out std_logic;
31 h_sync_n : out std_logic;
32 v_sync_n : out std_logic;
33 r : out std_logic_vector(3 downto 0);
34 g : out std_logic_vector(3 downto 0);
35 b : out std_logic_vector(3 downto 0)
39 architecture rtl of de1_nes is
41 generic ( dsize : integer := 8;
45 signal dbg_instruction : out std_logic_vector(7 downto 0);
\r
46 signal dbg_int_d_bus : out std_logic_vector(7 downto 0);
\r
47 signal dbg_exec_cycle : out std_logic_vector (5 downto 0);
\r
49 input_clk : in std_logic; --phi0 input pin.
58 addr : out std_logic_vector ( asize - 1 downto 0);
59 d_io : inout std_logic_vector ( dsize - 1 downto 0)
63 component clock_divider
64 port ( base_clk : in std_logic;
65 reset_n : in std_logic;
66 cpu_clk : out std_logic;
67 ppu_clk : out std_logic;
68 mem_clk : out std_logic;
\r
69 vga_clk : out std_logic
73 component address_decoder
74 generic (abus_size : integer := 16; dbus_size : integer := 8);
75 port ( phi2 : in std_logic;
\r
76 mem_clk : in std_logic;
\r
77 R_nW : in std_logic;
\r
78 addr : in std_logic_vector (abus_size - 1 downto 0);
\r
79 d_io : in std_logic_vector (dbus_size - 1 downto 0);
\r
80 rom_ce_n : out std_logic;
\r
81 ram_ce_n : out std_logic;
\r
82 ppu_ce_n : out std_logic;
\r
83 apu_ce_n : out std_logic
\r
88 generic (abus_size : integer := 16; dbus_size : integer := 8);
\r
89 port ( ce_n, oe_n, we_n : in std_logic; --select pin active low.
\r
90 addr : in std_logic_vector (abus_size - 1 downto 0);
\r
91 d_io : inout std_logic_vector (dbus_size - 1 downto 0)
\r
96 generic (abus_size : integer := 15; dbus_size : integer := 8);
\r
99 ce_n : in std_logic; --active low.
\r
100 addr : in std_logic_vector (abus_size - 1 downto 0);
\r
101 data : out std_logic_vector (dbus_size - 1 downto 0)
\r
106 port ( clk : in std_logic;
108 rst_n : in std_logic;
110 cpu_addr : in std_logic_vector (2 downto 0);
111 cpu_d : inout std_logic_vector (7 downto 0);
112 vblank_n : out std_logic;
113 rd_n : out std_logic;
114 wr_n : out std_logic;
116 vram_ad : inout std_logic_vector (7 downto 0);
117 vram_a : out std_logic_vector (13 downto 8);
118 vga_clk : in std_logic;
119 h_sync_n : out std_logic;
120 v_sync_n : out std_logic;
121 r : out std_logic_vector(3 downto 0);
122 g : out std_logic_vector(3 downto 0);
123 b : out std_logic_vector(3 downto 0)
127 component v_address_decoder
128 generic (abus_size : integer := 14; dbus_size : integer := 8);
129 port ( clk : in std_logic;
133 vram_ad : inout std_logic_vector (7 downto 0);
134 vram_a : in std_logic_vector (13 downto 8)
139 port ( clk : in std_logic;
141 rst_n : in std_logic;
142 r_nw : inout std_logic;
143 cpu_addr : inout std_logic_vector (15 downto 0);
144 cpu_d : inout std_logic_vector (7 downto 0);
149 constant data_size : integer := 8;
150 constant addr_size : integer := 16;
151 constant size14 : integer := 14;
153 constant ram_2k : integer := 11; --2k = 11 bit width.
\r
154 constant rom_32k : integer := 15; --32k = 15 bit width.
\r
155 constant rom_4k : integer := 12; --4k = 12 bit width. (for test use)
\r
158 signal cpu_clk : std_logic;
159 signal ppu_clk : std_logic;
160 signal mem_clk : std_logic;
\r
161 signal vga_out_clk : std_logic;
163 signal rdy, irq_n, nmi_n, dbe, r_nw : std_logic;
164 signal phi1, phi2 : std_logic;
165 signal addr : std_logic_vector( addr_size - 1 downto 0);
166 signal d_io : std_logic_vector( data_size - 1 downto 0);
168 signal rom_ce_n : std_logic;
\r
169 signal ram_ce_n : std_logic;
\r
170 signal ram_oe_n : std_logic;
\r
171 signal ppu_ce_n : std_logic;
172 signal apu_ce_n : std_logic;
173 signal rd_n : std_logic;
174 signal wr_n : std_logic;
175 signal ale : std_logic;
176 signal vram_ad : std_logic_vector (7 downto 0);
177 signal vram_a : std_logic_vector (13 downto 8);
182 vga_clk <= vga_out_clk;
184 --ppu/cpu clock generator
185 clock_inst : clock_divider port map
186 (base_clk, rst_n, cpu_clk, ppu_clk, mem_clk, vga_out_clk);
188 --mos 6502 cpu instance
189 cpu_inst : mos6502 generic map (data_size, addr_size)
194 cpu_clk, '1', --rdy, -----for testing...
\r
195 rst_n, irq_n, nmi_n, dbe, r_nw,
196 phi1, phi2, addr, d_io);
198 addr_dec_inst : address_decoder generic map (addr_size, data_size)
199 port map (phi2, mem_clk, r_nw, addr, d_io, rom_ce_n, ram_ce_n, ppu_ce_n, apu_ce_n);
201 --main ROM/RAM instance
\r
202 -- prg_rom_inst : prg_rom generic map (rom_32k, data_size)
\r
203 -- port map (mem_clk, rom_ce_n, addr(rom_32k - 1 downto 0), d_io);
\r
204 prg_rom_inst : prg_rom generic map (rom_4k, data_size)
\r
205 port map (mem_clk, rom_ce_n, addr(rom_4k - 1 downto 0), d_io);
\r
207 ram_oe_n <= not R_nW;
\r
208 -- prg_ram_inst : ram generic map (ram_2k, data_size)
\r
209 -- port map (ram_ce_n, ram_oe_n, R_nW, addr(ram_2k - 1 downto 0), d_io);
\r
211 -- --nes ppu instance
213 -- port map (ppu_clk, ppu_ce_n, rst_n, r_nw, addr(2 downto 0), d_io,
214 -- nmi_n, rd_n, wr_n, ale, vram_ad, vram_a,
215 -- vga_out_clk, h_sync_n, v_sync_n, r, g, b);
217 -- ppu_addr_decoder : v_address_decoder generic map (size14, data_size)
218 -- port map (ppu_clk, rd_n, wr_n, ale, vram_ad, vram_a);
221 -- port map (cpu_clk, apu_ce_n, rst_n, r_nw, addr, d_io, rdy);
\r
223 dbg_cpu_clk <= cpu_clk;
\r
224 dbg_ppu_clk <= ppu_clk;
\r
225 dbg_mem_clk <= mem_clk;
\r
228 -- dbg_vram_ad <= vram_ad ;
\r
229 -- dbg_vram_a <= vram_a ;
\r