|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- 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;
|