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