OSDN Git Service

quartus ii test env
[motonesfpga/motonesfpga.git] / tools / qt_proj_test5 / qt_proj_test5.vhd
1 library ieee;\r
2 use ieee.std_logic_1164.all;\r
3 use ieee.std_logic_unsigned.conv_integer;\r
4 \r
5 --  \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
8 --  \r
9 \r
10 entity qt_proj_test5 is \r
11     port (\r
12 \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
19 \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 \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
34          );\r
35 end qt_proj_test5;\r
36 \r
37 architecture rtl of qt_proj_test5 is\r
38     component mos6502\r
39         generic (   dsize : integer := 8;\r
40                     asize : integer :=16\r
41                 );\r
42         port (  \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
45 \r
46                 input_clk   : in std_logic; --phi0 input pin.\r
47                 rdy         : in std_logic;\r
48                 rst_n       : in std_logic;\r
49                 irq_n       : in std_logic;\r
50                 nmi_n       : in std_logic;\r
51                 dbe         : 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
57         );\r
58     end component;\r
59 \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
66             );\r
67     end component;\r
68 \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
77     );\r
78     end component;\r
79 \r
80     component ppu\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
99     );\r
100     end component;\r
101 \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
110             );\r
111     end component;\r
112 \r
113     component apu\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
121         );\r
122     end component;\r
123 \r
124     constant data_size : integer := 8;\r
125     constant addr_size : integer := 16;\r
126     constant size14    : integer := 14;\r
127 \r
128     signal cpu_clk  : std_logic;\r
129     signal ppu_clk  : std_logic;\r
130     signal vga_out_clk   : std_logic;\r
131 \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
136 \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
144 \r
145     --test...\r
146     signal nmi_n2 : std_logic;\r
147 \r
148 component counter_register\r
149     generic (\r
150         dsize       : integer := 8;\r
151         inc         : integer := 1\r
152     );\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
159     );\r
160 end component;\r
161 \r
162 component prg_rom\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
167         );\r
168 end component;\r
169 \r
170 \r
171 component single_port_rom\r
172     generic \r
173     (\r
174         DATA_WIDTH : natural := 8;\r
175         ADDR_WIDTH : natural := 8\r
176     );\r
177     port \r
178     (\r
179         clk             : in std_logic;\r
180         ce              : 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
183     );\r
184 end component;\r
185 \r
186 begin\r
187 \r
188     irq_n <= '0';\r
189     vga_clk <= vga_out_clk;\r
190 \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
193 \r
194 --    rom_inst : prg_rom generic map (15, 8) port map\r
195 --        ('0', '0', '1', addr(14 downto 0), d_io);\r
196 \r
197     addr (15 downto 14) <= (others => '0');\r
198 \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
201 \r
202     dbg_addr <= addr;\r
203     dbg_d_io <= d_io;\r
204 \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
208 \r
209 --    --mos 6502 cpu instance\r
210 --    cpu_inst : mos6502 generic map (data_size, addr_size) \r
211 --        port map (\r
212 --    dbg_instruction,\r
213 --    dbg_int_d_bus,\r
214 --                cpu_clk, rdy, rst_n, irq_n, nmi_n, dbe, r_nw, \r
215 --                phi1, phi2, addr, d_io);\r
216 --\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
219 --\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
225 --\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
228 --\r
229 --    apu_inst : apu\r
230 --        port map (cpu_clk, apu_ce_n, rst_n, r_nw, addr, d_io, rdy);\r
231 \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
238 \r
239 \r
240 end rtl;\r
241 \r