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;