AMBPEX5_v20_SX50T_CORE
adm/dio64/trd_admdio64_in_v6.vhd
00001 ---------------------------------------------------------------------------------------------------
00002 --
00003 -- Title       : trd_admdio64_in_v6
00004 -- Author      : Ilya Ivanov
00005 -- Company     : Instrumental System
00006 --
00007 -- Version     : 1.2
00008 ---------------------------------------------------------------------------------------------------
00009 --
00010 -- Description :        Приём цифрового потока
00011 --
00012 ---------------------------------------------------------------------------------------------------
00013 --
00014 --   Version 1.2  17.07.2007
00015 --                Добавлены выходы регистров MODE0, MODE1, MODE2, MODE3
00016 --                                Добавлен выход счётчика слов
00017 --
00018 ---------------------------------------------------------------------------------------------------
00019 --
00020 --   Version 1.1  18.08.2006
00021 --                Используется FIFO cl_fifo1024x64_v2                          
00022 --
00023 ---------------------------------------------------------------------------------------------------
00024 
00025 library ieee;
00026 use ieee.std_logic_1164.all;
00027 
00028 
00029 
00030         
00031 
00032 library work;
00033 use work.cl_chn_v3_pkg.all;                             
00034 use work.adm2_pkg.all;
00035 
00036 package trd_admdio64_in_v6_pkg is
00037         
00038 constant  ID_DIO_IN                     : std_logic_vector( 15 downto 0 ):=x"0013"; -- идентификатор тетрады
00039 constant  ID_MODE_DIO_IN        : std_logic_vector( 15 downto 0 ):=x"0006"; -- модификатор тетрады
00040 constant  VER_DIO_IN            : std_logic_vector( 15 downto 0 ):=x"0102";     -- версия тетрады
00041 constant  RES_DIO_IN            : std_logic_vector( 15 downto 0 ):=x"0010";     -- ресурсы тетрады
00042 constant  FIFO_DIO_IN           : std_logic_vector( 15 downto 0 ):=x"0400"; -- размер FIFO
00043 constant  FTYPE_DIO_IN          : std_logic_vector( 15 downto 0 ):=x"0040"; -- ширина FIFO
00044 
00045 component trd_admdio64_in_v6 is 
00046         port(           
00047                 -- GLOBAL
00048                 reset                           : in std_logic;         -- 0 - сброс
00049                 clk                                     : in std_logic;         -- тактовая частота
00050                 
00051                 -- Управление тетрадой
00052                 data_out                        : out std_logic_vector( 63 downto 0 ); -- шина данных DATA, выход через буфер
00053                 data_out2                       : out std_logic_vector( 63 downto 0 ); -- шина данных DATA, выход без буфера
00054                 cmd_data_in                     : in std_logic_vector( 15 downto 0 ); -- шина данных CMD_DATA
00055                 cmd                                     : in bl_cmd;            -- сигналы управления
00056                 
00057                 cmd_data_out            : out std_logic_vector( 15 downto 0 ); -- выходы регистров, выход через буфер
00058                 cmd_data_out2           : out std_logic_vector( 15 downto 0 ); -- выходы регистров, выход без буфера
00059                 
00060                 bx_irq                          : out std_logic;        -- 1 - прерывание от тетрады
00061                 bx_drq                          : out bl_drq;           -- управление DMA
00062                 
00063                 mode0                           : out std_logic_vector( 15 downto 0 );  -- регистр MODE0
00064                 mode1                           : out std_logic_vector( 15 downto 0 );  -- регистр MODE1
00065                 mode2                           : out std_logic_vector( 15 downto 0 );  -- регистр MODE2
00066                 mode3                           : out std_logic_vector( 15 downto 0 );  -- регистр MODE3
00067                 
00068                 fifo_rst_in                     : in  std_logic:='1';                   -- 0 - сброс FIFO (вход)
00069                 fifo_rst                        : out std_logic;                                -- 0 - сброс FIFO (выход)
00070                 
00071                 start                           : out std_logic;        --  1 - разрешение работы (MODE0[5])
00072                 
00073                 -- Запись FIFO                                    
00074                 data_in             : in std_logic_vector(63 downto 0); -- данные для записи в FIFO
00075                 data_wr             : in std_logic;             -- 1 - строб записи
00076                 flag_wr                         : out bl_fifo_flag;     -- флаги FIFO, синхронно с clk_wr
00077                 flag_rd                         : out bl_fifo_flag;     -- флаги FIFO, синхронно с clk
00078                 clk_wr                          : in std_logic;         -- тактовая частота записи в FIFO
00079                 fifo_cnt_wr                     : out std_logic_vector( 9 downto 0 ); -- число слов в FIFO, синхронно с clk_wr               
00080                 fifo_cnt_rd                     : out std_logic_vector( 9 downto 0 )  -- число слов в FIFO, синхронно с clk          
00081                 
00082                 --------------------------------------------
00083             );
00084 end component;
00085 
00086 end trd_admdio64_in_v6_pkg;
00087 
00088 library ieee;
00089 use ieee.std_logic_1164.all;
00090 
00091 library unisim;
00092 use unisim.vcomponents.all;
00093 
00094 library work;
00095 use work.cl_chn_v3_pkg.all;                             
00096 use work.adm2_pkg.all;
00097 use work.cl_fifo1024x65_v5_pkg.all;
00098 
00099 entity trd_admdio64_in_v6 is 
00100         port(           
00101                 -- GLOBAL
00102                 reset                           : in std_logic;         -- 0 - сброс
00103                 clk                                     : in std_logic;         -- тактовая частота
00104                 
00105                 -- Управление тетрадой
00106                 data_out                        : out std_logic_vector( 63 downto 0 ); -- шина данных DATA, выход через буфер
00107                 data_out2                       : out std_logic_vector( 63 downto 0 ); -- шина данных DATA, выход без буфера
00108                 cmd_data_in                     : in std_logic_vector( 15 downto 0 ); -- шина данных CMD_DATA
00109                 cmd                                     : in bl_cmd;            -- сигналы управления
00110                 
00111                 cmd_data_out            : out std_logic_vector( 15 downto 0 ); -- выходы регистров, выход через буфер
00112                 cmd_data_out2           : out std_logic_vector( 15 downto 0 ); -- выходы регистров, выход без буфера
00113 
00114                 bx_irq                          : out std_logic;        -- 1 - прерывание от тетрады
00115                 bx_drq                          : out bl_drq;           -- управление DMA
00116                 
00117                 mode0                           : out std_logic_vector( 15 downto 0 );  -- регистр MODE0
00118                 mode1                           : out std_logic_vector( 15 downto 0 );  -- регистр MODE1
00119                 mode2                           : out std_logic_vector( 15 downto 0 );  -- регистр MODE2
00120                 mode3                           : out std_logic_vector( 15 downto 0 );  -- регистр MODE3
00121                 
00122                 fifo_rst_in                     : in  std_logic:='1';                   -- 0 - сброс FIFO (вход)
00123                 fifo_rst                        : out std_logic;                                -- 0 - сброс FIFO (выход)
00124                 
00125                 start                           : out std_logic;        --  1 - разрешение работы (MODE0[5])
00126                 
00127                 -- Запись FIFO                                    
00128                 data_in             : in std_logic_vector(63 downto 0); -- данные для записи в FIFO
00129                 data_wr             : in std_logic;             -- 1 - строб записи
00130                 flag_wr                         : out bl_fifo_flag;     -- флаги FIFO, синхронно с clk_wr
00131                 flag_rd                         : out bl_fifo_flag;     -- флаги FIFO, синхронно с clk
00132                 clk_wr                          : in std_logic;         -- тактовая частота записи в FIFO
00133                 fifo_cnt_wr                     : out std_logic_vector( 9 downto 0 ); -- число слов в FIFO, синхронно с clk_wr               
00134                 fifo_cnt_rd                     : out std_logic_vector( 9 downto 0 )  -- число слов в FIFO, синхронно с clk          
00135                 
00136                 --------------------------------------------
00137             );
00138 end trd_admdio64_in_v6;
00139                                                                                                                  
00140 architecture trd_admdio64_in_v6 of trd_admdio64_in_v6 is 
00141 
00142 
00143 signal rst,fifo_rst0            : std_logic;
00144 signal flag_rdi                 : bl_fifo_flag; 
00145 signal cmode0                           : std_logic_vector(15 downto 0);
00146 signal status,sflag                     : std_logic_vector(15 downto 0);  
00147 signal do                                       : std_logic_vector(63 downto 0);
00148 signal fifo_rst1                        : std_logic;
00149 
00150 begin              
00151 
00152 xstatus: ctrl_buft16 port map( 
00153         t => cmd.status_cs,
00154         i =>  status,
00155         o => cmd_data_out );
00156 
00157 cmd_data_out2 <= status;        
00158 
00159 xdata: ctrl_buft64 port map(
00160         t => cmd.data_oe,
00161         i  => do,
00162         o  => data_out );       
00163         
00164 data_out2 <= do;        
00165         
00166 chn: cl_chn_v3 
00167         generic map(                                     
00168           -- 2 - out - для тетрады вывода
00169           -- 1 - in  - для тетрады ввода
00170           chn_type                      => 1 
00171         )
00172         port map (
00173                 reset                           => reset,
00174                 clk                             => clk,
00175                 -- Флаги
00176                 cmd_rdy                         => '1',
00177                 rdy                              => flag_rdi.ef,
00178                 fifo_flag               => flag_rdi,
00179                 -- Тетрада       
00180                 data_in                 => cmd_data_in,
00181                 cmd                             => cmd,
00182                 bx_irq                  => bx_irq,
00183                 bx_drq                  => bx_drq,
00184                 status                  => status,
00185                 -- Управление
00186                 mode0                   => cmode0,
00187                 mode1                   => mode1,
00188                 mode2                   => mode2,
00189                 mode3                   => mode3,
00190                 sflag                   => sflag,
00191                 rst                             => rst,
00192                 fifo_rst                => fifo_rst0
00193         );
00194 
00195 x_fifo: cl_fifo1024x65_v5
00196         port map(                               
00197                 -- сброс
00198                  reset                  => fifo_rst1,
00199                 -- запись
00200                  clk_wr                 => clk_wr,
00201                  data_in                => data_in,
00202                  data_en                => data_wr, 
00203                  flag_wr                => flag_wr,
00204                  --cnt_wr                       => fifo_cnt_wr,
00205                  
00206                  -- чтение
00207                  clk_rd                 => clk,
00208                  data_out               => do,
00209                  data_cs                        => cmd.data_cs,
00210                  flag_rd                        => flag_rdi
00211                  --cnt_rd                       => fifo_cnt_rd
00212                  
00213             );          
00214                 
00215 flag_rd <= flag_rdi;
00216 
00217 fifo_rst1 <= fifo_rst0 and fifo_rst_in;         
00218 fifo_rst<=fifo_rst1;            
00219 
00220 start <= cmode0(5);
00221 mode0 <= cmode0;
00222 
00223 end trd_admdio64_in_v6;