DS_DMA
pcie_src/pcie_core64_m1/top/pcie_core64_m4.vhd
00001 -------------------------------------------------------------------------------
00002 --
00003 -- Title       : pcie_core64_m4
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 
00013 --                                Модификация 4 - Virtex 6 PCI Express 2.0 x4 
00014 --
00015 -------------------------------------------------------------------------------
00016 --
00017 --  Version 1.0         15.08.2011 
00018 --                                      Создан из pcie_core64_m1 v1.0
00019 --
00020 -------------------------------------------------------------------------------
00021 
00022 
00023 library ieee;
00024 use ieee.std_logic_1164.all;
00025 
00026 use work.core64_type_pkg.all;
00027 
00028 package pcie_core64_m4_pkg is
00029 
00030 --! контроллер PCI-Express 
00031 component pcie_core64_m4 is
00032         generic (  
00033                 refclk                  : integer:=100;         --! Значение опорной тактовой частоты [МГц]
00034                 is_simulation   : integer:=0            --! 0 - синтез, 1 - моделирование 
00035         );                
00036         
00037         port (
00038         
00039                 ---- PCI-Express ----
00040                 txp                             : out std_logic_vector( 3 downto 0 );
00041                 txn                             : out std_logic_vector( 3 downto 0 );
00042                 
00043                 rxp                             : in  std_logic_vector( 3 downto 0 );
00044                 rxn                             : in  std_logic_vector( 3 downto 0 );
00045                 
00046                 mgt250                  : in  std_logic; --! тактовая частота 250 MHz или 100 МГц от PCI_Express
00047                 
00048                 perst                   : in  std_logic;        --! 0 - сброс                                                 
00049                 
00050                 px                              : out std_logic_vector( 7 downto 0 );   --! контрольные точки 
00051                 
00052                 pcie_lstatus    : out std_logic_vector( 15 downto 0 ); -- регистр LSTATUS
00053                 pcie_link_up    : out std_logic;        -- 0 - завершена инициализация PCI-Express
00054                 
00055                 
00056                 ---- Локальная шина ----                     
00057                 clk_out                 : out std_logic;        --! тактовая частота 250 MHz               
00058                 reset_out               : out std_logic;        --! 0 - сброс
00059                 dcm_rstp                : out std_logic;        --! 1 - сброс DCM 266 МГц
00060 
00061                 ---- BAR0 - блоки управления ----
00062                 bp_host_data    : out std_logic_vector( 31 downto 0 );  --! шина данных - выход 
00063                 bp_data                 : in  std_logic_vector( 31 downto 0 );  --! шина данных - вход
00064                 bp_adr                  : out std_logic_vector( 19 downto 0 );  --! адрес регистра 
00065                 bp_we                   : out std_logic_vector( 3 downto 0 );   --! 1 - запись в регистры 
00066                 bp_rd                   : out std_logic_vector( 3 downto 0 );   --! 1 - чтение из регистров блока 
00067                 bp_sel                  : out std_logic_vector( 1 downto 0 );   --! номер блока для чтения 
00068                 bp_reg_we               : out std_logic;                        --! 1 - запись в регистр по адресам   0x100000 - 0x1FFFFF 
00069                 bp_reg_rd               : out std_logic;                        --! 1 - чтение из регистра по адресам 0x100000 - 0x1FFFFF 
00070                 bp_irq                  : in  std_logic;                        --! 1 - запрос прерывания 
00071 
00072                 ---- BAR1 ----  
00073                 aclk                    : in std_logic;                         --! тактовая частота локальной шины - 266 МГц
00074                 aclk_lock               : in std_logic;                         --! 1 - захват частоты
00075                 pb_master               : out type_pb_master;           --! запрос 
00076                 pb_slave                : in  type_pb_slave                     --! ответ  
00077                 
00078                                 
00079                 
00080         );
00081 end component;
00082 
00083 end package;
00084 
00085 
00086 
00087 library ieee;
00088 use ieee.std_logic_1164.all;            
00089 
00090 use work.core64_type_pkg.all;
00091 use work.core64_rx_engine_m2_pkg.all;
00092 use work.core64_tx_engine_m2_pkg.all;   
00093 use work.core64_reg_access_pkg.all;
00094 use work.core64_pb_disp_pkg.all;   
00095 use work.block_pe_fifo_ext_pkg.all;             
00096 use work.core64_interrupt_pkg.all;
00097 
00098 --! контроллер PCI-Express 
00099 entity pcie_core64_m4 is
00100         generic (
00101                 refclk                  : integer:=100;         --! Значение опорной тактовой частоты [МГц]
00102                 is_simulation   : integer:=0            --! 0 - синтез, 1 - моделирование 
00103         );                
00104         
00105         port (
00106         
00107                 ---- PCI-Express ----
00108                 txp                             : out std_logic_vector( 3 downto 0 );
00109                 txn                             : out std_logic_vector( 3 downto 0 );
00110                 
00111                 rxp                             : in  std_logic_vector( 3 downto 0 );
00112                 rxn                             : in  std_logic_vector( 3 downto 0 );
00113                 
00114                 mgt250                  : in  std_logic;        --! тактовая частота 250 MHz или 100 МГц от PCI_Express
00115                 
00116                 perst                   : in  std_logic;        --! 0 - сброс                                                 
00117                 
00118                 px                              : out std_logic_vector( 7 downto 0 );   --! контрольные точки 
00119                 
00120                 pcie_lstatus    : out std_logic_vector( 15 downto 0 ); --! регистр LSTATUS
00121                 pcie_link_up    : out std_logic;        --! 0 - завершена инициализация PCI-Express
00122                 
00123                 
00124                 ---- Локальная шина ----                     
00125                 clk_out                 : out std_logic;        --! тактовая частота 250 MHz               
00126                 reset_out               : out std_logic;        --! 0 - сброс
00127                 dcm_rstp                : out std_logic;        --! 1 - сброс DCM 266 МГц
00128 
00129                 ---- BAR0 - блоки управления ----
00130                 bp_host_data    : out std_logic_vector( 31 downto 0 );  --! шина данных - выход 
00131                 bp_data                 : in  std_logic_vector( 31 downto 0 );  --! шина данных - вход
00132                 bp_adr                  : out std_logic_vector( 19 downto 0 );  --! адрес регистра 
00133                 bp_we                   : out std_logic_vector( 3 downto 0 );   --! 1 - запись в регистры 
00134                 bp_rd                   : out std_logic_vector( 3 downto 0 );   --! 1 - чтение из регистров блока 
00135                 bp_sel                  : out std_logic_vector( 1 downto 0 );   --! номер блока для чтения 
00136                 bp_reg_we               : out std_logic;                        --! 1 - запись в регистр по адресам   0x100000 - 0x1FFFFF 
00137                 bp_reg_rd               : out std_logic;                        --! 1 - чтение из регистра по адресам 0x100000 - 0x1FFFFF 
00138                 bp_irq                  : in  std_logic;                        --! 1 - запрос прерывания 
00139 
00140                 ---- BAR1 ----  
00141                 aclk                    : in std_logic;                         --! тактовая частота локальной шины - 266 МГц
00142                 aclk_lock               : in std_logic;                         --! 1 - захват частоты
00143                 pb_master               : out type_pb_master;           --! запрос 
00144                 pb_slave                : in  type_pb_slave                     --! ответ  
00145                 
00146                 
00147         );
00148 end pcie_core64_m4;
00149 
00150 
00151 architecture pcie_core64_m4 of pcie_core64_m4 is
00152 
00153  component cl_v6pcie_x4    generic (
00154       PL_FAST_TRAIN : boolean);
00155     port (
00156       pci_exp_txp                    : out std_logic_vector(3 downto 0);
00157       pci_exp_txn                    : out std_logic_vector(3 downto 0);
00158       pci_exp_rxp                    : in std_logic_vector(3 downto 0);
00159       pci_exp_rxn                    : in std_logic_vector(3 downto 0);
00160       user_clk_out                   : out std_logic;
00161       user_reset_out                 : out std_logic;
00162       user_lnk_up                    : out std_logic;
00163       tx_buf_av                      : out std_logic_vector(5 downto 0);
00164       tx_cfg_req                     : out std_logic;
00165       tx_err_drop                    : out std_logic;
00166       s_axis_tx_tready               : out std_logic;
00167       s_axis_tx_tdata                : in std_logic_vector(63 downto 0);
00168       s_axis_tx_tlast                : in std_logic;
00169       s_axis_tx_tvalid               : in std_logic;
00170       s_axis_tx_tstrb                : in std_logic_vector(7 downto 0);
00171       s_axis_tx_tuser                : in std_logic_vector(3 downto 0);
00172       tx_cfg_gnt                     : in std_logic;
00173 
00174       m_axis_rx_tdata                : out std_logic_vector(63 downto 0);
00175       m_axis_rx_tstrb                : out std_logic_vector(7 downto 0);
00176       m_axis_rx_tlast                : out std_logic;
00177       m_axis_rx_tvalid               : out std_logic;
00178       m_axis_rx_tready               : in std_logic;
00179       m_axis_rx_tuser                : out std_logic_vector(21 downto 0);
00180       rx_np_ok                       : in std_logic;
00181       fc_cpld                        : out std_logic_vector(11 downto 0);
00182       fc_cplh                        : out std_logic_vector(7 downto 0);
00183       fc_npd                         : out std_logic_vector(11 downto 0);
00184       fc_nph                         : out std_logic_vector(7 downto 0);
00185       fc_pd                          : out std_logic_vector(11 downto 0);
00186       fc_ph                          : out std_logic_vector(7 downto 0);
00187       fc_sel                         : in std_logic_vector(2 downto 0);
00188       cfg_do                         : out std_logic_vector(31 downto 0);
00189       cfg_rd_wr_done                 : out std_logic;
00190       cfg_di                         : in std_logic_vector(31 downto 0);
00191       cfg_byte_en                    : in std_logic_vector(3 downto 0);
00192       cfg_dwaddr                     : in std_logic_vector(9 downto 0);
00193       cfg_wr_en                      : in std_logic;
00194       cfg_rd_en                      : in std_logic;
00195       cfg_err_cor                    : in std_logic;
00196       cfg_err_ur                     : in std_logic;
00197       cfg_err_ecrc                   : in std_logic;
00198       cfg_err_cpl_timeout            : in std_logic;
00199       cfg_err_cpl_abort              : in std_logic;
00200       cfg_err_cpl_unexpect           : in std_logic;
00201       cfg_err_posted                 : in std_logic;
00202       cfg_err_locked                 : in std_logic;
00203       cfg_err_tlp_cpl_header         : in std_logic_vector(47 downto 0);
00204       cfg_err_cpl_rdy                : out std_logic;
00205       cfg_interrupt                  : in std_logic;
00206       cfg_interrupt_rdy              : out std_logic;
00207       cfg_interrupt_assert           : in std_logic;
00208       cfg_interrupt_di               : in std_logic_vector(7 downto 0);
00209       cfg_interrupt_do               : out std_logic_vector(7 downto 0);
00210       cfg_interrupt_mmenable         : out std_logic_vector(2 downto 0);
00211       cfg_interrupt_msienable        : out std_logic;
00212       cfg_interrupt_msixenable       : out std_logic;
00213       cfg_interrupt_msixfm           : out std_logic;
00214       cfg_turnoff_ok                 : in std_logic;
00215       cfg_to_turnoff                 : out std_logic;
00216       cfg_trn_pending                : in std_logic;
00217       cfg_pm_wake                    : in std_logic;
00218       cfg_bus_number                 : out std_logic_vector(7 downto 0);
00219       cfg_device_number              : out std_logic_vector(4 downto 0);
00220       cfg_function_number            : out std_logic_vector(2 downto 0);
00221       cfg_status                     : out std_logic_vector(15 downto 0);
00222       cfg_command                    : out std_logic_vector(15 downto 0);
00223       cfg_dstatus                    : out std_logic_vector(15 downto 0);
00224       cfg_dcommand                   : out std_logic_vector(15 downto 0);
00225       cfg_lstatus                    : out std_logic_vector(15 downto 0);
00226       cfg_lcommand                   : out std_logic_vector(15 downto 0);
00227       cfg_dcommand2                  : out std_logic_vector(15 downto 0);
00228       cfg_pcie_link_state            : out std_logic_vector(2 downto 0);
00229       cfg_dsn                        : in std_logic_vector(63 downto 0);
00230       cfg_pmcsr_pme_en               : out std_logic;
00231       cfg_pmcsr_pme_status           : out std_logic;
00232       cfg_pmcsr_powerstate           : out std_logic_vector(1 downto 0);
00233       pl_initial_link_width          : out std_logic_vector(2 downto 0);
00234       pl_lane_reversal_mode          : out std_logic_vector(1 downto 0);
00235       pl_link_gen2_capable           : out std_logic;
00236       pl_link_partner_gen2_supported : out std_logic;
00237       pl_link_upcfg_capable          : out std_logic;
00238       pl_ltssm_state                 : out std_logic_vector(5 downto 0);
00239       pl_received_hot_rst            : out std_logic;
00240       pl_sel_link_rate               : out std_logic;
00241       pl_sel_link_width              : out std_logic_vector(1 downto 0);
00242       pl_directed_link_auton         : in std_logic;
00243       pl_directed_link_change        : in std_logic_vector(1 downto 0);
00244       pl_directed_link_speed         : in std_logic;
00245       pl_directed_link_width         : in std_logic_vector(1 downto 0);
00246       pl_upstream_prefer_deemph      : in std_logic;
00247       sys_clk                        : in std_logic;
00248       sys_reset                      : in std_logic);
00249   end component;  
00250 --signal     sys_clk_c : std_logic;
00251 
00252 --signal     sys_reset_n_c : std_logic;
00253 signal     trn_clk_c : std_logic;
00254 signal     user_reset           : std_logic;
00255 signal     user_lnk_up          : std_logic;
00256 signal     cfg_trn_pending_n_c : std_logic;
00257 signal     trn_tsof_n_c : std_logic;
00258 signal     trn_teof_n_c : std_logic;
00259 signal     trn_tsrc_rdy_n_c : std_logic;
00260 signal     trn_tdst_rdy_n_c : std_logic;
00261 signal     trn_tsrc_dsc_n_c : std_logic;
00262 signal     trn_terrfwd_n_c : std_logic;
00263 signal     trn_tdst_dsc_n_c : std_logic;
00264 signal     trn_td_c : std_logic_vector((64 - 1) downto 0);
00265 signal     trn_trem_n_c : std_logic_vector(7 downto 0);
00266 signal     trn_tbuf_av_c : std_logic_vector(( 4 -1 )  downto 0);
00267 signal     trn_rsof_n_c : std_logic;
00268 signal     trn_reof_n_c : std_logic;
00269 signal     trn_rsrc_rdy_n_c : std_logic;
00270 signal     trn_rsrc_dsc_n_c : std_logic;
00271 signal     trn_rdst_rdy_n_c : std_logic;
00272 signal     trn_rerrfwd_n_c : std_logic;
00273 signal     trn_rnp_ok_n_c : std_logic;
00274 
00275 signal     trn_rd_c : std_logic_vector((64 - 1) downto 0);
00276 signal     trn_rrem_n_c : std_logic_vector(7 downto 0);
00277 signal     trn_rbar_hit_n_c : std_logic_vector(6 downto 0);
00278 signal     trn_rfc_nph_av_c : std_logic_vector(7 downto 0);
00279 signal     trn_rfc_npd_av_c : std_logic_vector(11 downto 0);
00280 signal     trn_rfc_ph_av_c : std_logic_vector(7 downto 0);
00281 signal     trn_rfc_pd_av_c : std_logic_vector(11 downto 0);
00282 signal     trn_rcpl_streaming_n_c      : std_logic;
00283 
00284 signal     cfg_do : std_logic_vector(31 downto 0);
00285 signal     cfg_di : std_logic_vector(31 downto 0);
00286 signal     cfg_dwaddr : std_logic_vector(9 downto 0) ;
00287 signal     cfg_byte_en : std_logic_vector(3 downto 0);
00288 signal     cfg_err_tlp_cpl_header : std_logic_vector(47 downto 0);
00289 signal     cfg_wr_en : std_logic;
00290 signal     cfg_rd_en : std_logic;
00291 signal     cfg_rd_wr_done : std_logic;
00292 signal     cfg_err_cor : std_logic;
00293 signal     cfg_err_ur : std_logic;
00294 signal     cfg_err_ecrc : std_logic;
00295 signal     cfg_err_cpl_timeout : std_logic;
00296 signal     cfg_err_cpl_abort : std_logic;
00297 signal     cfg_err_cpl_unexpect : std_logic;
00298 signal     cfg_err_posted : std_logic;   
00299 signal          cfg_err_locked  : std_logic;  
00300 signal      cfg_trn_pending                           : std_logic;
00301 signal      cfg_dcommand2                             : std_logic_vector(15 downto 0);
00302 signal      cfg_dsn                                   : std_logic_vector(63 downto 0);
00303 
00304 
00305 signal      pl_initial_link_width                     : std_logic_vector(2 downto 0);
00306 signal      pl_lane_reversal_mode                     : std_logic_vector(1 downto 0);
00307 signal      pl_link_gen2_capable                      : std_logic;
00308 signal      pl_link_partner_gen2_supported            : std_logic;
00309 signal      pl_link_upcfg_capable                     : std_logic;
00310 signal      pl_ltssm_state                            : std_logic_vector(5 downto 0);
00311 signal      pl_received_hot_rst                       : std_logic;
00312 signal      pl_sel_link_rate                          : std_logic;
00313 signal      pl_sel_link_width                         : std_logic_vector(1 downto 0);
00314 signal      pl_directed_link_auton                    : std_logic;
00315 signal      pl_directed_link_change                   : std_logic_vector(1 downto 0);
00316 signal      pl_directed_link_speed                    : std_logic;
00317 signal      pl_directed_link_width                    : std_logic_vector(1 downto 0);
00318 signal      pl_upstream_prefer_deemph                 : std_logic;
00319 
00320 
00321 
00322 signal     cfg_err_cpl_rdy : std_logic;  
00323 signal     cfg_interrupt : std_logic;
00324 signal     cfg_interrupt_rdy : std_logic;
00325 
00326 signal     cfg_interrupt_assert : std_logic;
00327 
00328 signal     cfg_interrupt_n                      : std_logic;
00329 signal     cfg_interrupt_rdy_n          : std_logic;
00330 signal     cfg_interrupt_assert_n       : std_logic;
00331 
00332 
00333 signal     cfg_interrupt_di : std_logic_vector(7 downto 0);
00334 signal     cfg_interrupt_do : std_logic_vector(7 downto 0);
00335 signal     cfg_interrupt_mmenable : std_logic_vector(2 downto 0);
00336 signal     cfg_interrupt_msienable: std_logic;
00337 
00338 signal     cfg_turnoff_ok : std_logic;
00339 signal     cfg_to_turnoff : std_logic;
00340 signal     cfg_pm_wake : std_logic;
00341 signal     cfg_pcie_link_state : std_logic_vector(2 downto 0);
00342 signal     cfg_bus_number : std_logic_vector(7 downto 0);
00343 signal     cfg_device_number : std_logic_vector(4 downto 0);
00344 signal     cfg_function_number : std_logic_vector(2 downto 0);
00345 signal     cfg_status : std_logic_vector(15 downto 0);
00346 signal     cfg_command : std_logic_vector(15 downto 0);
00347 signal     cfg_dstatus : std_logic_vector(15 downto 0);
00348 signal     cfg_dcommand : std_logic_vector(15 downto 0);
00349 signal     cfg_lstatus : std_logic_vector(15 downto 0);
00350 signal     cfg_lcommand : std_logic_vector(15 downto 0);
00351 --signal     unsigned_fast_simulation: unsigned(0 downto 0);
00352 signal     vector_fast_simulation: std_logic_vector(0 downto 0):=(0=>'1');
00353 
00354 signal  fc_sel                          : std_logic_vector( 2 downto 0 );          
00355 signal  sys_reset_p                     : std_logic;
00356 
00357 signal  refclkout                       : std_logic;
00358 
00359 
00360 signal clk                                      : std_logic;
00361 signal rstp                                     : std_logic;
00362 signal trn_rx                           : type_axi_rx;                  --! приём пакета
00363 signal trn_rx_back                      : type_axi_rx_back;             --! готовность к приёму пакета
00364 
00365 signal reg_access                       : type_reg_access;              --! запрос на доступ к регистрам 
00366                 
00367 signal rx_tx_engine                     : type_rx_tx_engine;    --! обмен RX->TX 
00368 signal tx_rx_engine                     : type_tx_rx_engine;    --! обмен TX->RX 
00369                 
00370 signal rx_ext_fifo                      : type_rx_ext_fifo;             --! обмен RX->EXT_FIFO 
00371 signal tx_ext_fifo                      : type_tx_ext_fifo;
00372 signal  tx_ext_fifo_back        : type_tx_ext_fifo_back;
00373 signal  reg_access_back         : type_reg_access_back;
00374 signal  completer_id            : std_logic_vector( 15 downto 0 );
00375 
00376 signal  trn_tx                          : type_axi_tx;
00377 signal  trn_tx_back                     : type_axi_tx_back;
00378 
00379 signal  reg_disp                        : type_reg_disp;
00380 signal  reg_disp_back           : type_reg_disp_back;
00381 
00382 signal  reg_ext_fifo            : type_reg_ext_fifo;
00383 signal  reg_ext_fifo_back       : type_reg_ext_fifo_back;
00384 
00385 signal  ext_fifo_disp           : type_ext_fifo_disp;           --! запрос на доступ от узла EXT_FIFO 
00386 signal  ext_fifo_disp_back      : type_ext_fifo_disp_back;      --! ответ на запрос
00387 
00388 signal  pb_rstp                         : std_logic;
00389 
00390 signal  irq                                     : std_logic;
00391 
00392 function  SET_FAST_TRAIN( is_simulation : integer ) return boolean is
00393 
00394 variable        ret     : boolean;
00395 begin                      
00396         
00397         if( is_simulation=0 ) then
00398                 ret:=false;
00399         else
00400                 ret:=true;
00401         end if;
00402         return ret;
00403                 
00404 end SET_FAST_TRAIN;
00405 
00406 constant        PL_FAST_TRAIN   : boolean:= SET_FAST_TRAIN( is_simulation );
00407 
00408 begin
00409 
00410 --gen_sim: if( is_simulation/=0 ) generate
00411 --      vector_fast_simulation <= (others=>'1');
00412 --end generate;
00413 --
00414 --gen_syn: if( is_simulation=0 ) generate
00415 --      vector_fast_simulation <= (others=>'0');
00416 --end generate;
00417         
00418         
00419 clk_out <= clk;
00420 reset_out <= not pb_rstp after 1 ns when rising_edge( clk );
00421 
00422 ep :  cl_v6pcie_x4  
00423   generic map(
00424           PL_FAST_TRAIN                => PL_FAST_TRAIN
00425   )
00426   port map(
00427           pci_exp_txp                     => txp ,
00428           pci_exp_txn                      => txn,
00429           pci_exp_rxp                     => rxp,
00430           pci_exp_rxn                     => rxn,
00431           user_clk_out                     => clk ,
00432           user_reset_out                  => user_reset,
00433           user_lnk_up                     => user_lnk_up,
00434           tx_buf_av                       => trn_tx_back.trn_tbuf_av  ,
00435           tx_cfg_req                      => trn_tx_back.tx_cfg_req ,
00436           tx_err_drop                     => trn_tx_back.tx_err_drop ,
00437           s_axis_tx_tready                => trn_tx_back.s_axis_tx_tready ,
00438           s_axis_tx_tdata                 => trn_tx.s_axis_tx_tdata ,
00439           s_axis_tx_tstrb                 => trn_tx.s_axis_tx_tstrb ,
00440           s_axis_tx_tlast                 => trn_tx.s_axis_tx_tlast ,
00441           s_axis_tx_tvalid                => trn_tx.s_axis_tx_tvalid ,
00442           s_axis_tx_tuser                 => trn_tx.s_axis_tx_tuser,
00443           tx_cfg_gnt                      => trn_tx.tx_cfg_gnt ,
00444           m_axis_rx_tdata                 => trn_rx.m_axis_rx_tdata ,
00445           m_axis_rx_tstrb                  => trn_rx.m_axis_rx_tstrb ,
00446           m_axis_rx_tlast                 => trn_rx.m_axis_rx_tlast ,
00447           m_axis_rx_tvalid                => trn_rx.m_axis_rx_tvalid ,
00448           m_axis_rx_tready                 => trn_rx_back.m_axis_rx_tready ,
00449           m_axis_rx_tuser                 => trn_rx.m_axis_rx_tuser,
00450           rx_np_ok                        => trn_rx_back.rx_np_ok ,
00451           fc_cpld                          => trn_tx_back.fc_cpld ,
00452           fc_cplh                         => trn_tx_back.fc_cplh ,
00453           fc_npd                          => trn_tx_back.fc_npd  ,
00454           fc_nph                          => trn_tx_back.fc_nph ,
00455           fc_pd                           => trn_tx_back.fc_pd  ,
00456           fc_ph                           => trn_tx_back.fc_ph ,
00457           fc_sel                          => trn_tx.fc_sel ,
00458           cfg_do                           => cfg_do ,
00459           cfg_rd_wr_done                  => cfg_rd_wr_done,
00460           cfg_di                          => cfg_di ,
00461           cfg_byte_en                      => cfg_byte_en  ,
00462           cfg_dwaddr                       => cfg_dwaddr ,
00463           cfg_wr_en                       => cfg_wr_en ,
00464           cfg_rd_en                        => cfg_rd_en ,
00465         
00466           cfg_err_cor                      => cfg_err_cor  ,
00467           cfg_err_ur                       => cfg_err_ur ,
00468           cfg_err_ecrc                    => cfg_err_ecrc ,
00469           cfg_err_cpl_timeout              => cfg_err_cpl_timeout ,
00470           cfg_err_cpl_abort               => cfg_err_cpl_abort  ,
00471           cfg_err_cpl_unexpect            => cfg_err_cpl_unexpect ,
00472           cfg_err_posted                   => cfg_err_posted ,
00473           cfg_err_locked                   => cfg_err_locked ,
00474           cfg_err_tlp_cpl_header          => cfg_err_tlp_cpl_header ,
00475           cfg_err_cpl_rdy                  => cfg_err_cpl_rdy ,
00476           cfg_interrupt                    => cfg_interrupt ,
00477           cfg_interrupt_rdy               => cfg_interrupt_rdy ,
00478           cfg_interrupt_assert            => cfg_interrupt_assert ,
00479           cfg_interrupt_di                 => cfg_interrupt_di ,
00480           cfg_interrupt_do                => cfg_interrupt_do ,
00481           cfg_interrupt_mmenable          => cfg_interrupt_mmenable ,
00482           cfg_interrupt_msienable          => cfg_interrupt_msienable ,
00483           --cfg_interrupt_msixenable        => cfg_interrupt_msixenable ,
00484           --cfg_interrupt_msixfm            => cfg_interrupt_msixfm ,
00485           cfg_turnoff_ok                   => cfg_turnoff_ok ,
00486           cfg_to_turnoff                  => cfg_to_turnoff ,
00487           cfg_trn_pending                  => cfg_trn_pending ,
00488           cfg_pm_wake                      => cfg_pm_wake ,
00489           cfg_bus_number                   => cfg_bus_number ,
00490           cfg_device_number               => cfg_device_number ,
00491           cfg_function_number             => cfg_function_number ,
00492           cfg_status                       => cfg_status ,
00493           cfg_command                     => cfg_command ,
00494           cfg_dstatus                      => cfg_dstatus ,
00495           cfg_dcommand                     => trn_tx_back.cfg_dcommand  ,
00496           cfg_lstatus                     => cfg_lstatus ,
00497           cfg_lcommand                     => cfg_lcommand ,
00498           cfg_dcommand2                    => cfg_dcommand2 ,
00499           cfg_pcie_link_state             => cfg_pcie_link_state ,
00500           cfg_dsn                          => cfg_dsn ,
00501           cfg_pmcsr_pme_en                 => open,
00502           cfg_pmcsr_pme_status            => open,
00503           cfg_pmcsr_powerstate             => open,
00504           pl_initial_link_width            => pl_initial_link_width ,
00505           pl_lane_reversal_mode           => pl_lane_reversal_mode ,
00506           pl_link_gen2_capable             => pl_link_gen2_capable ,
00507           pl_link_partner_gen2_supported   => pl_link_partner_gen2_supported  ,
00508           pl_link_upcfg_capable            => pl_link_upcfg_capable ,
00509           pl_ltssm_state                   => pl_ltssm_state ,
00510           pl_received_hot_rst              => pl_received_hot_rst  ,
00511           pl_sel_link_rate                => pl_sel_link_rate ,
00512           pl_sel_link_width                => pl_sel_link_width  ,
00513           pl_directed_link_auton           => pl_directed_link_auton ,
00514           pl_directed_link_change          => pl_directed_link_change ,
00515           pl_directed_link_speed          => pl_directed_link_speed ,
00516           pl_directed_link_width           => pl_directed_link_width ,
00517           pl_upstream_prefer_deemph        => pl_upstream_prefer_deemph ,
00518           sys_clk                         =>  mgt250,
00519           sys_reset                       =>  sys_reset_p 
00520         
00521 );
00522 
00523 sys_reset_p <= not perst;
00524 
00525 pcie_link_up <= not user_lnk_up;
00526 pcie_lstatus <= cfg_lstatus;
00527 
00528 rstp <=  user_reset  after 1 ns when rising_edge( clk );
00529 dcm_rstp <= user_reset;
00530 
00531 pb_rstp <= rstp or ( not aclk_lock ) after 1 ns when rising_edge( clk );
00532 
00533 --trn_tx_back.cfg_dcommand <= cfg_dcommand;
00534 --  trn_rnp_ok_n_c              <= '0';
00535 --  trn_rcpl_streaming_n_c      <= '1'; 
00536 --  trn_terrfwd_n_c             <= '1';
00537 --
00538 --  cfg_err_cor             <= '1';
00539 --  cfg_err_ur              <= '1';
00540 --  cfg_err_ecrc            <= '1';
00541 --  cfg_err_cpl_timeout     <= '1';
00542 --  cfg_err_cpl_abort       <= '1';
00543 --  cfg_err_cpl_unexpect    <= '1';
00544 --  cfg_err_posted          <= '0';
00545 --
00546 --  cfg_interrupt_di <= X"00";
00547 --
00548 --  cfg_pm_wake             <= '1';
00549 --  cfg_trn_pending         <= '1';
00550 --  cfg_dwaddr                <= (others => '0');
00551 --  cfg_err_tlp_cpl_header    <= (others => '0');
00552 --  cfg_di                    <= (others => '0');
00553 --  cfg_byte_en             <= X"F"; -- 4-bit bus
00554 --  cfg_wr_en               <= '1';
00555 --  cfg_rd_en               <= '1';      
00556   
00557   fc_sel             <= "000";
00558 
00559 --  rx_np_ok           <= '1';
00560 --
00561 --  tx_cfg_gnt         <= '1';
00562 --
00563   cfg_err_cor          <= '0';
00564   cfg_err_ur           <= '0';
00565   cfg_err_ecrc         <= '0';
00566   cfg_err_cpl_timeout  <= '0';
00567   cfg_err_cpl_abort    <= '0';
00568   cfg_err_cpl_unexpect <= '0';
00569   cfg_err_posted       <= '0';
00570   cfg_err_locked       <= '0';
00571   cfg_pm_wake          <= '0';
00572   cfg_trn_pending      <= '0';
00573 
00574 --  trn_tx.s_axis_tx_tuser(0)   <= '0'; -- Unused for S6
00575 --  trn_tx.s_axis_tx_tuser(1)   <= '0'; -- Error forward packet
00576 --  trn_tx.s_axis_tx_tuser(2)   <= '0'; -- Stream packet
00577                  
00578 --  cfg_interrupt_assert <= '0';
00579 --  cfg_interrupt        <= '0';
00580   cfg_interrupt_di     <= x"00";
00581 
00582   cfg_err_tlp_cpl_header <= (OTHERS => '0');
00583   cfg_dwaddr             <= (OTHERS => '0');
00584   cfg_rd_en            <= '0';
00585   cfg_wr_en            <= '0';
00586   cfg_byte_en          <= X"0";
00587   cfg_di               <= (others => '0');
00588   cfg_dsn              <= (others=>'0');
00589   
00590 
00591 --  cfg_completer_id     <= (cfg_bus_number &
00592 --                           cfg_device_number &
00593 --                           cfg_function_number);
00594 --  cfg_bus_mstr_enable  <= cfg_command(2);
00595 
00596   pl_directed_link_auton  <= '0';
00597   pl_directed_link_speed  <= '0';
00598   pl_directed_link_width  <= "00";
00599   pl_directed_link_change <= "00";
00600   pl_upstream_prefer_deemph <= '1';  
00601   
00602 --  cfg_completer_id_c          <= (cfg_bus_number &
00603 --                                cfg_device_number &
00604 --                                cfg_function_number);
00605 --  cfg_bus_mstr_enable_c       <= cfg_command(2);
00606 
00607 
00608 
00609 rx: core64_rx_engine_m2
00610         port map(
00611         
00612                 --- General ---
00613                 rstp                    => rstp,                        --! 1 - сброс 
00614                 clk                              => clk,                                --! тактовая частота ядра - 250 MHz 
00615                 
00616                 trn_rx                  => trn_rx,                      --! приём пакета
00617                 trn_rx_back             => trn_rx_back,         --! готовность к приёму пакета
00618                                                                 
00619                 reg_access              => reg_access,          --! запрос на доступ к регистрам 
00620                                                                 
00621                 rx_tx_engine    => rx_tx_engine,        --! обмен RX->TX 
00622                 tx_rx_engine    => tx_rx_engine,        --! обмен TX->RX 
00623                                                                 
00624                 rx_ext_fifo             => rx_ext_fifo--! обмен RX->EXT_FIFO 
00625                 
00626                 
00627                 
00628         );
00629         
00630 
00631 tx: core64_tx_engine_m2 
00632         port map(
00633         
00634                 --- General ---
00635                 rstp                    => rstp,                        --! 1 - сброс 
00636                 clk                              => clk,                                --! тактовая частота ядра - 250 MHz 
00637                 
00638                 trn_tx                  => trn_tx,                      --! передача пакета
00639                 trn_tx_back             => trn_tx_back,         --! готовность к передаче пакета
00640                                                                 
00641                 completer_id    => completer_id,        --! идентификатор устройства 
00642                                                                 
00643                 reg_access_back  => reg_access_back,    --! запрос на доступ к регистрам 
00644                                                                 
00645                 rx_tx_engine    => rx_tx_engine,        --! обмен RX->TX 
00646                 tx_rx_engine    => tx_rx_engine,        --! обмен TX->RX 
00647                                                                 
00648                 tx_ext_fifo             => tx_ext_fifo,         --! обмен TX->EXT_FIFO 
00649                 tx_ext_fifo_back=> tx_ext_fifo_back --! обмен TX->EXT_FIFO 
00650                         
00651         );
00652         
00653   completer_id     <= (cfg_bus_number &
00654                        cfg_device_number &
00655                        cfg_function_number );   
00656                                            
00657                                            
00658  reg: core64_reg_access 
00659         port map(
00660                 --- General ---
00661                 rstp                            => rstp,        --! 1 - сброс 
00662                 clk                                     => clk,         --! тактовая частота ядра - 250 MHz 
00663                 
00664                 --- RX_ENGINE ---- 
00665                 reg_access                      => reg_access,  --! запрос на доступ к регистрам 
00666                 
00667                 --- TX_ENGINE ----
00668                 reg_access_back         => reg_access_back,     --! ответ на запрос 
00669                 
00670                 ---- PB_DISP ----
00671                 reg_disp                        => reg_disp,            --! запрос на доступ к регистрам из BAR1 
00672                 reg_disp_back                   => reg_disp_back,       --! ответ на запрос 
00673                 
00674                 ---- BLOCK EXT_FIFO ----
00675                 reg_ext_fifo            => reg_ext_fifo,                --! запрос на доступ к блокам управления EXT_FIFO 
00676                 reg_ext_fifo_back       => reg_ext_fifo_back,   --! ответ на запрос 
00677                 
00678                 ---- BAR0 - блоки управления ----
00679                 bp_host_data            => bp_host_data,        --! шина данных - выход 
00680                 bp_data                         => bp_data,                     --! шина данных - вход
00681                 bp_adr                          => bp_adr,                      --! адрес регистра 
00682                 bp_we                           => bp_we,                       --! 1 - запись в регистры 
00683                 bp_rd                           => bp_rd,                       --! 1 - чтение из регистров блока 
00684                 bp_sel                          => bp_sel,                      --! номер блока для чтения 
00685                 bp_reg_we                       => bp_reg_we,           --! 1 - запись в регистр по адресам   0x100000 - 0x1FFFFF 
00686                 bp_reg_rd                       => bp_reg_rd,           --! 1 - чтение из регистра по адресам 0x100000 - 0x1FFFFF 
00687                 bp_irq                                  => bp_irq--! 1 - запрос прерывания 
00688         );                                         
00689 
00690         
00691  disp: core64_pb_disp 
00692         port map(
00693                 --- General ---
00694                 rstp                            => pb_rstp,             --! 1 - сброс 
00695                 clk                                     => clk,                 --! тактовая частота ядра - 250 MHz 
00696                 
00697                 ---- PB_DISP ----
00698                 reg_disp                        => reg_disp,            --! запрос на доступ к регистрам из BAR1 
00699                 reg_disp_back           => reg_disp_back,       --! ответ на запрос 
00700                 
00701                 ---- EXT_FIFO ----
00702                 ext_fifo_disp           => ext_fifo_disp,               --! запрос на доступ от узла EXT_FIFO 
00703                 ext_fifo_disp_back      => ext_fifo_disp_back,  --! ответ на запрос
00704                 
00705                 ---- BAR1 ----  
00706                 aclk                            => aclk,                                --! тактовая частота локальной шины - 266 МГц
00707                 pb_master                       => pb_master,                   --! запрос 
00708                 pb_slave                        => pb_slave--! ответ  
00709 
00710         );      
00711         
00712 
00713 
00714 fifo: block_pe_fifo_ext 
00715         port map(
00716         
00717                 ---- Global ----         
00718                 rstp                             => pb_rstp,                             
00719                 clk                                      => clk,                                         
00720                 aclk                             => aclk,                                
00721                                                                               
00722                 ---- TX_ENGINE ----      
00723                 tx_ext_fifo                      => tx_ext_fifo,                         
00724                 tx_ext_fifo_back         => tx_ext_fifo_back,    
00725                                                                               
00726                 ---- RX_ENGINE ----      
00727                 rx_ext_fifo                             => rx_ext_fifo,
00728                                                                               
00729                 ---- REG ----            
00730                 reg_ext_fifo                    => reg_ext_fifo,                 
00731                 reg_ext_fifo_back        => reg_ext_fifo_back, 
00732                                                                                  
00733                 ---- DISP  ----          
00734                 ext_fifo_disp                   => ext_fifo_disp,
00735                 ext_fifo_disp_back       => ext_fifo_disp_back,
00736                 
00737                 irq                                      => irq ,                               -- 1 - запрос прерывания
00738                 
00739                 test                            => px
00740         );
00741                 
00742         
00743  
00744 
00745  int: core64_interrupt 
00746         port map(
00747         
00748                 rstp                                    => pb_rstp,                                     -- 1 - сброс
00749                 clk                                             => clk,                                         -- Тактовая частота ядра 250 МГц
00750                 
00751                 irq                                             => irq,                                         -- 1 - запрос прерывания
00752                 
00753                 cfg_command10                   => cfg_command(10),                     -- 1 - прерывания запрещены 
00754                 cfg_interrupt                   => cfg_interrupt_n,             -- 0 - изменение состояния прерывания
00755                 cfg_interrupt_assert    => cfg_interrupt_assert_n,      -- 0 - формирование прерывания, 1 - сниятие прерывания 
00756                 cfg_interrupt_rdy               => cfg_interrupt_rdy_n-- 0 - подтверждение изменения прерывания 
00757         
00758         );                                                                                         
00759         
00760 cfg_interrupt <= not cfg_interrupt_n;   
00761 cfg_interrupt_assert <= not cfg_interrupt_assert_n;
00762 cfg_interrupt_rdy_n <= not cfg_interrupt_rdy;   
00763 
00764 --      cfg_interrupt_n_c <= '1';
00765 --      cfg_interrupt_assert_n_c <= '1';
00766         
00767 end pcie_core64_m4;