OpenCores
URL https://opencores.org/ocsvn/gamepads/gamepads/trunk

Subversion Repositories gamepads

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 25 to Rev 26
    Reverse comparison

Rev 25 → Rev 26

/trunk/gcpad/bench/vhdl/tb-c.vhd
5,7 → 5,7
--
-- Copyright (c) 2004, Arnim Laeuger (arniml@opencores.org)
--
-- $Id: tb-c.vhd,v 1.1 2004-10-07 21:24:06 arniml Exp $
-- $Id: tb-c.vhd,v 1.2 2004-10-10 17:27:36 arniml Exp $
--
-------------------------------------------------------------------------------
 
15,6 → 15,14
for basic_b : gcpad_basic
use configuration work.gcpad_basic_struct_c0;
end for;
 
for full_b : gcpad_full
use configuration work.gcpad_full_struct_c0;
end for;
 
for all : gcpad_mod
use configuration work.gcpad_mod_behav_c0;
end for;
end for;
 
end tb_behav_c0;
/trunk/gcpad/bench/vhdl/tb.vhd
3,7 → 3,7
-- Testbench for the
-- GCpad controller core
--
-- $Id: tb.vhd,v 1.2 2004-10-09 17:05:59 arniml Exp $
-- $Id: tb.vhd,v 1.3 2004-10-10 17:27:44 arniml Exp $
--
-- Copyright (c) 2004, Arnim Laeuger (arniml@opencores.org)
--
56,55 → 56,48
 
 
use work.gcpad_pack.all;
use work.gcpad_comp.gcpad_basic;
use work.gcpad_comp.gcpad_full;
 
architecture behav of tb is
 
constant period_c : time := 100 ns;
constant reset_level_c : natural := 0;
constant clocks_per_1us_c : natural := 10;
 
component gcpad_basic
component gcpad_mod
generic (
reset_level_g : integer := 0;
clocks_per_1us_g : integer := 2
clocks_per_1us_g : natural := 2
);
port (
clk_i : in std_logic;
reset_i : in std_logic;
pad_request_i : in std_logic;
pad_avail_o : out std_logic;
pad_data_io : inout std_logic;
but_a_o : out std_logic;
but_b_o : out std_logic;
but_x_o : out std_logic;
but_y_o : out std_logic;
but_z_o : out std_logic;
but_start_o : out std_logic;
but_tl_o : out std_logic;
but_tr_o : out std_logic;
but_left_o : out std_logic;
but_right_o : out std_logic;
but_up_o : out std_logic;
but_down_o : out std_logic;
ana_joy_x_o : out std_logic_vector(7 downto 0);
ana_joy_y_o : out std_logic_vector(7 downto 0);
ana_c_x_o : out std_logic_vector(7 downto 0);
ana_c_y_o : out std_logic_vector(7 downto 0);
ana_l_o : out std_logic_vector(7 downto 0);
ana_r_o : out std_logic_vector(7 downto 0)
rx_data_i : in std_logic_vector(63 downto 0)
);
end component;
 
constant period_c : time := 100 ns;
constant reset_level_c : natural := 0;
constant clocks_per_1us_c : natural := 10;
 
signal clk_s : std_logic;
signal reset_s : std_logic;
 
signal pad_data_s : std_logic;
-- signals for basic gcpad
signal stimuli_1_end_s : boolean;
signal pad_data_1_s : std_logic;
signal buttons_1_s : std_logic_vector(64 downto 0);
signal pad_request_1_s : std_logic;
signal pad_avail_1_s : std_logic;
signal rx_data_1_s : std_logic_vector(63 downto 0);
 
signal buttons_s : std_logic_vector(64 downto 0);
-- signals for full gcpad
signal stimuli_2_end_s : boolean;
signal pad_data_2_s : std_logic;
signal pad_request_2_s : std_logic;
signal pad_avail_2_s : std_logic;
signal pad_timeout_2_s : std_logic;
signal tx_size_2_s : std_logic_vector( 1 downto 0);
signal tx_command_2_s : std_logic_vector(23 downto 0);
signal rx_size_2_s : std_logic_vector( 3 downto 0);
signal rx_data_2_s : std_logic_vector(63 downto 0);
 
signal pad_request_s : std_logic;
signal pad_avail_s : std_logic;
 
begin
 
basic_b : gcpad_basic
115,99 → 108,91
port map (
clk_i => clk_s,
reset_i => reset_s,
pad_request_i => pad_request_s,
pad_avail_o => pad_avail_s,
pad_data_io => pad_data_s,
but_a_o => buttons_s(56),
but_b_o => buttons_s(57),
but_x_o => buttons_s(58),
but_y_o => buttons_s(59),
but_z_o => buttons_s(52),
but_start_o => buttons_s(60),
but_tl_o => buttons_s(54),
but_tr_o => buttons_s(53),
but_left_o => buttons_s(48),
but_right_o => buttons_s(49),
but_up_o => buttons_s(51),
but_down_o => buttons_s(50),
ana_joy_x_o => buttons_s(47 downto 40),
ana_joy_y_o => buttons_s(39 downto 32),
ana_c_x_o => buttons_s(31 downto 24),
ana_c_y_o => buttons_s(23 downto 16),
ana_l_o => buttons_s(15 downto 8),
ana_r_o => buttons_s( 7 downto 0)
pad_request_i => pad_request_1_s,
pad_avail_o => pad_avail_1_s,
pad_data_io => pad_data_1_s,
but_a_o => buttons_1_s(56),
but_b_o => buttons_1_s(57),
but_x_o => buttons_1_s(58),
but_y_o => buttons_1_s(59),
but_z_o => buttons_1_s(52),
but_start_o => buttons_1_s(60),
but_tl_o => buttons_1_s(54),
but_tr_o => buttons_1_s(53),
but_left_o => buttons_1_s(48),
but_right_o => buttons_1_s(49),
but_up_o => buttons_1_s(51),
but_down_o => buttons_1_s(50),
ana_joy_x_o => buttons_1_s(47 downto 40),
ana_joy_y_o => buttons_1_s(39 downto 32),
ana_c_x_o => buttons_1_s(31 downto 24),
ana_c_y_o => buttons_1_s(23 downto 16),
ana_l_o => buttons_1_s(15 downto 8),
ana_r_o => buttons_1_s( 7 downto 0)
);
 
buttons_s(64) <= '0';
buttons_s(63 downto 61) <= (others => '0');
buttons_s(55) <= '1';
buttons_1_s(64) <= '0';
buttons_1_s(63 downto 61) <= (others => '0');
buttons_1_s(55) <= '1';
 
 
-- pullup on pad_data
-- pad_data_s <= 'H';
full_b: gcpad_full
generic map (
reset_level_g => reset_level_c,
clocks_per_1us_g => clocks_per_1us_c
)
port map (
clk_i => clk_s,
reset_i => reset_s,
pad_request_i => pad_request_2_s,
pad_avail_o => pad_avail_2_s,
pad_timeout_o => pad_timeout_2_s,
tx_size_i => tx_size_2_s,
tx_command_i => tx_command_2_s,
rx_size_i => rx_size_2_s,
rx_data_o => rx_data_2_s,
pad_data_io => pad_data_2_s
);
 
 
stimuli: process
pad_1 : gcpad_mod
generic map (
clocks_per_1us_g => clocks_per_1us_c
)
port map (
clk_i => clk_s,
pad_data_io => pad_data_1_s,
rx_data_i => rx_data_1_s
);
 
procedure check_request is
constant request_c : std_logic_vector(24 downto 0) := "H0H000000HH000000000000H0";
begin
-----------------------------------------------------------------------------
-- Process stimuli_pad_1
--
-- Executes test stimuli with Pad 1, the gcpad_basic flavour.
--
stimuli_pad_1: process
 
-- read 25 bits from pad_data_s
for i in 0 to 24 loop
wait until pad_data_s = '0';
 
wait for 2 * clocks_per_1us_c * period_c;
if pad_data_s /= request_c(i) then
assert false
report "Found wrong level on pad_data_s while checking request packet!"
severity error;
end if;
 
wait for 2 * clocks_per_1us_c * period_c;
 
end loop;
 
 
end check_request;
 
procedure send_packet(packet : in std_logic_vector(64 downto 0)) is
variable time_low_v, time_high_v : time;
begin
wait until clk_s'event and clk_s = '1';
wait for 1 ns;
 
rx_data_1_s <= packet(64 downto 1);
 
-- send request;
pad_request_s <= '1';
pad_request_1_s <= '1';
wait for 1 * period_c;
pad_request_s <= '0';
pad_request_1_s <= '0';
 
check_request;
 
wait for 10 * 40 * period_c;
 
for i in packet'high downto 0 loop
if packet(i) = '0' then
time_low_v := 3 us;
time_high_v := 1 us;
else
time_low_v := 1 us;
time_high_v := 3 us;
end if;
 
pad_data_s <= '0';
wait for time_low_v;
 
pad_data_s <= 'H';
wait for time_high_v;
 
end loop;
 
wait until pad_avail_s = '1';
wait until pad_avail_1_s = '1';
wait for 10 * period_c;
 
-- check result
for i in 1 to packet'high loop
assert packet(i) = buttons_s(i-1)
assert packet(i) = buttons_1_s(i-1)
report "Button mismatch!"
severity error;
end loop;
218,21 → 203,29
procedure timeout_gcpad is
begin
-- send request;
pad_request_s <= '1';
pad_request_1_s <= '1';
wait for 1 * period_c;
pad_request_s <= '0';
pad_request_1_s <= '0';
 
check_request;
wait for 2 * period_c;
 
wait until pad_avail_s = '1';
-- disturb communication
pad_data_1_s <= 'X';
 
wait until pad_avail_1_s = '1';
wait for 10 * period_c;
pad_data_1_s <= 'H';
wait for 10 * period_c;
 
end timeout_gcpad;
 
begin
pad_data_s <= 'H';
pad_request_s <= '0';
stimuli_1_end_s <= false;
 
pad_data_1_s <= 'H';
pad_request_1_s <= '0';
rx_data_1_s <= (others => '0');
 
wait until reset_s = '1';
wait for period_c * 4;
 
306,15 → 299,74
 
 
wait for period_c * 2*40;
assert false
report "End of simulation reached."
severity failure;
stimuli_1_end_s <= true;
wait;
 
end process stimuli;
end process stimuli_pad_1;
--
-----------------------------------------------------------------------------
 
 
pad_2 : gcpad_mod
generic map (
clocks_per_1us_g => clocks_per_1us_c
)
port map (
clk_i => clk_s,
pad_data_io => pad_data_2_s,
rx_data_i => rx_data_2_s
);
 
-----------------------------------------------------------------------------
-- Process stimuli_pad_2
--
-- Executes test stimuli with Pad 2, the gcpad_full flavour.
--
stimuli_pad_2: process
 
procedure issue_command(cmd : in std_logic_vector(23 downto 0);
size : in std_logic_vector( 1 downto 0)) is
begin
wait until clk_s'event and clk_s = '1';
wait for 1 ns;
 
tx_command_2_s <= cmd;
tx_size_2_s <= size;
-- send request;
pad_request_2_s <= '1';
wait for 1 * period_c;
pad_request_2_s <= '0';
 
 
end issue_command;
 
begin
stimuli_2_end_s <= false;
 
pad_data_2_s <= 'H';
pad_request_2_s <= '0';
tx_size_2_s <= (others => '0');
tx_command_2_s <= (others => '0');
rx_size_2_s <= (others => '0');
 
wait until reset_s = '1';
wait for period_c * 4;
 
 
issue_command(cmd => "010000000000001100000010",
size => "11");
 
 
wait for period_c * 2*40;
stimuli_2_end_s <= true;
wait;
 
end process stimuli_pad_2;
--
-----------------------------------------------------------------------------
 
 
-----------------------------------------------------------------------------
-- Clock Generator
-----------------------------------------------------------------------------
clk: process
344,6 → 396,19
wait;
end process reset;
 
 
-----------------------------------------------------------------------------
-- End of simulation detection
-----------------------------------------------------------------------------
eos: process (stimuli_1_end_s, stimuli_2_end_s)
begin
if stimuli_1_end_s and stimuli_2_end_s then
assert false
report "End of simulation reached."
severity failure;
end if;
end process eos;
 
end behav;
 
 
351,6 → 416,9
-- File History:
--
-- $Log: not supported by cvs2svn $
-- Revision 1.2 2004/10/09 17:05:59 arniml
-- delay assertion of request signal by real time (instead of delta cycles)
--
-- Revision 1.1 2004/10/07 21:24:06 arniml
-- initial check-in
--

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.