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