OSDN Git Service

vga output working...
[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 \r
18     signal dbg_status       : out std_logic_vector(7 downto 0);\r
19     signal dbg_dec_oe_n    : out std_logic;\r
20     signal dbg_dec_val     : out std_logic_vector (7 downto 0);\r
21     signal dbg_int_dbus    : out std_logic_vector (7 downto 0);\r
22     signal dbg_status_val    : out std_logic_vector (7 downto 0);\r
23     signal dbg_stat_we_n    : out std_logic;\r
24     \r
25 ---monitor inside cpu\r
26     signal dbg_d1, dbg_d2, dbg_d_out: out std_logic_vector (7 downto 0);\r
27     signal dbg_ea_carry, dbg_carry_clr_n    : out std_logic;\r
28     signal dbg_gate_n    : out std_logic;\r
29 \r
30 \r
31         base_clk        : in std_logic;\r
32         base_clk_27mhz  : in std_logic;\r
33         rst_n           : in std_logic;\r
34         h_sync_n    : out std_logic;\r
35         v_sync_n    : out std_logic;\r
36         r           : out std_logic_vector(3 downto 0);\r
37         g           : out std_logic_vector(3 downto 0);\r
38         b           : out std_logic_vector(3 downto 0)\r
39          );\r
40 end qt_proj_test5;\r
41 \r
42 architecture rtl of qt_proj_test5 is\r
43 \r
44     component clock_divider\r
45         port (  base_clk    : in std_logic;\r
46                 reset_n     : in std_logic;\r
47                 cpu_clk     : out std_logic;\r
48                 ppu_clk     : out std_logic;\r
49                 vga_clk     : out std_logic\r
50             );\r
51     end component;\r
52 \r
53     component dummy_ppu\r
54         port (  ppu_clk     : in std_logic;\r
55                 rst_n       : in std_logic;\r
56                 pos_x       : out std_logic_vector (8 downto 0);\r
57                 pos_y       : out std_logic_vector (8 downto 0);\r
58                 nes_r       : out std_logic_vector (3 downto 0);\r
59                 nes_g       : out std_logic_vector (3 downto 0);\r
60                 nes_b       : out std_logic_vector (3 downto 0)\r
61         );\r
62     end component;\r
63 \r
64     component vga_clk_gen\r
65         PORT\r
66         (\r
67             inclk0              : IN STD_LOGIC  := '0';\r
68             c0          : OUT STD_LOGIC \r
69         );\r
70     END component;\r
71 \r
72 signal pos_x       : std_logic_vector (8 downto 0);\r
73 signal pos_y       : std_logic_vector (8 downto 0);\r
74 signal nes_r       : std_logic_vector (3 downto 0);\r
75 signal nes_g       : std_logic_vector (3 downto 0);\r
76 signal nes_b       : std_logic_vector (3 downto 0);\r
77 \r
78 component vga_ctl\r
79     port (  ppu_clk     : in std_logic;\r
80             vga_clk     : in std_logic;\r
81             rst_n       : in std_logic;\r
82             pos_x       : in std_logic_vector (8 downto 0);\r
83             pos_y       : in std_logic_vector (8 downto 0);\r
84             nes_r       : in std_logic_vector (3 downto 0);\r
85             nes_g       : in std_logic_vector (3 downto 0);\r
86             nes_b       : in std_logic_vector (3 downto 0);\r
87             h_sync_n    : out std_logic;\r
88             v_sync_n    : out std_logic;\r
89             r           : out std_logic_vector(3 downto 0);\r
90             g           : out std_logic_vector(3 downto 0);\r
91             b           : out std_logic_vector(3 downto 0)\r
92     );\r
93 end component;\r
94 \r
95 \r
96     constant data_size : integer := 8;\r
97     constant addr_size : integer := 16;\r
98     constant size14    : integer := 14;\r
99 \r
100     signal cpu_clk  : std_logic;\r
101     signal ppu_clk  : std_logic;\r
102     signal vga_clk   : std_logic;\r
103     signal vga_clk_pll : std_logic;\r
104     \r
105 \r
106     signal addr : std_logic_vector( addr_size - 1 downto 0);\r
107     signal d_io : std_logic_vector( data_size - 1 downto 0);\r
108 \r
109 component counter_register\r
110     generic (\r
111         dsize       : integer := 8;\r
112         inc         : integer := 1\r
113     );\r
114     port (  clk         : in std_logic;\r
115             rst_n       : in std_logic;\r
116             ce_n        : in std_logic;\r
117             we_n        : in std_logic;\r
118             d           : in std_logic_vector(dsize - 1 downto 0);\r
119             q           : out std_logic_vector(dsize - 1 downto 0)\r
120     );\r
121 end component;\r
122 \r
123 component prg_rom\r
124     generic (abus_size : integer := 15; dbus_size : integer := 8);\r
125     port (  clk             : in std_logic;\r
126             ce_n           : in std_logic;   --select pin active low.\r
127             addr            : in std_logic_vector (abus_size - 1 downto 0);\r
128             data            : inout std_logic_vector (dbus_size - 1 downto 0)\r
129         );\r
130 end component;\r
131 \r
132 component processor_status \r
133     generic (\r
134             dsize : integer := 8\r
135             );\r
136     port (  \r
137     signal dbg_dec_oe_n    : out std_logic;\r
138     signal dbg_dec_val     : out std_logic_vector (dsize - 1 downto 0);\r
139     signal dbg_int_dbus    : out std_logic_vector (dsize - 1 downto 0);\r
140     signal dbg_status_val    : out std_logic_vector (7 downto 0);\r
141     signal dbg_stat_we_n    : out std_logic;\r
142     \r
143             clk         : in std_logic;\r
144             res_n       : in std_logic;\r
145             dec_oe_n    : in std_logic;\r
146             bus_oe_n    : in std_logic;\r
147             set_flg_n   : in std_logic;\r
148             flg_val     : in std_logic;\r
149             load_bus_all_n      : in std_logic;\r
150             load_bus_nz_n       : in std_logic;\r
151             set_from_alu_n      : in std_logic;\r
152             alu_n       : in std_logic;\r
153             alu_v       : in std_logic;\r
154             alu_z       : in std_logic;\r
155             alu_c       : in std_logic;\r
156             stat_c      : out std_logic;\r
157             dec_val     : inout std_logic_vector (dsize - 1 downto 0);\r
158             int_dbus    : inout std_logic_vector (dsize - 1 downto 0)\r
159         );\r
160 end component;\r
161 \r
162     ---status register\r
163     signal status_reg, int_d_bus : std_logic_vector (7 downto 0);\r
164     signal stat_dec_oe_n : std_logic;\r
165     signal stat_bus_oe_n : std_logic;\r
166     signal stat_set_flg_n : std_logic;\r
167     signal stat_flg : std_logic;\r
168     signal stat_bus_all_n : std_logic;\r
169     signal stat_bus_nz_n : std_logic;\r
170     signal stat_alu_we_n : std_logic;\r
171     signal alu_n : std_logic;\r
172     signal alu_z : std_logic;\r
173     signal alu_c : std_logic;\r
174     signal alu_v : std_logic;\r
175     signal stat_c : std_logic;\r
176     signal trig_clk : std_logic;\r
177     \r
178     \r
179     \r
180     component alu_test\r
181     port (  \r
182         d1    : in std_logic_vector(7 downto 0);\r
183         d2    : in std_logic_vector(7 downto 0);\r
184         d_out    : out std_logic_vector(7 downto 0);\r
185         carry_clr_n : in std_logic;\r
186         ea_carry : out std_logic\r
187         );\r
188 end component;\r
189 \r
190     signal d1, d2, d_out : std_logic_vector (7 downto 0);\r
191     signal ea_carry, gate_n    : std_logic;\r
192         signal carry_clr_n : std_logic;\r
193 \r
194 \r
195 \r
196 begin\r
197     --ppu/cpu clock generator\r
198     clock_inst : clock_divider port map \r
199         (base_clk, rst_n, cpu_clk, ppu_clk, vga_clk);\r
200 \r
201     ppu_inst: dummy_ppu \r
202         port map (  ppu_clk     ,\r
203                 rst_n       ,\r
204                 pos_x       ,\r
205                 pos_y       ,\r
206                 nes_r       ,\r
207                 nes_g       ,\r
208                 nes_b       \r
209         );\r
210 \r
211         vga_clk_gen_inst : vga_clk_gen\r
212         PORT map\r
213         (\r
214             base_clk_27mhz, vga_clk_pll\r
215         );\r
216 \r
217     \r
218     vga_ctl_inst : vga_ctl\r
219     port map (  ppu_clk     ,\r
220             --vga_clk_pll, \r
221             --ppu_clk ,\r
222             vga_clk     ,\r
223             rst_n       ,\r
224             pos_x       ,\r
225             pos_y       ,\r
226             nes_r       ,\r
227             nes_g       ,\r
228             nes_b       ,\r
229             h_sync_n    ,\r
230             v_sync_n    ,\r
231             r           ,\r
232             g           ,\r
233             b           \r
234     );\r
235 \r
236 \r
237 --    trig_clk <= not cpu_clk;\r
238 --\r
239 --    pcl_inst : counter_register generic map (16) port map\r
240 --        (cpu_clk, rst_n, '0', '1', (others => '0'), addr(15 downto 0));\r
241 --\r
242 --    rom_inst : prg_rom generic map (12, 8) port map\r
243 --        (base_clk, '0', addr(11 downto 0), d_io);\r
244 --\r
245 --    dbg_addr <= addr;\r
246 --    dbg_d_io <= d_io;\r
247 --\r
248 --    dbg_cpu_clk <= cpu_clk;\r
249 --    dbg_ppu_clk <= ppu_clk;\r
250 --\r
251 --    dbg_d1 <= d1;\r
252 --    dbg_d2 <= d2;\r
253 --    dbg_d_out <= d_out;\r
254 --    dbg_ea_carry <= ea_carry;\r
255 --    dbg_carry_clr_n <= carry_clr_n;\r
256 --    dbg_gate_n <= gate_n;\r
257 --    \r
258 --    dummy_alu : alu_test\r
259 --    port map (  \r
260 --        d1, d2, d_out, carry_clr_n , ea_carry\r
261 --        );\r
262 --\r
263 --        gate_n <= not ea_carry;\r
264 --    dec_test_p : process (rst_n, ea_carry, trig_clk)\r
265 --    begin\r
266 --        if (rst_n = '0') then\r
267 --            d1 <= "00000000";\r
268 --            d2 <= "00000000";\r
269 --            carry_clr_n <= '0';\r
270 --            --gate_n <= '1';\r
271 ----        elsif (ea_carry = '1') then\r
272 ----            gate_n <= '0';\r
273 ----            carry_clr_n <= '0';\r
274 --        elsif (rising_edge(trig_clk)) then\r
275 --            if (addr(5 downto 0) = "000001") then\r
276 --            --addr=01\r
277 --                carry_clr_n <= '1';\r
278 --                d1 <= "00010011";\r
279 --                d2 <= "01000111";\r
280 --                --gate_n <= '1';\r
281 --            elsif (addr(5 downto 0) = "000010") then\r
282 --            --addr=02\r
283 --                carry_clr_n <= '1';\r
284 --                d1 <= "00110011";\r
285 --                d2 <= "11001111";\r
286 --                --gate_n <= '1';\r
287 --            elsif (addr(5 downto 0) = "000011") then\r
288 --            --addr=03\r
289 --                carry_clr_n <= '1';\r
290 --                d1 <= "00001010";\r
291 --                d2 <= "01011001";\r
292 --                --gate_n <= '1';\r
293 --            elsif (addr(5 downto 0) = "000100") then\r
294 --            --addr=04\r
295 --                carry_clr_n <= '1';\r
296 --                d1 <= "10001010";\r
297 --                d2 <= "10011001";\r
298 --                --gate_n <= '1';\r
299 --            else\r
300 --                carry_clr_n <= '1';\r
301 --                d1 <= "00000000";\r
302 --                d2 <= "00000000";\r
303 --                --gate_n <= '1';\r
304 --            end if;\r
305 --        end if;\r
306 --    end process;\r
307 --\r
308 --\r
309 --    --status register\r
310 --    status_register : processor_status generic map (8) \r
311 --            port map (\r
312 --    dbg_dec_oe_n,\r
313 --    dbg_dec_val,\r
314 --    dbg_int_dbus,\r
315 --    dbg_status_val,\r
316 --    dbg_stat_we_n    ,\r
317 --                    trig_clk , rst_n, \r
318 --                    stat_dec_oe_n, stat_bus_oe_n, \r
319 --                    stat_set_flg_n, stat_flg, stat_bus_all_n, stat_bus_nz_n, \r
320 --                    stat_alu_we_n, alu_n, alu_v, alu_z, alu_c, stat_c,\r
321 --                    status_reg, int_d_bus);\r
322 --\r
323 --    dbg_status <= status_reg;\r
324 --    status_test_p : process (addr)\r
325 --    begin\r
326 --        if (addr(5 downto 0) = "000010") then\r
327 --        --addr=02\r
328 --        --set status(7) = '1'\r
329 --            stat_dec_oe_n <= '1';\r
330 --            stat_bus_oe_n <= '1';\r
331 --            stat_set_flg_n <= '0';\r
332 --            stat_flg <= '1';\r
333 --            stat_bus_all_n <= '1';\r
334 --            stat_bus_nz_n <= '1'; \r
335 --            stat_alu_we_n <= '1';\r
336 --            status_reg <= "01000000";\r
337 --            int_d_bus <= "00000000";\r
338 --\r
339 --        elsif (addr(5 downto 0) = "000100") then\r
340 --        --addr=04\r
341 --        --set status(2) = '0'\r
342 --            stat_dec_oe_n <= '1';\r
343 --            stat_bus_oe_n <= '1';\r
344 --            stat_set_flg_n <= '0';\r
345 --            stat_flg <= '0';\r
346 --            stat_bus_all_n <= '1';\r
347 --            stat_bus_nz_n <= '1'; \r
348 --            stat_alu_we_n <= '1';\r
349 --            status_reg <= "00000100";\r
350 --            int_d_bus <= "00000000";\r
351 --\r
352 --        elsif (addr(5 downto 0) = "000110") then\r
353 --        --addr=06\r
354 --        --set nz from bus, n=1\r
355 --            stat_dec_oe_n <= '1';\r
356 --            stat_bus_oe_n <= '1';\r
357 --            stat_set_flg_n <= '1';\r
358 --            stat_flg <= '0';\r
359 --            stat_bus_all_n <= '1';\r
360 --            stat_bus_nz_n <= '0'; \r
361 --            stat_alu_we_n <= '1';\r
362 --            status_reg <= (others => 'Z');\r
363 --            int_d_bus <= "10000000";\r
364 --\r
365 --        elsif (addr(5 downto 0) = "001000") then\r
366 --        --addr=08\r
367 --        --set nz from bus, z=1\r
368 --            stat_dec_oe_n <= '1';\r
369 --            stat_bus_oe_n <= '1';\r
370 --            stat_set_flg_n <= '1';\r
371 --            stat_flg <= '0';\r
372 --            stat_bus_all_n <= '1';\r
373 --            stat_bus_nz_n <= '0'; \r
374 --            stat_alu_we_n <= '1';\r
375 --            status_reg <= (others => 'Z');\r
376 --            int_d_bus <= "00000000";\r
377 --\r
378 --        else\r
379 --            stat_dec_oe_n <= '0';\r
380 --            stat_bus_oe_n <= '1';\r
381 --            stat_set_flg_n <= '1';\r
382 --            stat_flg <= '1';\r
383 --            stat_bus_all_n <= '1';\r
384 --            stat_bus_nz_n <= '1'; \r
385 --            stat_alu_we_n <= '1';\r
386 --            status_reg <= (others => 'Z');\r
387 --            int_d_bus <= (others => 'Z');\r
388 --        end if;\r
389 --    end process;\r
390 \r
391 end rtl;\r
392 \r