~ruther/vhdl-spi

vhdl-spi/testbench/tb_spi_slave.vhd -rw-r--r-- 1.7 KiB
e8d0cfa4 — František Boháček feat: add spi_slave connecting spi_recv and spi_transmit 1 year, 10 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
65
66
67
68
69
70
71
72
73
74
75
library ieee;
use ieee.std_logic_1164.all;

library spi;

library vunit_lib;
context vunit_lib.vunit_context;

entity tb_spi_slave is

  generic (
    runner_cfg : string);

end entity tb_spi_slave;

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

  signal tx_valid, tx_ready, rx_valid, tx_transmitting : std_logic;
  signal tx_data, rx_data : std_logic_vector(7 downto 0);

  signal gated_si : std_logic;
  signal so : std_logic;
  signal cs_n : std_logic := '1';

  signal loopback : std_logic := '0';
  signal si : std_logic := '0';
begin  -- architecture tb
  uut: entity spi.spi_slave
    generic map (
      WIDTH => 8)
    port map (
      rst_in => rst,
      tx_valid_i => tx_valid,
      tx_ready_o => tx_ready,
      tx_data_i => tx_data,
      rx_valid_o => rx_valid,
      rx_data_o => rx_data,
      tx_transmitting_o => tx_transmitting,
      so  => so,
      si  => gated_si,
      sck => clk,
      cs_n => cs_n);

  clk <= not clk after 1 ns;
  rst <= '1' after 6 ns;

  gated_si <= so when loopback = '1' else si;

  main: process is
  begin  -- process main
    wait until rst = '1';
    test_runner_setup(runner, runner_cfg);

    while test_suite loop
      if run("one_byte_loopback") then
        loopback <= '1';
        cs_n <= '0';
        tx_data <= "11100010";
        tx_valid <= '1';
        wait until falling_edge(clk);
        tx_valid <= '0';

        wait until falling_edge(clk);
        wait until rx_valid = '1';
        wait until falling_edge(clk);
        check_equal(rx_data, std_logic_vector'("11100010"));
      end if;
    end loop;

    test_runner_cleanup(runner);
  end process main;

end architecture tb;
Do not follow this link