OSDN Git Service

cpu board integrated.
[motonesfpga/motonesfpga.git] / simulation / motones_sim.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 GHDL Simulation Environment Virtual Cuicuit Board
7 --   All of the components are assembled and instanciated on this board.
8 --  
9
10 entity motones_sim is 
11     port (  reset_n     : in std_logic
12          );
13 end motones_sim;
14
15 architecture rtl of motones_sim is
16     component mos6502
17         generic (   dsize : integer := 8;
18                     asize : integer :=16
19                 );
20         port (  input_clk   : in std_logic; --phi0 input pin.
21                 rdy         : in std_logic;
22                 rst_n       : in std_logic;
23                 irq_n       : in std_logic;
24                 nmi_n       : in std_logic;
25                 dbe         : in std_logic;
26                 r_nw        : out std_logic;
27                 phi1        : out std_logic;
28                 phi2        : out std_logic;
29                 addr        : out std_logic_vector ( asize - 1 downto 0);
30                 d_in        : in std_logic_vector ( dsize - 1 downto 0);
31                 d_out       : out std_logic_vector ( dsize - 1 downto 0)
32         );
33     end component;
34
35     component clock_divider
36         port (  base_clk    : in std_logic;
37                 reset_n     : in std_logic;
38                 cpu_clk     : out std_logic;
39                 ppu_clk     : out std_logic
40             );
41     end component;
42
43     ---clock frequency = 21,477,270 (21 MHz)
44     constant base_clock_time : time := 46 ns;
45
46     signal base_clk : std_logic;
47     signal cpu_clk, ppu_clk : std_logic;
48
49     constant data_size : integer := 8;
50     constant addr_size : integer := 16;
51
52     signal rdy, irq_n, nmi_n, dbe, r_nw : std_logic;
53     signal phi1, phi2 : std_logic;
54     signal addr : std_logic_vector( addr_size - 1 downto 0);
55     signal d_in : std_logic_vector( data_size - 1 downto 0);
56     signal d_out : std_logic_vector( data_size - 1 downto 0);
57
58 begin
59
60     clock_inst : clock_divider port map 
61         (base_clk, reset_n, cpu_clk, ppu_clk);
62
63     cpu_inst : mos6502 generic map (data_size, addr_size) 
64         port map (cpu_clk, rdy, reset_n, irq_n, nmi_n, dbe, r_nw, 
65                 phi1, phi2, addr, d_in, d_out);
66
67     --- generate base clock.
68     clock_p: process
69     begin
70         base_clk <= '1';
71         wait for base_clock_time / 2;
72         base_clk <= '0';
73         wait for base_clock_time / 2;
74     end process;
75
76
77 end rtl;
78