OSDN Git Service

bg display not work. dbg counter added.
[motonesfpga/motonesfpga.git] / de0_cv_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 de0_cv_nes
10     port (
11 --logic analyzer reference clock
12     signal dbg_base_clk: out std_logic;
13     
14 --NES instance
15         pi_base_clk     : in std_logic;
16         pi_rst_n        : in std_logic;
17         pi_joypad1     : in std_logic_vector(7 downto 0);
18         pi_joypad2     : in std_logic_vector(7 downto 0);
19         po_h_sync_n    : out std_logic;
20         po_v_sync_n    : out std_logic;
21         po_r           : out std_logic_vector(3 downto 0);
22         po_g           : out std_logic_vector(3 downto 0);
23         po_b           : out std_logic_vector(3 downto 0);
24         pi_nt_v_mirror : in std_logic;
25         
26         --for debugging..
27         po_dbg_cnt     : out std_logic_vector (63 downto 0)
28          );
29     end component;
30
31     signal dbg_base_clk     : std_logic;
32     signal base_clk         : std_logic;
33     signal reset_input      : std_logic;
34     signal nmi_input      : std_logic;
35     signal dbg_nmi      : std_logic;
36     signal dummy_nmi  : std_logic;
37
38     signal h_sync_n    : std_logic;
39     signal v_sync_n    : std_logic;
40     signal r           : std_logic_vector(3 downto 0);
41     signal g           : std_logic_vector(3 downto 0);
42     signal b           : std_logic_vector(3 downto 0);
43     signal joypad1     : std_logic_vector(7 downto 0);
44     signal joypad2     : std_logic_vector(7 downto 0);
45     signal nt_v_mirror : std_logic;
46     signal dbg_cnt     : std_logic_vector (63 downto 0);
47
48     constant powerup_time   : time := 2 us;
49     constant reset_time     : time := 890 ns;
50
51     ---clock frequency = 21,477,270 (21 MHz)
52     --constant base_clock_time : time := 46 ns;
53
54     --DE1 base clock = 50 MHz
55     constant base_clock_time : time := 20 ns;
56
57 begin
58
59     sim_board : de0_cv_nes port map (
60     dbg_base_clk,
61     base_clk, reset_input, joypad1, joypad2, 
62             h_sync_n, v_sync_n, r, g, b, nt_v_mirror, dbg_cnt);
63
64     --- input reset.
65     reset_p: process
66     begin
67         reset_input <= '1';
68         wait for powerup_time;
69
70         reset_input <= '0';
71         wait for reset_time;
72
73         reset_input <= '1';
74         wait;
75     end process;
76
77     --- generate base clock.
78     clock_p: process
79     begin
80         base_clk <= '1';
81         wait for base_clock_time / 2;
82         base_clk <= '0';
83         wait for base_clock_time / 2;
84     end process;
85
86     --- initiate nmi.
87     nmi_p: process
88     constant nmi_wait     : time := 100657965 ps;
89     --constant nmi_wait     : time := 10 ms;
90     constant vblank_time     : time := 60 us;
91     variable wait_cnt : integer := 0;
92     begin
93
94         if (wait_cnt = 0) then
95             nmi_input <= '1';
96             wait for powerup_time + reset_time + nmi_wait;
97             wait_cnt := wait_cnt + 1;
98         else
99             nmi_input <= '0';
100             wait for vblank_time ;
101             nmi_input <= '1';
102             wait for vblank_time / 4;
103         end if;
104     end process;
105     ---for test nmi...
106     dummy_nmi <= nmi_input;
107     --dummy_nmi <= 'Z';
108
109     --set chr rom mirror setting.
110     nt_v_mirror <= '1';
111 end stimulus;
112