2 use ieee.std_logic_1164.all;
\r
3 use ieee.std_logic_unsigned.conv_integer;
\r
6 -- MOTO NES FPGA On GHDL Simulation Environment Virtual Cuicuit Board
\r
7 -- All of the components are assembled and instanciated on this board.
\r
10 entity qt_proj_test5 is
\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
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
24 base_clk : in std_logic;
\r
25 rst_n : in std_logic;
\r
26 joypad1 : in std_logic_vector(7 downto 0);
\r
27 joypad2 : in std_logic_vector(7 downto 0);
\r
28 vga_clk : out std_logic;
\r
29 h_sync_n : out std_logic;
\r
30 v_sync_n : out std_logic;
\r
31 r : out std_logic_vector(3 downto 0);
\r
32 g : out std_logic_vector(3 downto 0);
\r
33 b : out std_logic_vector(3 downto 0)
\r
37 architecture rtl of qt_proj_test5 is
\r
39 generic ( dsize : integer := 8;
\r
40 asize : integer :=16
\r
43 signal dbg_instruction : out std_logic_vector(7 downto 0);
\r
44 signal dbg_int_d_bus : out std_logic_vector(7 downto 0);
\r
46 input_clk : in std_logic; --phi0 input pin.
\r
48 rst_n : in std_logic;
\r
49 irq_n : in std_logic;
\r
50 nmi_n : in std_logic;
\r
52 r_nw : out std_logic;
\r
53 phi1 : out std_logic;
\r
54 phi2 : out std_logic;
\r
55 addr : out std_logic_vector ( asize - 1 downto 0);
\r
56 d_io : inout std_logic_vector ( dsize - 1 downto 0)
\r
60 component clock_divider
\r
61 port ( base_clk : in std_logic;
\r
62 reset_n : in std_logic;
\r
63 cpu_clk : out std_logic;
\r
64 ppu_clk : out std_logic;
\r
65 vga_clk : out std_logic
\r
69 component address_decoder
\r
70 generic (abus_size : integer := 16; dbus_size : integer := 8);
\r
71 port ( phi2 : in std_logic;
\r
72 R_nW : in std_logic;
\r
73 addr : in std_logic_vector (abus_size - 1 downto 0);
\r
74 d_io : inout std_logic_vector (dbus_size - 1 downto 0);
\r
75 ppu_ce_n : out std_logic;
\r
76 apu_ce_n : out std_logic
\r
81 port ( clk : in std_logic;
\r
82 ce_n : in std_logic;
\r
83 rst_n : in std_logic;
\r
84 r_nw : in std_logic;
\r
85 cpu_addr : in std_logic_vector (2 downto 0);
\r
86 cpu_d : inout std_logic_vector (7 downto 0);
\r
87 vblank_n : out std_logic;
\r
88 rd_n : out std_logic;
\r
89 wr_n : out std_logic;
\r
90 ale : out std_logic;
\r
91 vram_ad : inout std_logic_vector (7 downto 0);
\r
92 vram_a : out std_logic_vector (13 downto 8);
\r
93 vga_clk : in std_logic;
\r
94 h_sync_n : out std_logic;
\r
95 v_sync_n : out std_logic;
\r
96 r : out std_logic_vector(3 downto 0);
\r
97 g : out std_logic_vector(3 downto 0);
\r
98 b : out std_logic_vector(3 downto 0)
\r
102 component v_address_decoder
\r
103 generic (abus_size : integer := 14; dbus_size : integer := 8);
\r
104 port ( clk : in std_logic;
\r
105 rd_n : in std_logic;
\r
106 wr_n : in std_logic;
\r
107 ale : in std_logic;
\r
108 vram_ad : inout std_logic_vector (7 downto 0);
\r
109 vram_a : in std_logic_vector (13 downto 8)
\r
114 port ( clk : in std_logic;
\r
115 ce_n : in std_logic;
\r
116 rst_n : in std_logic;
\r
117 r_nw : inout std_logic;
\r
118 cpu_addr : inout std_logic_vector (15 downto 0);
\r
119 cpu_d : inout std_logic_vector (7 downto 0);
\r
120 rdy : out std_logic
\r
124 constant data_size : integer := 8;
\r
125 constant addr_size : integer := 16;
\r
126 constant size14 : integer := 14;
\r
128 signal cpu_clk : std_logic;
\r
129 signal ppu_clk : std_logic;
\r
130 signal vga_out_clk : std_logic;
\r
132 signal rdy, irq_n, nmi_n, dbe, r_nw : std_logic;
\r
133 signal phi1, phi2 : std_logic;
\r
134 signal addr : std_logic_vector( addr_size - 1 downto 0);
\r
135 signal d_io : std_logic_vector( data_size - 1 downto 0);
\r
137 signal ppu_ce_n : std_logic;
\r
138 signal apu_ce_n : std_logic;
\r
139 signal rd_n : std_logic;
\r
140 signal wr_n : std_logic;
\r
141 signal ale : std_logic;
\r
142 signal vram_ad : std_logic_vector (7 downto 0);
\r
143 signal vram_a : std_logic_vector (13 downto 8);
\r
146 signal nmi_n2 : std_logic;
\r
148 component counter_register
\r
150 dsize : integer := 8;
\r
153 port ( clk : in std_logic;
\r
154 rst_n : in std_logic;
\r
155 ce_n : in std_logic;
\r
156 we_n : in std_logic;
\r
157 d : in std_logic_vector(dsize - 1 downto 0);
\r
158 q : out std_logic_vector(dsize - 1 downto 0)
\r
163 generic (abus_size : integer := 15; dbus_size : integer := 8);
\r
164 port ( ce_n, oe_n, we_n : in std_logic; --select pin active low.
\r
165 addr : in std_logic_vector (abus_size - 1 downto 0);
\r
166 data : inout std_logic_vector (dbus_size - 1 downto 0)
\r
171 component single_port_rom
\r
174 DATA_WIDTH : natural := 8;
\r
175 ADDR_WIDTH : natural := 8
\r
179 clk : in std_logic;
\r
181 addr : in std_logic_vector (ADDR_WIDTH - 1 downto 0);
\r
182 q : out std_logic_vector((DATA_WIDTH -1) downto 0)
\r
189 vga_clk <= vga_out_clk;
\r
191 pcl_inst : counter_register generic map (14) port map
\r
192 (cpu_clk, rst_n, '0', '1', (others => '0'), addr(13 downto 0));
\r
194 -- rom_inst : prg_rom generic map (15, 8) port map
\r
195 -- ('0', '0', '1', addr(14 downto 0), d_io);
\r
197 addr (15 downto 14) <= (others => '0');
\r
199 rom_inst : single_port_rom generic map (8, 15) port map
\r
200 (base_clk, '0', addr(14 downto 0), d_io);
\r
205 --ppu/cpu clock generator
\r
206 clock_inst : clock_divider port map
\r
207 (base_clk, rst_n, cpu_clk, ppu_clk, vga_out_clk);
\r
209 -- --mos 6502 cpu instance
\r
210 -- cpu_inst : mos6502 generic map (data_size, addr_size)
\r
212 -- dbg_instruction,
\r
214 -- cpu_clk, rdy, rst_n, irq_n, nmi_n, dbe, r_nw,
\r
215 -- phi1, phi2, addr, d_io);
\r
217 -- addr_dec_inst : address_decoder generic map (addr_size, data_size)
\r
218 -- port map (phi2, r_nw, addr, d_io, ppu_ce_n, apu_ce_n);
\r
220 ---- --nes ppu instance
\r
221 ---- ppu_inst : ppu
\r
222 ---- port map (ppu_clk, ppu_ce_n, rst_n, r_nw, addr(2 downto 0), d_io,
\r
223 ---- nmi_n, rd_n, wr_n, ale, vram_ad, vram_a,
\r
224 ---- vga_out_clk, h_sync_n, v_sync_n, r, g, b);
\r
226 -- ppu_addr_decoder : v_address_decoder generic map (size14, data_size)
\r
227 -- port map (ppu_clk, rd_n, wr_n, ale, vram_ad, vram_a);
\r
230 -- port map (cpu_clk, apu_ce_n, rst_n, r_nw, addr, d_io, rdy);
\r
232 dbg_cpu_clk <= cpu_clk;
\r
233 dbg_ppu_clk <= ppu_clk;
\r
234 -- dbg_addr <= addr;
\r
235 -- dbg_d_io <= d_io;
\r
236 -- dbg_vram_ad <= vram_ad ;
\r
237 -- dbg_vram_a <= vram_a ;
\r