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