DS_DMA
|
00001 -------------------------------------------------------------------------------------------------- 00002 -- 00003 -- Title : block_pe_fifo_ext 00004 -- Author : Dmitry Smekhov 00005 -- Company : Instrumental System 00006 -- E-mail : dsmv@insys.ru 00007 -- 00008 -- Version : 1.0 00009 -- 00010 --------------------------------------------------------------------------------------------------- 00011 -- 00012 -- Description : 00013 -- Блок управления FIFO для прошивки с ядром PCI-Express 00014 -- 00015 -- Модификация 2 - только режим автоинициализации 00016 -- - для проекта DS_DMA64 00017 -- 00018 -- Регистры: 00019 -- 0x08 - DMA_MODE 00020 -- бит 0: CG_MODE 1 - работа в режиме автоинициализации 00021 -- бит 1: DEMAND_MODE 1 - работа в режиме по запросам 00022 -- бит 2: DIRECT 1 - передача ADM->HOST, 0 - передача HOST->ADM 00023 -- 00024 -- бит 5: DMA_INT_ENABLE 1 - разрешение формирования прерываний по флагу EOT 00025 -- 00026 -- 0x09 - DMA_CTRL 00027 -- бит 0: DMA_START - 1 - разрешение работы DMA 00028 -- бит 1: DMA_STOP - 1 - требование останова 00029 -- 00030 -- бит 3: PAUSE - 1 - приостановка обмена 00031 -- бит 4: RESET_FIFO - 1 - сброс внутреннего FIFO канала DMA 00032 -- 00033 -- 0x0A - BLOCK_CNT - число блоков для обмена 00034 -- 00035 -- 00036 -- 0x10 - STATUS 00037 -- биты 3..0: DMA_STATUS 00038 -- бит 4: DMA_EOT - 1 - завершение DMA 00039 -- бит 5: DMA_SG_EOT - 1 - завершение DMA в режиме SG 00040 -- бит 6: DMA_INT_ERROR - 1 - пропуск обработки прерывания от DMA_EOT 00041 -- бит 7: INT_REQ - 1 - запрос DMA 00042 -- бит 8: DSC_CORRECT - 1 - блок дескрипторов правильный 00043 -- 00044 -- биты 15..12: SIG - сигнатура 0xA 00045 -- 00046 -- 0x11 - FLAG_CLR 00047 -- бит 4: DMA_EOT - 1 - сброс бита DMA_EOT в регистре STATUS 00048 -- 00049 -- 0x14 - PCI_ADRL 00050 -- 0x15 - PCI_ADRH 00051 -- 00052 -- 0x17 - LOCAL_ADR 00053 -- 00054 -- 00055 -- 00056 --------------------------------------------------------------------------------------------------- 00057 00058 library ieee; 00059 use ieee.std_logic_1164.all; 00060 00061 library work; 00062 use work.core64_type_pkg.all; 00063 00064 package block_pe_fifo_ext_pkg is 00065 00066 component block_pe_fifo_ext is 00067 generic( 00068 is_dsp48 : in integer:=1 --! 1 - использовать DSP48, 0 - не использовать DSP48 00069 ); 00070 port( 00071 00072 ---- Global ---- 00073 rstp : in std_logic; --! 1 - сброс 00074 clk : in std_logic; --! Тактовая частота ядра - 250 МГц 00075 aclk : in std_logic; --! Тактовая частота локальной шины - 266 МГц 00076 00077 ---- TX_ENGINE ---- 00078 tx_ext_fifo : in type_tx_ext_fifo; --! обмен TX->EXT_FIFO 00079 tx_ext_fifo_back : out type_tx_ext_fifo_back; --! обмен TX->EXT_FIFO 00080 00081 ---- RX_ENGINE ---- 00082 rx_ext_fifo : in type_rx_ext_fifo; --! обмен RX->EXT_FIFO 00083 00084 ---- REG ---- 00085 reg_ext_fifo : in type_reg_ext_fifo; --! запрос на доступ к блокам управления EXT_FIFO 00086 reg_ext_fifo_back : out type_reg_ext_fifo_back; --! ответ на запрос 00087 00088 ---- DISP ---- 00089 ext_fifo_disp : out type_ext_fifo_disp; --! запрос на доступ от узла EXT_FIFO 00090 ext_fifo_disp_back : in type_ext_fifo_disp_back; --! ответ на запрос 00091 00092 irq : out std_logic; --! 1 - запрос прерывания 00093 00094 test : out std_logic_vector( 7 downto 0 ) 00095 00096 00097 00098 ); 00099 end component; 00100 00101 end package; 00102 00103 00104 00105 library ieee; 00106 use ieee.std_logic_1164.all; 00107 use ieee.std_logic_arith.all; 00108 use ieee.std_logic_unsigned.all; 00109 00110 00111 library work; 00112 use work.ctrl_dma_ext_cmd_pkg.all; 00113 use work.ctrl_ext_descriptor_pkg.all; 00114 use work.ctrl_ext_ram_pkg.all; 00115 use work.ctrl_main_pkg.all; 00116 00117 library unisim; 00118 use unisim.vcomponents.all; 00119 00120 use work.core64_type_pkg.all; 00121 00122 entity block_pe_fifo_ext is 00123 generic( 00124 is_dsp48 : in integer:=1 --! 1 - использовать DSP48, 0 - не использовать DSP48 00125 ); 00126 port( 00127 00128 ---- Global ---- 00129 rstp : in std_logic; --! 1 - сброс 00130 clk : in std_logic; --! Тактовая частота ядра - 250 МГц 00131 aclk : in std_logic; --! Тактовая частота локальной шины - 266 МГц 00132 00133 ---- TX_ENGINE ---- 00134 tx_ext_fifo : in type_tx_ext_fifo; --! обмен TX->EXT_FIFO 00135 tx_ext_fifo_back : out type_tx_ext_fifo_back; --! обмен TX->EXT_FIFO 00136 00137 ---- RX_ENGINE ---- 00138 rx_ext_fifo : in type_rx_ext_fifo; --! обмен RX->EXT_FIFO 00139 00140 ---- REG ---- 00141 reg_ext_fifo : in type_reg_ext_fifo; --! запрос на доступ к блокам управления EXT_FIFO 00142 reg_ext_fifo_back : out type_reg_ext_fifo_back; --! ответ на запрос 00143 00144 ---- DISP ---- 00145 ext_fifo_disp : out type_ext_fifo_disp; --! запрос на доступ от узла EXT_FIFO 00146 ext_fifo_disp_back : in type_ext_fifo_disp_back; --! ответ на запрос 00147 00148 irq : out std_logic; --! 1 - запрос прерывания 00149 00150 test : out std_logic_vector( 7 downto 0 ) 00151 00152 ); 00153 end block_pe_fifo_ext; 00154 00155 00156 architecture block_pe_fifo_ext of block_pe_fifo_ext is 00157 00158 00159 00160 signal ram_adra : std_logic_vector( 8 downto 0 ); 00161 signal ram_adrb : std_logic_vector( 8 downto 0 ); 00162 signal ram_di_a : std_logic_vector( 31 downto 0 ); 00163 signal ram_do_a : std_logic_vector( 31 downto 0 ); 00164 signal ram_we_a : std_logic; 00165 signal ram_do_b : std_logic_vector( 31 downto 0 ); 00166 signal reg_dma0_status : std_logic_vector( 15 downto 0 ); 00167 signal reg_dma1_status : std_logic_vector( 15 downto 0 ); 00168 00169 ------------------------------------------------------------------------------------ 00170 -- 00171 -- declaration of KCPSM3 00172 -- 00173 component kcpsm3 00174 Port ( address : out std_logic_vector(9 downto 0); 00175 instruction : in std_logic_vector(17 downto 0); 00176 port_id : out std_logic_vector(7 downto 0); 00177 write_strobe : out std_logic; 00178 out_port : out std_logic_vector(7 downto 0); 00179 read_strobe : out std_logic; 00180 in_port : in std_logic_vector(7 downto 0); 00181 interrupt : in std_logic; 00182 interrupt_ack : out std_logic; 00183 reset : in std_logic; 00184 clk : in std_logic); 00185 end component; 00186 -- 00187 -- declaration of program ROM 00188 -- 00189 component p_fifo 00190 Port ( address : in std_logic_vector(9 downto 0); 00191 instruction : out std_logic_vector(17 downto 0); 00192 clk : in std_logic); 00193 end component; 00194 -- 00195 ------------------------------------------------------------------------------------ 00196 -- 00197 -- Signals used to connect KCPSM3 to program ROM 00198 -- 00199 signal address : std_logic_vector(9 downto 0); 00200 signal instruction : std_logic_vector(17 downto 0); 00201 signal port_id : std_logic_vector( 7 downto 0 ); 00202 signal write_strobe : std_logic; 00203 signal read_strobe : std_logic; 00204 signal interrupt : std_logic; 00205 signal interrupt_ack : std_logic; 00206 signal kc_reset : std_logic; 00207 signal in_port : std_logic_vector( 7 downto 0 ); 00208 signal out_port : std_logic_vector( 7 downto 0 ); 00209 00210 signal reg4_do : std_logic_vector( 7 downto 0 ); 00211 signal reg8_do : std_logic_vector( 7 downto 0 ); 00212 signal ram0_wr : std_logic; 00213 signal ram1_wr : std_logic; 00214 signal ram_adr : std_logic_vector( 10 downto 0 ); 00215 00216 signal reg_dma_chn : std_logic_vector( 1 downto 0 ); 00217 signal reg_status : std_logic_vector( 7 downto 0 ); 00218 signal reg_dma_status : std_logic_vector( 3 downto 0 ); 00219 signal reg_descriptor_status : std_logic_vector( 1 downto 0 ); 00220 signal dsc_adr_h : std_logic_vector( 7 downto 0 ); -- адрес, байт 4 00221 signal dsc_adr : std_logic_vector( 23 downto 0 ); 00222 signal dsc_size : std_logic_vector( 23 downto 0 ); 00223 00224 signal dma0_rs0 : std_logic_vector( 7 downto 0 ); 00225 signal dma1_rs0 : std_logic_vector( 7 downto 0 ); 00226 signal dma0_rs0x : std_logic_vector( 7 downto 0 ); 00227 signal dma1_rs0x : std_logic_vector( 7 downto 0 ); 00228 signal dma_rs0 : std_logic_vector( 7 downto 0 ); 00229 signal reg_test : std_logic_vector( 7 downto 0 ); 00230 00231 signal dx : std_logic_vector( 7 downto 0 ); 00232 signal ram_transfer_rdy : std_logic; 00233 00234 signal dma0_transfer_rdy : std_logic; 00235 signal dma1_transfer_rdy : std_logic; 00236 signal dma0_eot_clr : std_logic; 00237 signal dma1_eot_clr : std_logic; 00238 signal dma0_ctrl : std_logic_vector( 7 downto 0 ); 00239 signal dma1_ctrl : std_logic_vector( 7 downto 0 ); 00240 signal ram_change : std_logic; -- 1 - изменение блока памяти 00241 signal reg_dma0_ctrl : std_logic_vector( 7 downto 0 ); 00242 signal reg_dma1_ctrl : std_logic_vector( 7 downto 0 ); 00243 signal reg_dma0_mode : std_logic_vector( 7 downto 0 ); 00244 signal reg_dma1_mode : std_logic_vector( 7 downto 0 ); 00245 00246 ---- ctrl_ext_descriptor ---- 00247 signal dsc_correct : std_logic; -- 1 - загружен правильный дескриптор 00248 signal dsc_cmd : std_logic_vector( 7 downto 0 ); -- командное слово дескриптора 00249 signal dsc_change_adr : std_logic; -- 1 - смена адреса дескриптора 00250 signal dsc_change_mode : std_logic; -- Режим изменения адреса: 00251 -- 0: - увеличение 00252 -- 1: - переход к нулевомй дескриптору 00253 signal dsc_load_en : std_logic; -- 1 - разрешение записи дескриптора 00254 00255 ---- ctrl_dma_ext_cmd ---- 00256 signal dma_reg0 : std_logic_vector( 2 downto 0 ); -- регистр упрравления 00257 signal dma_change_adr : std_logic ; -- 1 - изменение адреса и размера 00258 signal dma_cmd_status : std_logic_vector( 2 downto 0 ); -- состояние DMA 00259 signal dma_chn : std_logic; 00260 00261 signal pci_adr_we : std_logic; 00262 signal pci_adr_h_we : std_logic; -- 1 - запись старших разрядов адреса 00263 signal loc_adr_we : std_logic; 00264 00265 signal ack_cnt : std_logic_vector( 4 downto 0 ); 00266 00267 signal reset : std_logic; 00268 00269 signal dma_wraddr : std_logic_vector( 11 downto 0 ); 00270 signal dma_rdaddr : std_logic_vector( 11 downto 0 ); 00271 signal dma_wrdata : std_logic_vector( 63 downto 0 ); 00272 -- 00273 ------------------------------------------------------------------------------------ 00274 00275 00276 begin 00277 00278 reset <= not rstp after 1 ns when rising_edge( clk ); 00279 00280 00281 --test( 7 downto 4 ) <= (others=>'-'); 00282 00283 test(4) <= dsc_correct; 00284 test(5) <= dma_chn; 00285 test(6) <= dsc_load_en; 00286 test(7) <= dsc_change_adr; 00287 00288 ram_adrb( 8 downto 7 ) <= (others=>'0'); 00289 ram_adrb( 6 downto 0 ) <= reg_ext_fifo.adr; 00290 00291 dma_wraddr( 11 downto 0 ) <= rx_ext_fifo.adr & "000"; 00292 dma_rdaddr( 11 downto 0 ) <= tx_ext_fifo.adr & "000"; 00293 dma_wrdata <= rx_ext_fifo.data; 00294 00295 ram0_wr <= rx_ext_fifo.data_we ; 00296 ram1_wr <= rx_ext_fifo.data_we and dma_reg0(1); 00297 00298 ram: RAMB16_S36_S36 00299 generic map( 00300 SIM_COLLISION_CHECK => "NONE", 00301 INIT_00 => x"000000000000000000000000" & x"00000002" & x"00000000" & x"00003400" & x"00000102" & x"00001018" , 00302 INIT_04 => x"000000000000000000000000" & x"00000002" & x"00000001" & x"00003400" & x"00000102" & x"00001018" 00303 ) 00304 00305 port map( 00306 DOA => ram_do_a, 00307 DOB => ram_do_b, --: out std_logic_vector(15 downto 0); 00308 00309 ADDRA => ram_adra, 00310 ADDRB => ram_adrb, 00311 CLKA => clk, 00312 CLKB => clk, 00313 DIA => ram_di_a, 00314 DIB => reg_ext_fifo.data, 00315 ENA => '1', 00316 ENB => '1', 00317 DIPA => (others=>'0'), 00318 DIPB => (others=>'0'), 00319 SSRA => '0', 00320 SSRB => '0', 00321 WEA => ram_we_a, 00322 WEB => reg_ext_fifo.data_we 00323 00324 00325 --ADDRA : in std_logic_vector(10 downto 0); 00326 --ADDRB : in std_logic_vector(9 downto 0); 00327 00328 ); 00329 00330 00331 reg_ext_fifo_back.data( 15 downto 0 ) <= reg_dma0_status when ram_adrb="0010000" else 00332 reg_dma1_status when ram_adrb="0110000" else 00333 ram_do_b( 15 downto 0 ); 00334 00335 reg_ext_fifo_back.data( 31 downto 16 ) <= ram_do_b( 31 downto 16 ); 00336 00337 00338 test(0) <= ram_di_a(4); 00339 test(1) <= dma0_transfer_rdy; 00340 test(2) <= dma_cmd_status(0); 00341 test(3) <= dma_cmd_status(1); 00342 00343 00344 00345 pr_dma_ctrl: process( clk ) begin 00346 if( rising_edge( clk ) ) then 00347 dma0_eot_clr <= '0' after 1 ns; 00348 dma1_eot_clr <= '0' after 1 ns; 00349 if( rstp='1' ) then 00350 reg_dma0_ctrl <= x"00" after 1 ns; 00351 reg_dma1_ctrl <= x"00" after 1 ns; 00352 reg_dma0_mode <= x"00" after 1 ns; 00353 reg_dma1_mode <= x"00" after 1 ns; 00354 elsif( reg_ext_fifo.data_we='1' ) then 00355 case( reg_ext_fifo.adr ) is 00356 when "0001000" => reg_dma0_mode <= reg_ext_fifo.data( 7 downto 0 ) after 1 ns; 00357 when "0001001" => reg_dma0_ctrl <= reg_ext_fifo.data( 7 downto 0 ) after 1 ns; 00358 when "0010001" => dma0_eot_clr <= reg_ext_fifo.data(4) after 1 ns; 00359 when "0101000" => reg_dma1_mode <= reg_ext_fifo.data( 7 downto 0 ) after 1 ns; 00360 when "0101001" => reg_dma1_ctrl <= reg_ext_fifo.data( 7 downto 0 ) after 1 ns; 00361 when "0110001" => dma1_eot_clr <= reg_ext_fifo.data(4) after 1 ns; 00362 when others => null; 00363 end case; 00364 end if; 00365 end if; 00366 end process; 00367 00368 dma0_ctrl(0) <= reg_dma0_ctrl(0); -- DMA_START 00369 dma0_ctrl(1) <= reg_dma0_mode(1); -- DEMAND_MODE 00370 dma0_ctrl(2) <= reg_dma0_mode(2); -- DIRECT 00371 dma0_ctrl(3) <= reg_dma0_ctrl(3); -- PAUSE 00372 dma0_ctrl(4) <= reg_dma0_ctrl(4); -- RESET_FIFO 00373 dma0_ctrl(5) <= reg_dma0_mode(5); -- DMA_INT_ENABLE 00374 dma0_ctrl(6) <= '0'; 00375 dma0_ctrl(7) <= '0'; 00376 00377 00378 dma1_ctrl(0) <= reg_dma1_ctrl(0); -- DMA_START 00379 dma1_ctrl(1) <= reg_dma1_mode(1); -- DEMAND_MODE 00380 dma1_ctrl(2) <= reg_dma1_mode(2); -- DIRECT 00381 dma1_ctrl(3) <= reg_dma1_ctrl(3); -- PAUSE 00382 dma1_ctrl(4) <= reg_dma1_ctrl(4); -- RESET_FIFO 00383 dma1_ctrl(5) <= reg_dma1_mode(5); -- DMA_INT_ENABLE 00384 dma1_ctrl(6) <= '0'; 00385 dma1_ctrl(7) <= '0'; 00386 00387 00388 00389 main: ctrl_main 00390 port map( 00391 ---- Global ---- 00392 reset => reset, -- 0 - сброс 00393 clk => clk, -- тактовая частота 00394 00395 ---- Регистры управления ---- 00396 dma0_ctrl => dma0_ctrl, -- Регистр DMA_CTRL, канал 0 00397 dma1_ctrl => dma1_ctrl, -- Регистр DMA_CTRL, канал 0 00398 00399 ---- ctrl_ext_ram ---- 00400 dma0_transfer_rdy => dma0_transfer_rdy, -- 1 - канал 0 готов к обмену 00401 dma1_transfer_rdy => dma1_transfer_rdy, -- 1 - канал 1 готов к обмену 00402 00403 ---- Управление DMA ---- 00404 dma_chn => dma_chn, -- номер канала DMA для текущего обмена 00405 ram_do => ram_di_a( 7 downto 0 ), -- данные для записи в регистр STATUS 00406 ram_adr => ram_adra, -- адрес для записи в регистр STATUS 00407 ram_we => ram_we_a, -- 1 - запись в память 00408 dma0_eot_clr => dma0_eot_clr, -- 1 - сброс флага DMA0_EOT 00409 dma1_eot_clr => dma1_eot_clr, -- 1 - сброс флага DMA1_EOT 00410 00411 reg_dma0_status => reg_dma0_status, -- регистр STATUS канала 0 00412 reg_dma1_status => reg_dma1_status, -- регистр STATUS канала 1 00413 00414 ---- ctrl_ext_ram ---- 00415 ram_change => ram_change, -- 1 - изменение блока памяти 00416 loc_adr_we => loc_adr_we, -- 1 - запись локального адреса 00417 00418 ---- ctrl_ext_descriptor ---- 00419 pci_adr_we => pci_adr_we, -- 1 - запись адреса 00420 pci_adr_h_we => pci_adr_h_we, -- 1 - запись старших разрядов адреса 00421 dsc_correct => dsc_correct, -- 1 - загружен правильный дескриптор 00422 dsc_cmd => dsc_cmd, -- командное слово дескриптора 00423 dsc_change_adr => dsc_change_adr, -- 1 - смена адреса дескриптора 00424 dsc_change_mode => dsc_change_mode, -- Режим изменения адреса: 00425 -- 0: - увеличение 00426 -- 1: - переход к нулевомй дескриптору 00427 dsc_load_en => dsc_load_en, -- 1 - разрешение записи дескриптора 00428 00429 ---- ctrl_dma_ext_cmd ---- 00430 dma_reg0 => dma_reg0, -- регистр упрравления 00431 dma_change_adr => dma_change_adr, -- 1 - изменение адреса и размера 00432 dma_status => dma_cmd_status-- состояние DMA 00433 -- 0: 1 - завершение обмена 00434 -- 1: 1 - ошибка при обмене 00435 -- 2: 1 - размер блока равен 0 00436 ); 00437 00438 00439 cmd: ctrl_dma_ext_cmd 00440 generic map( 00441 is_dsp48 => is_dsp48 00442 ) 00443 port map( 00444 ---- Global ---- 00445 rstp => rstp, -- 1 - сброс 00446 clk => clk, -- тактовая частота 00447 00448 ---- CTRL_MAIN ---- 00449 dma_reg0 => dma_reg0, -- регистр упрравления 00450 dma_change_adr => dma_change_adr, -- 1 - изменение адреса и размера 00451 dma_cmd_status => dma_cmd_status, -- состояние DMA 00452 -- 0: 1 - завершение обмена 00453 -- 1: 1 - ошибка при обмене 00454 -- 2: 1 - размер блока равен 0 00455 dma_chn => dma_chn, -- номер канала DMA 00456 00457 00458 ---- CTRL_EXT_DESCRIPTOR ---- 00459 dsc_adr_h => dsc_adr_h, -- адрес, байт 4 00460 dsc_adr => dsc_adr, -- адрес, байты 3..1 00461 dsc_size => dsc_size, -- размер, байты 3..1 00462 00463 00464 ---- TX_ENGINE ---- 00465 tx_ext_fifo => tx_ext_fifo, 00466 tx_req_wr => tx_ext_fifo_back.req_wr, 00467 tx_req_rd => tx_ext_fifo_back.req_rd, 00468 tx_rd_size => tx_ext_fifo_back.rd_size, 00469 tx_pci_adr => tx_ext_fifo_back.pci_adr, 00470 00471 ---- RX_ENGINE ---- 00472 rx_ext_fifo => rx_ext_fifo 00473 00474 ---- Контрольные точки ---- 00475 --test : out std_logic_vector( 3 downto 0 ) 00476 ); 00477 00478 dsc: ctrl_ext_descriptor 00479 generic map( 00480 is_dsp48 => is_dsp48 00481 ) 00482 port map( 00483 ---- Global ---- 00484 reset => reset, -- 0 - сброс 00485 clk => clk, -- тактовая частота 00486 00487 ---- Запись адреса ---- 00488 data_in => ram_do_a, -- шина данных памяти 00489 pci_adr_we => pci_adr_we, -- 1 - запись адреса 00490 pci_adr_h_we => pci_adr_h_we, -- 1 - запись старших разрядов адреса 00491 00492 ---- ctrl_main ---- 00493 dma_chn => dma_chn, -- номер канала DMA 00494 dsc_correct => dsc_correct, -- 1 - загружен правильный дескриптор 00495 dsc_cmd => dsc_cmd, -- командное слово дескриптора 00496 dsc_change_adr => dsc_change_adr, -- 1 - смена адреса дескриптора 00497 dsc_change_mode => dsc_change_mode, -- Режим изменения адреса: 00498 -- 0: - увеличение 00499 -- 1: - переход к нулевомй дескриптору 00500 dsc_load_en => dsc_load_en, -- 1 - разрешение записи дескриптора 00501 00502 00503 ---- ctrl_dma_ext_cmd --- 00504 ram0_wr => ram0_wr, -- 1 - запись в память дескрипторов 00505 dma_wraddr => dma_wraddr( 11 downto 0 ), -- адрес памяти 00506 dma_wrdata => dma_wrdata, -- данные DMA 00507 dsc_adr_h => dsc_adr_h, -- адрес, байт 4 00508 dsc_adr => dsc_adr, -- адрес, байты 3..1 00509 dsc_size => dsc_size-- размер, байты 3..1 00510 00511 -- ---- Контрольные точки ---- 00512 -- test : out std_logic_vector( 3 downto 0 ) 00513 00514 00515 ); 00516 00517 00518 00519 ram_data: ctrl_ext_ram 00520 generic map( 00521 is_dsp48 => is_dsp48 00522 ) 00523 port map( 00524 00525 ---- Global ---- 00526 reset => reset, -- 0 - сброс 00527 clk => clk, -- Тактовая частота 250 МГц 00528 aclk => aclk, -- Тактовая частота 266 МГц 00529 00530 00531 ---- ctrl_main ---- 00532 ram_change => ram_change, -- 1 - изменение блока памяти 00533 loc_adr_we => loc_adr_we, -- 1 - запись локального адреса 00534 data_in => ram_do_a, -- шина данных памяти 00535 dma_chn => dma_chn, -- номер канала DMA 00536 00537 00538 ---- Регистры управления ---- 00539 dma0_ctrl => dma0_ctrl, -- Регистр DMA_CTRL, канал 0 00540 dma1_ctrl => dma1_ctrl, -- Регистр DMA_CTRL, канал 0 00541 00542 00543 dma0_transfer_rdy => dma0_transfer_rdy, -- 1 - канал 0 готов к обмену 00544 dma1_transfer_rdy => dma1_transfer_rdy, -- 1 - канал 1 готов к обмену 00545 00546 00547 ---- PCI-Express ---- 00548 dma_wr_en => dsc_size(0), -- 1 - чтение, 0 - запись 00549 dma_wr => ram1_wr, -- 1 - запись по шине wr_data 00550 dma_wrdata => dma_wrdata, -- данные DMA 00551 dma_wraddr => dma_wraddr , 00552 00553 dma_rddata => tx_ext_fifo_back.data, -- данные FIFO 00554 dma_rdaddr => dma_rdaddr, -- адрес данных 00555 00556 ---- DISP ---- 00557 ext_fifo_disp => ext_fifo_disp, -- запрос на доступ от узла EXT_FIFO 00558 ext_fifo_disp_back => ext_fifo_disp_back-- ответ на запрос 00559 00560 ); 00561 00562 00563 00564 irq <= reg_dma0_status(7) or reg_dma1_status(7) or ext_fifo_disp_back.irq after 1 ns when rising_edge( clk ); 00565 00566 end block_pe_fifo_ext;