AMBPEX5_v20_SX50T_CORE
top/ambpex5_v20_sx50t_core.vhd
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;