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
25 base_clk : 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)
38 architecture rtl of de1_nes is
40 generic ( dsize : integer := 8;
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
47 input_clk : in std_logic; --phi0 input pin.
56 addr : out std_logic_vector ( asize - 1 downto 0);
57 d_io : inout std_logic_vector ( dsize - 1 downto 0)
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
71 component address_decoder
72 generic (abus_size : integer := 16; dbus_size : integer := 8);
75 mem_clk : in std_logic;
\r
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
85 port ( clk : 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;
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)
106 component v_address_decoder
107 generic (abus_size : integer := 14; dbus_size : integer := 8);
108 port ( clk : in std_logic;
112 vram_ad : inout std_logic_vector (7 downto 0);
113 vram_a : in std_logic_vector (13 downto 8)
118 port ( clk : 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);
128 constant data_size : integer := 8;
129 constant addr_size : integer := 16;
130 constant size14 : integer := 14;
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;
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);
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);
153 vga_clk <= vga_out_clk;
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);
159 --mos 6502 cpu instance
160 cpu_inst : mos6502 generic map (data_size, addr_size)
164 cpu_clk, rdy, rst_n, irq_n, nmi_n, dbe, r_nw,
165 phi1, phi2, addr, d_io);
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);
170 -- --nes ppu instance
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);
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);
180 port map (cpu_clk, apu_ce_n, rst_n, r_nw, addr, d_io, rdy);
\r
182 dbg_cpu_clk <= cpu_clk;
\r
183 dbg_ppu_clk <= ppu_clk;
\r
184 dbg_mem_clk <= mem_clk;
\r
186 -- dbg_d_io <= d_io;
\r
187 -- dbg_vram_ad <= vram_ad ;
\r
188 -- dbg_vram_a <= vram_a ;
\r