DS_DMA
|
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;