OpenCores
URL https://opencores.org/ocsvn/pcie_ds_dma/pcie_ds_dma/trunk

Subversion Repositories pcie_ds_dma

[/] [pcie_ds_dma/] [trunk/] [core/] [ds_dma64/] [pcie_src/] [pcie_core64_m1/] [pcie_fifo_ext/] [block_pe_fifo_ext.vhd] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 dsmv
--------------------------------------------------------------------------------------------------
2
--
3
-- Title       : block_pe_fifo_ext
4
-- Author      : Dmitry Smekhov
5
-- Company     : Instrumental System
6
-- E-mail      : dsmv@insys.ru
7
--
8
-- Version     : 1.3
9
--
10
---------------------------------------------------------------------------------------------------
11
--
12
-- Description : 
13
--              Блок управления FIFO для прошивки с ядром PCI-Express
14
--              
15
--              Модификация 2 - только режим автоинициализации  
16
--                                        - для проекта DS_DMA64 
17
--
18
--              Регистры:
19
--                              0x08 - DMA_MODE
20
--                                                      бит 0:   CG_MODE                1 - работа в режиме автоинициализации
21
--                                                      бит 1:   DEMAND_MODE    1 - работа в режиме по запросам
22
--                                                      бит 2:   DIRECT                 1 - передача ADM->HOST, 0 - передача HOST->ADM
23
--                              
24
--                                                      бит 5:   DMA_INT_ENABLE  1 - разрешение формирования прерываний по флагу EOT
25
--
26
--                              0x09 - DMA_CTRL
27
--                                                      бит 0:   DMA_START               - 1 - разрешение работы DMA
28
--                                                      бит 1:   DMA_STOP                - 1 - требование останова
29
--
30
--                                                      бит 3:   PAUSE                   - 1 - приостановка обмена
31
--                                                      бит 4:   RESET_FIFO              - 1 - сброс внутреннего FIFO канала DMA
32
--                              
33
--                              0x0A - BLOCK_CNT - число блоков для обмена
34
--
35
--
36
--                              0x10 - STATUS
37
--                                                      биты 3..0:  DMA_STATUS
38
--                                                      бит  4:     DMA_EOT             - 1 - завершение DMA
39
--                                                      бит  5:         DMA_SG_EOT              - 1 - завершение DMA в режиме SG        
40
--                                                      бит  6:     DMA_INT_ERROR       - 1 - пропуск обработки прерывания от DMA_EOT
41
--                                                      бит  7:     INT_REQ                     - 1 - запрос DMA
42
--                                                      бит  8:     DSC_CORRECT         - 1 - блок дескрипторов правильный
43
--
44
--                                                      биты 15..12:  SIG                       - сигнатура 0xA
45
--                                         
46
--                              0x11 - FLAG_CLR
47
--                                                      бит  4:      DMA_EOT    - 1 - сброс бита DMA_EOT в регистре STATUS
48
--
49
--                              0x14 - PCI_ADRL
50
--                              0x15 - PCI_ADRH
51
--                              
52
--                              0x17 - LOCAL_ADR
53
--                                      
54
--
55
--
56
---------------------------------------------------------------------------------------------------
57
--
58
--      Version 1.3             14.12.2011
59
--                                      Вычисление контрольной суммы производится после полного приёма 
60
--                                      блока дескрипторов
61
--
62
---------------------------------------------------------------------------------------------------
63
 
64
library ieee;
65
use ieee.std_logic_1164.all;
66
 
67
library work;
68
use work.core64_type_pkg.all;
69
 
70
package block_pe_fifo_ext_pkg is
71
 
72
component block_pe_fifo_ext is
73
        generic(
74
                is_dsp48                        : in integer:=1                 --! 1 - использовать DSP48, 0 - не использовать DSP48
75
        );
76
        port(
77
 
78
                ---- Global ----
79
                rstp                            : in std_logic;         --! 1 - сброс
80
                clk                                     : in std_logic;         --! Тактовая частота ядра - 250 МГц
81
                aclk                            : in std_logic;         --! Тактовая частота локальной шины - 266 МГц
82
 
83
                ---- TX_ENGINE ----
84
                tx_ext_fifo                     : in type_tx_ext_fifo;                  --! обмен TX->EXT_FIFO 
85
                tx_ext_fifo_back        : out type_tx_ext_fifo_back;    --! обмен TX->EXT_FIFO 
86
 
87
                ---- RX_ENGINE ----
88
                rx_ext_fifo                     : in type_rx_ext_fifo;                  --! обмен RX->EXT_FIFO 
89
 
90
                ---- REG ----
91
                reg_ext_fifo            : in  type_reg_ext_fifo;                --! запрос на доступ к блокам управления EXT_FIFO 
92
                reg_ext_fifo_back       : out type_reg_ext_fifo_back;   --! ответ на запрос 
93
 
94
                ---- DISP  ----
95
                ext_fifo_disp           : out type_ext_fifo_disp;               --! запрос на доступ от узла EXT_FIFO 
96
                ext_fifo_disp_back      : in  type_ext_fifo_disp_back;  --! ответ на запрос
97
 
98
                irq                                     : out std_logic;                                --! 1 - запрос прерывания
99
 
100
                test                            : out std_logic_vector( 7 downto 0 )
101
 
102
 
103
 
104
        );
105
end component;
106
 
107
end package;
108
 
109
 
110
 
111
library ieee;
112
use ieee.std_logic_1164.all;
113
use ieee.std_logic_arith.all;
114
use ieee.std_logic_unsigned.all;
115
 
116
 
117
library work;
118
use work.ctrl_dma_ext_cmd_pkg.all;
119
use work.ctrl_ext_descriptor_pkg.all;
120
use work.ctrl_ext_ram_pkg.all;
121
use work.ctrl_main_pkg.all;
122
 
123
library unisim;
124
use unisim.vcomponents.all;
125
 
126
use work.core64_type_pkg.all;
127
 
128
entity block_pe_fifo_ext is
129
        generic(
130
                is_dsp48                        : in integer:=1                 --! 1 - использовать DSP48, 0 - не использовать DSP48
131
        );
132
        port(
133
 
134
                ---- Global ----
135
                rstp                            : in std_logic;         --! 1 - сброс
136
                clk                                     : in std_logic;         --! Тактовая частота ядра - 250 МГц
137
                aclk                            : in std_logic;         --! Тактовая частота локальной шины - 266 МГц
138
 
139
                ---- TX_ENGINE ----
140
                tx_ext_fifo                     : in type_tx_ext_fifo;                  --! обмен TX->EXT_FIFO 
141
                tx_ext_fifo_back        : out type_tx_ext_fifo_back;    --! обмен TX->EXT_FIFO 
142
 
143
                ---- RX_ENGINE ----
144
                rx_ext_fifo                     : in type_rx_ext_fifo;                  --! обмен RX->EXT_FIFO 
145
 
146
                ---- REG ----
147
                reg_ext_fifo            : in  type_reg_ext_fifo;                --! запрос на доступ к блокам управления EXT_FIFO 
148
                reg_ext_fifo_back       : out type_reg_ext_fifo_back;   --! ответ на запрос 
149
 
150
                ---- DISP  ----
151
                ext_fifo_disp           : out type_ext_fifo_disp;               --! запрос на доступ от узла EXT_FIFO 
152
                ext_fifo_disp_back      : in  type_ext_fifo_disp_back;  --! ответ на запрос
153
 
154
                irq                                     : out std_logic;                                --! 1 - запрос прерывания
155
 
156
                test                            : out std_logic_vector( 7 downto 0 )
157
 
158
        );
159
end block_pe_fifo_ext;
160
 
161
 
162
architecture block_pe_fifo_ext of block_pe_fifo_ext is
163
 
164
 
165
 
166
signal  ram_adra        : std_logic_vector( 8 downto 0 );
167
signal  ram_adrb        : std_logic_vector( 8 downto 0 );
168
signal  ram_di_a        : std_logic_vector( 31 downto 0 );
169
signal  ram_do_a        : std_logic_vector( 31 downto 0 );
170
signal  ram_we_a        : std_logic;
171
signal  ram_do_b        : std_logic_vector( 31 downto 0 );
172
signal  reg_dma0_status : std_logic_vector( 15 downto 0 );
173
signal  reg_dma1_status : std_logic_vector( 15 downto 0 );
174
 
175
------------------------------------------------------------------------------------
176
--
177
-- declaration of KCPSM3
178
--
179
  component kcpsm3
180
    Port (      address : out std_logic_vector(9 downto 0);
181
            instruction : in std_logic_vector(17 downto 0);
182
                port_id : out std_logic_vector(7 downto 0);
183
           write_strobe : out std_logic;
184
               out_port : out std_logic_vector(7 downto 0);
185
            read_strobe : out std_logic;
186
                in_port : in std_logic_vector(7 downto 0);
187
              interrupt : in std_logic;
188
          interrupt_ack : out std_logic;
189
                  reset : in std_logic;
190
                    clk : in std_logic);
191
    end component;
192
--
193
-- declaration of program ROM
194
--
195
  component p_fifo
196
    Port (      address : in std_logic_vector(9 downto 0);
197
            instruction : out std_logic_vector(17 downto 0);
198
                    clk : in std_logic);
199
    end component;
200
--
201
------------------------------------------------------------------------------------
202
--
203
-- Signals used to connect KCPSM3 to program ROM
204
--
205
signal     address : std_logic_vector(9 downto 0);
206
signal instruction : std_logic_vector(17 downto 0);
207
signal  port_id         : std_logic_vector( 7 downto 0 );
208
signal  write_strobe    : std_logic;
209
signal  read_strobe             : std_logic;
210
signal  interrupt               : std_logic;
211
signal  interrupt_ack   : std_logic;
212
signal  kc_reset                : std_logic;
213
signal  in_port                 : std_logic_vector( 7 downto 0 );
214
signal  out_port                : std_logic_vector( 7 downto 0 );
215
 
216
signal  reg4_do                 : std_logic_vector( 7 downto 0 );
217
signal  reg8_do                 : std_logic_vector( 7 downto 0 );
218
signal  ram0_wr                 : std_logic;
219
signal  ram1_wr                 : std_logic;
220
signal  ram_adr                 : std_logic_vector( 10 downto 0 );
221
 
222
signal  reg_dma_chn             : std_logic_vector( 1 downto 0 );
223
signal  reg_status              : std_logic_vector( 7 downto 0 );
224
signal  reg_dma_status  : std_logic_vector( 3 downto 0 );
225
signal  reg_descriptor_status   : std_logic_vector( 1 downto 0 );
226
signal  dsc_adr_h               : std_logic_vector( 7 downto 0 );    -- адрес, байт 4
227
signal  dsc_adr                 : std_logic_vector( 23 downto 0 );
228
signal  dsc_size                : std_logic_vector( 23 downto 0 );
229
 
230
signal  dma0_rs0                : std_logic_vector( 7 downto 0 );
231
signal  dma1_rs0                : std_logic_vector( 7 downto 0 );
232
signal  dma0_rs0x               : std_logic_vector( 7 downto 0 );
233
signal  dma1_rs0x               : std_logic_vector( 7 downto 0 );
234
signal  dma_rs0                 : std_logic_vector( 7 downto 0 );
235
signal  reg_test                : std_logic_vector( 7 downto 0 );
236
 
237
signal  dx                              : std_logic_vector( 7 downto 0 );
238
signal  ram_transfer_rdy        : std_logic;
239
 
240
signal  dma0_transfer_rdy       : std_logic;
241
signal  dma1_transfer_rdy       : std_logic;
242
signal  dma0_eot_clr            : std_logic;
243
signal  dma1_eot_clr            : std_logic;
244
signal  dma0_ctrl                       : std_logic_vector( 7 downto 0 );
245
signal  dma1_ctrl                       : std_logic_vector( 7 downto 0 );
246
signal  ram_change                      : std_logic;    -- 1 - изменение блока памяти
247
signal  reg_dma0_ctrl           : std_logic_vector( 7 downto 0 );
248
signal  reg_dma1_ctrl           : std_logic_vector( 7 downto 0 );
249
signal  reg_dma0_mode           : std_logic_vector( 7 downto 0 );
250
signal  reg_dma1_mode           : std_logic_vector( 7 downto 0 );
251
 
252
                ---- ctrl_ext_descriptor ----
253
signal  dsc_correct                     : std_logic;            -- 1 - загружен правильный дескриптор
254
signal  dsc_cmd                         : std_logic_vector( 7 downto 0 );        -- командное слово дескриптора
255
signal  dsc_change_adr          : std_logic;    -- 1 - смена адреса дескриптора
256
signal  dsc_change_mode         : std_logic;    -- Режим изменения адреса:
257
                                                                                                -- 0: - увеличение
258
                                                        -- 1: - переход к нулевомй дескриптору
259
signal  dsc_load_en                     : std_logic;    -- 1 - разрешение записи дескриптора
260
 
261
                ---- ctrl_dma_ext_cmd ----                                               
262
signal  dma_reg0                        : std_logic_vector( 2 downto 0 );        -- регистр упрравления
263
signal  dma_change_adr          : std_logic     ;       -- 1 - изменение адреса и размера
264
signal  dma_cmd_status          : std_logic_vector( 2 downto 0 );        -- состояние DMA
265
signal  dma_chn                         : std_logic;
266
 
267
signal  pci_adr_we                      : std_logic;
268
signal  pci_adr_h_we            : std_logic;    -- 1 - запись старших разрядов адреса
269
signal  loc_adr_we                      : std_logic;
270
 
271
signal  ack_cnt                         : std_logic_vector( 4 downto 0 );
272
 
273
signal  reset                           : std_logic;
274
 
275
signal  dma_wraddr                      : std_logic_vector( 11 downto 0 );
276
signal  dma_rdaddr                      : std_logic_vector( 11 downto 0 );
277
signal  dma_wrdata                      : std_logic_vector( 63 downto 0 );
278
 
279
signal  req_rd                          : std_logic;
280
signal  req_wr                          : std_logic;
281
signal  dsc_check_start         : std_logic;    -- 1 - проверка дескриптора
282
signal  dsc_check_ready         : std_logic;    -- 1 - проверка завершена
283
--
284
------------------------------------------------------------------------------------
285
 
286
 
287
begin
288
 
289
reset <= not rstp after 1 ns when rising_edge( clk );
290
 
291
 
292
--test( 7 downto 4 ) <= (others=>'-');  
293
 
294
test(4) <= req_rd after 1 ns when rising_edge( clk );
295
test(5) <= req_wr after 1 ns when rising_edge( clk );
296
test(6) <= dsc_load_en;
297
test(7) <= dsc_change_adr;
298
 
299
ram_adrb( 8 downto 7 ) <= (others=>'0');
300
ram_adrb( 6 downto 0 ) <= reg_ext_fifo.adr;
301
 
302
dma_wraddr( 11 downto 0 ) <= rx_ext_fifo.adr & "000";
303
dma_rdaddr( 11 downto 0 ) <= tx_ext_fifo.adr & "000";
304
dma_wrdata <= rx_ext_fifo.data;
305
 
306
ram0_wr <= rx_ext_fifo.data_we ;
307
ram1_wr <= rx_ext_fifo.data_we and dma_reg0(1);
308
 
309
ram: RAMB16_S36_S36
310
  generic map(
311
    SIM_COLLISION_CHECK => "NONE",
312
        INIT_00  =>  x"000000000000000000000000" & x"00000002" & x"00000000" & x"00003400" & x"00000103" & x"00001018",
313
        INIT_04  =>  x"000000000000000000000000" & x"00000002" & x"00000001" & x"00003400" & x"00000103" & x"00001018"
314
    )
315
 
316
  port map(
317
    DOA   => ram_do_a,
318
    DOB   => ram_do_b, --: out std_logic_vector(15 downto 0);
319
 
320
    ADDRA => ram_adra,
321
    ADDRB => ram_adrb,
322
    CLKA  => clk,
323
    CLKB  => clk,
324
    DIA   => ram_di_a,
325
    DIB   => reg_ext_fifo.data,
326
    ENA   => '1',
327
    ENB   => '1',
328
    DIPA  => (others=>'0'),
329
    DIPB  => (others=>'0'),
330
    SSRA  => '0',
331
    SSRB  => '0',
332
    WEA   => ram_we_a,
333
    WEB   => reg_ext_fifo.data_we
334
 
335
 
336
    --ADDRA : in std_logic_vector(10 downto 0);
337
    --ADDRB : in std_logic_vector(9 downto 0);
338
 
339
    );
340
 
341
 
342
reg_ext_fifo_back.data( 15 downto 0 )    <=      reg_dma0_status when  ram_adrb="0010000" else
343
                                                                                        reg_dma1_status when  ram_adrb="0110000" else
344
                                                                                        ram_do_b( 15 downto 0 );
345
 
346
reg_ext_fifo_back.data( 31 downto 16 ) <= ram_do_b( 31 downto 16 );
347
 
348
 
349
test(0) <= reg_dma0_status(4) after 1 ns when rising_edge( clk );
350
test(1) <= dma0_transfer_rdy after 1 ns when rising_edge( clk );
351
test(2) <= dma_cmd_status(0) after 1 ns when rising_edge( clk );
352
test(3) <= dma0_eot_clr after 1 ns when rising_edge( clk );
353
 
354
 
355
 
356
pr_dma_ctrl: process( clk ) begin
357
        if( rising_edge( clk ) ) then
358
                dma0_eot_clr <= '0' after 1 ns;
359
                dma1_eot_clr <= '0' after 1 ns;
360
                if( rstp='1' ) then
361
                        reg_dma0_ctrl <= x"00" after 1 ns;
362
                        reg_dma1_ctrl <= x"00" after 1 ns;
363
                        reg_dma0_mode <= x"00" after 1 ns;
364
                        reg_dma1_mode <= x"00" after 1 ns;
365
                elsif( reg_ext_fifo.data_we='1' ) then
366
                        case( reg_ext_fifo.adr ) is
367
                                when "0001000" => reg_dma0_mode <= reg_ext_fifo.data( 7 downto 0 ) after 1 ns;
368
                                when "0001001" => reg_dma0_ctrl <= reg_ext_fifo.data( 7 downto 0 ) after 1 ns;
369
                                when "0010001" => dma0_eot_clr  <= reg_ext_fifo.data(4) after 1 ns;
370
                                when "0101000" => reg_dma1_mode <= reg_ext_fifo.data( 7 downto 0 ) after 1 ns;
371
                                when "0101001" => reg_dma1_ctrl <= reg_ext_fifo.data( 7 downto 0 ) after 1 ns;
372
                                when "0110001" => dma1_eot_clr  <= reg_ext_fifo.data(4) after 1 ns;
373
                                when others => null;
374
                        end case;
375
                end if;
376
        end if;
377
end process;
378
 
379
dma0_ctrl(0) <= reg_dma0_ctrl(0); -- DMA_START     
380
dma0_ctrl(1) <= reg_dma0_mode(1); -- DEMAND_MODE
381
dma0_ctrl(2) <= reg_dma0_mode(2); -- DIRECT
382
dma0_ctrl(3) <= reg_dma0_ctrl(3); -- PAUSE
383
dma0_ctrl(4) <= reg_dma0_ctrl(4); -- RESET_FIFO
384
dma0_ctrl(5) <= reg_dma0_mode(5); -- DMA_INT_ENABLE
385
dma0_ctrl(6) <= '0';
386
dma0_ctrl(7) <= '0';
387
 
388
 
389
dma1_ctrl(0) <= reg_dma1_ctrl(0); -- DMA_START     
390
dma1_ctrl(1) <= reg_dma1_mode(1); -- DEMAND_MODE
391
dma1_ctrl(2) <= reg_dma1_mode(2); -- DIRECT
392
dma1_ctrl(3) <= reg_dma1_ctrl(3); -- PAUSE
393
dma1_ctrl(4) <= reg_dma1_ctrl(4); -- RESET_FIFO
394
dma1_ctrl(5) <= reg_dma1_mode(5); -- DMA_INT_ENABLE
395
dma1_ctrl(6) <= '0';
396
dma1_ctrl(7) <= '0';
397
 
398
 
399
 
400
main: ctrl_main
401
        port map(
402
                ---- Global ----
403
                reset                           => reset,       -- 0 - сброс
404
                clk                                     => clk,         -- тактовая частота
405
 
406
                ---- Регистры управления ----
407
                dma0_ctrl                       => dma0_ctrl,           -- Регистр DMA_CTRL, канал 0
408
                dma1_ctrl                       => dma1_ctrl,           -- Регистр DMA_CTRL, канал 0
409
 
410
                ---- ctrl_ext_ram ----
411
                dma0_transfer_rdy       => dma0_transfer_rdy,   -- 1 - канал 0 готов к обмену
412
                dma1_transfer_rdy       => dma1_transfer_rdy,   -- 1 - канал 1 готов к обмену
413
 
414
                ---- Управление DMA ----
415
                dma_chn                         => dma_chn,                     -- номер канала DMA для текущего обмена
416
                ram_do                          => ram_di_a( 7 downto 0 ),               -- данные для записи в регистр STATUS
417
                ram_adr                         => ram_adra,            -- адрес для записи в регистр STATUS
418
                ram_we                          => ram_we_a,            -- 1 - запись в память
419
                dma0_eot_clr            => dma0_eot_clr,        -- 1 - сброс флага DMA0_EOT
420
                dma1_eot_clr            => dma1_eot_clr,        -- 1 - сброс флага DMA1_EOT
421
 
422
                reg_dma0_status         => reg_dma0_status,     -- регистр STATUS канала 0
423
                reg_dma1_status         => reg_dma1_status,     -- регистр STATUS канала 1
424
 
425
                ---- ctrl_ext_ram       ----
426
                ram_change                      => ram_change,          -- 1 - изменение блока памяти
427
                loc_adr_we                      => loc_adr_we,          -- 1 - запись локального адреса
428
 
429
                ---- ctrl_ext_descriptor ----
430
                pci_adr_we                      => pci_adr_we,          -- 1 - запись адреса
431
                pci_adr_h_we            => pci_adr_h_we,        -- 1 - запись старших разрядов адреса
432
                dsc_correct                     => dsc_correct,         -- 1 - загружен правильный дескриптор
433
                dsc_cmd                         => dsc_cmd,                     -- командное слово дескриптора
434
                dsc_change_adr          => dsc_change_adr,      -- 1 - смена адреса дескриптора
435
                dsc_change_mode         => dsc_change_mode,     -- Режим изменения адреса:
436
                                                                                                -- 0: - увеличение
437
                                                        -- 1: - переход к нулевомй дескриптору
438
                dsc_load_en                     => dsc_load_en,         -- 1 - разрешение записи дескриптора
439
                dsc_check_start         => dsc_check_start,     -- 1 - проверка дескриптора
440
                dsc_check_ready         => dsc_check_ready,     -- 1 - проверка завершена
441
 
442
                ---- ctrl_dma_ext_cmd ----                                               
443
                dma_reg0                        => dma_reg0,            -- регистр упрравления
444
                dma_change_adr          => dma_change_adr,      -- 1 - изменение адреса и размера
445
                dma_status                      => dma_cmd_status               -- состояние DMA
446
                                                                                                                                        -- 0: 1 - завершение обмена
447
                                                                                                                                        -- 1: 1 - ошибка при обмене
448
                                                                                                                                        -- 2: 1 - размер блока равен 0
449
        );
450
 
451
 
452
cmd: ctrl_dma_ext_cmd
453
        generic map(
454
                is_dsp48                => is_dsp48
455
        )
456
        port map(
457
                ---- Global ----
458
                rstp                    => rstp,                        -- 1 - сброс
459
                clk                             => clk,                         -- тактовая частота
460
 
461
                ---- CTRL_MAIN ----
462
                dma_reg0                => dma_reg0,            -- регистр упрравления
463
                dma_change_adr  => dma_change_adr,      -- 1 - изменение адреса и размера
464
                dma_cmd_status  => dma_cmd_status,      -- состояние DMA
465
                                                                                                                                -- 0: 1 - завершение обмена
466
                                                                                                                                -- 1: 1 - ошибка при обмене
467
                                                                                                                                -- 2: 1 - размер блока равен 0
468
                dma_chn                 => dma_chn,             -- номер канала DMA
469
 
470
 
471
                ---- CTRL_EXT_DESCRIPTOR ----
472
                dsc_adr_h               => dsc_adr_h,       -- адрес, байт 4
473
                dsc_adr                 => dsc_adr,                             -- адрес, байты 3..1
474
                dsc_size                => dsc_size,                    -- размер, байты 3..1
475
 
476
 
477
                ---- TX_ENGINE ----
478
                tx_ext_fifo                     => tx_ext_fifo,
479
                tx_req_wr                       => req_wr,
480
                tx_req_rd                       => req_rd,
481
                tx_rd_size                      => tx_ext_fifo_back.rd_size,
482
                tx_pci_adr                      => tx_ext_fifo_back.pci_adr,
483
 
484
                ---- RX_ENGINE ----
485
                rx_ext_fifo                     => rx_ext_fifo
486
 
487
                ---- Контрольные точки ----
488
                --test                  : out std_logic_vector( 3 downto 0 )
489
        );
490
 
491
tx_ext_fifo_back.req_wr <= req_wr;
492
tx_ext_fifo_back.req_rd <= req_rd;
493
 
494
dsc: ctrl_ext_descriptor
495
        generic map(
496
                is_dsp48                => is_dsp48
497
        )
498
        port map(
499
                ---- Global ----
500
                reset                   => reset,       -- 0 - сброс
501
                clk                             => clk,         -- тактовая частота
502
 
503
                ---- Запись адреса ----
504
                data_in                         => ram_do_a,     -- шина данных памяти
505
                pci_adr_we                      => pci_adr_we,          -- 1 - запись адреса
506
                pci_adr_h_we            => pci_adr_h_we,        -- 1 - запись старших разрядов адреса
507
 
508
                ---- ctrl_main ----
509
                dma_chn                         => dma_chn,                     -- номер канала DMA
510
                dsc_correct                     => dsc_correct,         -- 1 - загружен правильный дескриптор
511
                dsc_cmd                         => dsc_cmd,                     -- командное слово дескриптора
512
                dsc_change_adr          => dsc_change_adr,      -- 1 - смена адреса дескриптора
513
                dsc_change_mode         => dsc_change_mode,     -- Режим изменения адреса:
514
                                                                                                -- 0: - увеличение
515
                                                        -- 1: - переход к нулевомй дескриптору
516
                dsc_load_en                     => dsc_load_en,         -- 1 - разрешение записи дескриптора
517
                dsc_check_start         => dsc_check_start,     -- 1 - проверка дескриптора
518
                dsc_check_ready         => dsc_check_ready,     -- 1 - проверка завершена
519
 
520
 
521
                ---- ctrl_dma_ext_cmd ---
522
                ram0_wr                 => ram0_wr,                     -- 1 - запись в память дескрипторов
523
                dma_wraddr              => dma_wraddr( 11 downto 0 ),    -- адрес памяти
524
                dma_wrdata              => dma_wrdata,          -- данные DMA
525
                dsc_adr_h               => dsc_adr_h,       -- адрес, байт 4
526
                dsc_adr                 => dsc_adr,                     -- адрес, байты 3..1
527
                dsc_size                => dsc_size                     -- размер, байты 3..1
528
 
529
--              ---- Контрольные точки ----
530
--              test                    : out std_logic_vector( 3 downto 0 )
531
 
532
 
533
        );
534
 
535
 
536
 
537
ram_data: ctrl_ext_ram
538
        generic map(
539
                is_dsp48                => is_dsp48
540
        )
541
        port map(
542
 
543
                ---- Global ----
544
                reset                   => reset,       -- 0 - сброс
545
                clk                             => clk,         -- Тактовая частота     250 МГц 
546
                aclk                    => aclk,        -- Тактовая частота 266 МГц
547
 
548
 
549
                ---- ctrl_main ----
550
                ram_change              => ram_change,          -- 1 - изменение блока памяти
551
                loc_adr_we              => loc_adr_we,          -- 1 - запись локального адреса
552
                data_in                 => ram_do_a,            -- шина данных памяти
553
                dma_chn                 => dma_chn,                     -- номер канала DMA
554
 
555
 
556
                ---- Регистры управления ----
557
                dma0_ctrl               => dma0_ctrl,           -- Регистр DMA_CTRL, канал 0
558
                dma1_ctrl               => dma1_ctrl,           -- Регистр DMA_CTRL, канал 0
559
 
560
 
561
                dma0_transfer_rdy       => dma0_transfer_rdy,   -- 1 - канал 0 готов к обмену
562
                dma1_transfer_rdy       => dma1_transfer_rdy,   -- 1 - канал 1 готов к обмену
563
 
564
 
565
                ---- PCI-Express ----
566
                dma_wr_en               => dsc_size(0),          -- 1 - чтение, 0 - запись
567
                dma_wr                  => ram1_wr,                     -- 1 - запись по шине wr_data
568
                dma_wrdata              => dma_wrdata,          -- данные DMA
569
                dma_wraddr              => dma_wraddr,
570
 
571
                dma_rddata              => tx_ext_fifo_back.data,       -- данные FIFO
572
                dma_rdaddr              => dma_rdaddr,                          -- адрес данных
573
 
574
                ---- DISP  ----
575
                ext_fifo_disp           => ext_fifo_disp,               -- запрос на доступ от узла EXT_FIFO 
576
                ext_fifo_disp_back      => ext_fifo_disp_back   -- ответ на запрос
577
 
578
        );
579
 
580
 
581
 
582
irq <= reg_dma0_status(7) or reg_dma1_status(7) or ext_fifo_disp_back.irq after 1 ns when rising_edge( clk );
583
 
584
end block_pe_fifo_ext;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.