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