OSDN Git Service

sprite hit solved using walk around...
[motonesfpga/motonesfpga.git] / de1_nes / testbench_motones_sim.vhd
1 library IEEE;
2 use IEEE.std_logic_1164.all;
3 use ieee.std_logic_arith.all;
4
5 entity testbench_motones_sim is
6 end testbench_motones_sim;
7
8 architecture stimulus of testbench_motones_sim is 
9     component de1_nes
10     port (
11 --debug signal
12     signal dbg_cpu_clk  : out std_logic;
13     signal dbg_ppu_clk  : out std_logic;
14     signal dbg_emu_ppu_clk  : out std_logic;
15     signal dbg_cpu_mem_clk  : out std_logic;
16     signal dbg_r_nw     : out std_logic;
17     signal dbg_addr     : out std_logic_vector( 16 - 1 downto 0);
18     signal dbg_d_io     : out std_logic_vector( 8 - 1 downto 0);
19     signal dbg_v_addr   : out std_logic_vector (13 downto 0);
20     signal dbg_v_data   : out std_logic_vector (7 downto 0);
21
22 ---monitor inside cpu
23     signal dbg_instruction  : out std_logic_vector(7 downto 0);
24     signal dbg_int_d_bus    : out std_logic_vector(7 downto 0);
25     signal dbg_exec_cycle   : out std_logic_vector (5 downto 0);
26     signal dbg_ea_carry     : out std_logic;
27     signal dbg_status       : out std_logic_vector(7 downto 0);
28     signal dbg_sp, dbg_x, dbg_y, dbg_acc       : out std_logic_vector(7 downto 0);
29     signal dbg_dec_oe_n    : out std_logic;
30     signal dbg_dec_val     : out std_logic_vector (7 downto 0);
31     signal dbg_int_dbus    : out std_logic_vector (7 downto 0);
32
33 --ppu debug pins
34     signal dbg_ppu_ce_n    : out std_logic;
35     signal dbg_ppu_ctrl, dbg_ppu_mask, dbg_ppu_status : out std_logic_vector (7 downto 0);
36     signal dbg_ppu_addr : out std_logic_vector (13 downto 0);
37     signal dbg_ppu_data, dbg_ppu_scrl_x, dbg_ppu_scrl_y : out std_logic_vector (7 downto 0);
38     signal dbg_disp_nt, dbg_disp_attr : out std_logic_vector (7 downto 0);
39     signal dbg_disp_ptn_h, dbg_disp_ptn_l : out std_logic_vector (15 downto 0);
40     signal dbg_nmi  : out std_logic;
41     signal dummy_nmi  : in std_logic;
42     
43     
44 --NES instance
45         base_clk        : in std_logic;
46         rst_n           : in std_logic;
47         joypad1     : in std_logic_vector(7 downto 0);
48         joypad2     : in std_logic_vector(7 downto 0);
49         h_sync_n    : out std_logic;
50         v_sync_n    : out std_logic;
51         r           : out std_logic_vector(3 downto 0);
52         g           : out std_logic_vector(3 downto 0);
53         b           : out std_logic_vector(3 downto 0);
54         nt_v_mirror : in std_logic
55          );
56     end component;
57
58     signal base_clk         : std_logic;
59     signal reset_input      : std_logic;
60     signal nmi_input      : std_logic;
61     signal dbg_nmi      : std_logic;
62     signal dummy_nmi  : std_logic;
63
64     signal h_sync_n    : std_logic;
65     signal v_sync_n    : std_logic;
66     signal r           : std_logic_vector(3 downto 0);
67     signal g           : std_logic_vector(3 downto 0);
68     signal b           : std_logic_vector(3 downto 0);
69     signal joypad1     : std_logic_vector(7 downto 0);
70     signal joypad2     : std_logic_vector(7 downto 0);
71     signal nt_v_mirror : std_logic;
72
73     constant powerup_time   : time := 2 us;
74     constant reset_time     : time := 890 ns;
75
76     ---clock frequency = 21,477,270 (21 MHz)
77     --constant base_clock_time : time := 46 ns;
78
79     --DE1 base clock = 50 MHz
80     constant base_clock_time : time := 20 ns;
81
82     signal dbg_cpu_clk  : std_logic;
83     signal dbg_ppu_clk  : std_logic;
84     signal dbg_emu_ppu_clk  : std_logic;
85     signal dbg_cpu_mem_clk  : std_logic;
86     signal dbg_r_nw     : std_logic;
87     signal dbg_addr : std_logic_vector( 16 - 1 downto 0);
88     signal dbg_d_io : std_logic_vector( 8 - 1 downto 0);
89     signal dbg_v_addr   : std_logic_vector (13 downto 0);
90     signal dbg_v_data   : std_logic_vector (7 downto 0);
91     signal dbg_instruction  : std_logic_vector(7 downto 0);
92     signal dbg_int_d_bus  : std_logic_vector(7 downto 0);
93     signal dbg_exec_cycle   : std_logic_vector (5 downto 0);
94     signal dbg_ea_carry     : std_logic;
95     signal dbg_status       : std_logic_vector(7 downto 0);
96     signal dbg_pcl, dbg_pch, dbg_sp, dbg_x, dbg_y, dbg_acc       : std_logic_vector(7 downto 0);
97     signal dbg_dec_oe_n    : std_logic;
98     signal dbg_dec_val     : std_logic_vector (7 downto 0);
99     signal dbg_int_dbus    : std_logic_vector (7 downto 0);
100     signal dbg_stat_we_n    : std_logic;
101     signal dbg_idl_h, dbg_idl_l, dbg_dbb_r, dbg_dbb_w    : std_logic_vector (7 downto 0);
102     signal dbg_ppu_ce_n    : std_logic;
103     signal dbg_ppu_ctrl, dbg_ppu_mask, dbg_ppu_status : std_logic_vector (7 downto 0);
104     signal dbg_ppu_addr : std_logic_vector (13 downto 0);
105     signal dbg_ppu_data, dbg_ppu_scrl_x, dbg_ppu_scrl_y : std_logic_vector (7 downto 0);
106     signal dbg_disp_nt, dbg_disp_attr : std_logic_vector (7 downto 0);
107     signal dbg_disp_ptn_h, dbg_disp_ptn_l : std_logic_vector (15 downto 0);
108     signal dbg_ppu_addr_we_n    : std_logic;
109     signal dbg_ppu_clk_cnt          : std_logic_vector(1 downto 0);
110
111 begin
112
113     sim_board : de1_nes port map (
114 dbg_cpu_clk,
115 dbg_ppu_clk,
116 dbg_emu_ppu_clk,
117 dbg_cpu_mem_clk,
118 dbg_r_nw,
119 dbg_addr,
120 dbg_d_io,
121 dbg_v_addr   ,
122 dbg_v_data   ,
123 dbg_instruction,
124 dbg_int_d_bus,
125 dbg_exec_cycle   ,
126 dbg_ea_carry     ,
127 dbg_status       ,
128 dbg_sp, dbg_x, dbg_y, dbg_acc       ,
129 dbg_dec_oe_n    ,
130 dbg_dec_val     ,
131 dbg_int_dbus    ,
132
133 dbg_ppu_ce_n    ,
134 dbg_ppu_ctrl, dbg_ppu_mask, dbg_ppu_status ,
135 dbg_ppu_addr ,
136 dbg_ppu_data, dbg_ppu_scrl_x, dbg_ppu_scrl_y,
137 dbg_disp_nt, dbg_disp_attr ,
138 dbg_disp_ptn_h, dbg_disp_ptn_l ,
139 dbg_nmi,
140 dummy_nmi,
141     
142     base_clk, reset_input, joypad1, joypad2, 
143             h_sync_n, v_sync_n, r, g, b, nt_v_mirror);
144
145     --- input reset.
146     reset_p: process
147     begin
148         reset_input <= '1';
149         wait for powerup_time;
150
151         reset_input <= '0';
152         wait for reset_time;
153
154         reset_input <= '1';
155         wait;
156     end process;
157
158     --- generate base clock.
159     clock_p: process
160     begin
161         base_clk <= '1';
162         wait for base_clock_time / 2;
163         base_clk <= '0';
164         wait for base_clock_time / 2;
165     end process;
166
167     --- initiate nmi.
168     nmi_p: process
169     constant nmi_wait     : time := 100657965 ps;
170     --constant nmi_wait     : time := 10 ms;
171     constant vblank_time     : time := 60 us;
172     variable wait_cnt : integer := 0;
173     begin
174
175         if (wait_cnt = 0) then
176             nmi_input <= '1';
177             wait for powerup_time + reset_time + nmi_wait;
178             wait_cnt := wait_cnt + 1;
179         else
180             nmi_input <= '0';
181             wait for vblank_time ;
182             nmi_input <= '1';
183             wait for vblank_time / 4;
184         end if;
185     end process;
186     ---for test nmi...
187     dummy_nmi <= nmi_input;
188     --dummy_nmi <= 'Z';
189
190     --set chr rom mirror setting.
191     nt_v_mirror <= '1';
192 end stimulus;
193