OSDN Git Service

ppu address reg set timing updated
[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_mem_clk  : out std_logic;
15     signal dbg_addr : out std_logic_vector( 16 - 1 downto 0);
16     signal dbg_d_io : inout std_logic_vector( 8 - 1 downto 0);
17     signal dbg_vram_ad  : out std_logic_vector (7 downto 0);
18     signal dbg_vram_a   : out std_logic_vector (13 downto 8);
19
20 ---monitor inside cpu
21     signal dbg_instruction  : out std_logic_vector(7 downto 0);
22     signal dbg_int_d_bus  : out std_logic_vector(7 downto 0);
23     signal dbg_exec_cycle   : out std_logic_vector (5 downto 0);
24 --    signal dbg_index_bus    : out std_logic_vector(7 downto 0);
25 --    signal dbg_acc_bus      : out std_logic_vector(7 downto 0);
26     signal dbg_status       : out std_logic_vector(7 downto 0);
27     signal dbg_pcl, dbg_pch, dbg_sp, dbg_x, dbg_y, dbg_acc       : out std_logic_vector(7 downto 0);
28     signal dbg_dec_oe_n    : out std_logic;
29     signal dbg_dec_val     : out std_logic_vector (7 downto 0);
30     signal dbg_int_dbus    : out std_logic_vector (7 downto 0);
31 --    signal dbg_status_val    : out std_logic_vector (7 downto 0);
32     signal dbg_stat_we_n    : out std_logic;
33     signal dbg_idl_h, dbg_idl_l, dbg_dbb_r, dbg_dbb_w    : out std_logic_vector (7 downto 0);
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_ppu_addr_we_n    : out std_logic;
41     signal dbg_ppu_clk_cnt          : out std_logic_vector(1 downto 0);
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             vga_clk     : out std_logic;
50             h_sync_n    : out std_logic;
51             v_sync_n    : out std_logic;
52             r           : out std_logic_vector(3 downto 0);
53             g           : out std_logic_vector(3 downto 0);
54             b           : out std_logic_vector(3 downto 0)
55              );
56     end component;
57
58     component vga_device
59     port (  vga_clk     : in std_logic;
60             rst_n       : in std_logic;
61             h_sync_n    : in std_logic;
62             v_sync_n    : in std_logic;
63             r           : in std_logic_vector(3 downto 0);
64             g           : in std_logic_vector(3 downto 0);
65             b           : in std_logic_vector(3 downto 0)
66             );
67     end component;
68
69     signal base_clk         : std_logic;
70     signal vga_clk         : std_logic;
71     signal reset_input      : std_logic;
72
73     signal h_sync_n    : std_logic;
74     signal v_sync_n    : std_logic;
75     signal r           : std_logic_vector(3 downto 0);
76     signal g           : std_logic_vector(3 downto 0);
77     signal b           : std_logic_vector(3 downto 0);
78     signal joypad1     : std_logic_vector(7 downto 0);
79     signal joypad2     : std_logic_vector(7 downto 0);
80
81     constant powerup_time   : time := 2 us;
82     constant reset_time     : time := 890 ns;
83
84     ---clock frequency = 21,477,270 (21 MHz)
85     --constant base_clock_time : time := 46 ns;
86
87     --DE1 base clock = 50 MHz
88     constant base_clock_time : time := 20 ns;
89
90     signal dbg_cpu_clk  : std_logic;
91     signal dbg_ppu_clk  : std_logic;
92     signal dbg_mem_clk  : std_logic;
93     signal dbg_addr : std_logic_vector( 16 - 1 downto 0);
94     signal dbg_d_io : std_logic_vector( 8 - 1 downto 0);
95     signal dbg_vram_ad  : std_logic_vector (7 downto 0);
96     signal dbg_vram_a   : std_logic_vector (13 downto 8);
97     signal dbg_instruction  : std_logic_vector(7 downto 0);
98     signal dbg_int_d_bus  : std_logic_vector(7 downto 0);
99     signal dbg_exec_cycle   : std_logic_vector (5 downto 0);
100 --    signal dbg_index_bus    : std_logic_vector(7 downto 0);
101 --    signal dbg_acc_bus      : std_logic_vector(7 downto 0);
102     signal dbg_status       : std_logic_vector(7 downto 0);
103     signal dbg_pcl, dbg_pch, dbg_sp, dbg_x, dbg_y, dbg_acc       : std_logic_vector(7 downto 0);
104     signal dbg_dec_oe_n    : std_logic;
105     signal dbg_dec_val     : std_logic_vector (7 downto 0);
106     signal dbg_int_dbus    : std_logic_vector (7 downto 0);
107 --    signal dbg_status_val    : std_logic_vector (7 downto 0);
108     signal dbg_stat_we_n    : std_logic;
109     signal dbg_idl_h, dbg_idl_l, dbg_dbb_r, dbg_dbb_w    : std_logic_vector (7 downto 0);
110     signal dbg_ppu_ce_n    : std_logic;
111     signal dbg_ppu_ctrl, dbg_ppu_mask, dbg_ppu_status : std_logic_vector (7 downto 0);
112     signal dbg_ppu_addr : std_logic_vector (13 downto 0);
113     signal dbg_ppu_data, dbg_ppu_scrl_x, dbg_ppu_scrl_y : std_logic_vector (7 downto 0);
114     signal dbg_disp_nt, dbg_disp_attr : std_logic_vector (7 downto 0);
115     signal dbg_disp_ptn_h, dbg_disp_ptn_l : std_logic_vector (15 downto 0);
116     signal dbg_ppu_addr_we_n    : std_logic;
117     signal dbg_ppu_clk_cnt          : std_logic_vector(1 downto 0);
118
119 begin
120
121     sim_board : de1_nes port map (
122 dbg_cpu_clk,
123 dbg_ppu_clk,
124 dbg_mem_clk,
125 dbg_addr,
126 dbg_d_io,
127 dbg_vram_ad,
128 dbg_vram_a,
129 dbg_instruction,
130 dbg_int_d_bus,
131 dbg_exec_cycle   ,
132 --dbg_index_bus    ,
133 --dbg_acc_bus      ,
134 dbg_status       ,
135 dbg_pcl, dbg_pch, dbg_sp, dbg_x, dbg_y, dbg_acc       ,
136 dbg_dec_oe_n    ,
137 dbg_dec_val     ,
138 dbg_int_dbus    ,
139 --dbg_status_val    ,
140 dbg_stat_we_n    ,
141 dbg_idl_h, dbg_idl_l, dbg_dbb_r, dbg_dbb_w,
142
143 dbg_ppu_ce_n    ,
144 dbg_ppu_ctrl, dbg_ppu_mask, dbg_ppu_status ,
145 dbg_ppu_addr ,
146 dbg_ppu_data, dbg_ppu_scrl_x, dbg_ppu_scrl_y,
147 --dbg_disp_nt, dbg_disp_attr ,
148 --dbg_disp_ptn_h, dbg_disp_ptn_l ,
149 dbg_ppu_addr_we_n,
150 dbg_ppu_clk_cnt          ,
151
152     
153     base_clk, reset_input, joypad1, joypad2, 
154             vga_clk, h_sync_n, v_sync_n, r, g, b);
155
156 --    dummy_vga_disp : vga_device 
157 --        port map (vga_clk, reset_input, h_sync_n, v_sync_n, r, g, b);
158
159     --- input reset.
160     reset_p: process
161     begin
162         reset_input <= '1';
163         wait for powerup_time;
164
165         reset_input <= '0';
166         wait for reset_time;
167
168         reset_input <= '1';
169         wait;
170     end process;
171
172     --- generate base clock.
173     clock_p: process
174     begin
175         base_clk <= '1';
176         wait for base_clock_time / 2;
177         base_clk <= '0';
178         wait for base_clock_time / 2;
179     end process;
180
181 end stimulus;
182