2 use ieee.std_logic_1164.all;
3 use ieee.std_logic_unsigned.conv_integer;
6 -- MOTO NES FPGA On GHDL Simulation Environment Virtual Cuicuit Board
7 -- All of the components are assembled and instanciated on this board.
11 port ( reset_n : in std_logic
15 architecture rtl of motones_sim is
17 generic ( dsize : integer := 8;
20 port ( input_clk : in std_logic; --phi0 input pin.
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)
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
43 component address_decoder
44 generic (abus_size : integer := 16; dbus_size : integer := 8);
45 port ( phi2 : 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)
53 ---clock frequency = 21,477,270 (21 MHz)
54 constant base_clock_time : time := 46 ns;
56 signal base_clk : std_logic;
57 signal cpu_clk, ppu_clk : std_logic;
59 constant data_size : integer := 8;
60 constant addr_size : integer := 16;
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);
70 clock_inst : clock_divider port map
71 (base_clk, reset_n, cpu_clk, ppu_clk);
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);
77 addr_dec_inst : address_decoder generic map (addr_size, data_size)
78 port map (phi2, r_nw, addr, d_out, d_in);
80 --- generate base clock.
84 wait for base_clock_time / 2;
86 wait for base_clock_time / 2;