~ruther/vhdl-spi

ref: 6d6f0d480de810a2fe0d2c946ae9c61b6a85c4c6 vhdl-spi/testbench/tb_sipo_shift_register.vhd -rw-r--r-- 1.5 KiB
6d6f0d48 — František Boháček tests: add tests for shift registers 1 year, 7 months ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
library ieee;
use ieee.std_logic_1164.all;

library spi;

library vunit_lib;
context vunit_lib.vunit_context;

entity tb_sipo_shift_register is

  generic (
    runner_cfg : string);

end entity tb_sipo_shift_register;

architecture tb of tb_sipo_shift_register is
  signal clk : std_logic := '0';

  signal data_i : std_logic := '0';
  signal q_o : std_logic_vector(7 downto 0);
begin  -- architecture tb
  uut: entity spi.sipo_shift_register
    generic map (
      WIDTH => 8)
    port map (
      clk_i  => clk,
      data_i =>  data_i,
      q_o =>  q_o);

  clk <= not clk after 1 ns;

  main: process is
  begin  -- process main
    test_runner_setup(runner, runner_cfg);
    show(get_logger(default_checker), display_handler, pass);

    while test_suite loop
      if run("just_one") then
        wait until falling_edge(clk);
        data_i <= '1';
        wait until falling_edge(clk);
        data_i <= '0';
        for i in 0 to 6 loop
            wait until falling_edge(clk);
        end loop;  -- i

        check_equal(q_o, std_logic_vector'("10000000"));
      elsif run("one zero") then
        for i in 0 to 3 loop
            wait until falling_edge(clk);
            data_i <= '1';
            wait until falling_edge(clk);
            data_i <= '0';
        end loop;  -- i

        wait until falling_edge(clk);
        check_equal(q_o, std_logic_vector'("10101010"));
      end if;
    end loop;

    test_runner_cleanup(runner);
  end process main;

end architecture tb;
Do not follow this link