2 use ieee.std_logic_1164.all;
3 use ieee.std_logic_unsigned.conv_integer;
6 -- MOTO NES FPGA On DE0-CV Environment Virtual Cuicuit Board
7 -- All of the components are assembled and instanciated on this board.
12 --logic analyzer reference clock
13 signal dbg_base_clk: out std_logic;
\r
16 pi_base_clk : in std_logic;
17 pi_rst_n : in std_logic;
18 pi_joypad1 : in std_logic_vector(7 downto 0);
19 pi_joypad2 : in std_logic_vector(7 downto 0);
20 po_h_sync_n : out std_logic;
21 po_v_sync_n : out std_logic;
22 po_r : out std_logic_vector(3 downto 0);
23 po_g : out std_logic_vector(3 downto 0);
24 po_b : out std_logic_vector(3 downto 0);
25 pi_nt_v_mirror : in std_logic
\r
29 architecture rtl of de0_cv_nes is
32 pi_rst_n : in std_logic;
\r
33 pi_base_clk : in std_logic;
\r
34 pi_cpu_en : in std_logic_vector (7 downto 0);
\r
35 pi_rdy : in std_logic;
\r
36 pi_irq_n : in std_logic;
\r
37 pi_nmi_n : in std_logic;
\r
38 po_r_nw : out std_logic;
\r
39 po_addr : out std_logic_vector ( 15 downto 0);
\r
40 pio_d_io : inout std_logic_vector ( 7 downto 0)
\r
44 component clock_selector
\r
46 pi_rst_n : in std_logic;
\r
47 pi_base_clk : in std_logic;
\r
48 po_cpu_en : out std_logic_vector (7 downto 0);
\r
49 po_rnd_en : out std_logic_vector (3 downto 0)
\r
53 component chip_selector
\r
55 pi_rst_n : in std_logic;
\r
56 pi_base_clk : in std_logic;
\r
57 pi_addr : in std_logic_vector (15 downto 0);
\r
58 po_rom_ce_n : out std_logic;
\r
59 po_ram_ce_n : out std_logic;
\r
60 po_ppu_ce_n : out std_logic;
\r
61 po_apu_ce_n : out std_logic
\r
66 pi_rst_n : in std_logic;
\r
67 pi_base_clk : in std_logic;
68 pi_cpu_en : in std_logic_vector (7 downto 0);
\r
69 pi_ce_n : in std_logic;
70 pi_r_nw : in std_logic;
71 pi_cpu_addr : in std_logic_vector (2 downto 0);
72 pio_cpu_d : inout std_logic_vector (7 downto 0);
74 po_v_ce_n : out std_logic;
\r
75 po_v_rd_n : out std_logic;
\r
76 po_v_wr_n : out std_logic;
\r
77 po_v_addr : out std_logic_vector (13 downto 0);
\r
78 pio_v_data : inout std_logic_vector (7 downto 0);
\r
80 po_plt_ce_n : out std_logic;
\r
81 po_plt_rd_n : out std_logic;
\r
82 po_plt_wr_n : out std_logic;
\r
83 po_plt_addr : out std_logic_vector (4 downto 0);
\r
84 pio_plt_data : inout std_logic_vector (7 downto 0);
\r
86 po_spr_ce_n : out std_logic;
\r
87 po_spr_rd_n : out std_logic;
\r
88 po_spr_wr_n : out std_logic;
\r
89 po_spr_addr : out std_logic_vector (7 downto 0);
\r
90 po_spr_data : out std_logic_vector (7 downto 0);
\r
92 po_ppu_ctrl : out std_logic_vector (7 downto 0);
\r
93 po_ppu_mask : out std_logic_vector (7 downto 0);
\r
94 pi_ppu_status : in std_logic_vector (7 downto 0);
\r
95 po_ppu_scroll_x : out std_logic_vector (7 downto 0);
\r
96 po_ppu_scroll_y : out std_logic_vector (7 downto 0)
\r
101 generic (abus_size : integer := 16; dbus_size : integer := 8);
\r
103 pi_base_clk : in std_logic;
\r
104 pi_ce_n : in std_logic;
\r
105 pi_oe_n : in std_logic;
\r
106 pi_we_n : in std_logic;
\r
107 pi_addr : in std_logic_vector (abus_size - 1 downto 0);
\r
108 pio_d_io : inout std_logic_vector (dbus_size - 1 downto 0)
\r
112 component palette_ram
\r
114 pi_base_clk : in std_logic;
\r
115 pi_ce_n : in std_logic;
\r
116 pi_oe_n : in std_logic;
\r
117 pi_we_n : in std_logic;
\r
118 pi_addr : in std_logic_vector (4 downto 0);
\r
119 pio_d_io : inout std_logic_vector (7 downto 0)
\r
125 pi_base_clk : in std_logic;
\r
126 pi_ce_n : in std_logic;
\r
127 pi_addr : in std_logic_vector (12 downto 0);
\r
128 po_data : out std_logic_vector (7 downto 0)
\r
132 component v_chip_selector
\r
134 pi_rst_n : in std_logic;
\r
135 pi_base_clk : in std_logic;
\r
136 pi_v_ce_n : in std_logic;
\r
137 pi_v_addr : in std_logic_vector (13 downto 0);
\r
138 pi_nt_v_mirror : in std_logic;
\r
139 po_pt_ce_n : out std_logic;
\r
140 po_nt0_ce_n : out std_logic;
\r
141 po_nt1_ce_n : out std_logic
\r
147 pi_rst_n : in std_logic;
\r
148 pi_base_clk : in std_logic;
\r
149 pi_rnd_en : in std_logic_vector (3 downto 0);
\r
152 pi_ppu_ctrl : in std_logic_vector (7 downto 0);
\r
153 pi_ppu_mask : in std_logic_vector (7 downto 0);
\r
154 po_ppu_status : out std_logic_vector (7 downto 0);
\r
155 pi_ppu_scroll_x : in std_logic_vector (7 downto 0);
\r
156 pi_ppu_scroll_y : in std_logic_vector (7 downto 0);
\r
159 po_v_ce_n : out std_logic;
\r
160 po_v_rd_n : out std_logic;
\r
161 po_v_wr_n : out std_logic;
\r
162 po_v_addr : out std_logic_vector (13 downto 0);
\r
163 pi_v_data : in std_logic_vector (7 downto 0);
\r
166 po_plt_ce_n : out std_logic;
\r
167 po_plt_rd_n : out std_logic;
\r
168 po_plt_wr_n : out std_logic;
\r
169 po_plt_addr : out std_logic_vector (4 downto 0);
\r
170 pi_plt_data : in std_logic_vector (7 downto 0);
\r
173 po_spr_ce_n : out std_logic;
\r
174 po_spr_rd_n : out std_logic;
\r
175 po_spr_wr_n : out std_logic;
\r
176 po_spr_addr : out std_logic_vector (7 downto 0);
\r
177 pi_spr_data : in std_logic_vector (7 downto 0);
\r
180 po_h_sync_n : out std_logic;
\r
181 po_v_sync_n : out std_logic;
\r
182 po_r : out std_logic_vector(3 downto 0);
\r
183 po_g : out std_logic_vector(3 downto 0);
\r
184 po_b : out std_logic_vector(3 downto 0)
\r
188 constant ram_2k : integer := 11; --2k = 11 bit width.
\r
189 constant rom_32k : integer := 15; --32k = 15 bit width.
\r
190 constant vram_1k : integer := 10; --1k = 10 bit width.
\r
192 signal wr_cpu_en : std_logic_vector (7 downto 0);
\r
193 signal wr_rnd_en : std_logic_vector (3 downto 0);
\r
195 signal wr_rdy : std_logic;
\r
196 signal wr_irq_n : std_logic;
\r
197 signal wr_nmi_n : std_logic;
\r
198 signal wr_r_nw : std_logic;
\r
200 signal wr_addr : std_logic_vector ( 15 downto 0);
\r
201 signal wr_d_io : std_logic_vector ( 7 downto 0);
\r
203 signal wr_rom_ce_n : std_logic;
\r
204 signal wr_ram_ce_n : std_logic;
\r
205 signal wr_ppu_ce_n : std_logic;
\r
206 signal wr_apu_ce_n : std_logic;
\r
208 signal wr_v_ce_n : std_logic;
\r
209 signal wr_v_rd_n : std_logic;
\r
210 signal wr_v_wr_n : std_logic;
\r
211 signal wr_v_addr : std_logic_vector (13 downto 0);
\r
212 signal wr_v_data : std_logic_vector (7 downto 0);
\r
214 signal wr_plt_ce_n : std_logic;
\r
215 signal wr_plt_rd_n : std_logic;
\r
216 signal wr_plt_wr_n : std_logic;
\r
217 signal wr_plt_addr : std_logic_vector (4 downto 0);
\r
218 signal wr_plt_data : std_logic_vector (7 downto 0);
\r
220 signal wr_spr_ce_n : std_logic;
\r
221 signal wr_spr_rd_n : std_logic;
\r
222 signal wr_spr_wr_n : std_logic;
\r
223 signal wr_spr_addr : std_logic_vector (7 downto 0);
\r
224 signal wr_spr_data : std_logic_vector (7 downto 0);
\r
226 signal wr_pt_ce_n : std_logic;
\r
227 signal wr_nt0_ce_n : std_logic;
\r
228 signal wr_nt1_ce_n : std_logic;
\r
230 signal wr_ppu_ctrl : std_logic_vector (7 downto 0);
\r
231 signal wr_ppu_mask : std_logic_vector (7 downto 0);
\r
232 signal wr_ppu_status : std_logic_vector (7 downto 0);
\r
233 signal wr_ppu_scroll_x : std_logic_vector (7 downto 0);
\r
234 signal wr_ppu_scroll_y : std_logic_vector (7 downto 0);
\r
238 dbg_base_clk <= pi_base_clk;
\r
240 --synchronized clock generator instance
\r
241 clock_selector_inst : clock_selector port map (
\r
248 --mos 6502 cpu instance
\r
249 cpu_inst : mos6502 port map (
\r
261 --chip select (address decode)
\r
262 cs_inst : chip_selector port map (
\r
273 ppu_inst : ppu port map (
\r
279 wr_addr(2 downto 0),
\r
308 --vram chip select (address decode)
\r
309 vcs_inst : v_chip_selector port map (
\r
320 --name table/attr table #0
\r
321 vram_nt0_inst : ram generic map
\r
322 (vram_1k, 8) port map (
\r
327 wr_v_addr(vram_1k - 1 downto 0),
\r
331 --name table/attr table #1
\r
332 vram_nt1_inst : ram generic map
\r
333 (vram_1k, 8) port map (
\r
338 wr_v_addr(vram_1k - 1 downto 0),
\r
343 vram_plt_inst : palette_ram port map (
\r
353 chr_rom_inst : chr_rom port map (
\r
356 wr_v_addr(12 downto 0),
\r
361 spr_ram_inst : ram generic map
\r
371 --vga render instance
\r
372 render_inst : render port map (
\r