DS_DMA
|
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;