From de9272b5196c98c0d7254f9e80886c63d4d21712 Mon Sep 17 00:00:00 2001 From: Rutherther Date: Sat, 30 Dec 2023 22:31:33 +0100 Subject: [PATCH] tests: add mcu_slave counter tb --- tb/mcu_slave/counter_tb.vhd | 79 +++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 tb/mcu_slave/counter_tb.vhd diff --git a/tb/mcu_slave/counter_tb.vhd b/tb/mcu_slave/counter_tb.vhd new file mode 100644 index 0000000..60b4dfb --- /dev/null +++ b/tb/mcu_slave/counter_tb.vhd @@ -0,0 +1,79 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +library vunit_lib; +context vunit_lib.vunit_context; + +library mcu_slave; + +library utils; + +library i2c_tb; +use i2c_tb.tb_pkg.all; +use i2c_tb.tb_i2c_pkg.all; +use i2c_tb.tb_i2c_master_pkg.all; + +entity counter_tb is + + generic ( + runner_cfg : string); + +end entity counter_tb; + +architecture tb of counter_tb is + constant ADDRESS : std_logic_vector(6 downto 0) := "1110100"; + constant CLK_PERIOD : time := 10 ns; + signal rst_n : std_logic := '0'; + signal rst : std_logic; + + signal scl_override, sda_override : std_logic := '0'; + + signal err_noack : std_logic; + signal bus_busy, dev_busy : std_logic; +begin -- architecture tb + uut : entity mcu_slave.counter + port map ( + clk_i => clk, + rst_i => rst, + rst_on => open, + err_noack_o => err_noack, + dev_busy_o => dev_busy, + bus_busy_o => bus_busy, + sda_io => sda, + scl_io => scl + ); + + sda <= not sda_override; + scl <= not scl_override; + + clk <= not clk after CLK_PERIOD / 2; + rst_n <= '1' after 2 * CLK_PERIOD; + rst <= not rst_n; + + main: process is + begin -- process main + wait until rst_n = '1'; + wait until falling_edge(clk); + test_runner_setup(runner, runner_cfg); + + while test_suite loop + if run("wrapping_counting") then + i2c_master_start(ADDRESS, '1', scl_override, sda_override); + + for i in 0 to 99 loop + i2c_master_receive(std_logic_vector(to_unsigned(i, 8)), scl_override, sda_override); + end loop; -- i + + -- starting over + i2c_master_receive("00000000", scl_override, sda_override); + i2c_master_receive("00000001", scl_override, sda_override); + + i2c_master_stop(scl_override, sda_override); + end if; + end loop; + + test_runner_cleanup(runner); + end process main; + +end architecture tb; -- 2.49.0