DS_DMA
pcie_src/pcie_core64_m1/top/pcie_core64_m1.vhd
00001 -------------------------------------------------------------------------------
00002 --
00003 -- Title       : pcie_core64_m1
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 --
00014 -------------------------------------------------------------------------------
00015 
00016 
00017 
00018 library ieee;
00019 use ieee.std_logic_1164.all;
00020 
00021 use work.core64_type_pkg.all;
00022 
00023 package pcie_core64_m1_pkg is
00024 
00025 --! контроллер PCI-Express 
00026 component pcie_core64_m1 is
00027         generic (
00028                 is_simulation   : integer:=0    --! 0 - синтез, 1 - моделирование 
00029         );                
00030         
00031         port (
00032         
00033                 ---- PCI-Express ----
00034                 txp                             : out std_logic_vector( 7 downto 0 );
00035                 txn                             : out std_logic_vector( 7 downto 0 );
00036                 
00037                 rxp                             : in  std_logic_vector( 7 downto 0 );
00038                 rxn                             : in  std_logic_vector( 7 downto 0 );
00039                 
00040                 mgt250                  : in  std_logic; -- тактовая частота 250 MHz от PCI_Express
00041                 
00042                 perst                   : in  std_logic;        -- 0 - сброс                                                  
00043                 
00044                 px                              : out std_logic_vector( 7 downto 0 );   --! контрольные точки 
00045                 
00046                 pcie_lstatus    : out std_logic_vector( 15 downto 0 ); -- регистр LSTATUS
00047                 pcie_link_up    : out std_logic;        -- 0 - завершена инициализация PCI-Express
00048                 
00049                 
00050                 ---- Локальная шина ----                     
00051                 clk_out                 : out std_logic;        --! тактовая частота 250 MHz               
00052                 reset_out               : out std_logic;        --! 0 - сброс
00053                 dcm_rstp                : out std_logic;        --! 1 - сброс DCM 266 МГц
00054 
00055                 ---- BAR0 - блоки управления ----
00056                 bp_host_data    : out std_logic_vector( 31 downto 0 );  --! шина данных - выход 
00057                 bp_data                 : in  std_logic_vector( 31 downto 0 );  --! шина данных - вход
00058                 bp_adr                  : out std_logic_vector( 19 downto 0 );  --! адрес регистра 
00059                 bp_we                   : out std_logic_vector( 3 downto 0 );   --! 1 - запись в регистры 
00060                 bp_rd                   : out std_logic_vector( 3 downto 0 );   --! 1 - чтение из регистров блока 
00061                 bp_sel                  : out std_logic_vector( 1 downto 0 );   --! номер блока для чтения 
00062                 bp_reg_we               : out std_logic;                        --! 1 - запись в регистр по адресам   0x100000 - 0x1FFFFF 
00063                 bp_reg_rd               : out std_logic;                        --! 1 - чтение из регистра по адресам 0x100000 - 0x1FFFFF 
00064                 bp_irq                  : in  std_logic;                        --! 1 - запрос прерывания 
00065 
00066                 ---- BAR1 ----  
00067                 aclk                    : in std_logic;                         --! тактовая частота локальной шины - 266 МГц
00068                 aclk_lock               : in std_logic;                         --! 1 - захват частоты
00069                 pb_master               : out type_pb_master;           --! запрос 
00070                 pb_slave                : in  type_pb_slave                     --! ответ  
00071                 
00072                                 
00073                 
00074         );
00075 end component;
00076 
00077 end package;
00078 
00079 
00080 
00081 library ieee;
00082 use ieee.std_logic_1164.all;            
00083 
00084 use work.core64_type_pkg.all;
00085 use work.core64_rx_engine_pkg.all;
00086 use work.core64_tx_engine_pkg.all;      
00087 use work.core64_reg_access_pkg.all;
00088 use work.core64_pb_disp_pkg.all;   
00089 use work.block_pe_fifo_ext_pkg.all;             
00090 use work.core64_interrupt_pkg.all;
00091 
00092 --! контроллер PCI-Express 
00093 entity pcie_core64_m1 is
00094         generic (
00095                 is_simulation   : integer:=0    --! 0 - синтез, 1 - моделирование 
00096         );                
00097         
00098         port (
00099         
00100                 ---- PCI-Express ----
00101                 txp                             : out std_logic_vector( 7 downto 0 );
00102                 txn                             : out std_logic_vector( 7 downto 0 );
00103                 
00104                 rxp                             : in  std_logic_vector( 7 downto 0 );
00105                 rxn                             : in  std_logic_vector( 7 downto 0 );
00106                 
00107                 mgt250                  : in  std_logic; -- тактовая частота 250 MHz от PCI_Express
00108                 
00109                 perst                   : in  std_logic;        -- 0 - сброс                                                  
00110                 
00111                 px                              : out std_logic_vector( 7 downto 0 );   --! контрольные точки 
00112                 
00113                 pcie_lstatus    : out std_logic_vector( 15 downto 0 ); -- регистр LSTATUS
00114                 pcie_link_up    : out std_logic;        -- 0 - завершена инициализация PCI-Express
00115                 
00116                 
00117                 ---- Локальная шина ----                     
00118                 clk_out                 : out std_logic;        --! тактовая частота 250 MHz               
00119                 reset_out               : out std_logic;        --! 0 - сброс
00120                 dcm_rstp                : out std_logic;        --! 1 - сброс DCM 266 МГц
00121 
00122                 ---- BAR0 - блоки управления ----
00123                 bp_host_data    : out std_logic_vector( 31 downto 0 );  --! шина данных - выход 
00124                 bp_data                 : in  std_logic_vector( 31 downto 0 );  --! шина данных - вход
00125                 bp_adr                  : out std_logic_vector( 19 downto 0 );  --! адрес регистра 
00126                 bp_we                   : out std_logic_vector( 3 downto 0 );   --! 1 - запись в регистры 
00127                 bp_rd                   : out std_logic_vector( 3 downto 0 );   --! 1 - чтение из регистров блока 
00128                 bp_sel                  : out std_logic_vector( 1 downto 0 );   --! номер блока для чтения 
00129                 bp_reg_we               : out std_logic;                        --! 1 - запись в регистр по адресам   0x100000 - 0x1FFFFF 
00130                 bp_reg_rd               : out std_logic;                        --! 1 - чтение из регистра по адресам 0x100000 - 0x1FFFFF 
00131                 bp_irq                  : in  std_logic;                        --! 1 - запрос прерывания 
00132 
00133                 ---- BAR1 ----  
00134                 aclk                    : in std_logic;                         --! тактовая частота локальной шины - 266 МГц
00135                 aclk_lock               : in std_logic;                         --! 1 - захват частоты
00136                 pb_master               : out type_pb_master;           --! запрос 
00137                 pb_slave                : in  type_pb_slave                     --! ответ  
00138                 
00139                 
00140         );
00141 end pcie_core64_m1;
00142 
00143 
00144 architecture pcie_core64_m1 of pcie_core64_m1 is
00145 
00146 
00147 component ctrl_pcie_x8
00148   port (
00149     pci_exp_rxn : in std_logic_vector((8 - 1) downto 0);
00150     pci_exp_rxp : in std_logic_vector((8 - 1) downto 0);
00151     pci_exp_txn : out std_logic_vector((8 - 1) downto 0);
00152     pci_exp_txp : out std_logic_vector((8 - 1) downto 0);
00153 
00154     sys_clk : in STD_LOGIC;
00155     sys_reset_n : in STD_LOGIC;
00156 
00157   refclkout         : out std_logic;
00158 
00159 
00160     trn_clk : out STD_LOGIC; 
00161     trn_reset_n : out STD_LOGIC; 
00162     trn_lnk_up_n : out STD_LOGIC; 
00163 
00164     trn_td : in STD_LOGIC_VECTOR((64 - 1) downto 0);
00165     trn_trem_n: in STD_LOGIC_VECTOR (7 downto 0);
00166     trn_tsof_n : in STD_LOGIC;
00167     trn_teof_n : in STD_LOGIC;
00168     trn_tsrc_dsc_n : in STD_LOGIC;
00169     trn_tsrc_rdy_n : in STD_LOGIC;
00170     trn_tdst_dsc_n : out STD_LOGIC;
00171     trn_tdst_rdy_n : out STD_LOGIC;
00172     trn_terrfwd_n : in STD_LOGIC ;
00173     trn_tbuf_av : out STD_LOGIC_VECTOR (( 4 -1 ) downto 0 );
00174 
00175     trn_rd : out STD_LOGIC_VECTOR((64 - 1) downto 0);
00176     trn_rrem_n: out STD_LOGIC_VECTOR (7 downto 0);
00177     trn_rsof_n : out STD_LOGIC;
00178     trn_reof_n : out STD_LOGIC; 
00179     trn_rsrc_dsc_n : out STD_LOGIC; 
00180     trn_rsrc_rdy_n : out STD_LOGIC; 
00181     trn_rbar_hit_n : out STD_LOGIC_VECTOR ( 6 downto 0 );
00182     trn_rdst_rdy_n : in STD_LOGIC; 
00183     trn_rerrfwd_n : out STD_LOGIC; 
00184     trn_rnp_ok_n : in STD_LOGIC; 
00185     trn_rfc_npd_av : out STD_LOGIC_VECTOR ( 11 downto 0 ); 
00186     trn_rfc_nph_av : out STD_LOGIC_VECTOR ( 7 downto 0 ); 
00187     trn_rfc_pd_av : out STD_LOGIC_VECTOR ( 11 downto 0 ); 
00188     trn_rfc_ph_av : out STD_LOGIC_VECTOR ( 7 downto 0 );
00189     trn_rcpl_streaming_n      : in STD_LOGIC;
00190 
00191     cfg_do : out STD_LOGIC_VECTOR ( 31 downto 0 );
00192     cfg_rd_wr_done_n : out STD_LOGIC; 
00193     cfg_di : in STD_LOGIC_VECTOR ( 31 downto 0 ); 
00194     cfg_byte_en_n : in STD_LOGIC_VECTOR ( 3 downto 0 ); 
00195     cfg_dwaddr : in STD_LOGIC_VECTOR ( 9 downto 0 );
00196     cfg_wr_en_n : in STD_LOGIC;
00197     cfg_rd_en_n : in STD_LOGIC; 
00198 
00199     cfg_err_cor_n : in STD_LOGIC; 
00200     cfg_err_cpl_abort_n : in STD_LOGIC; 
00201     cfg_err_cpl_timeout_n : in STD_LOGIC; 
00202     cfg_err_cpl_unexpect_n : in STD_LOGIC; 
00203     cfg_err_ecrc_n : in STD_LOGIC; 
00204     cfg_err_posted_n : in STD_LOGIC; 
00205     cfg_err_tlp_cpl_header : in STD_LOGIC_VECTOR ( 47 downto 0 ); 
00206     cfg_err_ur_n : in STD_LOGIC;
00207     cfg_err_cpl_rdy_n : out STD_LOGIC;
00208     cfg_err_locked_n : in STD_LOGIC; 
00209     cfg_interrupt_n : in STD_LOGIC;
00210     cfg_interrupt_rdy_n : out STD_LOGIC;
00211     cfg_pm_wake_n : in STD_LOGIC;
00212     cfg_pcie_link_state_n : out STD_LOGIC_VECTOR ( 2 downto 0 ); 
00213     cfg_to_turnoff_n : out STD_LOGIC;
00214     cfg_interrupt_assert_n : in  STD_LOGIC;
00215     cfg_interrupt_di : in  STD_LOGIC_VECTOR(7 downto 0);
00216     cfg_interrupt_do : out STD_LOGIC_VECTOR(7 downto 0);
00217     cfg_interrupt_mmenable : out STD_LOGIC_VECTOR(2 downto 0);
00218     cfg_interrupt_msienable: out STD_LOGIC;
00219 
00220     cfg_trn_pending_n : in STD_LOGIC;
00221     cfg_bus_number : out STD_LOGIC_VECTOR ( 7 downto 0 );
00222     cfg_device_number : out STD_LOGIC_VECTOR ( 4 downto 0 );
00223     cfg_function_number : out STD_LOGIC_VECTOR ( 2 downto 0 );
00224     cfg_status : out STD_LOGIC_VECTOR ( 15 downto 0 );
00225     cfg_command : out STD_LOGIC_VECTOR ( 15 downto 0 );
00226     cfg_dstatus : out STD_LOGIC_VECTOR ( 15 downto 0 );
00227     cfg_dcommand : out STD_LOGIC_VECTOR ( 15 downto 0 );
00228     cfg_lstatus : out STD_LOGIC_VECTOR ( 15 downto 0 );
00229     cfg_lcommand : out STD_LOGIC_VECTOR ( 15 downto 0 );
00230     cfg_dsn: in STD_LOGIC_VECTOR (63 downto 0 );
00231 
00232     fast_train_simulation_only : in STD_LOGIC
00233 
00234   );
00235 
00236 end component;
00237 
00238 
00239 --signal     sys_clk_c : std_logic;
00240 
00241 --signal     sys_reset_n_c : std_logic;
00242 signal     trn_clk_c : std_logic;
00243 signal     trn_reset_n_c : std_logic;
00244 signal     trn_lnk_up_n_c : std_logic;
00245 signal     cfg_trn_pending_n_c : std_logic;
00246 signal     trn_tsof_n_c : std_logic;
00247 signal     trn_teof_n_c : std_logic;
00248 signal     trn_tsrc_rdy_n_c : std_logic;
00249 signal     trn_tdst_rdy_n_c : std_logic;
00250 signal     trn_tsrc_dsc_n_c : std_logic;
00251 signal     trn_terrfwd_n_c : std_logic;
00252 signal     trn_tdst_dsc_n_c : std_logic;
00253 signal     trn_td_c : std_logic_vector((64 - 1) downto 0);
00254 signal     trn_trem_n_c : std_logic_vector(7 downto 0);
00255 signal     trn_tbuf_av_c : std_logic_vector(( 4 -1 )  downto 0);
00256 signal     trn_rsof_n_c : std_logic;
00257 signal     trn_reof_n_c : std_logic;
00258 signal     trn_rsrc_rdy_n_c : std_logic;
00259 signal     trn_rsrc_dsc_n_c : std_logic;
00260 signal     trn_rdst_rdy_n_c : std_logic;
00261 signal     trn_rerrfwd_n_c : std_logic;
00262 signal     trn_rnp_ok_n_c : std_logic;
00263 
00264 signal     trn_rd_c : std_logic_vector((64 - 1) downto 0);
00265 signal     trn_rrem_n_c : std_logic_vector(7 downto 0);
00266 signal     trn_rbar_hit_n_c : std_logic_vector(6 downto 0);
00267 signal     trn_rfc_nph_av_c : std_logic_vector(7 downto 0);
00268 signal     trn_rfc_npd_av_c : std_logic_vector(11 downto 0);
00269 signal     trn_rfc_ph_av_c : std_logic_vector(7 downto 0);
00270 signal     trn_rfc_pd_av_c : std_logic_vector(11 downto 0);
00271 signal     trn_rcpl_streaming_n_c      : std_logic;
00272 
00273 signal     cfg_do_c : std_logic_vector(31 downto 0);
00274 signal     cfg_di_c : std_logic_vector(31 downto 0);
00275 signal     cfg_dwaddr_c : std_logic_vector(9 downto 0) ;
00276 signal     cfg_byte_en_n_c : std_logic_vector(3 downto 0);
00277 signal     cfg_err_tlp_cpl_header_c : std_logic_vector(47 downto 0);
00278 signal     cfg_wr_en_n_c : std_logic;
00279 signal     cfg_rd_en_n_c : std_logic;
00280 signal     cfg_rd_wr_done_n_c : std_logic;
00281 signal     cfg_err_cor_n_c : std_logic;
00282 signal     cfg_err_ur_n_c : std_logic;
00283 signal     cfg_err_ecrc_n_c : std_logic;
00284 signal     cfg_err_cpl_timeout_n_c : std_logic;
00285 signal     cfg_err_cpl_abort_n_c : std_logic;
00286 signal     cfg_err_cpl_unexpect_n_c : std_logic;
00287 signal     cfg_err_posted_n_c : std_logic;
00288 
00289 signal     cfg_err_cpl_rdy_n_c : std_logic;  
00290 signal     cfg_interrupt_n_c : std_logic;
00291 signal     cfg_interrupt_rdy_n_c : std_logic;
00292 
00293 signal     cfg_interrupt_assert_n_c : std_logic;
00294 signal     cfg_interrupt_di_c : std_logic_vector(7 downto 0);
00295 signal     cfg_interrupt_do_c : std_logic_vector(7 downto 0);
00296 signal     cfg_interrupt_mmenable_c : std_logic_vector(2 downto 0);
00297 signal     cfg_interrupt_msienable_c: std_logic;
00298 
00299 signal     cfg_turnoff_ok_n_c : std_logic;
00300 signal     cfg_to_turnoff_n_c : std_logic;
00301 signal     cfg_pm_wake_n_c : std_logic;
00302 signal     cfg_pcie_link_state_n_c : std_logic_vector(2 downto 0);
00303 signal     cfg_bus_number_c : std_logic_vector(7 downto 0);
00304 signal     cfg_device_number_c : std_logic_vector(4 downto 0);
00305 signal     cfg_function_number_c : std_logic_vector(2 downto 0);
00306 signal     cfg_status_c : std_logic_vector(15 downto 0);
00307 signal     cfg_command_c : std_logic_vector(15 downto 0);
00308 signal     cfg_dstatus_c : std_logic_vector(15 downto 0);
00309 signal     cfg_dcommand_c : std_logic_vector(15 downto 0);
00310 signal     cfg_lstatus_c : std_logic_vector(15 downto 0);
00311 signal     cfg_lcommand_c : std_logic_vector(15 downto 0);
00312 --signal     unsigned_fast_simulation: unsigned(0 downto 0);
00313 signal     vector_fast_simulation: std_logic_vector(0 downto 0):=(0=>'1');
00314 
00315 signal  refclkout                               : std_logic;
00316 
00317 
00318 signal clk                                      : std_logic;
00319 signal rstp                                     : std_logic;
00320 signal trn_rx                           : type_trn_rx;                  --! приём пакета
00321 signal trn_rx_back                      : type_trn_rx_back;             --! готовность к приёму пакета
00322 
00323 signal reg_access                       : type_reg_access;              --! запрос на доступ к регистрам 
00324                 
00325 signal rx_tx_engine                     : type_rx_tx_engine;    --! обмен RX->TX 
00326 signal tx_rx_engine                     : type_tx_rx_engine;    --! обмен TX->RX 
00327                 
00328 signal rx_ext_fifo                      : type_rx_ext_fifo;             --! обмен RX->EXT_FIFO 
00329 signal tx_ext_fifo                      : type_tx_ext_fifo;
00330 signal  tx_ext_fifo_back        : type_tx_ext_fifo_back;
00331 signal  reg_access_back         : type_reg_access_back;
00332 signal  completer_id            : std_logic_vector( 15 downto 0 );
00333 
00334 signal  trn_tx                          : type_trn_tx;
00335 signal  trn_tx_back                     : type_trn_tx_back;
00336 
00337 signal  reg_disp                        : type_reg_disp;
00338 signal  reg_disp_back           : type_reg_disp_back;
00339 
00340 signal  reg_ext_fifo            : type_reg_ext_fifo;
00341 signal  reg_ext_fifo_back       : type_reg_ext_fifo_back;
00342 
00343 signal  ext_fifo_disp           : type_ext_fifo_disp;           --! запрос на доступ от узла EXT_FIFO 
00344 signal  ext_fifo_disp_back      : type_ext_fifo_disp_back;      --! ответ на запрос
00345 
00346 signal  pb_rstp                         : std_logic;
00347 
00348 signal  irq                                     : std_logic;
00349 
00350 begin
00351 
00352 gen_sim: if( is_simulation/=0 ) generate
00353         vector_fast_simulation <= (others=>'1');
00354 end generate;
00355 
00356 gen_syn: if( is_simulation=0 ) generate
00357         vector_fast_simulation <= (others=>'0');
00358 end generate;
00359         
00360         
00361 clk_out <= clk;
00362 reset_out <= not pb_rstp after 1 ns when rising_edge( clk );
00363 
00364  ep : ctrl_pcie_x8 port map  (
00365 
00366 --
00367 -- PCI Express Fabric Interface
00368 --
00369 
00370   pci_exp_txp => txp,             -- O (7/3/0:0)
00371   pci_exp_txn => txn,             -- O (7/3/0:0)
00372   pci_exp_rxp => rxp,             -- O (7/3/0:0)
00373   pci_exp_rxn => rxn,             -- O (7/3/0:0)
00374 
00375 
00376 --
00377 -- System ( SYS ) Interface
00378 --
00379   sys_clk => mgt250,                     -- I
00380 
00381   sys_reset_n => perst,                  -- I
00382 
00383   refclkout  => refclkout ,                -- O
00384 
00385 --
00386 -- Transaction ( TRN ) Interface
00387 --
00388 
00389   trn_clk  => clk,                 -- O
00390   trn_reset_n => trn_reset_n_c,           -- O
00391   trn_lnk_up_n => trn_lnk_up_n_c,         -- O
00392 
00393 -- Tx Local-Link
00394 
00395   trn_td => trn_tx.trn_td,                     -- I (63/31:0)
00396   trn_trem_n => trn_tx.trn_trem_n,
00397   trn_tsof_n => trn_tx.trn_tsof_n,             -- I
00398   trn_teof_n => trn_tx.trn_teof_n,             -- I
00399   trn_tsrc_rdy_n => trn_tx.trn_tsrc_rdy_n,     -- I
00400   trn_tsrc_dsc_n => trn_tx.trn_tsrc_dsc_n,     -- I
00401   trn_terrfwd_n => trn_tx.trn_terrfwd_n,       -- I
00402 
00403   trn_tbuf_av => trn_tx_back.trn_tbuf_av( 3 downto 0 ),           -- O (4/3:0)
00404   trn_tdst_rdy_n => trn_tx_back.trn_tdst_rdy_n,     -- O
00405   trn_tdst_dsc_n => trn_tx_back.trn_tdst_dsc_n,     -- O
00406 
00407 -- Rx Local-Link
00408 
00409   trn_rd => trn_rx.trn_rd,                     -- O (63/31:0)
00410   trn_rrem_n => trn_rx.trn_rrem_n,
00411   trn_rsof_n => trn_rx.trn_rsof_n,             -- O
00412   trn_reof_n => trn_rx.trn_reof_n,             -- O
00413   trn_rsrc_rdy_n => trn_rx.trn_rsrc_rdy_n,     -- O
00414   trn_rsrc_dsc_n => trn_rx.trn_rsrc_dsc_n,     -- O
00415   trn_rdst_rdy_n => trn_rx_back.trn_rdst_rdy_n,     -- I
00416   trn_rerrfwd_n => trn_rx.trn_rerrfwd_n,       -- O
00417   trn_rnp_ok_n => trn_rx_back.trn_rnp_ok_n,         -- I
00418   trn_rbar_hit_n => trn_rx.trn_rbar_hit_n,     -- O (6:0)
00419   trn_rfc_nph_av => trn_rx.trn_rfc_nph_av,     -- O (11:0)
00420   trn_rfc_npd_av => trn_rx.trn_rfc_npd_av,     -- O (7:0)
00421   trn_rfc_ph_av => trn_rx.trn_rfc_ph_av,       -- O (11:0)
00422   trn_rfc_pd_av => trn_rx.trn_rfc_pd_av,       -- O (7:0)
00423   trn_rcpl_streaming_n => trn_rx_back.trn_rcpl_streaming_n,
00424 
00425 --
00426 -- Host ( CFG ) Interface
00427 --
00428 
00429   cfg_do => cfg_do_c,                                    -- O (31:0)
00430   cfg_rd_wr_done_n => cfg_rd_wr_done_n_c,                -- O
00431   cfg_di => cfg_di_c,                                    -- I (31:0)
00432   cfg_byte_en_n => cfg_byte_en_n_c,                      -- I (3:0)
00433   cfg_dwaddr => cfg_dwaddr_c,                            -- I (9:0)
00434   cfg_wr_en_n => cfg_wr_en_n_c,                          -- I
00435   cfg_rd_en_n => cfg_rd_en_n_c,                          -- I
00436   cfg_err_cor_n => cfg_err_cor_n_c,                      -- I
00437   cfg_err_ur_n => cfg_err_ur_n_c,                        -- I
00438   cfg_err_ecrc_n => cfg_err_ecrc_n_c,                    -- I
00439   cfg_err_cpl_timeout_n => cfg_err_cpl_timeout_n_c,      -- I
00440   cfg_err_cpl_abort_n => cfg_err_cpl_abort_n_c,          -- I
00441   cfg_err_cpl_unexpect_n => cfg_err_cpl_unexpect_n_c,    -- I
00442   cfg_err_posted_n => cfg_err_posted_n_c,                -- I
00443   cfg_err_cpl_rdy_n => cfg_err_cpl_rdy_n_c,              -- O
00444   cfg_err_locked_n => '1',                -- I
00445   cfg_err_tlp_cpl_header => cfg_err_tlp_cpl_header_c,    -- I (47:0)
00446   cfg_interrupt_n => cfg_interrupt_n_c,                  -- I
00447   cfg_interrupt_rdy_n => cfg_interrupt_rdy_n_c,          -- O
00448 
00449   cfg_interrupt_assert_n => cfg_interrupt_assert_n_c,    -- I
00450   cfg_interrupt_di       => cfg_interrupt_di_c,          -- I [7:0]
00451   cfg_interrupt_do       => cfg_interrupt_do_c ,          -- O [7:0]
00452   cfg_interrupt_mmenable => cfg_interrupt_mmenable_c,    -- O [2:0]
00453   cfg_interrupt_msienable=> cfg_interrupt_msienable_c,   -- O
00454   cfg_to_turnoff_n => cfg_to_turnoff_n_c,                -- O
00455   cfg_pm_wake_n => cfg_pm_wake_n_c,                      -- I
00456   cfg_pcie_link_state_n => cfg_pcie_link_state_n_c,      -- O (2:0)
00457   cfg_trn_pending_n => cfg_trn_pending_n_c,              -- I
00458   cfg_bus_number => cfg_bus_number_c,                    -- O (7:0)
00459   cfg_device_number => cfg_device_number_c,              -- O (4:0)
00460   cfg_function_number => cfg_function_number_c,          -- O (2:0)
00461   cfg_status => cfg_status_c,                            -- O (15:0)
00462   cfg_command => cfg_command_c,                          -- O (15:0)
00463   cfg_dstatus => cfg_dstatus_c,                          -- O (15:0)
00464   cfg_dcommand => trn_tx_back.cfg_dcommand,              -- O (15:0)
00465   cfg_lstatus => cfg_lstatus_c,                          -- O (15:0)
00466   cfg_lcommand => cfg_lcommand_c,                        -- O (15:0)
00467   cfg_dsn => (others => '0'),
00468 
00469  fast_train_simulation_only => vector_fast_simulation(0)
00470 
00471 );
00472 
00473 pcie_link_up <= trn_lnk_up_n_c;
00474 pcie_lstatus <= cfg_lstatus_c;
00475 
00476 rstp <=  not trn_reset_n_c  after 1 ns when rising_edge( clk );
00477 dcm_rstp <= not trn_reset_n_c;
00478 
00479 pb_rstp <= rstp or ( not aclk_lock ) after 1 ns when rising_edge( clk );
00480 
00481   trn_rnp_ok_n_c              <= '0';
00482   trn_rcpl_streaming_n_c      <= '1'; 
00483   trn_terrfwd_n_c             <= '1';
00484 
00485   cfg_err_cor_n_c             <= '1';
00486   cfg_err_ur_n_c              <= '1';
00487   cfg_err_ecrc_n_c            <= '1';
00488   cfg_err_cpl_timeout_n_c     <= '1';
00489   cfg_err_cpl_abort_n_c       <= '1';
00490   cfg_err_cpl_unexpect_n_c    <= '1';
00491   cfg_err_posted_n_c          <= '0';
00492 
00493   cfg_interrupt_di_c <= X"00";
00494 
00495   cfg_pm_wake_n_c             <= '1';
00496   cfg_trn_pending_n_c         <= '1';
00497   cfg_dwaddr_c                <= (others => '0');
00498   cfg_err_tlp_cpl_header_c    <= (others => '0');
00499   cfg_di_c                    <= (others => '0');
00500   cfg_byte_en_n_c             <= X"F"; -- 4-bit bus
00501   cfg_wr_en_n_c               <= '1';
00502   cfg_rd_en_n_c               <= '1';
00503 --  cfg_completer_id_c          <= (cfg_bus_number &
00504 --                                cfg_device_number &
00505 --                                cfg_function_number);
00506 --  cfg_bus_mstr_enable_c       <= cfg_command(2);
00507 
00508 
00509 
00510 rx: core64_rx_engine 
00511         port map(
00512         
00513                 --- General ---
00514                 rstp                    => rstp,                        --! 1 - сброс 
00515                 clk                              => clk,                                --! тактовая частота ядра - 250 MHz 
00516                 
00517                 trn_rx                  => trn_rx,                      --! приём пакета
00518                 trn_rx_back             => trn_rx_back,         --! готовность к приёму пакета
00519                                                                 
00520                 reg_access              => reg_access,          --! запрос на доступ к регистрам 
00521                                                                 
00522                 rx_tx_engine    => rx_tx_engine,        --! обмен RX->TX 
00523                 tx_rx_engine    => tx_rx_engine,        --! обмен TX->RX 
00524                                                                 
00525                 rx_ext_fifo             => rx_ext_fifo--! обмен RX->EXT_FIFO 
00526                 
00527                 
00528                 
00529         );
00530         
00531 
00532 tx: core64_tx_engine 
00533         port map(
00534         
00535                 --- General ---
00536                 rstp                    => rstp,                        --! 1 - сброс 
00537                 clk                              => clk,                                --! тактовая частота ядра - 250 MHz 
00538                 
00539                 trn_tx                  => trn_tx,                      --! передача пакета
00540                 trn_tx_back             => trn_tx_back,         --! готовность к передаче пакета
00541                                                                 
00542                 completer_id    => completer_id,        --! идентификатор устройства 
00543                                                                 
00544                 reg_access_back  => reg_access_back,    --! запрос на доступ к регистрам 
00545                                                                 
00546                 rx_tx_engine    => rx_tx_engine,        --! обмен RX->TX 
00547                 tx_rx_engine    => tx_rx_engine,        --! обмен TX->RX 
00548                                                                 
00549                 tx_ext_fifo             => tx_ext_fifo,         --! обмен TX->EXT_FIFO 
00550                 tx_ext_fifo_back=> tx_ext_fifo_back --! обмен TX->EXT_FIFO 
00551                         
00552         );
00553         
00554   completer_id     <= (cfg_bus_number_c &
00555                        cfg_device_number_c &
00556                        cfg_function_number_c ); 
00557                                            
00558                                            
00559  reg: core64_reg_access 
00560         port map(
00561                 --- General ---
00562                 rstp                            => rstp,        --! 1 - сброс 
00563                 clk                                     => clk,         --! тактовая частота ядра - 250 MHz 
00564                 
00565                 --- RX_ENGINE ---- 
00566                 reg_access                      => reg_access,  --! запрос на доступ к регистрам 
00567                 
00568                 --- TX_ENGINE ----
00569                 reg_access_back         => reg_access_back,     --! ответ на запрос 
00570                 
00571                 ---- PB_DISP ----
00572                 reg_disp                        => reg_disp,            --! запрос на доступ к регистрам из BAR1 
00573                 reg_disp_back                   => reg_disp_back,       --! ответ на запрос 
00574                 
00575                 ---- BLOCK EXT_FIFO ----
00576                 reg_ext_fifo            => reg_ext_fifo,                --! запрос на доступ к блокам управления EXT_FIFO 
00577                 reg_ext_fifo_back       => reg_ext_fifo_back,   --! ответ на запрос 
00578                 
00579                 ---- BAR0 - блоки управления ----
00580                 bp_host_data            => bp_host_data,        --! шина данных - выход 
00581                 bp_data                         => bp_data,                     --! шина данных - вход
00582                 bp_adr                          => bp_adr,                      --! адрес регистра 
00583                 bp_we                           => bp_we,                       --! 1 - запись в регистры 
00584                 bp_rd                           => bp_rd,                       --! 1 - чтение из регистров блока 
00585                 bp_sel                          => bp_sel,                      --! номер блока для чтения 
00586                 bp_reg_we                       => bp_reg_we,           --! 1 - запись в регистр по адресам   0x100000 - 0x1FFFFF 
00587                 bp_reg_rd                       => bp_reg_rd,           --! 1 - чтение из регистра по адресам 0x100000 - 0x1FFFFF 
00588                 bp_irq                                  => bp_irq--! 1 - запрос прерывания 
00589         );                                         
00590 
00591         
00592  disp: core64_pb_disp 
00593         port map(
00594                 --- General ---
00595                 rstp                            => pb_rstp,             --! 1 - сброс 
00596                 clk                                     => clk,                 --! тактовая частота ядра - 250 MHz 
00597                 
00598                 ---- PB_DISP ----
00599                 reg_disp                        => reg_disp,            --! запрос на доступ к регистрам из BAR1 
00600                 reg_disp_back           => reg_disp_back,       --! ответ на запрос 
00601                 
00602                 ---- EXT_FIFO ----
00603                 ext_fifo_disp           => ext_fifo_disp,               --! запрос на доступ от узла EXT_FIFO 
00604                 ext_fifo_disp_back              => ext_fifo_disp_back,  --! ответ на запрос
00605                 
00606                 ---- BAR1 ----  
00607                 aclk                            => aclk,                                --! тактовая частота локальной шины - 266 МГц
00608                 pb_master                       => pb_master,                   --! запрос 
00609                 pb_slave                        => pb_slave--! ответ  
00610 
00611         );      
00612         
00613 
00614 
00615 fifo: block_pe_fifo_ext 
00616         port map(
00617         
00618                 ---- Global ----         
00619                 rstp                             => pb_rstp,                             
00620                 clk                                      => clk,                                         
00621                 aclk                             => aclk,                                
00622                                                                               
00623                 ---- TX_ENGINE ----      
00624                 tx_ext_fifo                      => tx_ext_fifo,                         
00625                 tx_ext_fifo_back         => tx_ext_fifo_back,    
00626                                                                               
00627                 ---- RX_ENGINE ----      
00628                 rx_ext_fifo                             => rx_ext_fifo,
00629                                                                               
00630                 ---- REG ----            
00631                 reg_ext_fifo                    => reg_ext_fifo,                 
00632                 reg_ext_fifo_back        => reg_ext_fifo_back, 
00633                                                                                  
00634                 ---- DISP  ----          
00635                 ext_fifo_disp                   => ext_fifo_disp,
00636                 ext_fifo_disp_back       => ext_fifo_disp_back,
00637                 
00638                 irq                                      => irq ,                               -- 1 - запрос прерывания
00639                 
00640                 test                            => px
00641         );
00642                 
00643         
00644  
00645 
00646  int: core64_interrupt 
00647         port map(
00648         
00649                 rstp                                    => pb_rstp,                                     -- 1 - сброс
00650                 clk                                             => clk,                                         -- Тактовая частота ядра 250 МГц
00651                 
00652                 irq                                             => irq,                                         -- 1 - запрос прерывания
00653                 
00654                 cfg_command10                   => cfg_command_c(10),           -- 1 - прерывания запрещены 
00655                 cfg_interrupt                   => cfg_interrupt_n_c,           -- 0 - изменение состояния прерывания
00656                 cfg_interrupt_assert    => cfg_interrupt_assert_n_c,-- 0 - формирование прерывания, 1 - сниятие прерывания 
00657                 cfg_interrupt_rdy               => cfg_interrupt_rdy_n_c-- 0 - подтверждение изменения прерывания 
00658         
00659         );
00660         
00661 --      cfg_interrupt_n_c <= '1';
00662 --      cfg_interrupt_assert_n_c <= '1';
00663         
00664 end pcie_core64_m1;