Initial commit
This commit is contained in:
141
Libs/Common_test/hdl/debounce_tester_test.vhd
Normal file
141
Libs/Common_test/hdl/debounce_tester_test.vhd
Normal file
@@ -0,0 +1,141 @@
|
||||
--
|
||||
-- VHDL Architecture Common_test.debounce_tester.test
|
||||
--
|
||||
-- Created:
|
||||
-- by - remy.borgeat.UNKNOWN (WE10993)
|
||||
-- at - 15:30:08 12.01.2024
|
||||
--
|
||||
-- using Mentor Graphics HDL Designer(TM) 2019.2 (Build 5)
|
||||
--
|
||||
LIBRARY std;
|
||||
USE std.textio.ALL;
|
||||
|
||||
LIBRARY ieee;
|
||||
USE ieee.std_logic_textio.ALL;
|
||||
USE ieee.math_real.all;
|
||||
|
||||
LIBRARY Common_test;
|
||||
USE Common_test.testutils.all;
|
||||
|
||||
ARCHITECTURE test OF debounce_tester IS
|
||||
|
||||
constant clockPeriod : time := 1.0/g_clockFrequency * 1 sec;
|
||||
signal clock_int : std_ulogic := '1';
|
||||
constant DELAY: positive := integer(ceil(((real(g_debounceTime / 1 ps) / 1.0e12) * g_clockFrequency) / real(g_minConsecutiveStateCount))) - 1;
|
||||
|
||||
signal testInfo : string(1 to 40) := (others => ' ');
|
||||
|
||||
BEGIN
|
||||
------------------------------------------------------------------------------
|
||||
-- reset and clock
|
||||
reset <= '1', '0' after 3*clockPeriod;
|
||||
clock_int <= not clock_int after clockPeriod/2;
|
||||
clock <= transport clock_int after clockPeriod*9/10;
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
-- input signal
|
||||
process
|
||||
begin
|
||||
-- startup
|
||||
testInfo <= pad("Init", testInfo'length);
|
||||
input <= '0';
|
||||
wait until reset = '0';
|
||||
wait until clock'event and clock = '1';
|
||||
|
||||
assert (debounced = not g_activeState)
|
||||
report "Startup value should be " & to_string(not g_activeState)
|
||||
severity failure;
|
||||
assert (debounced = g_activeState)
|
||||
report "Value OK"
|
||||
severity note;
|
||||
|
||||
-- transition 0 to 1
|
||||
testInfo <= pad("0 to 1", testInfo'length);
|
||||
input <= '1';
|
||||
wait for (g_minConsecutiveStateCount/2) * DELAY * clockPeriod;
|
||||
assert (debounced = not g_activeState)
|
||||
report "Value should be " & to_string(not g_activeState)
|
||||
severity failure;
|
||||
assert (debounced = g_activeState)
|
||||
report "Value OK"
|
||||
severity note;
|
||||
wait for ((g_minConsecutiveStateCount/2) + 1) * DELAY * clockPeriod;
|
||||
assert (debounced = g_activeState)
|
||||
report "Value should be " & to_string(g_activeState)
|
||||
severity failure;
|
||||
assert (debounced = not g_activeState)
|
||||
report "Value OK"
|
||||
severity note;
|
||||
wait for 100*clockPeriod;
|
||||
|
||||
-- transition 1 to 0
|
||||
testInfo <= pad("1 to 0", testInfo'length);
|
||||
input <= '0';
|
||||
wait for (g_minConsecutiveStateCount/2) * DELAY * clockPeriod;
|
||||
assert (debounced = g_activeState)
|
||||
report "Value should be " & to_string(g_activeState)
|
||||
severity failure;
|
||||
assert (debounced = not g_activeState)
|
||||
report "Value OK"
|
||||
severity note;
|
||||
wait for ((g_minConsecutiveStateCount/2) + 1) * DELAY * clockPeriod;
|
||||
assert (debounced = not g_activeState)
|
||||
report "Value should be " & to_string(not g_activeState)
|
||||
severity failure;
|
||||
assert (debounced = g_activeState)
|
||||
report "Value OK"
|
||||
severity note;
|
||||
wait for 100*clockPeriod;
|
||||
|
||||
|
||||
-- 0 w. glitches
|
||||
testInfo <= pad("0 glitches", testInfo'length);
|
||||
input <= '0',
|
||||
'1' after (g_minConsecutiveStateCount/4) * DELAY * clockPeriod,
|
||||
'0' after (g_minConsecutiveStateCount/2) * DELAY * clockPeriod,
|
||||
'1' after ((g_minConsecutiveStateCount/4)*3) * DELAY * clockPeriod,
|
||||
'0' after (g_minConsecutiveStateCount) * DELAY * clockPeriod;
|
||||
wait for 2 * (g_minConsecutiveStateCount) * DELAY * clockPeriod;
|
||||
assert (debounced = not g_activeState)
|
||||
report "Value should be " & to_string(not g_activeState)
|
||||
severity failure;
|
||||
assert (debounced = g_activeState)
|
||||
report "Value OK"
|
||||
severity note;
|
||||
|
||||
testInfo <= pad("Back to 1", testInfo'length);
|
||||
input <= '1';
|
||||
wait for g_minConsecutiveStateCount * DELAY * clockPeriod;
|
||||
assert (debounced = g_activeState)
|
||||
report "Value should be " & to_string(g_activeState)
|
||||
severity failure;
|
||||
assert (debounced = not g_activeState)
|
||||
report "Value OK"
|
||||
severity note;
|
||||
|
||||
-- 1 w. glitches
|
||||
testInfo <= pad("1 glitches", testInfo'length);
|
||||
input <= '1',
|
||||
'0' after (g_minConsecutiveStateCount/4) * DELAY * clockPeriod,
|
||||
'1' after (g_minConsecutiveStateCount/2) * DELAY * clockPeriod,
|
||||
'0' after ((g_minConsecutiveStateCount/4)*3) * DELAY * clockPeriod,
|
||||
'1' after (g_minConsecutiveStateCount) * DELAY * clockPeriod;
|
||||
wait for 2 * (g_minConsecutiveStateCount) * DELAY * clockPeriod;
|
||||
assert (debounced = g_activeState)
|
||||
report "Value should be " & to_string(g_activeState)
|
||||
severity failure;
|
||||
assert (debounced = not g_activeState)
|
||||
report "Value OK"
|
||||
severity note;
|
||||
|
||||
-- end of simulation
|
||||
testInfo <= pad("End", testInfo'length);
|
||||
wait for 10*clockPeriod;
|
||||
assert false
|
||||
report "End of simulation"
|
||||
severity failure;
|
||||
wait;
|
||||
end process;
|
||||
|
||||
END ARCHITECTURE test;
|
||||
|
||||
Reference in New Issue
Block a user