AMBPEX5_v20_SX50T_CORE
|
00001 ------------------------------------------------------------------------------- 00002 -- 00003 -- Title : ambpex5_v20_sx50t_core 00004 -- Author : Dmitry Smekhov 00005 -- Company : Instrumental Systems 00006 -- E-mail : dsmv@insys.ru 00007 -- 00008 -- Version : 1.0 00009 -- 00010 ------------------------------------------------------------------------------- 00011 -- 00012 -- Description : Проверка ядра PCI Express на модуле AMBPEX5 00013 -- 00014 ------------------------------------------------------------------------------- 00015 00016 00017 library ieee; 00018 use ieee.std_logic_1164.all; 00019 00020 package ambpex5_v20_sx50t_core_pkg is 00021 00022 component ambpex5_v20_sx50t_core is 00023 generic ( 00024 is_simulation : integer:=0 -- 0 - синтез, 1 - моделирование ADM 00025 ); 00026 port( 00027 ---- PCI-Express ---- 00028 txp : out std_logic_vector( 7 downto 0 ); 00029 txn : out std_logic_vector( 7 downto 0 ); 00030 00031 rxp : in std_logic_vector( 7 downto 0 ):=(others=>'0'); 00032 rxn : in std_logic_vector( 7 downto 0 ):=(others=>'0'); 00033 00034 mgt251_p : in std_logic:='0'; -- тактовая частота 250 MHz от PCI_Express 00035 mgt251_n : in std_logic:='0'; 00036 00037 bperst : in std_logic:='0'; -- 0 - сброс 00038 00039 btp : out std_logic_vector(3 downto 1); -- контрольные точки 00040 00041 ---- Светодиоды ---- 00042 bled1 : out std_logic; 00043 bled2 : out std_logic; 00044 bled3 : out std_logic; 00045 bled4 : out std_logic 00046 ); 00047 end component; 00048 00049 end package; 00050 00051 library ieee; 00052 use ieee.std_logic_1164.all; 00053 use ieee.std_logic_arith.all; 00054 use ieee.std_logic_unsigned.all; 00055 00056 00057 library unisim; 00058 use unisim.vcomponents.all; 00059 00060 00061 use work.adm2_pkg.all; 00062 use work.cl_ambpex5_m5_pkg.all; 00063 use work.trd_main_v8_pkg.all; 00064 use work.trd_pio_std_v4_pkg.all; 00065 use work.trd_admdio64_out_v4_pkg.all; 00066 use work.trd_admdio64_in_v6_pkg.all; 00067 use work.trd_test_ctrl_m1_pkg.all; 00068 00069 00070 entity ambpex5_v20_sx50t_core is 00071 generic ( 00072 is_simulation : integer:=0 -- 0 - синтез, 1 - моделирование ADM 00073 ); 00074 port( 00075 ---- PCI-Express ---- 00076 txp : out std_logic_vector( 7 downto 0 ); 00077 txn : out std_logic_vector( 7 downto 0 ); 00078 00079 rxp : in std_logic_vector( 7 downto 0 ):=(others=>'0'); 00080 rxn : in std_logic_vector( 7 downto 0 ):=(others=>'0'); 00081 00082 mgt251_p : in std_logic:='0'; -- тактовая частота 250 MHz от PCI_Express 00083 mgt251_n : in std_logic:='0'; 00084 00085 bperst : in std_logic:='0'; -- 0 - сброс 00086 00087 btp : out std_logic_vector(3 downto 1); -- контрольные точки 00088 00089 ---- Светодиоды ---- 00090 bled1 : out std_logic; 00091 bled2 : out std_logic; 00092 bled3 : out std_logic; 00093 bled4 : out std_logic 00094 ); 00095 end ambpex5_v20_sx50t_core; 00096 00097 00098 architecture ambpex5_v20_sx50t_core of ambpex5_v20_sx50t_core is 00099 00100 00101 00102 ---- Тактовая частота внутренней шины ---- 00103 signal clk : std_logic; 00104 00105 ---- 0 - Сброс для тетрады MAIN ---- 00106 signal reset_main : std_logic; 00107 00108 ---- 0 - Сброс для всех тетрад кроме MAIN ---- 00109 signal reset : std_logic; 00110 00111 ---- Шина адреса для подключения к узлу начального тестирования тетрады MAIN ---- 00112 signal trd_host_adr : std_logic_vector( 31 downto 0 ):=(others=>'0'); 00113 00114 ---- Шина данных, через которую производиться запись в регистры тетрады ---- 00115 signal trd_host_data : std_logic_array_16x64; 00116 00117 ---- Шина данных, через которую производиться запись в регистры тетрады ---- 00118 signal trd_host_cmd_data : std_logic_array_16x16; 00119 00120 ---- Комада управления для каждой тетрады ---- 00121 signal trd_host_cmd : std_logic_array_16xbl_cmd; 00122 00123 ---- Выходы региста DATA от каждой тетрады ---- 00124 signal trd_data : std_logic_array_16x64:=(others=>(others=>'0')); 00125 00126 ---- Выходы регистров STATUS, CMD_ADR, CMD_DATA от каждой тетрады ---- 00127 signal trd_cmd_data : std_logic_array_16x16:=(others=>(others=>'1')); 00128 00129 ---- Запросы DMA от каждой тетрады 00130 signal trd_drq : std_logic_array_16xbl_drq:=(others=>(others=>'0')); 00131 00132 ---- Запросы прерываения от каждой тетрады ---- 00133 signal trd_irq : std_logic_array_16xbl_irq:=(others=>'0'); 00134 00135 ---- Сброс FIFO от каждой тетрады ---- 00136 signal trd_reset_fifo : std_logic_array_16xbl_reset_fifo:=(others=>'0'); 00137 00138 ---- Запросы DMA от тетрады MAIN (после маршрутизации) ---- 00139 signal trd_main_drq : std_logic_array_16xbl_drq:=(others=>(others=>'0')); 00140 00141 ---- Запросы прерываения от тетрады MAIN (после маршрутизации) ---- 00142 signal trd_main_irq : std_logic_array_16xbl_irq:=(others=>'0'); 00143 00144 ---- Регистры управления DMA ---- 00145 signal trd_main_sel_drq : std_logic_array_16x6:=(others=>(others=>'0')); 00146 00147 signal test_mode : std_logic; 00148 00149 ---- Комада управления для каждой тетрады ---- 00150 signal trd_trd_cmd : std_logic_array_16xbl_cmd; 00151 00152 ---- Флаги FIFO ---- 00153 signal trd_flag_rd : std_logic_array_16xbl_fifo_flag; 00154 00155 00156 signal di_mode1 : std_logic_vector( 15 downto 0 ); 00157 signal di_data : std_logic_vector( 63 downto 0 ); 00158 signal di_data_we : std_logic; 00159 signal di_flag_wr : bl_fifo_flag; 00160 signal di_start : std_logic; 00161 signal di_fifo_rst : std_logic; 00162 signal di_clk : std_logic; 00163 00164 signal do_mode1 : std_logic_vector( 15 downto 0 ); 00165 signal do_data : std_logic_vector( 63 downto 0 ); 00166 signal do_data_cs : std_logic; 00167 signal do_flag_rd : bl_fifo_flag; 00168 signal do_start : std_logic; 00169 signal do_fifo_rst : std_logic; 00170 signal do_clk : std_logic; 00171 00172 signal clk200 : std_logic; 00173 signal freq0 : std_logic; 00174 signal freq1 : std_logic; 00175 signal freq2 : std_logic; 00176 00177 signal led_h1 : std_logic; 00178 signal led_h2 : std_logic; 00179 signal led_h3 : std_logic; 00180 signal led_h4 : std_logic; 00181 00182 signal tp1 : std_logic; 00183 signal tp2 : std_logic; 00184 signal tp3 : std_logic; 00185 00186 signal px : std_logic_vector( 3 downto 1 ); 00187 00188 signal clk30k : std_logic; 00189 00190 ----------------- Константы ---------------------------------------- 00191 constant rom_main: bl_trd_rom:= 00192 ( 00193 0=>ID_MAIN, -- Идентификатор тетрады 00194 1=>ID_MODE_MAIN, -- Модификатор тетрады 00195 2=>VER_MAIN, -- Версия тетрады 00196 3=>RES_MAIN, -- Ресурсы тетрады 00197 4=>FIFO_MAIN, -- Размер FIFO, иммитируется FIFO 256x64 00198 5=>FTYPE_MAIN, -- Тип FIFO 00199 6=>x"0100", -- Подключение тетрады 00200 7=>x"0001", -- Номер экземпляра 00201 8=>x"4953", -- Сигнатура ПЛИС ADM 00202 9=>x"0200", -- Версия ADM 00203 10=>x"0100", -- Версия прошивки ПЛИС 00204 11=>x"0000", -- Модификация прошивки ПЛИС 00205 12=>"0000000011001011", -- Используемые тетрады 00206 13=>x"0000", -- Ресурсы ПЛИС 00207 14=>x"0000", -- Не используется 00208 15=>x"0000", -- Не используется 00209 16=>x"5507", -- Идентификатор базового модуля 00210 17=>x"0200", -- Версия базового модуля 00211 18=>x"0000", -- Идентификатор субмодуля 00212 19=>x"0000", -- Версия субмодуля 00213 20=>x"0109", -- Номер сборки прошивки 00214 31 downto 21 => x"0000" ); 00215 00216 00217 constant rom_dio_in: bl_trd_rom:= 00218 ( 00219 0=>ID_DIO_IN, -- Идентификатор тетрады 00220 1=>ID_MODE_DIO_IN, -- Модификатор тетрады 00221 2=>VER_DIO_IN, -- Версия тетрады 00222 3=>RES_DIO_IN, -- Ресурсы тетрады 00223 4=>FIFO_DIO_IN, -- Размер FIFO 00224 5=>FTYPE_DIO_IN, -- Тип FIFO 00225 6=>x"010D", -- Подключение тетрады 00226 7=>x"0001", -- Номер экземпляра 00227 31 downto 8 => x"0000");-- резерв 00228 00229 constant rom_dio_out: bl_trd_rom:= 00230 ( 00231 0=>ID_DIO_OUT, -- Идентификатор тетрады 00232 1=>ID_MODE_DIO_OUT, -- Модификатор тетрады 00233 2=>VER_DIO_OUT, -- Версия тетрады 00234 3=>RES_DIO_OUT, -- Ресурсы тетрады 00235 4=>FIFO_DIO_OUT, -- Размер FIFO 00236 5=>FTYPE_DIO_OUT, -- Тип FIFO 00237 6=>x"0C01", -- Подключение тетрады 00238 7=>x"0001", -- Номер экземпляра 00239 31 downto 8 => x"0000");-- резерв 00240 00241 00242 constant rom_test_ctrl: bl_trd_rom:= 00243 ( 00244 0=>ID_TEST, -- Идентификатор тетрады 00245 1=>ID_MODE_TEST, -- Модификатор тетрады 00246 2=>VER_TEST, -- Версия тетрады 00247 3=>RES_TEST, -- Ресурсы тетрады 00248 4=>FIFO_TEST, -- Размер FIFO 00249 5=>FTYPE_TEST, -- Тип FIFO 00250 6=>x"0000", -- Подключение тетрады 00251 7=>x"0001", -- Номер экземпляра 00252 31 downto 8 => x"0000");-- резерв 00253 00254 00255 constant trd_rom : std_logic_array_16xbl_trd_rom := 00256 ( 00257 0 => rom_main, 00258 1 => rom_test_ctrl, 00259 2 => rom_empty, 00260 3 => rom_empty, 00261 4 => rom_empty, 00262 5 => rom_empty, 00263 6 => rom_dio_in, 00264 7 => rom_dio_out, 00265 others=> rom_empty ); 00266 00267 begin 00268 00269 xled1: obuf_s_16 port map( bled1, led_h1 ); 00270 xled2: obuf_s_16 port map( bled2, led_h2 ); 00271 xled3: obuf_s_16 port map( bled3, led_h3 ); 00272 xled4: obuf_s_16 port map( bled4, led_h4 ); 00273 00274 00275 tp1 <= not tp1 when rising_edge( clk ); 00276 tp2 <= px(2); 00277 tp3 <= clk30k; 00278 00279 btp1: obuf_f_16 port map( btp(1), tp1 ); 00280 btp2: obuf_f_16 port map( btp(2), tp2 ); 00281 btp3: obuf_f_16 port map( btp(3), tp3 ); 00282 00283 00284 00285 00286 amb: cl_ambpex5_m5 00287 generic map( 00288 ---- Константы тетрад ---- 00289 trd_rom => trd_rom, 00290 ---- Разрешение чтения из регистра DATA ---- 00291 trd_in => "0000000001000001", 00292 ---- Разрешение чтения из регистра STATUS ---- 00293 trd_st => "0000000011000011", 00294 00295 is_simulation => is_simulation-- 0 - синтез, 1 - моделирование ADM 00296 ) 00297 port map( 00298 ---- PCI-Express ---- 00299 txp => txp, 00300 txn => txn, 00301 00302 rxp => rxp, 00303 rxn => rxn, 00304 00305 mgt251_p => mgt251_p, -- тактовая частота 250 MHz от PCI_Express 00306 mgt251_n => mgt251_n, 00307 00308 00309 bperst => bperst, -- 0 - сброс 00310 00311 p => px, 00312 00313 led_h1 => led_h1, -- 0 - светится светодиод H1 00314 led_h2 => led_h2, -- 0 - светится светодиод H2 00315 led_h3 => led_h3, -- 0 - светится светодиод H3 00316 led_h4 => led_h4, -- 0 - светится светодиод H4 00317 00318 ---- Внутренняя шина ---- 00319 clk_out => clk, -- тактовая частота 00320 reset_out => reset_main, -- 0 - сброс 00321 test_mode => test_mode, -- 1 - тестовый режим 00322 clk30k => clk30k, -- тактовая частота 30 кГц 00323 clk200_out => clk200, -- тактовая частота 200 МГц 00324 00325 ---- Шина адреса для подключения к узлу начального тестирования тетрады MAIN ---- 00326 trd_host_adr => trd_host_adr( 15 downto 0 ), 00327 00328 ---- Шина данных, через которую производиться запись в регистры тетрады ---- 00329 trd_host_data => trd_host_data, 00330 00331 ---- Шина данных, через которую производиться запись в регистры тетрады ---- 00332 trd_host_cmd_data=>trd_host_cmd_data, 00333 00334 ---- Комада управления для каждой тетрады ---- 00335 trd_host_cmd => trd_host_cmd, 00336 00337 ---- Выходы региста DATA от каждой тетрады ---- 00338 trd_data => trd_data, 00339 00340 ---- Выходы регистров STATUS, CMD_ADR, CMD_DATA от каждой тетрады ---- 00341 trd_cmd_data => trd_cmd_data, 00342 00343 ---- Запросы DMA от каждой тетрады ---- 00344 trd_drq => trd_drq, 00345 00346 ---- Запросы DMA от тетрады MAIN (после маршрутизации) ---- 00347 trd_main_drq => trd_main_drq, 00348 00349 ---- Регистры управления DMA ---- 00350 trd_main_sel_drq=> trd_main_sel_drq, 00351 00352 ---- Сброс FIFO от каждой тетрады ---- 00353 trd_reset_fifo => trd_reset_fifo, 00354 00355 ---- Запросы прерываения от тетрады MAIN (после маршрутизации) ---- 00356 trd_main_irq => trd_main_irq 00357 00358 ); 00359 00360 00361 00362 main: trd_main_v8 00363 port map 00364 ( 00365 00366 -- GLOBAL 00367 reset => reset_main, 00368 clk => clk, 00369 00370 -- T0 00371 adr_in => trd_host_adr( 6 downto 0 ), 00372 data_in => trd_host_data(0), 00373 cmd_data_in => trd_host_cmd_data(0), 00374 00375 cmd => trd_host_cmd(0), 00376 00377 data_out => trd_data(0), 00378 cmd_data_out => trd_cmd_data(0), 00379 00380 bx_drq => trd_drq(0), -- управление DMA 00381 00382 test_mode => test_mode, 00383 test_mode_init => '1' , 00384 00385 b1_irq => trd_irq(1), 00386 b2_irq => trd_irq(2), 00387 b3_irq => trd_irq(3), 00388 b4_irq => trd_irq(4), 00389 b5_irq => trd_irq(5), 00390 b6_irq => trd_irq(6), 00391 b7_irq => trd_irq(7), 00392 00393 00394 b1_drq => trd_drq(1), 00395 b2_drq => trd_drq(2), 00396 b3_drq => trd_drq(3), 00397 b4_drq => trd_drq(4), 00398 b5_drq => trd_drq(5), 00399 b6_drq => trd_drq(6), 00400 b7_drq => trd_drq(7), 00401 00402 00403 int1 => trd_main_irq(1), 00404 00405 drq0 => trd_main_drq(0), 00406 drq1 => trd_main_drq(1), 00407 drq2 => trd_main_drq(2), 00408 drq3 => trd_main_drq(3), 00409 00410 reset_out => reset, 00411 00412 fifo_rst_out => trd_reset_fifo(0), 00413 00414 -- Синхронизация 00415 b_clk => (others=>'0'), 00416 00417 b_start => (others=>'0'), 00418 00419 -- SYNX 00420 sn_rdy0 => '0', 00421 sn_rdy1 => '0', 00422 sn_start_en => '0', 00423 sn_sync0 => '0' 00424 00425 ); 00426 00427 00428 00429 00430 00431 dio_in: trd_admdio64_in_v6 00432 port map( 00433 -- GLOBAL 00434 reset => reset, -- 0 - сброс 00435 clk => clk, -- тактовая частота 00436 00437 -- Управление тетрадой 00438 cmd_data_in => trd_host_cmd_data(6), 00439 cmd => trd_host_cmd(6), 00440 00441 data_out2 => trd_data(6), 00442 cmd_data_out2 => trd_cmd_data(6), 00443 00444 00445 bx_irq => trd_irq(6), -- 1 - прерывание от тетрады 00446 bx_drq => trd_drq(6), -- управление DMA 00447 00448 mode1 => di_mode1, -- регистр MODE1 00449 00450 fifo_rst => di_fifo_rst, -- 0 - сброс FIFO (выход) 00451 00452 start => di_start, -- 1 - разрешение работы (MODE0[5]) 00453 00454 -- Запись FIFO 00455 data_in => di_data, -- данные для записи в FIFO 00456 data_wr => di_data_we, -- 1 - строб записи 00457 flag_wr => di_flag_wr, -- флаги FIFO, синхронно с clk_wr 00458 clk_wr => di_clk -- тактовая частота записи в FIFO 00459 ); 00460 00461 trd_reset_fifo(6) <= di_fifo_rst; 00462 00463 00464 00465 dio_out: trd_admdio64_out_v4 00466 port map( 00467 00468 -- GLOBAL 00469 reset => reset, -- 0 - сброс 00470 clk => clk, -- тактовая частота 00471 00472 -- Управление тетрадой 00473 data_in => trd_host_data(7), 00474 cmd_data_in => trd_host_cmd_data(7), 00475 00476 cmd => trd_host_cmd(7), 00477 00478 cmd_data_out2 => trd_cmd_data(7), 00479 00480 00481 bx_irq => trd_irq(7), -- 1 - прерывание от тетрады 00482 bx_drq => trd_drq(7), -- управление DMA 00483 00484 mode1 => do_mode1, -- регистр MODE1 00485 00486 fifo_rst => do_fifo_rst, -- 0 - сброс FIFO 00487 start => do_start, -- 1 - разрешение работы (MODE0[5]) 00488 00489 -- Чтение из FIFO 00490 data_out => do_data, -- шина данных FIFO 00491 data_cs => do_data_cs, -- 0 - чтение данных 00492 flag_rd => do_flag_rd, -- флаги FIFO 00493 clk_rd => do_clk -- тактовая частота чтения данных 00494 00495 ); 00496 00497 trd_reset_fifo(7) <= do_fifo_rst; 00498 00499 freq0 <= clk; 00500 freq1 <= '0'; 00501 freq2 <= '0'; 00502 00503 00504 test_ctrl: trd_test_ctrl_m1 00505 generic map( 00506 SystemFreq => 2000 -- значение системной тактовой частоты 00507 ) 00508 port map( 00509 -- GLOBAL 00510 reset => reset, -- 0 - сброс 00511 clk => clk, -- тактовая частота 00512 00513 -- Управление тетрадой 00514 cmd_data_in => trd_host_cmd_data(1), 00515 00516 cmd => trd_host_cmd(1), 00517 00518 cmd_data_out2 => trd_cmd_data(1), 00519 00520 00521 bx_irq => trd_irq(1), -- 1 - прерывание от тетрады 00522 bx_drq => trd_drq(1), -- управление DMA 00523 00524 ---- DIO_IN ---- 00525 di_clk => di_clk, -- тактовая частота записи в FIFO 00526 di_data => di_data, -- данные out 00527 di_data_we => di_data_we, -- 1 - запись данных 00528 di_flag_wr => di_flag_wr, -- флаги FIFO 00529 di_fifo_rst => di_fifo_rst, -- 0 - сброс FIFO 00530 di_mode1 => di_mode1, -- регистр MODE1 00531 di_start => di_start, -- 1 - разрешение работы (MODE0[5]) 00532 00533 ---- DIO_OUT ---- 00534 do_clk => do_clk, -- тактовая частота чтения из FIFO 00535 do_data => do_data, -- данные in 00536 do_data_cs => do_data_cs, -- 0 - чтение данных 00537 do_flag_rd => do_flag_rd, -- флаги FIFO 00538 do_fifo_rst => do_fifo_rst, -- 0 - сброс FIFO 00539 do_mode1 => do_mode1, -- регистр MODE1 00540 do_start => do_start, -- 1 - разрешение работы (MODE0[5]) 00541 00542 clk_sys => clk200, -- опорная тактовая частота 00543 clk_check0 => freq0, -- измеряемая частота, вход 0 00544 clk_check1 => freq1, -- измеряемая частота, вход 0 00545 clk_check2 => freq2-- измеряемая частота, вход 0 00546 00547 ); 00548 00549 00550 end ambpex5_v20_sx50t_core;