OSDN Git Service

io timing changed.
[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     component address_decoder
44     generic (abus_size : integer := 16; dbus_size : integer := 8);
45         port (  phi2        : in std_logic;
46                 R_nW        : in std_logic; 
47                 addr       : in std_logic_vector (abus_size - 1 downto 0);
48                 d_in       : in std_logic_vector (dbus_size - 1 downto 0);
49                 d_out      : out std_logic_vector (dbus_size - 1 downto 0)
50     );
51     end component;
52
53     ---clock frequency = 21,477,270 (21 MHz)
54     constant base_clock_time : time := 46 ns;
55
56     signal base_clk : std_logic;
57     signal cpu_clk, ppu_clk : std_logic;
58
59     constant data_size : integer := 8;
60     constant addr_size : integer := 16;
61
62     signal rdy, irq_n, nmi_n, dbe, r_nw : std_logic;
63     signal phi1, phi2 : std_logic;
64     signal addr : std_logic_vector( addr_size - 1 downto 0);
65     signal d_in : std_logic_vector( data_size - 1 downto 0);
66     signal d_out : std_logic_vector( data_size - 1 downto 0);
67
68 begin
69
70     clock_inst : clock_divider port map 
71         (base_clk, reset_n, cpu_clk, ppu_clk);
72
73     cpu_inst : mos6502 generic map (data_size, addr_size) 
74         port map (cpu_clk, rdy, reset_n, irq_n, nmi_n, dbe, r_nw, 
75                 phi1, phi2, addr, d_in, d_out);
76
77     addr_dec_inst : address_decoder generic map (addr_size, data_size) 
78         port map (phi2, r_nw, addr, d_out, d_in);
79
80     --- generate base clock.
81     clock_p: process
82     begin
83         base_clk <= '1';
84         wait for base_clock_time / 2;
85         base_clk <= '0';
86         wait for base_clock_time / 2;
87     end process;
88
89
90 end rtl;
91