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