OSDN Git Service

ppu register set working...
[motonesfpga/motonesfpga.git] / de0_cv_nes / de0_cv_nes.vhd
1 library ieee;
2 use ieee.std_logic_1164.all;
3 use ieee.std_logic_unsigned.conv_integer;
4
5 --  
6 --   MOTO NES FPGA On DE0-CV Environment Virtual Cuicuit Board
7 --   All of the components are assembled and instanciated on this board.
8 --  
9
10 entity de0_cv_nes is 
11     port (\r
12 --logic analyzer reference clock
13     signal dbg_base_clk: out std_logic;\r
14     
15 --NES instance
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
26          );
27 end de0_cv_nes;
28
29 architecture rtl of de0_cv_nes is
30     component mos6502
31         port (
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
41         );
42     end component;
43
44     component clock_selector\r
45         port (\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_ppu_en       : out std_logic_vector (3 downto 0)\r
50             );\r
51     end component;\r
52 \r
53     component chip_selector\r
54         port (\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
62             );\r
63     end component;\r
64 \r
65     component ppu port (
66                 pi_rst_n       : in std_logic;\r
67                 pi_base_clk    : in std_logic;
68                 pi_ppu_en      : in std_logic_vector (3 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);
73
74                 po_rd_n        : out std_logic;
75                 po_wr_n        : out std_logic;
76                 po_ale_n       : out std_logic;
77                 po_vram_addr   : out std_logic_vector (13 downto 0);
78                 pio_vram_data  : inout std_logic_vector (7 downto 0)
79     );
80     end component;
81
82     component v_chip_selector\r
83         port (\r
84                 pi_rst_n        : in std_logic;\r
85                 pi_base_clk    : in std_logic;\r
86                 pi_v_addr      : in std_logic_vector (13 downto 0);\r
87                 pi_nt_v_mirror : in std_logic;\r
88                 po_pt_ce_n     : out std_logic;\r
89                 po_nt0_ce_n    : out std_logic;\r
90                 po_nt1_ce_n    : out std_logic\r
91             );\r
92     end component;\r
93 \r
94 signal wr_cpu_en       : std_logic_vector (7 downto 0);\r
95 signal wr_ppu_en       : std_logic_vector (3 downto 0);\r
96 \r
97 signal wr_rdy       : std_logic;\r
98 signal wr_irq_n     : std_logic;\r
99 signal wr_nmi_n     : std_logic;\r
100 signal wr_r_nw      : std_logic;\r
101 \r
102 signal wr_addr      : std_logic_vector ( 15 downto 0);\r
103 signal wr_d_io      : std_logic_vector ( 7 downto 0);\r
104 \r
105 signal wr_rom_ce_n     : std_logic;\r
106 signal wr_ram_ce_n     : std_logic;\r
107 signal wr_ppu_ce_n     : std_logic;\r
108 signal wr_apu_ce_n     : std_logic;\r
109 \r
110 signal wr_v_rd_n        : std_logic;\r
111 signal wr_v_wr_n        : std_logic;\r
112 signal wr_v_ale_n       : std_logic;\r
113 signal wr_vram_addr     : std_logic_vector (13 downto 0);\r
114 signal wr_vram_data     : std_logic_vector (7 downto 0);\r
115 \r
116 --signal wr_pt_ce_n     : std_logic;\r
117 --signal wr_nt0_ce_n    : std_logic;\r
118 --signal wr_nt1_ce_n    : std_logic;\r
119 \r
120 begin
121 \r
122     dbg_base_clk <= pi_base_clk;\r
123 \r
124     --synchronized clock generator instance\r
125     clock_selector_inst : clock_selector port map (\r
126             pi_rst_n,\r
127             pi_base_clk,\r
128             wr_cpu_en,\r
129             wr_ppu_en\r
130             );\r
131 \r
132     --mos 6502 cpu instance\r
133     cpu_inst : mos6502 port map (\r
134             pi_rst_n, \r
135             pi_base_clk, \r
136             wr_cpu_en, \r
137             wr_rdy,\r
138             wr_irq_n, \r
139             wr_nmi_n, \r
140             wr_r_nw, \r
141             wr_addr, \r
142             wr_d_io\r
143             );\r
144 \r
145     --chip select (address decode)\r
146     cs_inst : chip_selector port map (\r
147             pi_rst_n,\r
148             pi_base_clk, \r
149             wr_addr,\r
150             wr_rom_ce_n,\r
151             wr_ram_ce_n,\r
152             wr_ppu_ce_n,\r
153             wr_apu_ce_n\r
154             );\r
155 \r
156     --chip select (address decode)\r
157     ppu_inst : ppu port map (\r
158             pi_rst_n, \r
159             pi_base_clk, \r
160             wr_ppu_en,\r
161             wr_ppu_ce_n,\r
162             wr_r_nw, \r
163             wr_addr(2 downto 0), \r
164             wr_d_io,\r
165 \r
166             wr_v_rd_n,\r
167             wr_v_wr_n,\r
168             wr_v_ale_n,\r
169             wr_vram_addr,\r
170             wr_vram_data\r
171             );\r
172 \r
173     wr_rdy <= '1';\r
174     wr_irq_n <= '1';\r
175     wr_nmi_n <= '1';\r
176 \r
177     po_h_sync_n    <= '0';\r
178     po_v_sync_n    <= '0';\r
179     po_r           <= (others => '0');\r
180     po_g           <= (others => '0');\r
181     po_b           <= (others => '0');\r
182 end rtl;