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