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_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
20 base_clk : 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)
33 architecture rtl of de1_nes is
35 generic ( dsize : integer := 8;
38 port ( input_clk : in std_logic; --phi0 input pin.
47 addr : out std_logic_vector ( asize - 1 downto 0);
48 d_io : inout std_logic_vector ( dsize - 1 downto 0)
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
61 component address_decoder
62 generic (abus_size : integer := 16; dbus_size : integer := 8);
63 port ( phi2 : 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
73 port ( clk : 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;
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)
94 component v_address_decoder
95 generic (abus_size : integer := 14; dbus_size : integer := 8);
96 port ( clk : in std_logic;
100 vram_ad : inout std_logic_vector (7 downto 0);
101 vram_a : in std_logic_vector (13 downto 8)
106 port ( clk : 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);
116 constant data_size : integer := 8;
117 constant addr_size : integer := 16;
118 constant size14 : integer := 14;
120 signal cpu_clk : std_logic;
121 signal ppu_clk : std_logic;
122 signal vga_out_clk : std_logic;
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);
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);
138 signal nmi_n2 : std_logic;
143 vga_clk <= vga_out_clk;
145 --ppu/cpu clock generator
146 clock_inst : clock_divider port map
147 (base_clk, rst_n, cpu_clk, ppu_clk, vga_out_clk);
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);
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);
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);
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);
167 port map (cpu_clk, apu_ce_n, rst_n, r_nw, addr, d_io, rdy);
\r
170 -- dbg_cpu_clk <= cpu_clk;
\r
171 -- dbg_ppu_clk <= ppu_clk;
\r
172 -- dbg_addr <= addr;
\r
174 -- dbg_vram_ad <= vram_ad ;
\r
175 -- dbg_vram_a <= vram_a ;
\r