AMBPEX5_v20_SX50T_CORE
|
00001 --------------------------------------------------------------------------------------------------- 00002 -- 00003 -- Title : trd_main_v8 00004 -- Author : Dmitry Smekhov 00005 -- Company : Instrumental System 00006 -- 00007 -- Version : 1.4 00008 -- 00009 --------------------------------------------------------------------------------------------------- 00010 -- 00011 -- Description : Реализация тетрады MAIN 00012 -- 00013 -- Модификация 8 - не используются счётчики CNT0, CNT1, CNT2 00014 -- Выход cmd_data_out реализован на мультиплексоре 00015 -- Узел начального тестирования сбрасывается через сигнал сброса FIFO 00016 -- Поддерживается тестовый режим работы SYNX 00017 -- 00018 --------------------------------------------------------------------------------------------------- 00019 -- 00020 -- Регистр SYNX 00021 -- 0 - RDY0_OUT 00022 -- 1 - RDY1_OUT 00023 -- 4 - RDY0_OE 00024 -- 5 - RDY1_OE 00025 -- 12 - START_EN_OUT 00026 -- 13 - SYNC0_OUT 00027 -- 14 - ENCODE_OUT 00028 -- 15 - SYNX_TEST_MODE 00029 -- 00030 -- Регистр SYNX_IN - адрес 0x202 00031 -- 9 - SN_RDY0 00032 -- 10 - SN_RDY1 00033 -- 11 - SN_START 00034 -- 12 - SN_START_EN 00035 -- 13 - SN_SYNC0 00036 -- 14 - SN_ENCODE - вход тактовой частоы 00037 -- 15 - SYNX_TEST_MODE - значение установленное в SYNX_TEST_MODE 00038 -- 00039 --------------------------------------------------------------------------------------------------- 00040 -- 00041 -- Version 1.4 10.06.2010 00042 -- Добавлены входы irq и drq для тетрад 8..15 00043 -- Входы начинают действовать при установке параметра ext_drq=1 00044 -- 00045 -- Добавлен регистр TEST_MODE - управление режимом формирования 00046 -- тестовой последовательности 00047 -- 00048 -- 00049 --------------------------------------------------------------------------------------------------- 00050 -- 00051 -- Version 1.3 26.03.2009 00052 -- Добавлен выход запроса DMA 00053 -- 00054 -- 11.05.2010 Добавлены триггеры на выходы reset_out, fifo_rst_out 00055 -- 00056 --------------------------------------------------------------------------------------------------- 00057 -- 00058 -- Version 1.2 06.12.2006 00059 -- Исправлено формирование запроса DMA - запрос разрешается при установке MODE0[3]=1 00060 -- Исправлен сброс тестового регистра - сброс может производиться через команду сброса FIFO 00061 -- 00062 --------------------------------------------------------------------------------------------------- 00063 -- 00064 -- Version 1.1 12.12.2005 00065 -- Убран буфер с 3-состоянием 00066 -- 00067 --------------------------------------------------------------------------------------------------- 00068 -- 00069 -- Version 1.0 25.08.2005 00070 -- Создан из trd_main_v1 версии 1.2 00071 -- 00072 --------------------------------------------------------------------------------------------------- 00073 00074 00075 library IEEE; 00076 use IEEE.STD_LOGIC_1164.all; 00077 00078 use work.adm2_pkg.all; 00079 00080 package trd_main_v8_pkg is 00081 00082 constant ID_MAIN : std_logic_vector( 15 downto 0 ):=x"0001"; -- идентификатор тетрады 00083 constant ID_MODE_MAIN : std_logic_vector( 15 downto 0 ):=x"0008"; -- модификатор тетрады 00084 constant VER_MAIN : std_logic_vector( 15 downto 0 ):=x"0104"; -- версия тетрады 00085 constant RES_MAIN : std_logic_vector( 15 downto 0 ):=x"0010"; -- ресурсы тетрады 00086 constant FIFO_MAIN : std_logic_vector( 15 downto 0 ):=x"0100"; -- размер FIFO 00087 constant FTYPE_MAIN : std_logic_vector( 15 downto 0 ):=x"0040"; -- ширина FIFO 00088 00089 component trd_main_v8 is 00090 generic( 00091 sync0_mode : in integer:=0; -- режим управления sync0_out 00092 -- 0 - через SYNX(13) 00093 -- 1 - при SYNX(15)='0' - вход sn_sync0_in 00094 -- при SYNX(15)='1' - через SYNX(13) 00095 00096 ext_drq : in integer:=0 -- 0 - используются только входы b1_drq - b7_drq 00097 -- 1 - используются все входы b_drq 00098 ); 00099 port ( 00100 00101 -- GLOBAL 00102 reset : in std_logic; 00103 clk : in std_logic; 00104 00105 -- T0 00106 adr_in : in std_logic_vector( 6 downto 0 ); -- шина адреса 00107 data_in : in std_logic_vector( 63 downto 0 ); -- шина данных для DATA 00108 cmd_data_in : in std_logic_vector( 15 downto 0 ); -- шина данных для CMD_DATA 00109 00110 cmd : in bl_cmd; -- команда для терады 00111 00112 data_out : out std_logic_vector( 63 downto 0 ); -- выход DATA 00113 cmd_data_out: out std_logic_vector( 15 downto 0 ); -- выход регистров 00114 00115 bx_drq : out bl_drq; -- управление DMA 00116 00117 test_mode : out std_logic; -- 1 - тестовый режим работы 00118 test_mode_init: in std_logic:='1'; -- начальное состояние test_mode 00119 fifo_rst_out: out std_logic; -- 0 - сброс FIFO 00120 00121 -- Вход прерываний 00122 b1_irq : in std_logic:='0'; 00123 b2_irq : in std_logic:='0'; 00124 b3_irq : in std_logic:='0'; 00125 b4_irq : in std_logic:='0'; 00126 b5_irq : in std_logic:='0'; 00127 b6_irq : in std_logic:='0'; 00128 b7_irq : in std_logic:='0'; 00129 b8_irq : in std_logic:='0'; 00130 b9_irq : in std_logic:='0'; 00131 b10_irq : in std_logic:='0'; 00132 b11_irq : in std_logic:='0'; 00133 b12_irq : in std_logic:='0'; 00134 b13_irq : in std_logic:='0'; 00135 b14_irq : in std_logic:='0'; 00136 b15_irq : in std_logic:='0'; 00137 00138 00139 -- Вход запросов DMA 00140 b1_drq : in bl_drq:=( '0', '0', '0' ); 00141 b2_drq : in bl_drq:=( '0', '0', '0' ); 00142 b3_drq : in bl_drq:=( '0', '0', '0' ); 00143 b4_drq : in bl_drq:=( '0', '0', '0' ); 00144 b5_drq : in bl_drq:=( '0', '0', '0' ); 00145 b6_drq : in bl_drq:=( '0', '0', '0' ); 00146 b7_drq : in bl_drq:=( '0', '0', '0' ); 00147 b8_drq : in bl_drq:=( '0', '0', '0' ); 00148 b9_drq : in bl_drq:=( '0', '0', '0' ); 00149 b10_drq : in bl_drq:=( '0', '0', '0' ); 00150 b11_drq : in bl_drq:=( '0', '0', '0' ); 00151 b12_drq : in bl_drq:=( '0', '0', '0' ); 00152 b13_drq : in bl_drq:=( '0', '0', '0' ); 00153 b14_drq : in bl_drq:=( '0', '0', '0' ); 00154 b15_drq : in bl_drq:=( '0', '0', '0' ); 00155 00156 -- Выход DRQ и IRQ 00157 int1 : out std_logic; 00158 int2 : out std_logic; 00159 int3 : out std_logic; 00160 00161 drq0 : out bl_drq; 00162 drq1 : out bl_drq; 00163 drq2 : out bl_drq; 00164 drq3 : out bl_drq; 00165 00166 00167 reset_out : out std_logic; -- программный сброс 00168 00169 00170 -- Управление мультплексором 00171 cp0 : out std_logic; 00172 cp1 : out std_logic; 00173 00174 -- Управление генераторами 00175 goe0 : out std_logic; 00176 goe1 : out std_logic; 00177 00178 -- THDAC 00179 thclk : out std_logic; -- тактовая частота загрузки ИПН 00180 thdin : out std_logic; -- данные ИПН 00181 thrs : out std_logic; -- сброс ИПН 00182 thld : out std_logic; -- загрузка данных в ИПН 00183 00184 00185 00186 mode0 : out std_logic_vector( 15 downto 0 ); -- регистр MODE0 00187 mode1 : out std_logic_vector( 15 downto 0 ); -- регистр MODE1 00188 synx : out std_logic_vector( 15 downto 0 ); -- регистр SYNX 00189 00190 -- Выход регистров выбора канала DMA 00191 sel_drq0 : out std_logic_vector( 6 downto 0 ); 00192 sel_drq1 : out std_logic_vector( 6 downto 0 ); 00193 sel_drq2 : out std_logic_vector( 6 downto 0 ); 00194 sel_drq3 : out std_logic_vector( 6 downto 0 ); 00195 00196 -- Тактовая частота 00197 b_clk : in std_logic_vector( 15 downto 0 ); -- вход 00198 bx_clk : out std_logic; -- выбранная тактовая частота тетрады 00199 00200 -- Старт 00201 b_start : in std_logic_vector( 15 downto 0 ); -- вход 00202 bx_start : out std_logic; -- сигнал разрешения сбора 00203 bx_start_a : out std_logic; -- асинхронный сигнал разрешения сбора 00204 bx_start_sync: out std_logic; -- импульс синхронизации 00205 00206 -- SYNX 00207 sn_rdy0 : in std_logic; -- готовность 0 00208 sn_rdy1 : in std_logic; -- готовность 1 00209 sn_start_en : in std_logic; -- 0 - разрешение сбора 00210 sn_sync0 : in std_logic; -- вход сигнала sync 00211 00212 sn_rdy0_out : out std_logic; -- выход sn_rdy0 00213 sn_rdy1_out : out std_logic; -- выход sn_rdy1 00214 sn_start_en_out: out std_logic; -- выход sn_start_en 00215 sn_sync0_out: out std_logic; -- выход sn_sync0 00216 sn_sync0_in : in std_logic:='0'; -- управление сигналом sn_syn0_out в ребочем режиме 00217 00218 sn_rdy0_oe : out std_logic; -- 1 - разрешение выхода sn_rdy0 00219 sn_rdy1_oe : out std_logic; -- 1 - разрешение выхода sn_rdy1 00220 sn_master : out std_logic -- 1 - разрешение выхода start_en, start, encode 00221 00222 00223 00224 ); 00225 end component; 00226 00227 end trd_main_v8_pkg; 00228 00229 00230 00231 library ieee; 00232 use ieee.std_logic_1164.all; 00233 00234 library work; 00235 use work.adm2_pkg.all; 00236 use work.ctrl_start_v2_pkg.all; 00237 use work.cl_test0_v4_pkg.all; 00238 00239 entity trd_main_v8 is 00240 generic( 00241 sync0_mode : in integer:=0; -- режим управления sync0_out 00242 -- 0 - через SYNX(13) 00243 -- 1 - при SYNX(15)='0' - вход sn_sync0_in 00244 -- при SYNX(15)='1' - через SYNX(13) 00245 00246 ext_drq : in integer:=0 -- 0 - используются только входы b1_drq - b7_drq 00247 -- 1 - используются все входы b_drq 00248 00249 ); 00250 port ( 00251 -- GLOBAL 00252 reset : in std_logic; 00253 clk : in std_logic; 00254 00255 -- T0 00256 adr_in : in std_logic_vector( 6 downto 0 ); -- шина адреса 00257 data_in : in std_logic_vector( 63 downto 0 ); -- шина данных для DATA 00258 cmd_data_in : in std_logic_vector( 15 downto 0 ); -- шина данных для CMD_DATA 00259 00260 cmd : in bl_cmd; -- команда для терады 00261 00262 data_out : out std_logic_vector( 63 downto 0 ); -- выход DATA 00263 cmd_data_out: out std_logic_vector( 15 downto 0 ); -- выход регистров 00264 00265 bx_drq : out bl_drq; -- управление DMA 00266 00267 test_mode : out std_logic; -- 1 - тестовый режим работы 00268 test_mode_init: in std_logic:='1'; -- начальное состояние test_mode 00269 fifo_rst_out: out std_logic; -- 0 - сброс FIFO 00270 00271 -- Вход прерываний 00272 b1_irq : in std_logic:='0'; 00273 b2_irq : in std_logic:='0'; 00274 b3_irq : in std_logic:='0'; 00275 b4_irq : in std_logic:='0'; 00276 b5_irq : in std_logic:='0'; 00277 b6_irq : in std_logic:='0'; 00278 b7_irq : in std_logic:='0'; 00279 b8_irq : in std_logic:='0'; 00280 b9_irq : in std_logic:='0'; 00281 b10_irq : in std_logic:='0'; 00282 b11_irq : in std_logic:='0'; 00283 b12_irq : in std_logic:='0'; 00284 b13_irq : in std_logic:='0'; 00285 b14_irq : in std_logic:='0'; 00286 b15_irq : in std_logic:='0'; 00287 00288 -- Вход запросов DMA 00289 b1_drq : in bl_drq:=( '0', '0', '0' ); 00290 b2_drq : in bl_drq:=( '0', '0', '0' ); 00291 b3_drq : in bl_drq:=( '0', '0', '0' ); 00292 b4_drq : in bl_drq:=( '0', '0', '0' ); 00293 b5_drq : in bl_drq:=( '0', '0', '0' ); 00294 b6_drq : in bl_drq:=( '0', '0', '0' ); 00295 b7_drq : in bl_drq:=( '0', '0', '0' ); 00296 b8_drq : in bl_drq:=( '0', '0', '0' ); 00297 b9_drq : in bl_drq:=( '0', '0', '0' ); 00298 b10_drq : in bl_drq:=( '0', '0', '0' ); 00299 b11_drq : in bl_drq:=( '0', '0', '0' ); 00300 b12_drq : in bl_drq:=( '0', '0', '0' ); 00301 b13_drq : in bl_drq:=( '0', '0', '0' ); 00302 b14_drq : in bl_drq:=( '0', '0', '0' ); 00303 b15_drq : in bl_drq:=( '0', '0', '0' ); 00304 00305 -- Выход DRQ и IRQ 00306 int1 : out std_logic; 00307 int2 : out std_logic; 00308 int3 : out std_logic; 00309 00310 drq0 : out bl_drq; 00311 drq1 : out bl_drq; 00312 drq2 : out bl_drq; 00313 drq3 : out bl_drq; 00314 00315 00316 reset_out : out std_logic; -- программный сброс 00317 00318 00319 -- Управление мультплексором 00320 cp0 : out std_logic; 00321 cp1 : out std_logic; 00322 00323 -- Управление генераторами 00324 goe0 : out std_logic; 00325 goe1 : out std_logic; 00326 00327 -- THDAC 00328 thclk : out std_logic; -- тактовая частота загрузки ИПН 00329 thdin : out std_logic; -- данные ИПН 00330 thrs : out std_logic; -- сброс ИПН 00331 thld : out std_logic; -- загрузка данных в ИПН 00332 00333 00334 00335 mode0 : out std_logic_vector( 15 downto 0 ); -- регистр MODE0 00336 mode1 : out std_logic_vector( 15 downto 0 ); -- регистр MODE1 00337 synx : out std_logic_vector( 15 downto 0 ); -- регистр SYNX 00338 00339 -- Выход регистров выбора канала DMA 00340 sel_drq0 : out std_logic_vector( 6 downto 0 ); 00341 sel_drq1 : out std_logic_vector( 6 downto 0 ); 00342 sel_drq2 : out std_logic_vector( 6 downto 0 ); 00343 sel_drq3 : out std_logic_vector( 6 downto 0 ); 00344 00345 -- Тактовая частота 00346 b_clk : in std_logic_vector( 15 downto 0 ); -- вход 00347 bx_clk : out std_logic; -- выбранная тактовая частота тетрады 00348 00349 -- Старт 00350 b_start : in std_logic_vector( 15 downto 0 ); -- вход 00351 bx_start : out std_logic; -- сигнал разрешения сбора 00352 bx_start_a : out std_logic; -- асинхронный сигнал разрешения сбора 00353 bx_start_sync: out std_logic; -- импульс синхронизации 00354 00355 -- SYNX 00356 sn_rdy0 : in std_logic; -- готовность 0 00357 sn_rdy1 : in std_logic; -- готовность 1 00358 sn_start_en : in std_logic; -- 0 - разрешение сбора 00359 sn_sync0 : in std_logic; -- вход сигнала sync 00360 00361 sn_rdy0_out : out std_logic; -- выход sn_rdy0 00362 sn_rdy1_out : out std_logic; -- выход sn_rdy1 00363 sn_start_en_out: out std_logic; -- выход sn_start_en 00364 sn_sync0_out: out std_logic; -- выход sn_sync0 00365 sn_sync0_in : in std_logic:='0'; -- управление сигналом sn_syn0_out в ребочем режиме 00366 00367 sn_rdy0_oe : out std_logic; -- 1 - разрешение выхода sn_rdy0 00368 sn_rdy1_oe : out std_logic; -- 1 - разрешение выхода sn_rdy1 00369 sn_master : out std_logic -- 1 - разрешение выхода start_en, start, encode 00370 00371 00372 00373 ); 00374 00375 00376 end trd_main_v8; 00377 00378 00379 architecture trd_main_v8 of trd_main_v8 is 00380 00381 component cl_test0_v1 is 00382 port( 00383 reset: in std_logic; 00384 clk: in std_logic; 00385 00386 adr_in: in std_logic_vector( 6 downto 0 ); 00387 data_in: in std_logic_vector( 63 downto 0 ); 00388 data_en: in std_logic; 00389 data_cs: in std_logic; 00390 00391 data_out: out std_logic_vector( 63 downto 0 ); 00392 test_mode_init: in std_logic; 00393 test_mode: out std_logic 00394 ); 00395 00396 end component; 00397 00398 component ctrl_thdac is 00399 port( 00400 reset : in std_logic; -- 0 - сброс 00401 clk : in std_logic; -- тактовая частота 100mhz 00402 start : in std_logic; -- 1 - страт 00403 data_dac : in std_logic_vector(11 downto 0); -- данные для ипн 00404 clkdac_out : out std_logic; -- выходная тактовая частота 00405 ld : out std_logic; -- сигнал загрузки ипн 00406 ready : out std_logic; -- 1 - пересылка завершена 00407 thrs : out std_logic; -- 0 - сброс ипн 00408 sdo_dac : out std_logic -- последовательный порта ипн 00409 ); 00410 end component; 00411 00412 00413 signal c_mode0 : std_logic_vector( 15 downto 0 ); -- MODE0 00414 signal c_mask, c_inv : std_logic_vector( 15 downto 0 ); -- IRQ_MAK, IRQ_INV 00415 signal c_thdac : std_logic_vector( 11 downto 0 ); -- THDAC 00416 signal thdac_start : std_logic; -- 1 - запуск выдачи в ИПН 00417 signal c_mux : std_logic_vector( 1 downto 0 ); -- MUX 00418 signal do : std_logic_vector( 63 downto 0 ); -- выход шины данных модуля тестирования 00419 signal c_synx : std_logic_vector( 15 downto 0 ); -- SYNX 00420 signal c_fmode : std_logic_vector( 5 downto 0 ); -- FMODE 00421 signal c_fdiv : std_logic_vector( 15 downto 0 ); -- FDIV 00422 signal fdiv_we : std_logic; -- 1 - запись в FDIV 00423 signal c_stmode : std_logic_vector( 15 downto 0 ); -- STMODE 00424 signal irq_en : std_logic_vector( 15 downto 0 ); -- IRQ_EN 00425 signal c_test_mode : std_logic; -- TEST_MODE 00426 00427 -- выбор канала прерывания 00428 signal c_sel0, c_sel1, c_sel2, c_sel3, c_sel4, c_sel5, c_sel6, c_sel7: std_logic_vector( 1 downto 0 ); 00429 00430 -- выбор канала запроса DMA 00431 signal c_sel_drq0, c_sel_drq1, c_sel_drq2, c_sel_drq3: std_logic_vector( 6 downto 0 ); 00432 signal b0_irq : std_logic; -- запрос прерывание 00433 signal b0_drq : bl_drq; -- запрос DMA 00434 signal rst : std_logic; -- 0 - сброс 00435 00436 -- распределение прерываний 00437 signal i0_1, i1_1, i2_1, i3_1, i4_1, i5_1, i6_1, i7_1 : std_logic; 00438 signal i0_2, i1_2, i2_2, i3_2, i4_2, i5_2, i6_2, i7_2 : std_logic; 00439 signal i0_3, i1_3, i2_3, i3_3, i4_3, i5_3, i6_3, i7_3 : std_logic; 00440 signal i8_1, i9_1, i10_1, i11_1, i12_1, i13_1, i14_1, i15_1 : std_logic; 00441 signal i8_2, i9_2, i10_2, i11_2, i12_2, i13_2, i14_2, i15_2 : std_logic; 00442 signal i8_3, i9_3, i10_3, i11_3, i12_3, i13_3, i14_3, i15_3 : std_logic; 00443 00444 signal status : std_logic_vector( 15 downto 0 ); -- регистр состояния 00445 signal th_rdy : std_logic; -- 1 - готовность ИПН 00446 signal data_csp : std_logic; -- 1 - чтение регистра DATA 00447 signal drq0i, drq1i, drq2i, drq3i: bl_drq; -- внутренние сигналы DMA 00448 00449 signal fifo_rst : std_logic; -- 0 - сброс узла тестирования 00450 signal synx_test_mode : std_logic; -- 1 - режим тестирования разъёма SYNX 00451 signal reg_synx_in : std_logic_vector( 15 downto 0 ); -- регистр SYNX_IN 00452 signal bx_clki : std_logic; 00453 00454 begin 00455 00456 00457 data_csp <= not cmd.data_cs; 00458 00459 d_test0: cl_test0_v4 00460 port map ( 00461 reset => reset, 00462 reset_reg => fifo_rst, 00463 clk => clk , 00464 reg_test_mode => c_test_mode, -- 1 - формирование псевдослучайной последовательности 00465 00466 adr_in => adr_in, 00467 data_in => data_in , 00468 data_en => cmd.data_we, 00469 --data_en => '0', 00470 data_cs => data_csp, 00471 00472 data_out => do , 00473 test_mode_init => test_mode_init, 00474 test_mode => test_mode); 00475 00476 00477 --xstatus: ctrl_buft16 port map( 00478 -- t => cmd.status_cs, 00479 -- i => status, 00480 -- o => cmd_data_out ); 00481 -- 00482 --xirq: ctrl_buft16 port map( 00483 -- t => cmd.cmd_data_cs, 00484 -- i => irq_en, 00485 -- o => cmd_data_out ); 00486 00487 00488 cmd_data_out <= status when cmd.status_cs='0' else 00489 irq_en when cmd.adr(1)='0' else 00490 reg_synx_in; 00491 00492 00493 00494 data_out<=do; 00495 00496 00497 irq_en(0)<='0'; 00498 irq_en( 15 downto 4 )<=(others=>'0'); 00499 00500 00501 pr_mode0: process( reset, clk ) 00502 variable vthdac_start: std_logic; 00503 variable vfdiv_we: std_logic; 00504 begin 00505 if( reset='0' ) then 00506 c_mode0<=(others=>'0'); 00507 elsif( rising_edge( clk ) ) then 00508 vthdac_start:='0'; 00509 vfdiv_we:='0'; 00510 if( cmd.cmd_data_we='1' ) then 00511 00512 if( cmd.adr(9)='0' and cmd.adr(8)='0' ) then 00513 case cmd.adr( 4 downto 0 ) is 00514 when "00000" => -- MODE0 00515 c_mode0<=cmd_data_in( 15 downto 0 ); 00516 when others=>null; 00517 end case; 00518 end if; 00519 end if; 00520 end if; 00521 end process; 00522 00523 00524 pr_reg: process( rst, clk ) 00525 variable vthdac_start: std_logic; 00526 variable vfdiv_we: std_logic; 00527 begin 00528 if( rst='0' ) then 00529 vthdac_start:='0'; 00530 vfdiv_we:='0'; 00531 irq_en( 3 downto 1 ) <= (others=>'0'); 00532 c_mask<=(others=>'0'); 00533 c_inv<=(others=>'0'); 00534 c_fmode<=(others=>'0'); 00535 c_fdiv<=(others=>'0'); 00536 c_stmode<=(others=>'0'); 00537 c_sel0<=(others=>'0'); 00538 c_sel1<=(others=>'0'); 00539 c_sel2<=(others=>'0'); 00540 c_sel3<=(others=>'0'); 00541 c_sel4<=(others=>'0'); 00542 c_sel5<=(others=>'0'); 00543 c_sel6<=(others=>'0'); 00544 c_sel7<=(others=>'0'); 00545 c_sel_drq0<=(others=>'0'); 00546 c_sel_drq1<=(others=>'0'); 00547 c_sel_drq2<=(others=>'0'); 00548 c_sel_drq3<=(others=>'0'); 00549 mode1<=(others=>'0'); 00550 c_synx<=(others=>'0'); 00551 c_mux<=(others=>'0'); 00552 c_thdac<=(others=>'0'); 00553 c_test_mode <= '0'; 00554 elsif( rising_edge( clk ) ) then 00555 vthdac_start:='0'; 00556 vfdiv_we:='0'; 00557 if( cmd.cmd_data_we='1' ) then 00558 if( cmd.adr(9)='1' and cmd.adr(8)='0' ) then 00559 if( cmd.adr(0)='0' ) then -- IRQENST 00560 irq_en( 3 downto 1 ) <= irq_en( 3 downto 1 ) or cmd_data_in( 3 downto 1 ); 00561 else 00562 irq_en( 3 downto 1 ) <= irq_en( 3 downto 1 ) and not cmd_data_in( 3 downto 1 ); 00563 end if; 00564 --irq_en( 3 downto 1 ) <= irq_en( 3 downto 1 ) or data_in( 3 downto 1 ); 00565 end if; 00566 00567 if( cmd.adr(9)='0' and cmd.adr(8)='0' ) then 00568 case cmd.adr( 4 downto 0 ) is 00569 when "00001" => -- C_MASK 00570 c_mask<=cmd_data_in( 15 downto 0 ); 00571 when "00010" => -- C_INV 00572 c_inv<=cmd_data_in( 15 downto 0 ); 00573 -- when "0001" => -- IRQ_ACK 00574 -- irq_ack<=data_in( 2 downto 0 ); 00575 when "00011" => -- FMODE 00576 c_fmode<=cmd_data_in( 5 downto 0 ); 00577 when "00100" => -- FDIV 00578 c_fdiv<=cmd_data_in( 15 downto 0 ); 00579 vfdiv_we:='1'; 00580 when "00101" => -- STMODE 00581 c_stmode<=cmd_data_in( 15 downto 0 ); 00582 00583 when "01001" => -- MODE1 00584 mode1 <= cmd_data_in( 15 downto 0 ); 00585 00586 when "01100" => -- TEST_MODE 00587 c_test_mode <= cmd_data_in(0); 00588 00589 when "01101" => -- SYNX 00590 c_synx( 15 downto 0 ) <=cmd_data_in( 15 downto 0 ); 00591 when "01110" => -- THDAC 00592 c_thdac<=cmd_data_in( 11 downto 0 ); 00593 vthdac_start:='1'; 00594 when "01111" => -- MUX 00595 c_mux<=cmd_data_in( 1 downto 0 ); 00596 when "10000" => -- c_sel0 00597 c_sel0( 1 downto 0 ) <=cmd_data_in( 1 downto 0 ); 00598 c_sel_drq0( 6 downto 0 ) <= cmd_data_in( 14 downto 8 ); 00599 when "10001" => -- c_sel1 00600 c_sel1( 1 downto 0 ) <=cmd_data_in( 1 downto 0 ); 00601 c_sel_drq1( 6 downto 0 ) <= cmd_data_in( 14 downto 8 ); 00602 when "10010" => -- c_sel2 00603 c_sel2( 1 downto 0 ) <=cmd_data_in( 1 downto 0 ); 00604 c_sel_drq2( 6 downto 0 ) <= cmd_data_in( 14 downto 8 ); 00605 when "10011" => -- c_sel3 00606 c_sel3( 1 downto 0 ) <=cmd_data_in( 1 downto 0 ); 00607 c_sel_drq3( 6 downto 0 ) <= cmd_data_in( 14 downto 8 ); 00608 when "10100" => -- c_sel4 00609 c_sel4( 1 downto 0 ) <=cmd_data_in( 1 downto 0 ); 00610 when "10101" => -- c_sel5 00611 c_sel5( 1 downto 0 ) <=cmd_data_in( 1 downto 0 ); 00612 when "10110" => -- c_sel6 00613 c_sel6( 1 downto 0 ) <=cmd_data_in( 1 downto 0 ); 00614 when "10111" => -- c_sel7 00615 c_sel7( 1 downto 0 ) <=cmd_data_in( 1 downto 0 ); 00616 00617 00618 when others=>null; 00619 end case; 00620 end if; 00621 end if; 00622 thdac_start <= vthdac_start; 00623 fdiv_we <= vfdiv_we; 00624 end if; 00625 end process; 00626 00627 rst<='0' when reset='0' or c_mode0(0)='1' else '1'; 00628 reset_out<=rst after 1 ns when rising_edge( clk ); 00629 00630 fifo_rst <= '0' when rst='0' or c_mode0(1)='1' else '1'; 00631 fifo_rst_out <= fifo_rst after 1 ns when rising_edge( clk ); 00632 00633 cp0<=c_mux(0); 00634 cp1<=c_mux(1); 00635 00636 -- Формирование прерываний 00637 i0_1<='1' when c_sel0(1 downto 0)="01" and b0_irq='1' else '0'; 00638 i1_1<='1' when c_sel1(1 downto 0)="01" and b1_irq='1' else '0'; 00639 i2_1<='1' when c_sel2(1 downto 0)="01" and b2_irq='1' else '0'; 00640 i3_1<='1' when c_sel3(1 downto 0)="01" and b3_irq='1' else '0'; 00641 i4_1<='1' when c_sel4(1 downto 0)="01" and b4_irq='1' else '0'; 00642 i5_1<='1' when c_sel5(1 downto 0)="01" and b5_irq='1' else '0'; 00643 i6_1<='1' when c_sel6(1 downto 0)="01" and b6_irq='1' else '0'; 00644 i7_1<='1' when c_sel7(1 downto 0)="01" and b7_irq='1' else '0'; 00645 i8_1<='1' when c_sel0(1 downto 0)="01" and b8_irq='1' else '0'; 00646 i9_1<='1' when c_sel1(1 downto 0)="01" and b9_irq='1' else '0'; 00647 i10_1<='1' when c_sel2(1 downto 0)="01" and b10_irq='1' else '0'; 00648 i11_1<='1' when c_sel3(1 downto 0)="01" and b11_irq='1' else '0'; 00649 i12_1<='1' when c_sel4(1 downto 0)="01" and b12_irq='1' else '0'; 00650 i13_1<='1' when c_sel5(1 downto 0)="01" and b13_irq='1' else '0'; 00651 i14_1<='1' when c_sel6(1 downto 0)="01" and b14_irq='1' else '0'; 00652 i15_1<='1' when c_sel7(1 downto 0)="01" and b15_irq='1' else '0'; 00653 00654 i0_2<='1' when c_sel0(1 downto 0)="10" and b0_irq='1' else '0'; 00655 i1_2<='1' when c_sel1(1 downto 0)="10" and b1_irq='1' else '0'; 00656 i2_2<='1' when c_sel2(1 downto 0)="10" and b2_irq='1' else '0'; 00657 i3_2<='1' when c_sel3(1 downto 0)="10" and b3_irq='1' else '0'; 00658 i4_2<='1' when c_sel4(1 downto 0)="10" and b4_irq='1' else '0'; 00659 i5_2<='1' when c_sel5(1 downto 0)="10" and b5_irq='1' else '0'; 00660 i6_2<='1' when c_sel6(1 downto 0)="10" and b6_irq='1' else '0'; 00661 i7_2<='1' when c_sel7(1 downto 0)="10" and b7_irq='1' else '0'; 00662 i8_2<='1' when c_sel0(1 downto 0)="10" and b8_irq='1' else '0'; 00663 i9_2<='1' when c_sel1(1 downto 0)="10" and b9_irq='1' else '0'; 00664 i10_2<='1' when c_sel2(1 downto 0)="10" and b10_irq='1' else '0'; 00665 i11_2<='1' when c_sel3(1 downto 0)="10" and b11_irq='1' else '0'; 00666 i12_2<='1' when c_sel4(1 downto 0)="10" and b12_irq='1' else '0'; 00667 i13_2<='1' when c_sel5(1 downto 0)="10" and b13_irq='1' else '0'; 00668 i14_2<='1' when c_sel6(1 downto 0)="10" and b14_irq='1' else '0'; 00669 i15_2<='1' when c_sel7(1 downto 0)="10" and b15_irq='1' else '0'; 00670 00671 i0_3<='1' when c_sel0(1 downto 0)="11" and b0_irq='1' else '0'; 00672 i1_3<='1' when c_sel1(1 downto 0)="11" and b1_irq='1' else '0'; 00673 i2_3<='1' when c_sel2(1 downto 0)="11" and b2_irq='1' else '0'; 00674 i3_3<='1' when c_sel3(1 downto 0)="11" and b3_irq='1' else '0'; 00675 i4_3<='1' when c_sel4(1 downto 0)="11" and b4_irq='1' else '0'; 00676 i5_3<='1' when c_sel5(1 downto 0)="11" and b5_irq='1' else '0'; 00677 i6_3<='1' when c_sel6(1 downto 0)="11" and b6_irq='1' else '0'; 00678 i7_3<='1' when c_sel7(1 downto 0)="11" and b7_irq='1' else '0'; 00679 i8_3<='1' when c_sel0(1 downto 0)="11" and b8_irq='1' else '0'; 00680 i9_3<='1' when c_sel1(1 downto 0)="11" and b9_irq='1' else '0'; 00681 i10_3<='1' when c_sel2(1 downto 0)="11" and b10_irq='1' else '0'; 00682 i11_3<='1' when c_sel3(1 downto 0)="11" and b11_irq='1' else '0'; 00683 i12_3<='1' when c_sel4(1 downto 0)="11" and b12_irq='1' else '0'; 00684 i13_3<='1' when c_sel5(1 downto 0)="11" and b13_irq='1' else '0'; 00685 i14_3<='1' when c_sel6(1 downto 0)="11" and b14_irq='1' else '0'; 00686 i15_3<='1' when c_sel7(1 downto 0)="11" and b15_irq='1' else '0'; 00687 00688 int1<=( i0_1 or i1_1 or i2_1 or i3_1 or i4_1 or i5_1 or i6_1 or i7_1 or 00689 i8_1 or i9_1 or i10_1 or i11_1 or i12_1 or i13_1 or i14_1 or i15_1 00690 ) and ( irq_en(1) ); 00691 00692 int2<=( i0_2 or i1_2 or i2_2 or i3_2 or i4_2 or i5_2 or i6_2 or i7_2 or 00693 i8_2 or i9_2 or i10_2 or i11_2 or i12_2 or i13_2 or i14_2 or i15_2 00694 ) and ( irq_en(2) ); 00695 00696 int3<=( i0_3 or i1_3 or i2_3 or i3_3 or i4_3 or i5_3 or i6_3 or i7_3 or 00697 i8_3 or i9_3 or i10_3 or i11_3 or i12_3 or i13_3 or i14_3 or i15_3 00698 ) and ( irq_en(3) ); 00699 00700 00701 gen_trd0: if( ext_drq=0 ) generate 00702 00703 pr_drq0: process( c_sel_drq0, b0_drq, b1_drq, b2_drq, b3_drq, 00704 b4_drq, b5_drq, b6_drq, b7_drq ) is 00705 begin 00706 case c_sel_drq0( 2 downto 0 ) is 00707 when "000" => drq0i<=b0_drq; 00708 when "001" => drq0i<=b1_drq; 00709 when "010" => drq0i<=b2_drq; 00710 when "011" => drq0i<=b3_drq; 00711 when "100" => drq0i<=b4_drq; 00712 when "101" => drq0i<=b5_drq; 00713 when "110" => drq0i<=b6_drq; 00714 when "111" => drq0i<=b7_drq; 00715 when others => null; 00716 end case; 00717 end process; 00718 00719 drq0.en<=drq0i.en and c_sel_drq0(4); 00720 drq0.req<=drq0i.req; 00721 drq0.ack<=drq0i.ack; 00722 00723 pr_drq1: process( c_sel_drq1, b0_drq, b1_drq, b2_drq, b3_drq, 00724 b4_drq, b5_drq, b6_drq, b7_drq ) is 00725 begin 00726 case c_sel_drq1( 2 downto 0 ) is 00727 when "000" => drq1i<=b0_drq; 00728 when "001" => drq1i<=b1_drq; 00729 when "010" => drq1i<=b2_drq; 00730 when "011" => drq1i<=b3_drq; 00731 when "100" => drq1i<=b4_drq; 00732 when "101" => drq1i<=b5_drq; 00733 when "110" => drq1i<=b6_drq; 00734 when "111" => drq1i<=b7_drq; 00735 when others => null; 00736 end case; 00737 end process; 00738 00739 drq1.en<=drq1i.en and c_sel_drq1(4); 00740 drq1.req<=drq1i.req; 00741 drq1.ack<=drq1i.ack; 00742 00743 pr_drq2: process( c_sel_drq2, b0_drq, b1_drq, b2_drq, b3_drq, 00744 b4_drq, b5_drq, b6_drq, b7_drq ) is 00745 begin 00746 case c_sel_drq2( 2 downto 0 ) is 00747 when "000" => drq2i<=b0_drq; 00748 when "001" => drq2i<=b1_drq; 00749 when "010" => drq2i<=b2_drq; 00750 when "011" => drq2i<=b3_drq; 00751 when "100" => drq2i<=b4_drq; 00752 when "101" => drq2i<=b5_drq; 00753 when "110" => drq2i<=b6_drq; 00754 when "111" => drq2i<=b7_drq; 00755 when others => null; 00756 end case; 00757 end process; 00758 00759 drq2.en<=drq2i.en and c_sel_drq2(4); 00760 drq2.req<=drq2i.req; 00761 drq2.ack<=drq2i.ack; 00762 00763 00764 00765 00766 00767 pr_drq3: process( c_sel_drq3, b0_drq, b1_drq, b2_drq, b3_drq, 00768 b4_drq, b5_drq, b6_drq, b7_drq ) is 00769 begin 00770 case c_sel_drq3( 2 downto 0 ) is 00771 when "000" => drq3i<=b0_drq; 00772 when "001" => drq3i<=b1_drq; 00773 when "010" => drq3i<=b2_drq; 00774 when "011" => drq3i<=b3_drq; 00775 when "100" => drq3i<=b4_drq; 00776 when "101" => drq3i<=b5_drq; 00777 when "110" => drq3i<=b6_drq; 00778 when "111" => drq3i<=b7_drq; 00779 when others => null; 00780 end case; 00781 end process; 00782 00783 drq3.en<=drq3i.en and c_sel_drq3(4); 00784 drq3.req<=drq3i.req; 00785 drq3.ack<=drq3i.ack; 00786 00787 end generate; 00788 00789 00790 00791 gen_trd8: if( ext_drq=1 ) generate 00792 00793 drq0i <= b0_drq when c_sel_drq0( 3 downto 0 )="0000" else 00794 b1_drq when c_sel_drq0( 3 downto 0 )="0001" else 00795 b2_drq when c_sel_drq0( 3 downto 0 )="0010" else 00796 b3_drq when c_sel_drq0( 3 downto 0 )="0011" else 00797 b4_drq when c_sel_drq0( 3 downto 0 )="0100" else 00798 b5_drq when c_sel_drq0( 3 downto 0 )="0101" else 00799 b6_drq when c_sel_drq0( 3 downto 0 )="0110" else 00800 b7_drq when c_sel_drq0( 3 downto 0 )="0111" else 00801 b8_drq when c_sel_drq0( 3 downto 0 )="1000" else 00802 b9_drq when c_sel_drq0( 3 downto 0 )="1001" else 00803 b10_drq when c_sel_drq0( 3 downto 0 )="1010" else 00804 b11_drq when c_sel_drq0( 3 downto 0 )="1011" else 00805 b12_drq when c_sel_drq0( 3 downto 0 )="1100" else 00806 b13_drq when c_sel_drq0( 3 downto 0 )="1101" else 00807 b14_drq when c_sel_drq0( 3 downto 0 )="1110" else 00808 b15_drq when c_sel_drq0( 3 downto 0 )="1111"; 00809 00810 00811 drq0.en<=drq0i.en and c_sel_drq0(4); 00812 drq0.req<=drq0i.req; 00813 drq0.ack<=drq0i.ack; 00814 00815 drq1i <= b0_drq when c_sel_drq1( 3 downto 0 )="0000" else 00816 b1_drq when c_sel_drq1( 3 downto 0 )="0001" else 00817 b2_drq when c_sel_drq1( 3 downto 0 )="0010" else 00818 b3_drq when c_sel_drq1( 3 downto 0 )="0011" else 00819 b4_drq when c_sel_drq1( 3 downto 0 )="0100" else 00820 b5_drq when c_sel_drq1( 3 downto 0 )="0101" else 00821 b6_drq when c_sel_drq1( 3 downto 0 )="0110" else 00822 b7_drq when c_sel_drq1( 3 downto 0 )="0111" else 00823 b8_drq when c_sel_drq1( 3 downto 0 )="1000" else 00824 b9_drq when c_sel_drq1( 3 downto 0 )="1001" else 00825 b10_drq when c_sel_drq1( 3 downto 0 )="1010" else 00826 b11_drq when c_sel_drq1( 3 downto 0 )="1011" else 00827 b12_drq when c_sel_drq1( 3 downto 0 )="1100" else 00828 b13_drq when c_sel_drq1( 3 downto 0 )="1101" else 00829 b14_drq when c_sel_drq1( 3 downto 0 )="1110" else 00830 b15_drq when c_sel_drq1( 3 downto 0 )="1111"; 00831 00832 drq1.en<=drq1i.en and c_sel_drq1(4); 00833 drq1.req<=drq1i.req; 00834 drq1.ack<=drq1i.ack; 00835 00836 drq2i <= b0_drq when c_sel_drq2( 3 downto 0 )="0000" else 00837 b1_drq when c_sel_drq2( 3 downto 0 )="0001" else 00838 b2_drq when c_sel_drq2( 3 downto 0 )="0010" else 00839 b3_drq when c_sel_drq2( 3 downto 0 )="0011" else 00840 b4_drq when c_sel_drq2( 3 downto 0 )="0100" else 00841 b5_drq when c_sel_drq2( 3 downto 0 )="0101" else 00842 b6_drq when c_sel_drq2( 3 downto 0 )="0110" else 00843 b7_drq when c_sel_drq2( 3 downto 0 )="0111" else 00844 b8_drq when c_sel_drq2( 3 downto 0 )="1000" else 00845 b9_drq when c_sel_drq2( 3 downto 0 )="1001" else 00846 b10_drq when c_sel_drq2( 3 downto 0 )="1010" else 00847 b11_drq when c_sel_drq2( 3 downto 0 )="1011" else 00848 b12_drq when c_sel_drq2( 3 downto 0 )="1100" else 00849 b13_drq when c_sel_drq2( 3 downto 0 )="1101" else 00850 b14_drq when c_sel_drq2( 3 downto 0 )="1110" else 00851 b15_drq when c_sel_drq2( 3 downto 0 )="1111"; 00852 00853 drq2.en<=drq2i.en and c_sel_drq2(4); 00854 drq2.req<=drq2i.req; 00855 drq2.ack<=drq2i.ack; 00856 00857 00858 00859 00860 00861 drq3i <= b0_drq when c_sel_drq3( 3 downto 0 )="0000" else 00862 b1_drq when c_sel_drq3( 3 downto 0 )="0001" else 00863 b2_drq when c_sel_drq3( 3 downto 0 )="0010" else 00864 b3_drq when c_sel_drq3( 3 downto 0 )="0011" else 00865 b4_drq when c_sel_drq3( 3 downto 0 )="0100" else 00866 b5_drq when c_sel_drq3( 3 downto 0 )="0101" else 00867 b6_drq when c_sel_drq3( 3 downto 0 )="0110" else 00868 b7_drq when c_sel_drq3( 3 downto 0 )="0111" else 00869 b8_drq when c_sel_drq3( 3 downto 0 )="1000" else 00870 b9_drq when c_sel_drq3( 3 downto 0 )="1001" else 00871 b10_drq when c_sel_drq3( 3 downto 0 )="1010" else 00872 b11_drq when c_sel_drq3( 3 downto 0 )="1011" else 00873 b12_drq when c_sel_drq3( 3 downto 0 )="1100" else 00874 b13_drq when c_sel_drq3( 3 downto 0 )="1101" else 00875 b14_drq when c_sel_drq3( 3 downto 0 )="1110" else 00876 b15_drq when c_sel_drq3( 3 downto 0 )="1111"; 00877 00878 drq3.en<=drq3i.en and c_sel_drq3(4); 00879 drq3.req<=drq3i.req; 00880 drq3.ack<=drq3i.ack; 00881 00882 end generate; 00883 00884 00885 sel_drq0 <= c_sel_drq0; 00886 sel_drq1 <= c_sel_drq1; 00887 sel_drq2 <= c_sel_drq2; 00888 sel_drq3 <= c_sel_drq3; 00889 00890 mode0 <= c_mode0; 00891 00892 00893 00894 00895 00896 b0_drq.en<=c_mode0(3); 00897 b0_drq.req<= c_mode0(3); 00898 b0_drq.ack<=data_csp; 00899 00900 bx_drq <= b0_drq; 00901 00902 start: ctrl_start_v2 port map ( 00903 00904 reset => rst, 00905 mode0 => c_mode0 , 00906 stmode => c_stmode, 00907 fmode => c_fmode, 00908 fdiv => c_fdiv, 00909 fdiv_we => fdiv_we, 00910 00911 b_clk => b_clk, 00912 b_start => b_start, 00913 00914 bx_clk => bx_clki, 00915 bx_start => bx_start, 00916 bx_start_a => bx_start_a, 00917 bx_start_sync => bx_start_sync, 00918 goe0 => goe0, 00919 goe1 => goe1 00920 ); 00921 00922 00923 thdac: ctrl_thdac port map ( 00924 reset => rst, 00925 clk => clk, 00926 start => thdac_start, 00927 data_dac => c_thdac, 00928 clkDAC_out => thclk, 00929 ld => thld, 00930 ready => th_rdy, 00931 thrs => thrs, 00932 sdo_dac => thdin ); 00933 00934 -- STATUS 00935 status(0) <= th_rdy; -- CMD_RDY 00936 status(1) <= '1'; -- RDY 00937 status(2) <= '1'; -- EF 00938 status(3) <= '1'; -- PAE 00939 status(4) <= '0'; -- HF 00940 status(5) <= '1'; -- PAF 00941 status(6) <= '1'; -- FF 00942 status(7) <= '0'; -- OVR 00943 status(8) <= '0'; -- UND 00944 status(9) <= sn_rdy0; -- SN_RDY0 00945 status(10) <= sn_rdy1; -- SN_RDY1 00946 status(11) <= b_start(4); -- SN_START 00947 status(12) <= sn_start_en; -- SN_START_EN 00948 status(13) <= sn_sync0; -- SN_SYNC0 00949 status(14) <= b_start(1); -- COMP0 00950 status(15) <= b_start(2); -- COMP1 00951 00952 00953 pr_b0_irq: process( status, c_mask, c_inv, c_mode0 ) 00954 variable v: std_logic; 00955 begin 00956 v:='0'; 00957 if( c_mode0(2)='1' ) then 00958 for i in 0 to 15 loop 00959 if( ((status(i) xor c_inv(i)) and c_mask(i))='1' ) then 00960 v:='1'; 00961 end if; 00962 end loop; 00963 end if; 00964 b0_irq<=v; 00965 end process; 00966 00967 00968 sn_rdy0_out <= c_synx(0); 00969 sn_rdy1_out <= c_synx(1); 00970 sn_rdy0_oe <= c_synx(4); 00971 sn_rdy1_oe <= c_synx(5); 00972 sn_start_en_out <= c_synx(12); 00973 --sn_sync0_out <= c_synx(13); 00974 00975 synx_test_mode <= c_synx(15); 00976 00977 gen_syn0_0: if( sync0_mode=0 ) generate 00978 00979 sn_sync0_out <= c_synx(13); 00980 00981 end generate; 00982 00983 gen_syn0_1: if( sync0_mode=1 ) generate 00984 00985 sn_sync0_out <= sn_sync0_in when synx_test_mode='0' else c_synx(13); 00986 00987 end generate; 00988 00989 00990 bx_clk <= bx_clki when synx_test_mode='0' else c_synx(14); 00991 00992 sn_master <= c_mode0(4); 00993 00994 reg_synx_in( 8 downto 0 ) <= (others=>'0'); 00995 00996 reg_synx_in(9) <= sn_rdy0; -- SN_RDY0 00997 reg_synx_in(10) <= sn_rdy1; -- SN_RDY1 00998 reg_synx_in(11) <= b_start(4); -- SN_START 00999 reg_synx_in(12) <= sn_start_en; -- SN_START_EN 01000 reg_synx_in(13) <= sn_sync0; -- SN_SYNC0 01001 reg_synx_in(14) <= b_clk(4); -- SN_ENCODE 01002 reg_synx_in(15) <= synx_test_mode; -- SYNX_TEST_MODE 01003 01004 synx <= c_synx; 01005 01006 end trd_main_v8;