~ruther/vhdl-spi

vhdl-spi/src/spi_slave.vhd -rw-r--r-- 1.3 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
library ieee;
use ieee.std_logic_1164.all;

entity spi_slave is

  generic (
    WIDTH : integer := 8);

  port (
    rst_in     : in  std_logic;
    tx_valid_i : in  std_logic;
    tx_ready_o : out std_logic;
    tx_data_i  : in  std_logic_vector(WIDTH - 1 downto 0);
    rx_valid_o : out std_logic;
    rx_data_o  : out std_logic_vector(WIDTH - 1 downto 0);

    tx_transmitting_o : out std_logic;

    so   : out std_logic;
    si   : in  std_logic;
    sck  : in  std_logic;
    cs_n : in  std_logic);

end entity spi_slave;

architecture a1 of spi_slave is
  signal gated_sck : std_logic;
begin  -- architecture a1
  gated_sck <= '1' when sck = '1' and cs_n = '0' else '0';

  tx: entity work.spi_transmit
    generic map (
      WIDTH       => WIDTH,
      ALIGN_START => '1')
    port map (
      clk_i           => gated_sck,
      rst_in          => rst_in,
      transmit_data_i => tx_data_i,
      valid_i         => tx_valid_i,
      ready_o         => tx_ready_o,
      transmitting_o  => tx_transmitting_o,
      transmit_bit_o  => so);

  rx: entity work.spi_recv
    generic map (
      WIDTH => WIDTH)
    port map (
      clk_i       => gated_sck,
      rst_in      => rst_in,
      data_i      => si,
      recv_o      => rx_valid_o,
      recv_data_o => rx_data_o);

end architecture a1;
Do not follow this link