DS_DMA
pcie_src/components/pcie_core/pcie_core64_m2.vhd
00001 -------------------------------------------------------------------------------
00002 --
00003 -- Title       : pcie_core64_m2
00004 -- Author      : Dmitry Smekhov
00005 -- Company     : Instrumental Systems
00006 -- E-mail      : dsmv@insys.ru
00007 --
00008 -- Version     : 1.0
00009 --
00010 -------------------------------------------------------------------------------
00011 --
00012 -- Description : 
00013 --
00014 -------------------------------------------------------------------------------
00015 
00016 
00017 
00018 library ieee;
00019 use ieee.std_logic_1164.all;
00020 
00021 package pcie_core64_m2_pkg is
00022 
00023 --! контроллер PCI-Express 
00024 component pcie_core64_m2 is
00025         generic (
00026                 Device_ID               : in std_logic_vector( 15 downto 0 ):=x"0000"; -- идентификатор модуля
00027                 Revision                : in std_logic_vector( 15 downto 0 ):=x"0000"; -- версия модуля
00028                 PLD_VER                 : in std_logic_vector( 15 downto 0 ):=x"0000"; -- версия ПЛИС
00029                 
00030                 is_simulation   : integer:=0    --! 0 - синтез, 1 - моделирование 
00031         );                
00032         
00033         port (
00034         
00035                 ---- PCI-Express ----
00036                 txp                             : out std_logic_vector( 7 downto 0 );
00037                 txn                             : out std_logic_vector( 7 downto 0 );
00038                 
00039                 rxp                             : in  std_logic_vector( 7 downto 0 );
00040                 rxn                             : in  std_logic_vector( 7 downto 0 );
00041                 
00042                 mgt250                  : in  std_logic; -- тактовая частота 250 MHz от PCI_Express
00043                 
00044                 perst                   : in  std_logic;        -- 0 - сброс                                                  
00045                 
00046                 px                              : out std_logic_vector( 7 downto 0 );   --! контрольные точки 
00047                 
00048                 pcie_lstatus    : out std_logic_vector( 15 downto 0 ); -- регистр LSTATUS
00049                 pcie_link_up    : out std_logic;        -- 0 - завершена инициализация PCI-Express
00050                 
00051                 
00052                 ---- Локальная шина ----                     
00053                 clk250_out              : out std_logic;                --! тактовая частота 250 MHz               
00054                 reset_out               : out std_logic;                --! 0 - сброс
00055                 dcm_rstp                : out std_logic;                --! 1 - сброс DCM 266 МГц
00056                 clk                             : in std_logic;                 --! тактовая частота локальной шины - 266 МГц
00057                 clk_lock                : in std_logic;                 --! 1 - захват частоты
00058                 
00059                 ---- BAR1 ----
00060                 lc_adr                  : out std_logic_vector( 31 downto 0 );  --! шина адреса
00061                 lc_host_data    : out std_logic_vector( 63 downto 0 );  --! шина данных - выход
00062                 lc_data                 : in  std_logic_vector( 63 downto 0 );  --! шина данных - вход
00063                 lc_wr                   : out std_logic;        --! 1 - запись
00064                 lc_rd                   : out std_logic;        --! 1 - чтение, данные должны быть на шестой такт после rd 
00065                 lc_dma_req              : in  std_logic_vector( 1 downto 0 );   --! 1 - запрос DMA
00066                 lc_irq                  : in  std_logic         --! 1 - запрос прерывания 
00067                 
00068                                 
00069                 
00070         );
00071 end component;
00072 
00073 end package;
00074 
00075 
00076 
00077 library ieee;
00078 use ieee.std_logic_1164.all;
00079 
00080 use work.core64_type_pkg.all;
00081 use work.pcie_core64_m1_pkg.all;
00082 use work.core64_pb_transaction_pkg.all;
00083 use work.block_pe_main_pkg.all;
00084 
00085 --! контроллер PCI-Express 
00086 entity pcie_core64_m2 is
00087         generic (                                
00088                 Device_ID               : in std_logic_vector( 15 downto 0 ):=x"0000"; -- идентификатор модуля
00089                 Revision                : in std_logic_vector( 15 downto 0 ):=x"0000"; -- версия модуля
00090                 PLD_VER                 : in std_logic_vector( 15 downto 0 ):=x"0000"; -- версия ПЛИС
00091         
00092                 is_simulation   : integer:=0    --! 0 - синтез, 1 - моделирование 
00093         );                
00094         
00095         port (
00096         
00097                 ---- PCI-Express ----
00098                 txp                             : out std_logic_vector( 7 downto 0 );
00099                 txn                             : out std_logic_vector( 7 downto 0 );
00100                 
00101                 rxp                             : in  std_logic_vector( 7 downto 0 );
00102                 rxn                             : in  std_logic_vector( 7 downto 0 );
00103                 
00104                 mgt250                  : in  std_logic; -- тактовая частота 250 MHz от PCI_Express
00105                 
00106                 perst                   : in  std_logic;        -- 0 - сброс                                                  
00107                 
00108                 px                              : out std_logic_vector( 7 downto 0 );   --! контрольные точки 
00109                 
00110                 pcie_lstatus    : out std_logic_vector( 15 downto 0 ); -- регистр LSTATUS
00111                 pcie_link_up    : out std_logic;        -- 0 - завершена инициализация PCI-Express
00112                 
00113                 
00114                 ---- Локальная шина ----                     
00115                 clk250_out              : out std_logic;        --! тактовая частота 250 MHz               
00116                 reset_out               : out std_logic;        --! 0 - сброс
00117                 dcm_rstp                : out std_logic;                --! 1 - сброс DCM 266 МГц
00118                 clk                             : in std_logic;                 --! тактовая частота локальной шины - 266 МГц
00119                 clk_lock                : in std_logic;                 --! 1 - захват частота
00120 
00121                 ---- BAR1 ----
00122                 lc_adr                  : out std_logic_vector( 31 downto 0 );  --! шина адреса
00123                 lc_host_data    : out std_logic_vector( 63 downto 0 );  --! шина данных - выход
00124                 lc_data                 : in  std_logic_vector( 63 downto 0 );  --! шина данных - вход
00125                 lc_wr                   : out std_logic;        --! 1 - запись
00126                 lc_rd                   : out std_logic;        --! 1 - чтение, данные должны быть на четвёртый такт после rd
00127                 lc_dma_req              : in  std_logic_vector( 1 downto 0 );   --! 1 - запрос DMA
00128                 lc_irq                  : in  std_logic         --! 1 - запрос прерывания 
00129                 
00130                                 
00131                 
00132         );
00133 end pcie_core64_m2;
00134 
00135 
00136 architecture pcie_core64_m2 of pcie_core64_m2 is
00137 
00138 ---- BAR0 - блоки управления ----
00139 signal  bp_host_data    : std_logic_vector( 31 downto 0 );      --! шина данных - выход 
00140 signal  bp_data                 : std_logic_vector( 31 downto 0 );  --! шина данных - вход
00141 signal  bp_adr                  : std_logic_vector( 19 downto 0 );      --! адрес регистра внутри блока 
00142 signal  bp_we                   : std_logic_vector( 3 downto 0 );       --! 1 - запись в регистры 
00143 signal  bp_rd                   : std_logic_vector( 3 downto 0 );   --! 1 - чтение из регистров блока 
00144 signal  bp_sel                  : std_logic_vector( 1 downto 0 );       --! номер блока для чтения 
00145 signal  bp_reg_we               : std_logic;                    --! 1 - запись в регистр по адресам   0x100000 - 0x1FFFFF 
00146 signal  bp_reg_rd               : std_logic;                    --! 1 - чтение из регистра по адресам 0x100000 - 0x1FFFFF 
00147 signal  bp_irq                  : std_logic;                                            --! 1 - запрос прерывания 
00148 
00149 signal  clk250                  : std_logic;
00150 signal  reset                   : std_logic;
00151 
00152 signal  pb_master               : type_pb_master;               --! запрос 
00153 signal  pb_slave                : type_pb_slave;                --! ответ  
00154 
00155 signal  pb_reset                : std_logic;
00156 signal  brd_mode                : std_logic_vector( 15 downto 0 );
00157 
00158 signal  bp0_data                : std_logic_vector( 31 downto 0 );
00159 
00160 begin
00161         
00162         
00163 core: pcie_core64_m1 
00164         generic map(
00165                 is_simulation   => is_simulation--! 0 - синтез, 1 - моделирование 
00166         )                 
00167         port map(
00168         
00169                 ---- PCI-Express ----
00170                 txp                               => txp,                               
00171                 txn                               => txn ,                              
00172                                                                   
00173                 rxp                               => rxp ,                              
00174                 rxn                               => rxn ,                              
00175                                                                   
00176                 mgt250                    => mgt250,                    
00177                                                                   
00178                 perst                     => perst,                     
00179                                                                   
00180                 px                                => px ,                               
00181                                                                   
00182                 pcie_lstatus      => pcie_lstatus,      
00183                 pcie_link_up      => pcie_link_up,      
00184                 
00185                 
00186                 ---- Локальная шина ----                     
00187                 clk_out                  => clk250,
00188                 reset_out                => reset,
00189                 dcm_rstp                 => dcm_rstp, 
00190 
00191                 ---- BAR1 ----
00192                 aclk                            => clk,
00193                 aclk_lock               => clk_lock,
00194                 pb_master               => pb_master,           
00195                 pb_slave                => pb_slave,            
00196 
00197                                                                  
00198                 ---- BAR0 - блоки управления ----
00199                 bp_host_data    => bp_host_data,        
00200                 bp_data                 => bp_data,                     
00201                 bp_adr                  => bp_adr,                      
00202                 bp_we                   => bp_we,                       
00203                 bp_rd                   => bp_rd,
00204                 bp_sel                  => bp_sel,                      
00205                 bp_reg_we               => bp_reg_we,           
00206                 bp_reg_rd               => bp_reg_rd,           
00207                 bp_irq                          => bp_irq
00208                                                                 
00209                 
00210         );      
00211 
00212 reset_out <= reset;
00213 clk250_out   <= clk250;
00214 
00215 bp_data <= bp0_data when bp_sel="00" else (others=>'0');
00216 
00217 tz: core64_pb_transaction 
00218         port map(
00219                 reset                           => reset,               --! 0 - сброс
00220                 clk                                     => clk ,                        --! тактовая частота локальной шины - 266 МГц 
00221                 
00222                 ---- BAR1 ----  
00223                 pb_master                       => pb_master,                   --! запрос 
00224                 pb_slave                        => pb_slave,                    --! ответ  
00225                 
00226                 ---- локальная шина -----          
00227                 lc_adr                          => lc_adr,                              
00228                 lc_host_data            => lc_host_data,        
00229                 lc_data                         => lc_data,                     
00230                 lc_wr                                   => lc_wr,                       
00231                 lc_rd                           => lc_rd,                       
00232                 lc_dma_req                      => lc_dma_req,          
00233                 lc_irq                                  => lc_irq
00234         );
00235                                 
00236         
00237 main: block_pe_main 
00238         generic map(
00239                 Device_ID               => Device_ID,                   -- идентификатор модуля
00240                 Revision                => Revision,                    -- версия модуля
00241                 PLD_VER                 => PLD_VER,                             -- версия ПЛИС
00242                 BLOCK_CNT               => x"0008"  -- число блоков управления 
00243                 
00244         )       
00245         port map(
00246         
00247                 ---- Global ----
00248                 reset_hr1               => reset,               -- 0 - сброс
00249                 clk                             => clk250,              -- Тактовая частота DSP
00250                 pb_reset                => pb_reset,    -- 0 - сброс ведомой ПЛИС
00251                 
00252                 ---- HOST ----
00253                 bl_adr                  => bp_adr( 4 downto 0 ),                -- адрес
00254                 bl_data_in              => bp_host_data,                                -- данные
00255                 bl_data_out             => bp0_data,                                    -- данные
00256                 bl_data_we              => bp_we(0),                                    -- 1 - запись данных   
00257                 
00258                 ---- Управление ----
00259                 brd_mode                => brd_mode-- регистр BRD_MODE
00260 
00261         );              
00262                 
00263 end pcie_core64_m2;