Johannes Kutning 0d1b73e3e0 Initial commit
2023-10-31 07:47:27 +01:00

123 lines
3.2 KiB
VHDL

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity data_channel is
generic (
DEPTH : positive := 1024
);
port (
clk : in std_logic;
reset : in std_logic;
ctrl_address : in std_logic_vector( 3 downto 0 );
ctrl_read : in std_logic;
ctrl_readdata : out std_logic_vector( 31 downto 0 );
ctrl_write : in std_logic;
ctrl_writedata : in std_logic_vector( 31 downto 0 );
hw_sink_write : in std_logic;
hw_sink_writedata : in std_logic_vector( 31 downto 0 );
hw_source_read : in std_logic;
hw_source_readdata : out std_logic_vector( 31 downto 0 )
);
end entity data_channel;
architecture struct of data_channel is
signal sink_config : std_logic;
signal source_config : std_logic;
signal clear : std_logic;
signal empty : std_logic;
signal full : std_logic;
signal level : std_logic_vector( 9 downto 0 );
signal ctrl_sink_write : std_logic;
signal ctrl_sink_writedata : std_logic_vector( 31 downto 0 );
signal ctrl_source_read : std_logic;
signal ctrl_source_readdata : std_logic_vector( 31 downto 0 );
signal sink_write : std_logic;
signal sink_writedata : std_logic_vector( 31 downto 0 );
signal source_read : std_logic;
signal source_readdata : std_logic_vector( 31 downto 0 );
begin
u_control : entity work.data_channel_control
port map (
clk => clk,
reset => reset,
address => ctrl_address,
read => ctrl_read,
readdata => ctrl_readdata,
write => ctrl_write,
writedata => ctrl_writedata,
sink_config => sink_config,
source_config => source_config,
clear => clear,
empty => empty,
full => full,
level => level,
sink_write => ctrl_sink_write,
sink_writedata => ctrl_sink_writedata,
source_read => ctrl_source_read,
source_readdata => ctrl_source_readdata
);
u_data_sink_mux : entity work.data_sink_mux
port map (
sel => sink_config,
sw_write => ctrl_sink_write,
sw_writedata => ctrl_sink_writedata,
hw_write => hw_sink_write,
hw_writedata => hw_sink_writedata,
write => sink_write,
writedata => sink_writedata
);
u_fifo : entity work.fifo
generic map (
DEPTH => DEPTH
)
port map (
aclr => reset,
clock => clk,
sclr => clear,
data => sink_writedata,
rdreq => source_read,
wrreq => sink_write,
empty => empty,
full => full,
q => source_readdata,
usedw => level
);
u_data_source_mux : entity work.data_source_mux
port map (
sel => source_config,
sw_read => ctrl_source_read,
sw_readdata => ctrl_source_readdata,
hw_read => hw_source_read,
hw_readdata => hw_source_readdata,
read => source_read,
readdata => source_readdata
);
end architecture;