AMBPEX5_v20_SX50T_CORE
|
00001 --------------------------------------------------------------------------------------------------- 00002 -- 00003 -- Title : trd_admdio64_out_v1 00004 -- Author : Ilya Ivanov 00005 -- Company : Instrumental System 00006 -- 00007 -- Version : 1.3 00008 -- 00009 --------------------------------------------------------------------------------------------------- 00010 -- 00011 -- Description : Тетрада цифрового ввода. 00012 -- Модификация 1 - Используется FIFO 1024x64 00013 -- 00014 --------------------------------------------------------------------------------------------------- 00015 -- 00016 -- Версия 1.3 18.07.2007 Dmitry Smekhov 00017 -- Добавлены выходы cmd_data_out2, start, bx_clk 00018 -- Убран вход b_clk 00019 -- 00020 --------------------------------------------------------------------------------------------------- 00021 -- 00022 -- Версия 1.2 18.08.2006 Dmitry Smekhov 00023 -- Используется cl_fifo1024x64_v2 00024 -- 00025 --------------------------------------------------------------------------------------------------- 00026 -- 00027 -- Версия 1.1 07.09.2005 Dmitry Smekhov 00028 -- Добавлен выход fifo_cnt - число слов в FIFO 00029 -- и выходы регистров MODE0, MODE1, MODE2, MODE3 00030 -- 00031 --------------------------------------------------------------------------------------------------- 00032 00033 library ieee; 00034 use ieee.std_logic_1164.all; 00035 use IEEE.std_logic_unsigned.all ; 00036 00037 00038 00039 00040 library work; 00041 use work.cl_chn_v3_pkg.all; 00042 use work.adm2_pkg.all; 00043 00044 package trd_admdio64_out_v4_pkg is 00045 00046 constant ID_DIO_OUT : std_logic_vector( 15 downto 0 ):=x"0012"; -- идентификатор тетрады 00047 constant ID_MODE_DIO_OUT : std_logic_vector( 15 downto 0 ):=x"0001"; -- модификатор тетрады 00048 constant VER_DIO_OUT : std_logic_vector( 15 downto 0 ):=x"0103"; -- версия тетрады 00049 constant RES_DIO_OUT : std_logic_vector( 15 downto 0 ):=x"0020"; -- ресурсы тетрады 00050 constant FIFO_DIO_OUT : std_logic_vector( 15 downto 0 ):=x"0400"; -- размер FIFO 00051 constant FTYPE_DIO_OUT : std_logic_vector( 15 downto 0 ):=x"0040"; -- ширина FIFO 00052 00053 component trd_admdio64_out_v4 is 00054 port( 00055 00056 -- GLOBAL 00057 reset : in std_logic; -- 0 - сброс 00058 clk : in std_logic; -- тактовая частота 00059 00060 -- Управление тетрадой 00061 data_in : in std_logic_vector( 63 downto 0 ); -- шина данных DATA 00062 cmd_data_in : in std_logic_vector( 15 downto 0 ); -- шина данных CMD_DATA 00063 cmd : in bl_cmd; -- сигналы управления 00064 00065 cmd_data_out : out std_logic_vector( 15 downto 0 ); -- выходы регистров, через буфер 00066 cmd_data_out2 : out std_logic_vector( 15 downto 0 ); -- выходы регистров, без буфера 00067 00068 bx_irq : out std_logic; -- 1 - прерывание от тетрады 00069 bx_drq : out bl_drq; -- управление DMA 00070 00071 mode0 : out std_logic_vector( 15 downto 0 ); -- регистр MODE0 00072 mode1 : out std_logic_vector( 15 downto 0 ); -- регистр MODE1 00073 mode2 : out std_logic_vector( 15 downto 0 ); -- регистр MODE2 00074 mode3 : out std_logic_vector( 15 downto 0 ); -- регистр MODE3 00075 00076 fifo_rst : out std_logic; -- 0 - сброс FIFO 00077 start : out std_logic; -- 1 - разрешение работы (MODE0[5]) 00078 00079 -- Чтение из FIFO 00080 data_out : out std_logic_vector(63 downto 0); -- шина данных FIFO 00081 data_cs : in std_logic; -- 0 - чтение данных 00082 flag_rd : out bl_fifo_flag; -- флаги FIFO 00083 clk_rd : in std_logic; -- тактовая частота чтения данных 00084 fifo_cnt : out std_logic_vector( 12 downto 0 ); -- число слов в FIFO 00085 00086 -- Тестовые выводы -- 00087 test : out std_logic_vector(7 downto 0) 00088 -------------------------------------------- 00089 ); 00090 end component; 00091 00092 end trd_admdio64_out_v4_pkg; 00093 00094 00095 library ieee; 00096 use ieee.std_logic_1164.all; 00097 use IEEE.std_logic_unsigned.all ; 00098 00099 library unisim; 00100 use unisim.vcomponents.all; 00101 00102 library work; 00103 use work.cl_chn_v4_pkg.all; 00104 use work.adm2_pkg.all; 00105 use work.cl_fifo1024x65_v5_pkg.all; 00106 00107 entity trd_admdio64_out_v4 is 00108 port( 00109 00110 -- GLOBAL 00111 reset : in std_logic; -- 0 - сброс 00112 clk : in std_logic; -- тактовая частота 00113 00114 -- Управление тетрадой 00115 data_in : in std_logic_vector( 63 downto 0 ); -- шина данных DATA 00116 cmd_data_in : in std_logic_vector( 15 downto 0 ); -- шина данных CMD_DATA 00117 cmd : in bl_cmd; -- сигналы управления 00118 00119 cmd_data_out : out std_logic_vector( 15 downto 0 ); -- выходы регистров, через буфер 00120 cmd_data_out2 : out std_logic_vector( 15 downto 0 ); -- выходы регистров, без буфера 00121 00122 bx_irq : out std_logic; -- 1 - прерывание от тетрады 00123 bx_drq : out bl_drq; -- управление DMA 00124 00125 mode0 : out std_logic_vector( 15 downto 0 ); -- регистр MODE0 00126 mode1 : out std_logic_vector( 15 downto 0 ); -- регистр MODE1 00127 mode2 : out std_logic_vector( 15 downto 0 ); -- регистр MODE2 00128 mode3 : out std_logic_vector( 15 downto 0 ); -- регистр MODE3 00129 00130 fifo_rst : out std_logic; -- 0 - сброс FIFO 00131 start : out std_logic; -- 1 - разрешение работы (MODE0[5]) 00132 00133 -- Чтение из FIFO 00134 data_out : out std_logic_vector(63 downto 0); -- шина данных FIFO 00135 data_cs : in std_logic; -- 0 - чтение данных 00136 flag_rd : out bl_fifo_flag; -- флаги FIFO 00137 clk_rd : in std_logic; -- тактовая частота чтения данных 00138 fifo_cnt : out std_logic_vector( 12 downto 0 ); -- число слов в FIFO 00139 00140 -- Тестовые выводы -- 00141 test : out std_logic_vector(7 downto 0) 00142 -------------------------------------------- 00143 ); 00144 end trd_admdio64_out_v4; 00145 00146 00147 architecture trd_admdio64_out_v4 of trd_admdio64_out_v4 is 00148 00149 00150 component ctrl_start_v3 is 00151 port( 00152 00153 reset : in std_logic; -- 0 - сброс 00154 mode0 : in std_logic_vector( 15 downto 0 ); -- регистр MODE0 00155 stmode : in std_logic_vector( 15 downto 0 ); -- регистр STMODE 00156 fmode : in std_logic_vector( 5 downto 0 ); -- регистр FMODE 00157 fdiv : in std_logic_vector( 15 downto 0 ); -- регистр FDIV 00158 fdiv_we : in std_logic; -- 1 - запись в регистр FDIV 00159 00160 cnt0 : in std_logic_vector( 15 downto 0 ); -- счётчик начальной задержки 00161 cnt1 : in std_logic_vector( 15 downto 0 ); -- счётчик принимаемых слов 00162 cnt2 : in std_logic_vector( 15 downto 0 ); -- счётчик пропускаемых слов 00163 00164 b_clk : in std_logic_vector( 15 downto 0 ); -- входы тактовой частоты 00165 b_start : in std_logic_vector( 15 downto 0 ); -- входы сигнала START 00166 00167 bx_clk : out std_logic; -- выход тактовой частоты, глобальный 00168 bi_clk : out std_logic; -- выход тактовой частота, опережает bx_clk 00169 bx_start : out std_logic; -- выход сигнала start синхронный с bx_clk 00170 bx_start_a : out std_logic; -- асинхронный выход сигнала start 00171 bx_start_sync : out std_logic; -- импульс синхронизации 00172 00173 goe0 : out std_logic; -- включение генератора 60MHz 00174 goe1 : out std_logic -- включение генератора 50MHz 00175 00176 ); 00177 00178 end component; 00179 00180 component cl_fifo1024x64_v3 is 00181 port( 00182 -- сброс 00183 reset : in std_logic; -- 0 - сброс 00184 00185 -- запись 00186 clk_wr : in std_logic; -- тактовая частота 00187 data_in : in std_logic_vector(63 downto 0); -- данные 00188 data_en : in std_logic; -- 1 - запись в fifo 00189 flag_wr : out bl_fifo_flag; -- флаги fifo, синхронно с clk_wr 00190 cnt_wr : out std_logic_vector( 9 downto 0 ); -- счётчик слов 00191 00192 -- чтение 00193 clk_rd : in std_logic; -- тактовая частота 00194 data_out : out std_logic_vector(63 downto 0); -- данные 00195 data_cs : in std_logic; -- 0 - чтение из fifo 00196 flag_rd : out bl_fifo_flag; -- флаги fifo, синхронно с clk_rd 00197 cnt_rd : out std_logic_vector( 9 downto 0 ); -- счётчик слов 00198 00199 cnt_pae : in std_logic_vector(12 downto 0); -- номер слова FIFO при котором оно еще почти пустое 00200 cnt_paf : in std_logic_vector(12 downto 0); -- номер слова FIFO при котором оно почти полное 00201 rt_mode : in std_logic -- 1 - retransmit 00202 00203 ); 00204 end component; 00205 00206 signal rst,fifo_rst0 : std_logic; 00207 signal flag_wr : bl_fifo_flag; 00208 signal c_mode0 : std_logic_vector(15 downto 0); 00209 signal fdiv,stmode,fmode : std_logic_vector(15 downto 0); 00210 signal status : std_logic_vector(15 downto 0); 00211 signal cnt0,cnt1,cnt2 : std_logic_vector(15 downto 0); 00212 signal fdiv_we : std_logic; 00213 signal clk_trd,start_trd : std_logic; 00214 signal clk_d,cw,cw0 : std_logic; 00215 signal cnt_wr : std_logic_vector( 9 downto 0 ); 00216 signal cnt_rd : std_logic_vector( 9 downto 0 ); 00217 signal sflag_pae : std_logic_vector( 15 downto 0 ); 00218 signal sflag_paf : std_logic_vector( 15 downto 0 ); 00219 00220 00221 begin 00222 00223 xstatus: ctrl_buft16 port map( 00224 t => cmd.status_cs, 00225 i => status, 00226 o => cmd_data_out ); 00227 00228 cmd_data_out2 <= status; 00229 00230 chn: cl_chn_v4 00231 generic map( 00232 -- 2 - out - для тетрады вывода 00233 -- 1 - in - для тетрады ввода 00234 chn_type => 2 00235 ) 00236 00237 port map ( 00238 reset => reset, 00239 clk => clk, 00240 -- Флаги 00241 cmd_rdy => '1', 00242 rdy => '1', --flag_wr.hf, 00243 fifo_flag => flag_wr, 00244 --st9 => ready, 00245 -- Тетрада 00246 data_in => cmd_data_in, 00247 cmd => cmd, 00248 bx_irq => bx_irq, 00249 bx_drq => bx_drq, 00250 status => status, 00251 -- Управление 00252 mode0 => c_mode0, 00253 mode1 => mode1, 00254 mode2 => mode2, 00255 mode3 => mode3, 00256 sflag_pae => sflag_pae, 00257 sflag_paf => sflag_paf, 00258 fdiv => fdiv , 00259 fdiv_we => fdiv_we , 00260 fmode => fmode, 00261 stmode => stmode, 00262 rst => rst, 00263 fifo_rst => fifo_rst0 00264 ); 00265 00266 00267 x_fifo: cl_fifo1024x65_v5 00268 port map( 00269 -- сброс 00270 reset => fifo_rst0, 00271 -- запись 00272 clk_wr => clk, 00273 data_in => data_in, 00274 data_en => cmd.data_we, 00275 flag_wr => flag_wr, 00276 --cnt_wr => cnt_wr, 00277 -- чтение 00278 clk_rd => clk_rd, 00279 data_out => data_out, 00280 data_cs => data_cs, 00281 flag_rd => flag_rd 00282 --cnt_rd => cnt_rd 00283 00284 ); 00285 00286 fifo_rst<=fifo_rst0; 00287 00288 fifo_cnt( 9 downto 0 ) <= cnt_rd; 00289 fifo_cnt( 12 downto 10 ) <= (others=>'0'); 00290 00291 mode0 <= c_mode0; 00292 start <= c_mode0(5); 00293 00294 end trd_admdio64_out_v4; 00295 00296