DS_DMA
pcie_src/pcie_core64_m1/top/pcie_core64_m6.vhd
00001 -------------------------------------------------------------------------------
00002 --
00003 -- Title       : pcie_core64_m6
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 --                                Модификация 6 - для подключения к Spartan-6
00014 --
00015 -------------------------------------------------------------------------------
00016 
00017 
00018 
00019 library ieee;
00020 use ieee.std_logic_1164.all;
00021 
00022 use work.core64_type_pkg.all;
00023 
00024 package pcie_core64_m6_pkg is
00025 
00026 --! контроллер PCI-Express 
00027 component pcie_core64_m6 is
00028         generic (
00029                 is_simulation   : integer:=0    --! 0 - синтез, 1 - моделирование 
00030         );                
00031         
00032         port (
00033         
00034                 ---- PCI-Express ----
00035                 txp                             : out std_logic_vector( 0 downto 0 );
00036                 txn                             : out std_logic_vector( 0 downto 0 );
00037                 
00038                 rxp                             : in  std_logic_vector( 0 downto 0 );
00039                 rxn                             : in  std_logic_vector( 0 downto 0 );
00040                 
00041                 mgt125                  : in  std_logic; -- тактовая частота 125 MHz от PCI_Express
00042                 
00043                 perst                   : in  std_logic;        -- 0 - сброс                                                  
00044                 
00045                 px                              : out std_logic_vector( 7 downto 0 );   --! контрольные точки 
00046                 
00047                 pcie_lstatus    : out std_logic_vector( 15 downto 0 ); -- регистр LSTATUS
00048                 pcie_link_up    : out std_logic;        -- 0 - завершена инициализация PCI-Express
00049                 
00050                 
00051                 ---- Локальная шина ----                     
00052                 clk_out                 : out std_logic;        --! тактовая частота 250 MHz               
00053                 reset_out               : out std_logic;        --! 0 - сброс
00054                 dcm_rstp                : out std_logic;        --! 1 - сброс DCM 266 МГц
00055 
00056                 ---- BAR0 - блоки управления ----
00057                 bp_host_data    : out std_logic_vector( 31 downto 0 );  --! шина данных - выход 
00058                 bp_data                 : in  std_logic_vector( 31 downto 0 );  --! шина данных - вход
00059                 bp_adr                  : out std_logic_vector( 19 downto 0 );  --! адрес регистра 
00060                 bp_we                   : out std_logic_vector( 3 downto 0 );   --! 1 - запись в регистры 
00061                 bp_rd                   : out std_logic_vector( 3 downto 0 );   --! 1 - чтение из регистров блока 
00062                 bp_sel                  : out std_logic_vector( 1 downto 0 );   --! номер блока для чтения 
00063                 bp_reg_we               : out std_logic;                        --! 1 - запись в регистр по адресам   0x100000 - 0x1FFFFF 
00064                 bp_reg_rd               : out std_logic;                        --! 1 - чтение из регистра по адресам 0x100000 - 0x1FFFFF 
00065                 bp_irq                  : in  std_logic;                        --! 1 - запрос прерывания 
00066 
00067                 ---- BAR1 ----  
00068                 aclk                    : in std_logic;                         --! тактовая частота локальной шины - 266 МГц
00069                 aclk_lock               : in std_logic;                         --! 1 - захват частоты
00070                 pb_master               : out type_pb_master;           --! запрос 
00071                 pb_slave                : in  type_pb_slave                     --! ответ  
00072                 
00073                                 
00074                 
00075         );
00076 end component;
00077 
00078 end package;
00079 
00080 
00081 
00082 library ieee;
00083 use ieee.std_logic_1164.all;            
00084 
00085 use work.core64_type_pkg.all;
00086 use work.core64_rx_engine_m4_pkg.all;
00087 use work.core64_tx_engine_m4_pkg.all;   
00088 use work.core64_reg_access_pkg.all;
00089 use work.core64_pb_disp_pkg.all;   
00090 use work.block_pe_fifo_ext_pkg.all;             
00091 use work.core64_interrupt_pkg.all;
00092 
00093 --! контроллер PCI-Express 
00094 entity pcie_core64_m6 is
00095         generic (
00096                 is_simulation   : integer:=0    --! 0 - синтез, 1 - моделирование 
00097         );                
00098         
00099         port (
00100         
00101                 ---- PCI-Express ----
00102                 txp                             : out std_logic_vector( 0 downto 0 );
00103                 txn                             : out std_logic_vector( 0 downto 0 );
00104                 
00105                 rxp                             : in  std_logic_vector( 0 downto 0 );
00106                 rxn                             : in  std_logic_vector( 0 downto 0 );
00107                 
00108                 mgt125                  : in  std_logic; -- тактовая частота 125 MHz от PCI_Express
00109                 
00110                 perst                   : in  std_logic;        -- 0 - сброс                                                  
00111                 
00112                 px                              : out std_logic_vector( 7 downto 0 );   --! контрольные точки 
00113                 
00114                 pcie_lstatus    : out std_logic_vector( 15 downto 0 ); -- регистр LSTATUS
00115                 pcie_link_up    : out std_logic;        -- 0 - завершена инициализация PCI-Express
00116                 
00117                 
00118                 ---- Локальная шина ----                     
00119                 clk_out                 : out std_logic;        --! тактовая частота 250 MHz               
00120                 reset_out               : out std_logic;        --! 0 - сброс
00121                 dcm_rstp                : out std_logic;        --! 1 - сброс DCM 266 МГц
00122 
00123                 ---- BAR0 - блоки управления ----
00124                 bp_host_data    : out std_logic_vector( 31 downto 0 );  --! шина данных - выход 
00125                 bp_data                 : in  std_logic_vector( 31 downto 0 );  --! шина данных - вход
00126                 bp_adr                  : out std_logic_vector( 19 downto 0 );  --! адрес регистра 
00127                 bp_we                   : out std_logic_vector( 3 downto 0 );   --! 1 - запись в регистры 
00128                 bp_rd                   : out std_logic_vector( 3 downto 0 );   --! 1 - чтение из регистров блока 
00129                 bp_sel                  : out std_logic_vector( 1 downto 0 );   --! номер блока для чтения 
00130                 bp_reg_we               : out std_logic;                        --! 1 - запись в регистр по адресам   0x100000 - 0x1FFFFF 
00131                 bp_reg_rd               : out std_logic;                        --! 1 - чтение из регистра по адресам 0x100000 - 0x1FFFFF 
00132                 bp_irq                  : in  std_logic;                        --! 1 - запрос прерывания 
00133 
00134                 ---- BAR1 ----  
00135                 aclk                    : in std_logic;                         --! тактовая частота локальной шины - 266 МГц
00136                 aclk_lock               : in std_logic;                         --! 1 - захват частоты
00137                 pb_master               : out type_pb_master;           --! запрос 
00138                 pb_slave                : in  type_pb_slave                     --! ответ  
00139                 
00140                 
00141         );
00142 end pcie_core64_m6;
00143 
00144 
00145 architecture pcie_core64_m6 of pcie_core64_m6 is
00146 
00147 
00148 component cl_s6pcie_m2 is
00149   generic (
00150     TL_TX_RAM_RADDR_LATENCY           : integer    := 0;
00151     TL_TX_RAM_RDATA_LATENCY           : integer    := 2;
00152     TL_RX_RAM_RADDR_LATENCY           : integer    := 0;
00153     TL_RX_RAM_RDATA_LATENCY           : integer    := 2;
00154     TL_RX_RAM_WRITE_LATENCY           : integer    := 0;
00155     VC0_TX_LASTPACKET                 : integer    := 28;
00156     VC0_RX_RAM_LIMIT                  : bit_vector := x"7FF";
00157     VC0_TOTAL_CREDITS_PH              : integer    := 32;
00158     VC0_TOTAL_CREDITS_PD              : integer    := 211;
00159     VC0_TOTAL_CREDITS_NPH             : integer    := 8;
00160     VC0_TOTAL_CREDITS_CH              : integer    := 40;
00161     VC0_TOTAL_CREDITS_CD              : integer    := 211;
00162     VC0_CPL_INFINITE                  : boolean    := TRUE;
00163     BAR0                              : bit_vector := x"FFE00000";
00164     BAR1                              : bit_vector := x"FFE00000";
00165     BAR2                              : bit_vector := x"00000000";
00166     BAR3                              : bit_vector := x"00000000";
00167     BAR4                              : bit_vector := x"00000000";
00168     BAR5                              : bit_vector := x"00000000";
00169     EXPANSION_ROM                     : bit_vector := "0000000000000000000000";
00170     DISABLE_BAR_FILTERING             : boolean    := FALSE;
00171     DISABLE_ID_CHECK                  : boolean    := FALSE;
00172     TL_TFC_DISABLE                    : boolean    := FALSE;
00173     TL_TX_CHECKS_DISABLE              : boolean    := FALSE;
00174     USR_CFG                           : boolean    := FALSE;
00175     USR_EXT_CFG                       : boolean    := FALSE;
00176     DEV_CAP_MAX_PAYLOAD_SUPPORTED     : integer    := 1;
00177     CLASS_CODE                        : bit_vector := x"FFFFFF";
00178     CARDBUS_CIS_POINTER               : bit_vector := x"00000000";
00179     PCIE_CAP_CAPABILITY_VERSION       : bit_vector := x"1";
00180     PCIE_CAP_DEVICE_PORT_TYPE         : bit_vector := x"0";
00181     PCIE_CAP_SLOT_IMPLEMENTED         : boolean    := FALSE;
00182     PCIE_CAP_INT_MSG_NUM              : bit_vector := "00000";
00183     DEV_CAP_PHANTOM_FUNCTIONS_SUPPORT : integer    := 0;
00184     DEV_CAP_EXT_TAG_SUPPORTED         : boolean    := FALSE;
00185     DEV_CAP_ENDPOINT_L0S_LATENCY      : integer    := 7;
00186     DEV_CAP_ENDPOINT_L1_LATENCY       : integer    := 7;
00187     SLOT_CAP_ATT_BUTTON_PRESENT       : boolean    := FALSE;
00188     SLOT_CAP_ATT_INDICATOR_PRESENT    : boolean    := FALSE;
00189     SLOT_CAP_POWER_INDICATOR_PRESENT  : boolean    := FALSE;
00190     DEV_CAP_ROLE_BASED_ERROR          : boolean    := TRUE;
00191     LINK_CAP_ASPM_SUPPORT             : integer    := 1;
00192     LINK_CAP_L0S_EXIT_LATENCY         : integer    := 7;
00193     LINK_CAP_L1_EXIT_LATENCY          : integer    := 7;
00194     LL_ACK_TIMEOUT                    : bit_vector := x"0000";
00195     LL_ACK_TIMEOUT_EN                 : boolean    := FALSE;
00196     LL_REPLAY_TIMEOUT                 : bit_vector := x"0000";
00197     LL_REPLAY_TIMEOUT_EN              : boolean    := FALSE;
00198     MSI_CAP_MULTIMSGCAP               : integer    := 0;
00199     MSI_CAP_MULTIMSG_EXTENSION        : integer    := 0;
00200     LINK_STATUS_SLOT_CLOCK_CONFIG     : boolean    := TRUE;
00201     PLM_AUTO_CONFIG                   : boolean    := FALSE;
00202     FAST_TRAIN                        : boolean    := FALSE;
00203     ENABLE_RX_TD_ECRC_TRIM            : boolean    := TRUE;
00204     DISABLE_SCRAMBLING                : boolean    := FALSE;
00205     PM_CAP_VERSION                    : integer    := 3;
00206     PM_CAP_PME_CLOCK                  : boolean    := FALSE;
00207     PM_CAP_DSI                        : boolean    := FALSE;
00208     PM_CAP_AUXCURRENT                 : integer    := 0;
00209     PM_CAP_D1SUPPORT                  : boolean    := TRUE;
00210     PM_CAP_D2SUPPORT                  : boolean    := TRUE;
00211     PM_CAP_PMESUPPORT                 : bit_vector := x"0F";
00212     PM_DATA0                          : bit_vector := x"00";
00213     PM_DATA_SCALE0                    : bit_vector := x"0";
00214     PM_DATA1                          : bit_vector := x"00";
00215     PM_DATA_SCALE1                    : bit_vector := x"0";
00216     PM_DATA2                          : bit_vector := x"00";
00217     PM_DATA_SCALE2                    : bit_vector := x"0";
00218     PM_DATA3                          : bit_vector := x"00";
00219     PM_DATA_SCALE3                    : bit_vector := x"0";
00220     PM_DATA4                          : bit_vector := x"00";
00221     PM_DATA_SCALE4                    : bit_vector := x"0";
00222     PM_DATA5                          : bit_vector := x"00";
00223     PM_DATA_SCALE5                    : bit_vector := x"0";
00224     PM_DATA6                          : bit_vector := x"00";
00225     PM_DATA_SCALE6                    : bit_vector := x"0";
00226     PM_DATA7                          : bit_vector := x"00";
00227     PM_DATA_SCALE7                    : bit_vector := x"0";
00228     PCIE_GENERIC                      : bit_vector := "000010101111";
00229     GTP_SEL                           : integer    := 0;
00230     CFG_VEN_ID                        : std_logic_vector(15 downto 0) := x"4953";
00231     CFG_DEV_ID                        : std_logic_vector(15 downto 0) := x"5507";
00232     CFG_REV_ID                        : std_logic_vector(7 downto 0)  := x"10";
00233     CFG_SUBSYS_VEN_ID                 : std_logic_vector(15 downto 0) := x"4953";
00234     CFG_SUBSYS_ID                     : std_logic_vector(15 downto 0) := x"0008";
00235     REF_CLK_FREQ                      : integer    := 1
00236   );
00237   port (
00238     -- PCI Express Fabric Interface
00239     pci_exp_txp             : out std_logic;
00240     pci_exp_txn             : out std_logic;
00241     pci_exp_rxp             : in  std_logic;
00242     pci_exp_rxn             : in  std_logic;
00243 
00244     -- Transaction (TRN) Interface
00245     trn_lnk_up_n            : out std_logic;
00246 
00247     -- Tx
00248     trn_td                  : in  std_logic_vector(31 downto 0);
00249     trn_tsof_n              : in  std_logic;
00250     trn_teof_n              : in  std_logic;
00251     trn_tsrc_rdy_n          : in  std_logic;
00252     trn_tdst_rdy_n          : out std_logic;
00253     trn_terr_drop_n         : out std_logic;
00254     trn_tsrc_dsc_n          : in  std_logic;
00255     trn_terrfwd_n           : in  std_logic;
00256     trn_tbuf_av             : out std_logic_vector(5 downto 0);
00257     trn_tstr_n              : in  std_logic;
00258     trn_tcfg_req_n          : out std_logic;
00259     trn_tcfg_gnt_n          : in  std_logic;
00260 
00261     -- Rx
00262     trn_rd                  : out std_logic_vector(31 downto 0);
00263     trn_rsof_n              : out std_logic;
00264     trn_reof_n              : out std_logic;
00265     trn_rsrc_rdy_n          : out std_logic;
00266     trn_rsrc_dsc_n          : out std_logic;
00267     trn_rdst_rdy_n          : in  std_logic;
00268     trn_rerrfwd_n           : out std_logic;
00269     trn_rnp_ok_n            : in  std_logic;
00270     trn_rbar_hit_n          : out std_logic_vector(6 downto 0);
00271     trn_fc_sel              : in  std_logic_vector(2 downto 0);
00272     trn_fc_nph              : out std_logic_vector(7 downto 0);
00273     trn_fc_npd              : out std_logic_vector(11 downto 0);
00274     trn_fc_ph               : out std_logic_vector(7 downto 0);
00275     trn_fc_pd               : out std_logic_vector(11 downto 0);
00276     trn_fc_cplh             : out std_logic_vector(7 downto 0);
00277     trn_fc_cpld             : out std_logic_vector(11 downto 0);
00278 
00279     -- Host (CFG) Interface
00280     cfg_do                  : out std_logic_vector(31 downto 0);
00281     cfg_rd_wr_done_n        : out std_logic;
00282     cfg_dwaddr              : in  std_logic_vector(9 downto 0);
00283     cfg_rd_en_n             : in  std_logic;
00284     cfg_err_ur_n            : in  std_logic;
00285     cfg_err_cor_n           : in  std_logic;
00286     cfg_err_ecrc_n          : in  std_logic;
00287     cfg_err_cpl_timeout_n   : in  std_logic;
00288     cfg_err_cpl_abort_n     : in  std_logic;
00289     cfg_err_posted_n        : in  std_logic;
00290     cfg_err_locked_n        : in  std_logic;
00291     cfg_err_tlp_cpl_header  : in  std_logic_vector(47 downto 0);
00292     cfg_err_cpl_rdy_n       : out std_logic;
00293     cfg_interrupt_n         : in  std_logic;
00294     cfg_interrupt_rdy_n     : out std_logic;
00295     cfg_interrupt_assert_n  : in  std_logic;
00296     cfg_interrupt_do        : out std_logic_vector(7 downto 0);
00297     cfg_interrupt_di        : in  std_logic_vector(7 downto 0);
00298     cfg_interrupt_mmenable  : out std_logic_vector(2 downto 0);
00299     cfg_interrupt_msienable : out std_logic;
00300     cfg_turnoff_ok_n        : in  std_logic;
00301     cfg_to_turnoff_n        : out std_logic;
00302     cfg_pm_wake_n           : in  std_logic;
00303     cfg_pcie_link_state_n   : out std_logic_vector(2 downto 0);
00304     cfg_trn_pending_n       : in  std_logic;
00305     cfg_dsn                 : in  std_logic_vector(63 downto 0);
00306     cfg_bus_number          : out std_logic_vector(7 downto 0);
00307     cfg_device_number       : out std_logic_vector(4 downto 0);
00308     cfg_function_number     : out std_logic_vector(2 downto 0);
00309     cfg_status              : out std_logic_vector(15 downto 0);
00310     cfg_command             : out std_logic_vector(15 downto 0);
00311     cfg_dstatus             : out std_logic_vector(15 downto 0);
00312     cfg_dcommand            : out std_logic_vector(15 downto 0);
00313     cfg_lstatus             : out std_logic_vector(15 downto 0);
00314     cfg_lcommand            : out std_logic_vector(15 downto 0);
00315 
00316     -- System Interface
00317     sys_clk                 : in  std_logic;
00318     sys_reset_n             : in  std_logic;
00319     trn_clk                 : out std_logic;
00320     trn_reset_n             : out std_logic;
00321     received_hot_reset      : out std_logic
00322   );
00323 end component;
00324 
00325 
00326 --signal     sys_clk_c : std_logic;
00327 
00328 --signal     sys_reset_n_c : std_logic;
00329 signal     trn_clk_c : std_logic;
00330 signal     trn_reset_n_c : std_logic;
00331 signal     trn_lnk_up_n_c : std_logic;
00332 signal     cfg_trn_pending_n_c : std_logic;
00333 signal     trn_tsof_n_c : std_logic;
00334 signal     trn_teof_n_c : std_logic;
00335 signal     trn_tsrc_rdy_n_c : std_logic;
00336 signal     trn_tdst_rdy_n_c : std_logic;
00337 signal     trn_tsrc_dsc_n_c : std_logic;
00338 signal     trn_terrfwd_n_c : std_logic;
00339 signal     trn_tdst_dsc_n_c : std_logic;
00340 signal     trn_td_c : std_logic_vector((64 - 1) downto 0);
00341 signal     trn_trem_n_c : std_logic_vector(7 downto 0);
00342 signal     trn_tbuf_av_c : std_logic_vector(( 4 -1 )  downto 0);
00343 signal     trn_rsof_n_c : std_logic;
00344 signal     trn_reof_n_c : std_logic;
00345 signal     trn_rsrc_rdy_n_c : std_logic;
00346 signal     trn_rsrc_dsc_n_c : std_logic;
00347 signal     trn_rdst_rdy_n_c : std_logic;
00348 signal     trn_rerrfwd_n_c : std_logic;
00349 signal     trn_rnp_ok_n_c : std_logic;
00350 
00351 signal     trn_rd_c : std_logic_vector((64 - 1) downto 0);
00352 signal     trn_rrem_n_c : std_logic_vector(7 downto 0);
00353 signal     trn_rbar_hit_n_c : std_logic_vector(6 downto 0);
00354 signal     trn_rfc_nph_av_c : std_logic_vector(7 downto 0);
00355 signal     trn_rfc_npd_av_c : std_logic_vector(11 downto 0);
00356 signal     trn_rfc_ph_av_c : std_logic_vector(7 downto 0);
00357 signal     trn_rfc_pd_av_c : std_logic_vector(11 downto 0);
00358 signal     trn_rcpl_streaming_n_c      : std_logic;
00359 
00360 signal     cfg_do_c : std_logic_vector(31 downto 0);
00361 signal     cfg_di_c : std_logic_vector(31 downto 0);
00362 signal     cfg_dwaddr_c : std_logic_vector(9 downto 0) ;
00363 signal     cfg_byte_en_n_c : std_logic_vector(3 downto 0);
00364 signal     cfg_err_tlp_cpl_header_c : std_logic_vector(47 downto 0);
00365 signal     cfg_wr_en_n_c : std_logic;
00366 signal     cfg_rd_en_n_c : std_logic;
00367 signal     cfg_rd_wr_done_n_c : std_logic;
00368 signal     cfg_err_cor_n_c : std_logic;
00369 signal     cfg_err_ur_n_c : std_logic;
00370 signal     cfg_err_ecrc_n_c : std_logic;
00371 signal     cfg_err_cpl_timeout_n_c : std_logic;
00372 signal     cfg_err_cpl_abort_n_c : std_logic;
00373 signal     cfg_err_cpl_unexpect_n_c : std_logic;
00374 signal     cfg_err_posted_n_c : std_logic;
00375 
00376 signal     cfg_err_cpl_rdy_n_c : std_logic;  
00377 signal     cfg_interrupt_n_c : std_logic;
00378 signal     cfg_interrupt_rdy_n_c : std_logic;
00379 
00380 signal     cfg_interrupt_assert_n_c : std_logic;
00381 signal     cfg_interrupt_di_c : std_logic_vector(7 downto 0);
00382 signal     cfg_interrupt_do_c : std_logic_vector(7 downto 0);
00383 signal     cfg_interrupt_mmenable_c : std_logic_vector(2 downto 0);
00384 signal     cfg_interrupt_msienable_c: std_logic;
00385 
00386 signal     cfg_turnoff_ok_n_c : std_logic;
00387 signal     cfg_to_turnoff_n_c : std_logic;
00388 signal     cfg_pm_wake_n_c : std_logic;
00389 signal     cfg_pcie_link_state_n_c : std_logic_vector(2 downto 0);
00390 signal     cfg_bus_number_c : std_logic_vector(7 downto 0);
00391 signal     cfg_device_number_c : std_logic_vector(4 downto 0);
00392 signal     cfg_function_number_c : std_logic_vector(2 downto 0);
00393 signal     cfg_status_c : std_logic_vector(15 downto 0);
00394 signal     cfg_command_c : std_logic_vector(15 downto 0);
00395 signal     cfg_dstatus_c : std_logic_vector(15 downto 0);
00396 signal     cfg_dcommand_c : std_logic_vector(15 downto 0);
00397 signal     cfg_lstatus_c : std_logic_vector(15 downto 0);
00398 signal     cfg_lcommand_c : std_logic_vector(15 downto 0);
00399 --signal     unsigned_fast_simulation: unsigned(0 downto 0);
00400 signal     vector_fast_simulation: std_logic_vector(0 downto 0):=(0=>'1');
00401 
00402 signal  refclkout                               : std_logic;
00403 
00404 
00405 signal clk                                      : std_logic;
00406 signal rstp                                     : std_logic;
00407 signal trn_rx                           : type_trn_rx;                  --! приём пакета
00408 signal trn_rx_back                      : type_trn_rx_back;             --! готовность к приёму пакета
00409 
00410 signal reg_access                       : type_reg_access;              --! запрос на доступ к регистрам 
00411                 
00412 signal rx_tx_engine                     : type_rx_tx_engine;    --! обмен RX->TX 
00413 signal tx_rx_engine                     : type_tx_rx_engine;    --! обмен TX->RX 
00414                 
00415 signal rx_ext_fifo                      : type_rx_ext_fifo;             --! обмен RX->EXT_FIFO 
00416 signal tx_ext_fifo                      : type_tx_ext_fifo;
00417 signal  tx_ext_fifo_back        : type_tx_ext_fifo_back;
00418 signal  reg_access_back         : type_reg_access_back;
00419 signal  completer_id            : std_logic_vector( 15 downto 0 );
00420 
00421 signal  trn_tx                          : type_trn_tx;
00422 signal  trn_tx_back                     : type_trn_tx_back;
00423 
00424 signal  reg_disp                        : type_reg_disp;
00425 signal  reg_disp_back           : type_reg_disp_back;
00426 
00427 signal  reg_ext_fifo            : type_reg_ext_fifo;
00428 signal  reg_ext_fifo_back       : type_reg_ext_fifo_back;
00429 
00430 signal  ext_fifo_disp           : type_ext_fifo_disp;           --! запрос на доступ от узла EXT_FIFO 
00431 signal  ext_fifo_disp_back      : type_ext_fifo_disp_back;      --! ответ на запрос
00432 
00433 signal  pb_rstp                         : std_logic;
00434 
00435 signal  irq                                     : std_logic;
00436 
00437 function  SET_FAST_TRAIN( is_simulation : integer ) return boolean is
00438 
00439 variable        ret     : boolean;
00440 begin                      
00441         
00442         if( is_simulation=0 ) then
00443                 ret:=false;
00444         else
00445                 ret:=true;
00446         end if;
00447         return ret;
00448                 
00449 end SET_FAST_TRAIN;
00450 
00451 constant        PL_FAST_TRAIN   : boolean:= SET_FAST_TRAIN( is_simulation );
00452 
00453 begin
00454 
00455 gen_sim: if( is_simulation/=0 ) generate
00456         vector_fast_simulation <= (others=>'1');
00457 end generate;
00458 
00459 gen_syn: if( is_simulation=0 ) generate
00460         vector_fast_simulation <= (others=>'0');
00461 end generate;
00462         
00463         
00464 clk_out <= clk;
00465 reset_out <= not pb_rstp after 1 ns when rising_edge( clk );
00466 
00467 ep : cl_s6pcie_m2  
00468  generic map
00469   (
00470     FAST_TRAIN                        => PL_FAST_TRAIN
00471   )
00472  port map
00473 (
00474 
00475 --
00476 -- PCI Express Fabric Interface
00477 --
00478 
00479   pci_exp_txp => txp (0),             -- O (7/3/0:0)
00480   pci_exp_txn => txn(0),             -- O (7/3/0:0)
00481   pci_exp_rxp => rxp(0),             -- O (7/3/0:0)
00482   pci_exp_rxn => rxn(0),             -- O (7/3/0:0)
00483 
00484 
00485 --
00486 -- System ( SYS ) Interface
00487 --
00488   sys_clk => mgt125,                     -- I
00489 
00490   sys_reset_n => perst,                  -- I
00491 
00492 --  refclkout => refclkout,                -- O
00493 
00494 --
00495 -- Transaction ( TRN ) Interface
00496 --
00497 
00498   trn_clk => clk,                 -- O
00499   trn_reset_n => trn_reset_n_c,           -- O
00500   trn_lnk_up_n => trn_lnk_up_n_c,         -- O
00501 
00502 -- Tx Local-Link
00503 
00504   trn_td => trn_tx.trn_td( 31 downto 0 ),      -- I (63/31:0)
00505 --  trn_trem_n => trn_tx.trn_trem_n,
00506   trn_tsof_n => trn_tx.trn_tsof_n,             -- I
00507   trn_teof_n => trn_tx.trn_teof_n,             -- I
00508   trn_tsrc_rdy_n => trn_tx.trn_tsrc_rdy_n,     -- I
00509   trn_tsrc_dsc_n => trn_tx.trn_tsrc_dsc_n,     -- I
00510   trn_terrfwd_n => trn_tx.trn_terrfwd_n,       -- I
00511 
00512   trn_tbuf_av => trn_tx_back.trn_tbuf_av,           -- O (4/3:0)
00513   trn_tdst_rdy_n => trn_tx_back.trn_tdst_rdy_n,     -- O
00514 --  trn_tdst_dsc_n => trn_tx_back.trn_tdst_dsc_n,     -- O
00515 
00516         trn_tstr_n   => '1',               
00517         trn_tcfg_gnt_n => '0',
00518 
00519 
00520 -- Rx Local-Link
00521 
00522   trn_rd => trn_rx.trn_rd( 31 downto 0 ),      -- O (63/31:0)
00523 --  trn_rrem_n => trn_rx.trn_rrem_n,
00524   trn_rsof_n => trn_rx.trn_rsof_n,             -- O
00525   trn_reof_n => trn_rx.trn_reof_n,             -- O
00526   trn_rsrc_rdy_n => trn_rx.trn_rsrc_rdy_n,     -- O
00527   trn_rsrc_dsc_n => trn_rx.trn_rsrc_dsc_n,     -- O
00528   trn_rdst_rdy_n => trn_rx_back.trn_rdst_rdy_n,     -- I
00529   trn_rerrfwd_n => trn_rx.trn_rerrfwd_n,       -- O
00530   trn_rnp_ok_n => trn_rx_back.trn_rnp_ok_n,         -- I
00531   trn_rbar_hit_n => trn_rx.trn_rbar_hit_n,     -- O (6:0)
00532 --  trn_rfc_nph_av => trn_rx.trn_rfc_nph_av,     -- O (11:0)
00533 --  trn_rfc_npd_av => trn_rx.trn_rfc_npd_av,     -- O (7:0)
00534 --  trn_rfc_ph_av => trn_rx.trn_rfc_ph_av,       -- O (11:0)
00535 --  trn_rfc_pd_av => trn_rx.trn_rfc_pd_av,       -- O (7:0)
00536 --  trn_rcpl_streaming_n => trn_rx_back.trn_rcpl_streaming_n,
00537 
00538         trn_fc_sel => "000",
00539 --
00540 -- Host ( CFG ) Interface
00541 --
00542 
00543   cfg_do => cfg_do_c,                                    -- O (31:0)
00544   cfg_rd_wr_done_n => cfg_rd_wr_done_n_c,                -- O
00545 --  cfg_di => cfg_di_c,                                    -- I (31:0)
00546 --  cfg_byte_en_n => cfg_byte_en_n_c,                      -- I (3:0)
00547   cfg_dwaddr => cfg_dwaddr_c,                            -- I (9:0)
00548 --  cfg_wr_en_n => cfg_wr_en_n_c,                          -- I
00549   cfg_rd_en_n => cfg_rd_en_n_c,                          -- I
00550   cfg_err_cor_n => cfg_err_cor_n_c,                      -- I
00551   cfg_err_ur_n => cfg_err_ur_n_c,                        -- I
00552   cfg_err_ecrc_n => cfg_err_ecrc_n_c,                    -- I
00553   cfg_err_cpl_timeout_n => cfg_err_cpl_timeout_n_c,      -- I
00554   cfg_err_cpl_abort_n => cfg_err_cpl_abort_n_c,          -- I
00555 --  cfg_err_cpl_unexpect_n => cfg_err_cpl_unexpect_n_c,    -- I
00556   cfg_err_posted_n => cfg_err_posted_n_c,                -- I
00557   cfg_err_cpl_rdy_n => cfg_err_cpl_rdy_n_c,              -- O
00558   cfg_err_locked_n => '1',                -- I
00559   cfg_err_tlp_cpl_header => cfg_err_tlp_cpl_header_c,    -- I (47:0)
00560   cfg_interrupt_n => cfg_interrupt_n_c,                  -- I
00561   cfg_interrupt_rdy_n => cfg_interrupt_rdy_n_c,          -- O
00562 
00563   cfg_interrupt_assert_n => cfg_interrupt_assert_n_c,    -- I
00564   cfg_interrupt_di       => cfg_interrupt_di_c,          -- I [7:0]
00565   cfg_interrupt_do       => cfg_interrupt_do_c ,          -- O [7:0]
00566   cfg_interrupt_mmenable => cfg_interrupt_mmenable_c,    -- O [2:0]
00567   cfg_interrupt_msienable=> cfg_interrupt_msienable_c,   -- O
00568   cfg_to_turnoff_n => cfg_to_turnoff_n_c,                -- O
00569   cfg_pm_wake_n => cfg_pm_wake_n_c,                      -- I
00570   cfg_pcie_link_state_n => cfg_pcie_link_state_n_c,      -- O (2:0)
00571   cfg_trn_pending_n => cfg_trn_pending_n_c,              -- I
00572   cfg_bus_number => cfg_bus_number_c,                    -- O (7:0)
00573   cfg_device_number => cfg_device_number_c,              -- O (4:0)
00574   cfg_function_number => cfg_function_number_c,          -- O (2:0)
00575   cfg_status => cfg_status_c,                            -- O (15:0)
00576   cfg_command => cfg_command_c,                          -- O (15:0)
00577   cfg_dstatus => cfg_dstatus_c,                          -- O (15:0)
00578   cfg_dcommand => trn_tx_back.cfg_dcommand,              -- O (15:0)
00579   cfg_lstatus => cfg_lstatus_c,                          -- O (15:0)
00580   cfg_lcommand => cfg_lcommand_c,                        -- O (15:0)
00581   cfg_dsn => (others => '0'),
00582   
00583   cfg_turnoff_ok_n => '1' 
00584 
00585 -- fast_train_simulation_only => vector_fast_simulation(0)
00586 
00587 );
00588 
00589 pcie_link_up <= trn_lnk_up_n_c;
00590 pcie_lstatus <= cfg_lstatus_c;
00591 
00592 rstp <=  not trn_reset_n_c  after 1 ns when rising_edge( clk );
00593 dcm_rstp <= not trn_reset_n_c;
00594 
00595 pb_rstp <= rstp or ( not aclk_lock ) after 1 ns when rising_edge( clk );
00596 
00597   trn_rnp_ok_n_c              <= '0';
00598   trn_rcpl_streaming_n_c      <= '1'; 
00599   trn_terrfwd_n_c             <= '1';
00600 
00601   cfg_err_cor_n_c             <= '1';
00602   cfg_err_ur_n_c              <= '1';
00603   cfg_err_ecrc_n_c            <= '1';
00604   cfg_err_cpl_timeout_n_c     <= '1';
00605   cfg_err_cpl_abort_n_c       <= '1';
00606   cfg_err_cpl_unexpect_n_c    <= '1';
00607   cfg_err_posted_n_c          <= '0';
00608 
00609   cfg_interrupt_di_c <= X"00";
00610 
00611   cfg_pm_wake_n_c             <= '1';
00612   cfg_trn_pending_n_c         <= '1';
00613   cfg_dwaddr_c                <= (others => '0');
00614   cfg_err_tlp_cpl_header_c    <= (others => '0');
00615   cfg_di_c                    <= (others => '0');
00616   cfg_byte_en_n_c             <= X"F"; -- 4-bit bus
00617   cfg_wr_en_n_c               <= '1';
00618   cfg_rd_en_n_c               <= '1';
00619 --  cfg_completer_id_c          <= (cfg_bus_number &
00620 --                                cfg_device_number &
00621 --                                cfg_function_number);
00622 --  cfg_bus_mstr_enable_c       <= cfg_command(2);
00623 
00624 
00625 
00626 rx: core64_rx_engine_m4 
00627         port map(
00628         
00629                 --- General ---
00630                 rstp                    => rstp,                        --! 1 - сброс 
00631                 clk                              => clk,                                --! тактовая частота ядра - 250 MHz 
00632                 
00633                 trn_rx                  => trn_rx,                      --! приём пакета
00634                 trn_rx_back             => trn_rx_back,         --! готовность к приёму пакета
00635                                                                 
00636                 reg_access              => reg_access,          --! запрос на доступ к регистрам 
00637                                                                 
00638                 rx_tx_engine    => rx_tx_engine,        --! обмен RX->TX 
00639                 tx_rx_engine    => tx_rx_engine,        --! обмен TX->RX 
00640                                                                 
00641                 rx_ext_fifo             => rx_ext_fifo--! обмен RX->EXT_FIFO 
00642                 
00643                 
00644                 
00645         );
00646         
00647 
00648 tx: core64_tx_engine_m4 
00649         port map(
00650         
00651                 --- General ---
00652                 rstp                    => rstp,                        --! 1 - сброс 
00653                 clk                              => clk,                                --! тактовая частота ядра - 250 MHz 
00654                 
00655                 trn_tx                  => trn_tx,                      --! передача пакета
00656                 trn_tx_back             => trn_tx_back,         --! готовность к передаче пакета
00657                                                                 
00658                 completer_id    => completer_id,        --! идентификатор устройства 
00659                                                                 
00660                 reg_access_back  => reg_access_back,    --! запрос на доступ к регистрам 
00661                                                                 
00662                 rx_tx_engine    => rx_tx_engine,        --! обмен RX->TX 
00663                 tx_rx_engine    => tx_rx_engine,        --! обмен TX->RX 
00664                                                                 
00665                 tx_ext_fifo             => tx_ext_fifo,         --! обмен TX->EXT_FIFO 
00666                 tx_ext_fifo_back=> tx_ext_fifo_back --! обмен TX->EXT_FIFO 
00667                         
00668         );
00669         
00670   completer_id     <= (cfg_bus_number_c &
00671                        cfg_device_number_c &
00672                        cfg_function_number_c ); 
00673                                            
00674                                            
00675  reg: core64_reg_access 
00676         port map(
00677                 --- General ---
00678                 rstp                            => rstp,        --! 1 - сброс 
00679                 clk                                     => clk,         --! тактовая частота ядра - 250 MHz 
00680                 
00681                 --- RX_ENGINE ---- 
00682                 reg_access                      => reg_access,  --! запрос на доступ к регистрам 
00683                 
00684                 --- TX_ENGINE ----
00685                 reg_access_back         => reg_access_back,     --! ответ на запрос 
00686                 
00687                 ---- PB_DISP ----
00688                 reg_disp                        => reg_disp,            --! запрос на доступ к регистрам из BAR1 
00689                 reg_disp_back                   => reg_disp_back,       --! ответ на запрос 
00690                 
00691                 ---- BLOCK EXT_FIFO ----
00692                 reg_ext_fifo            => reg_ext_fifo,                --! запрос на доступ к блокам управления EXT_FIFO 
00693                 reg_ext_fifo_back       => reg_ext_fifo_back,   --! ответ на запрос 
00694                 
00695                 ---- BAR0 - блоки управления ----
00696                 bp_host_data            => bp_host_data,        --! шина данных - выход 
00697                 bp_data                         => bp_data,                     --! шина данных - вход
00698                 bp_adr                          => bp_adr,                      --! адрес регистра 
00699                 bp_we                           => bp_we,                       --! 1 - запись в регистры 
00700                 bp_rd                           => bp_rd,                       --! 1 - чтение из регистров блока 
00701                 bp_sel                          => bp_sel,                      --! номер блока для чтения 
00702                 bp_reg_we                       => bp_reg_we,           --! 1 - запись в регистр по адресам   0x100000 - 0x1FFFFF 
00703                 bp_reg_rd                       => bp_reg_rd,           --! 1 - чтение из регистра по адресам 0x100000 - 0x1FFFFF 
00704                 bp_irq                                  => bp_irq--! 1 - запрос прерывания 
00705         );                                         
00706 
00707         
00708  disp: core64_pb_disp 
00709         port map(
00710                 --- General ---
00711                 rstp                            => pb_rstp,             --! 1 - сброс 
00712                 clk                                     => clk,                 --! тактовая частота ядра - 250 MHz 
00713                 
00714                 ---- PB_DISP ----
00715                 reg_disp                        => reg_disp,            --! запрос на доступ к регистрам из BAR1 
00716                 reg_disp_back           => reg_disp_back,       --! ответ на запрос 
00717                 
00718                 ---- EXT_FIFO ----
00719                 ext_fifo_disp           => ext_fifo_disp,               --! запрос на доступ от узла EXT_FIFO 
00720                 ext_fifo_disp_back      => ext_fifo_disp_back,  --! ответ на запрос
00721                 
00722                 ---- BAR1 ----  
00723                 aclk                            => aclk,                                --! тактовая частота локальной шины - 266 МГц
00724                 pb_master                       => pb_master,                   --! запрос 
00725                 pb_slave                        => pb_slave--! ответ  
00726 
00727         );      
00728         
00729 
00730 
00731 fifo: block_pe_fifo_ext 
00732         generic map(
00733                 is_dsp48                        => 0-- 1 - использовать DSP48, 0 - не использовать DSP48
00734         )
00735         port map(
00736         
00737                 ---- Global ----         
00738                 rstp                                    => pb_rstp,                              
00739                 clk                                             => clk,                                  
00740                 aclk                                    => aclk ,                                
00741                                                                               
00742                 ---- TX_ENGINE ----      
00743                 tx_ext_fifo                      => tx_ext_fifo,                         
00744                 tx_ext_fifo_back         => tx_ext_fifo_back,    
00745                                                                               
00746                 ---- RX_ENGINE ----      
00747                 rx_ext_fifo                             => rx_ext_fifo,
00748                                                                               
00749                 ---- REG ----            
00750                 reg_ext_fifo                    => reg_ext_fifo,                 
00751                 reg_ext_fifo_back        => reg_ext_fifo_back, 
00752                                                                                  
00753                 ---- DISP  ----          
00754                 ext_fifo_disp                   => ext_fifo_disp,
00755                 ext_fifo_disp_back       => ext_fifo_disp_back,
00756                 
00757                 irq                                      => irq ,                               -- 1 - запрос прерывания
00758                 
00759                 test                            => px
00760         );
00761                 
00762         
00763  
00764 
00765  int: core64_interrupt 
00766         port map(
00767         
00768                 rstp                                    => pb_rstp,                                     -- 1 - сброс
00769                 clk                                             => clk,                                         -- Тактовая частота ядра 250 МГц
00770                 
00771                 irq                                             => irq,                                         -- 1 - запрос прерывания
00772                 
00773                 cfg_command10                   => cfg_command_c(10),           -- 1 - прерывания запрещены 
00774                 cfg_interrupt                   => cfg_interrupt_n_c,           -- 0 - изменение состояния прерывания
00775                 cfg_interrupt_assert    => cfg_interrupt_assert_n_c,-- 0 - формирование прерывания, 1 - сниятие прерывания 
00776                 cfg_interrupt_rdy               => cfg_interrupt_rdy_n_c-- 0 - подтверждение изменения прерывания 
00777         
00778         );
00779         
00780 --      cfg_interrupt_n_c <= '1';
00781 --      cfg_interrupt_assert_n_c <= '1';
00782         
00783 end pcie_core64_m6;