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