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

Subversion Repositories pcie_ds_dma

[/] [pcie_ds_dma/] [trunk/] [projects/] [ac701_a200t_core/] [src/] [top/] [ac701_a200t_core.vhd] - Blame information for rev 47

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 47 dsmv
-------------------------------------------------------------------------------
2
--
3
-- Title       : ac701_a200t_core
4
-- Author      : Dmitry Smekhov
5
-- Company     : Instrumental Systems
6
-- E-mail      : dsmv@insys.ru
7
--
8
-- Version     : 1.0
9
--
10
-------------------------------------------------------------------------------
11
--
12
-- Description :        Проверка ядра PCI Express на модуле AC701 
13
--
14
-------------------------------------------------------------------------------
15
--
16
--      Version 1.0 17.02.2014
17
--                              Создан из ml605_lx240t_core
18
--
19
-------------------------------------------------------------------------------
20
 
21
library ieee;
22
use ieee.std_logic_1164.all;
23
 
24
package ac701_a200t_core_pkg is
25
 
26
component ac701_a200t_core is
27
        generic (
28
                is_simulation   : integer:=0     -- 0 - синтез, 1 - моделирование ADM
29
        );
30
        port(
31
                ---- PCI-Express ----
32
                pci_exp_txp         : out std_logic_vector(3 downto 0);
33
                pci_exp_txn         : out std_logic_vector(3 downto 0);
34
                pci_exp_rxp         : in std_logic_vector(3 downto 0);
35
                pci_exp_rxn         : in std_logic_vector(3 downto 0);
36
 
37
                sys_clk_p           : in std_logic;
38
                sys_clk_n           : in std_logic;
39
                sys_reset_n         : in std_logic;
40
 
41
                ---- Светодиоды ----
42
                gpio_led0                       : out std_logic;
43
                gpio_led1                       : out std_logic;
44
                gpio_led2                       : out std_logic;
45
                gpio_led3                       : out std_logic;
46
                gpio_led4                       : out std_logic
47
 
48
        );
49
end component;
50
 
51
end package;
52
 
53
library ieee;
54
use ieee.std_logic_1164.all;
55
use ieee.std_logic_arith.all;
56
use ieee.std_logic_unsigned.all;
57
 
58
 
59
library unisim;
60
use unisim.vcomponents.all;
61
 
62
 
63
use work.adm2_pkg.all;
64
use work.cl_ac701_pkg.all;
65
use work.trd_main_v8_pkg.all;
66
use work.trd_pio_std_v4_pkg.all;
67
use work.trd_admdio64_out_v4_pkg.all;
68
use work.trd_admdio64_in_v6_pkg.all;
69
use work.trd_test_ctrl_m1_pkg.all;
70
 
71
 
72
entity ac701_a200t_core is
73
        generic (
74
                is_simulation   : integer:=0     -- 0 - синтез, 1 - моделирование ADM
75
        );
76
        port(
77
                ---- PCI-Express ----
78
                pci_exp_txp         : out std_logic_vector(3 downto 0);
79
                pci_exp_txn         : out std_logic_vector(3 downto 0);
80
                pci_exp_rxp         : in std_logic_vector(3 downto 0);
81
                pci_exp_rxn         : in std_logic_vector(3 downto 0);
82
 
83
                sys_clk_p           : in std_logic;
84
                sys_clk_n           : in std_logic;
85
                sys_reset_n         : in std_logic;
86
 
87
                ---- Светодиоды ----
88
                gpio_led0                       : out std_logic;
89
                gpio_led1                       : out std_logic;
90
                gpio_led2                       : out std_logic;
91
                gpio_led3                       : out std_logic;
92
                gpio_led4                       : out std_logic
93
 
94
        );
95
end ac701_a200t_core;
96
 
97
 
98
architecture ac701_a200t_core of ac701_a200t_core is
99
 
100
 
101
 
102
---- Тактовая частота внутренней шины ----
103
signal  clk                             : std_logic;
104
 
105
---- 0 - Сброс для тетрады MAIN ----
106
signal  reset_main              : std_logic;
107
 
108
---- 0 - Сброс для всех тетрад кроме MAIN ----
109
signal  reset                   : std_logic;
110
 
111
---- Шина адреса для подключения к узлу начального тестирования тетрады MAIN ----
112
signal trd_host_adr             : std_logic_vector( 31 downto 0 ):=(others=>'0');
113
 
114
---- Шина данных, через которую производиться запись в регистры тетрады ----
115
signal trd_host_data    : std_logic_array_16x64;
116
 
117
---- Шина данных, через которую производиться запись в регистры тетрады ----            
118
signal trd_host_cmd_data        : std_logic_array_16x16;
119
 
120
                ---- Комада управления для каждой тетрады ----
121
signal trd_host_cmd         : std_logic_array_16xbl_cmd;
122
 
123
---- Выходы региста DATA от каждой тетрады ----
124
signal trd_data                 : std_logic_array_16x64:=(others=>(others=>'0'));
125
 
126
---- Выходы регистров STATUS, CMD_ADR, CMD_DATA от каждой тетрады ----
127
signal trd_cmd_data             : std_logic_array_16x16:=(others=>(others=>'1'));
128
 
129
---- Запросы DMA от каждой тетрады
130
signal trd_drq                  : std_logic_array_16xbl_drq:=(others=>(others=>'0'));
131
 
132
---- Запросы прерываения от каждой тетрады ----
133
signal trd_irq                  : std_logic_array_16xbl_irq:=(others=>'0');
134
 
135
---- Сброс FIFO от каждой тетрады ----
136
signal trd_reset_fifo   : std_logic_array_16xbl_reset_fifo:=(others=>'0');
137
 
138
---- Запросы DMA от тетрады MAIN (после маршрутизации) ----
139
signal trd_main_drq             : std_logic_array_16xbl_drq:=(others=>(others=>'0'));
140
 
141
---- Запросы прерываения от тетрады MAIN (после маршрутизации) ----
142
signal trd_main_irq             : std_logic_array_16xbl_irq:=(others=>'0');
143
 
144
---- Регистры управления DMA ----
145
signal trd_main_sel_drq : std_logic_array_16x6:=(others=>(others=>'0'));
146
 
147
signal  test_mode               : std_logic;
148
 
149
---- Комада управления для каждой тетрады ----
150
signal trd_trd_cmd          : std_logic_array_16xbl_cmd;
151
 
152
---- Флаги FIFO ----
153
signal trd_flag_rd          : std_logic_array_16xbl_fifo_flag;
154
 
155
 
156
signal  di_mode1                : std_logic_vector( 15 downto 0 );
157
signal  di_data                 : std_logic_vector( 63 downto 0 );
158
signal  di_data_we              : std_logic;
159
signal  di_flag_wr              : bl_fifo_flag;
160
signal  di_start                : std_logic;
161
signal  di_fifo_rst             : std_logic;
162
signal  di_clk                  : std_logic;
163
 
164
signal  do_mode1                : std_logic_vector( 15 downto 0 );
165
signal  do_data                 : std_logic_vector( 63 downto 0 );
166
signal  do_data_cs              : std_logic;
167
signal  do_flag_rd              : bl_fifo_flag;
168
signal  do_start                : std_logic;
169
signal  do_fifo_rst             : std_logic;
170
signal  do_clk                  : std_logic;
171
 
172
signal  clk200                  : std_logic;
173
signal  freq0                   : std_logic;
174
signal  freq1                   : std_logic;
175
signal  freq2                   : std_logic;
176
 
177
signal  led_h1                  : std_logic;
178
signal  led_h2                  : std_logic;
179
signal  led_h3                  : std_logic;
180
signal  led_h4                  : std_logic;
181
 
182
signal  led_h1_p                : std_logic;
183
signal  led_h2_p                : std_logic;
184
signal  led_h3_p                : std_logic;
185
signal  led_h4_p                : std_logic;
186
 
187
 
188
signal  tp1                             : std_logic;
189
signal  tp2                             : std_logic;
190
signal  tp3                             : std_logic;
191
 
192
signal  px                              : std_logic_vector( 3 downto 1 );
193
 
194
signal  clk30k                  : std_logic;
195
 
196
----------------- Константы ----------------------------------------
197
constant rom_main:  bl_trd_rom:=
198
(
199
        0=>ID_MAIN,                      -- Идентификатор тетрады
200
        1=>ID_MODE_MAIN,                -- Модификатор тетрады
201
        2=>VER_MAIN,                    -- Версия тетрады
202
        3=>RES_MAIN,                    -- Ресурсы тетрады
203
        4=>FIFO_MAIN,                   -- Размер FIFO, иммитируется FIFO 256x64
204
        5=>FTYPE_MAIN,                  -- Тип FIFO
205
        6=>x"0100",                     -- Подключение тетрады
206
        7=>x"0001",                     -- Номер экземпляра
207
    8=>x"4953",                         -- Сигнатура ПЛИС ADM
208
        9=>x"0200",                     -- Версия ADM
209
        10=>x"0100",                    -- Версия прошивки ПЛИС
210
        11=>x"0000",                    -- Модификация прошивки ПЛИС
211
        12=>"0000000011000011", -- Используемые тетрады
212
        13=>x"0000",                    -- Ресурсы ПЛИС
213
        14=>x"0000",                    -- Не используется
214
        15=>x"0000",                    -- Не используется
215
        16=>x"5507",                    -- Идентификатор базового модуля
216
        17=>x"0200",                    -- Версия базового модуля
217
        18=>x"0000",                    -- Идентификатор субмодуля
218
        19=>x"0000",                    -- Версия субмодуля
219
        20=>x"0107",                    -- Номер сборки прошивки
220
        31 downto 21 => x"0000" );
221
 
222
 
223
constant rom_dio_in:  bl_trd_rom:=
224
(
225
        0=>ID_DIO_IN,                    -- Идентификатор тетрады 
226
        1=>ID_MODE_DIO_IN,              -- Модификатор тетрады
227
        2=>VER_DIO_IN,                  -- Версия тетрады
228
        3=>RES_DIO_IN,                  -- Ресурсы тетрады
229
        4=>FIFO_DIO_IN,                 -- Размер FIFO
230
        5=>FTYPE_DIO_IN,                -- Тип FIFO
231
        6=>x"010D",                             -- Подключение тетрады
232
        7=>x"0001",                     -- Номер экземпляра
233
        31 downto 8 => x"0000");-- резерв
234
 
235
constant rom_dio_out:  bl_trd_rom:=
236
(
237
        0=>ID_DIO_OUT,                   -- Идентификатор тетрады 
238
        1=>ID_MODE_DIO_OUT,             -- Модификатор тетрады
239
        2=>VER_DIO_OUT,                 -- Версия тетрады                                                        
240
        3=>RES_DIO_OUT,                 -- Ресурсы тетрады
241
        4=>FIFO_DIO_OUT,                -- Размер FIFO
242
        5=>FTYPE_DIO_OUT,               -- Тип FIFO
243
        6=>x"0C01",                             -- Подключение тетрады
244
        7=>x"0001",                     -- Номер экземпляра
245
        31 downto 8 => x"0000");-- резерв               
246
 
247
 
248
constant rom_test_ctrl:  bl_trd_rom:=
249
(
250
        0=>ID_TEST,                              -- Идентификатор тетрады 
251
        1=>ID_MODE_TEST,                -- Модификатор тетрады
252
        2=>VER_TEST,                    -- Версия тетрады
253
        3=>RES_TEST,                    -- Ресурсы тетрады
254
        4=>FIFO_TEST,                   -- Размер FIFO
255
        5=>FTYPE_TEST,                  -- Тип FIFO
256
        6=>x"0000",                             -- Подключение тетрады
257
        7=>x"0001",                     -- Номер экземпляра
258
        31 downto 8 => x"0000");-- резерв               
259
 
260
 
261
constant trd_rom        : std_logic_array_16xbl_trd_rom :=
262
(
263
 
264
        1 => rom_test_ctrl,
265
        2 => rom_empty,
266
        3 => rom_empty,
267
        4 => rom_empty,
268
        5 => rom_empty,
269
        6 => rom_dio_in,
270
        7 => rom_dio_out,
271
        others=> rom_empty      );
272
 
273
begin
274
 
275
xled0:  obuf_s_16 port map( gpio_led0, '1' );
276
xled1:  obuf_s_16 port map( gpio_led1, led_h1_p );
277
xled2:  obuf_s_16 port map( gpio_led2, led_h2_p );
278
xled3:  obuf_s_16 port map( gpio_led3, led_h3_p );
279
xled4:  obuf_s_16 port map( gpio_led4, led_h4_p );
280
 
281
led_h1_p  <= not led_h1;
282
led_h2_p  <= not led_h2;
283
led_h3_p  <= not led_h3;
284
led_h4_p  <= not led_h4;
285
 
286
 
287
tp1 <= not tp1 when rising_edge( clk );
288
tp2 <= px(2);
289
tp3 <= clk30k;
290
 
291
--btp1: obuf_f_16 port map( btp(1), tp1 );
292
--btp2: obuf_f_16 port map( btp(2), tp2 );
293
--btp3: obuf_f_16 port map( btp(3), tp3 );
294
--
295
 
296
 
297
 
298
amb: cl_ac701
299
        generic map(
300
 
301
                CLKOUT6_DIVIDE  => 4,           -- 4 - частота системной шины 250 МГц
302
 
303
                ---- Константы тетрад ----
304
                trd_rom                 => trd_rom,
305
                ---- Разрешение чтения из регистра DATA ----
306
                trd_in                  => "0000000001000001",
307
                ---- Разрешение чтения из регистра STATUS ----
308
                trd_st                  => "0000000011000011",
309
 
310
                is_simulation   => is_simulation        -- 0 - синтез, 1 - моделирование ADM
311
        )
312
        port map(
313
        ---- PCI-Express ----
314
                txp                             => pci_exp_txp,
315
                txn                             => pci_exp_txn,
316
 
317
                rxp                             => pci_exp_rxp,
318
                rxn                             => pci_exp_rxn,
319
 
320
                mgt100_p                => sys_clk_p,   -- тактовая частота 100 MHz от PCI_Express
321
                mgt100_n                => sys_clk_n,
322
 
323
 
324
                bperst                  => sys_reset_n, -- 0 - сброс                                               
325
 
326
                p                               => px,
327
 
328
                led_h1                  => led_h1,      -- 0 - светится светодиод H1
329
                led_h2                  => led_h2,      -- 0 - светится светодиод H2 
330
                led_h3                  => led_h3,      -- 0 - светится светодиод H3 
331
                led_h4                  => led_h4,      -- 0 - светится светодиод H4
332
 
333
                ---- Внутренняя шина ----
334
                clk_out                 => clk,                 -- тактовая частота
335
                reset_out               => reset_main,  -- 0 - сброс
336
                test_mode               => test_mode,   -- 1 - тестовый режим
337
                clk30k                  => clk30k,              -- тактовая частота 30 кГц
338
                clk200_out              => clk200,              -- тактовая частота 200 МГц
339
 
340
                ---- Шина адреса для подключения к узлу начального тестирования тетрады MAIN ----               
341
                trd_host_adr    => trd_host_adr( 15 downto 0 ),
342
 
343
                ---- Шина данных, через которую производиться запись в регистры тетрады ----            
344
                trd_host_data   => trd_host_data,
345
 
346
                ---- Шина данных, через которую производиться запись в регистры тетрады ----            
347
                trd_host_cmd_data=>trd_host_cmd_data,
348
 
349
                ---- Комада управления для каждой тетрады ----          
350
                trd_host_cmd    => trd_host_cmd,
351
 
352
                ---- Выходы региста DATA от каждой тетрады ----
353
                trd_data                => trd_data,
354
 
355
                ---- Выходы регистров STATUS, CMD_ADR, CMD_DATA от каждой тетрады ----
356
                trd_cmd_data    => trd_cmd_data,
357
 
358
                ---- Запросы DMA от каждой тетрады ----
359
                trd_drq                 => trd_drq,
360
 
361
                ---- Запросы DMA от тетрады MAIN (после маршрутизации) ----
362
                trd_main_drq    => trd_main_drq,
363
 
364
                ---- Регистры управления DMA ----
365
                trd_main_sel_drq=> trd_main_sel_drq,
366
 
367
                ---- Сброс FIFO от каждой тетрады ----
368
                trd_reset_fifo  => trd_reset_fifo,
369
 
370
                ---- Запросы прерываения от тетрады MAIN (после маршрутизации) ----
371
                trd_main_irq    => trd_main_irq
372
 
373
        );
374
 
375
 
376
 
377
main: trd_main_v8
378
        port map
379
        (
380
 
381
                -- GLOBAL
382
                reset                   => reset_main,
383
                clk                             => clk,
384
 
385
                -- T0            
386
                adr_in                  => trd_host_adr( 6 downto 0 ),
387
                data_in                 => trd_host_data(0),
388
                cmd_data_in     => trd_host_cmd_data(0),
389
 
390
                cmd                             => trd_host_cmd(0),
391
 
392
                data_out                => trd_data(0),
393
                cmd_data_out    => trd_cmd_data(0),
394
 
395
                bx_drq                  => trd_drq(0),                   -- управление DMA
396
 
397
                test_mode               => test_mode,
398
                test_mode_init  => '1',
399
 
400
                b1_irq                  => trd_irq(1),
401
                b2_irq                  => trd_irq(2),
402
                b3_irq                  => trd_irq(3),
403
                b4_irq                  => trd_irq(4),
404
                b5_irq                  => trd_irq(5),
405
                b6_irq                  => trd_irq(6),
406
                b7_irq                  => trd_irq(7),
407
 
408
 
409
                b1_drq                  => trd_drq(1),
410
                b2_drq                  => trd_drq(2),
411
                b3_drq                  => trd_drq(3),
412
                b4_drq                  => trd_drq(4),
413
                b5_drq                  => trd_drq(5),
414
                b6_drq                  => trd_drq(6),
415
                b7_drq                  => trd_drq(7),
416
 
417
 
418
                int1                    => trd_main_irq(1),
419
 
420
                drq0                    => trd_main_drq(0),
421
                drq1                    => trd_main_drq(1),
422
                drq2                    => trd_main_drq(2),
423
                drq3                    => trd_main_drq(3),
424
 
425
                reset_out               => reset,
426
 
427
                fifo_rst_out    => trd_reset_fifo(0),
428
 
429
                -- Синхронизация
430
                b_clk                   => (others=>'0'),
431
 
432
                b_start                 => (others=>'0'),
433
 
434
                -- SYNX
435
                sn_rdy0                 => '0',
436
                sn_rdy1                 => '0',
437
                sn_start_en     => '0',
438
                sn_sync0                => '0'
439
 
440
                );
441
 
442
 
443
 
444
 
445
 
446
dio_in: trd_admdio64_in_v6
447
        port map(
448
                -- GLOBAL
449
                reset                           => reset,               -- 0 - сброс
450
                clk                                     => clk,                 -- тактовая частота
451
 
452
                -- Управление тетрадой
453
                cmd_data_in             => trd_host_cmd_data(6),
454
                cmd                                     => trd_host_cmd(6),
455
 
456
                data_out2                       => trd_data(6),
457
                cmd_data_out2           => trd_cmd_data(6),
458
 
459
 
460
                bx_irq                          => trd_irq(6),                  -- 1 - прерывание от тетрады
461
                bx_drq                          => trd_drq(6),                  -- управление DMA
462
 
463
                mode1                           => di_mode1,                    -- регистр MODE1
464
 
465
                fifo_rst                        => di_fifo_rst,                                 -- 0 - сброс FIFO (выход)
466
 
467
                start                           => di_start,                    --  1 - разрешение работы (MODE0[5])
468
 
469
                -- Запись FIFO                                  
470
                data_in             => di_data,                 -- данные для записи в FIFO
471
                data_wr             => di_data_we,              -- 1 - строб записи
472
                flag_wr                         => di_flag_wr,          -- флаги FIFO, синхронно с clk_wr
473
                clk_wr                          => di_clk               -- тактовая частота записи в FIFO
474
        );
475
 
476
trd_reset_fifo(6) <= di_fifo_rst;
477
 
478
 
479
 
480
dio_out: trd_admdio64_out_v4
481
        port map(
482
 
483
                -- GLOBAL
484
                reset                           => reset,               -- 0 - сброс
485
                clk                                     => clk,                 -- тактовая частота
486
 
487
                -- Управление тетрадой
488
                data_in                         => trd_host_data(7),
489
                cmd_data_in             => trd_host_cmd_data(7),
490
 
491
                cmd                                     => trd_host_cmd(7),
492
 
493
                cmd_data_out2           => trd_cmd_data(7),
494
 
495
 
496
                bx_irq                          => trd_irq(7),                  -- 1 - прерывание от тетрады
497
                bx_drq                          => trd_drq(7),                  -- управление DMA
498
 
499
                mode1                           => do_mode1,    -- регистр MODE1
500
 
501
                fifo_rst                        => do_fifo_rst,                 -- 0 - сброс FIFO
502
                start                           => do_start,                    --  1 - разрешение работы (MODE0[5])
503
 
504
                -- Чтение из FIFO
505
                data_out                        => do_data,                     -- шина данных FIFO
506
                data_cs                 => do_data_cs,          -- 0 - чтение данных
507
                flag_rd                 => do_flag_rd,          -- флаги FIFO
508
                clk_rd                  => do_clk                                                       -- тактовая частота чтения данных
509
 
510
           );
511
 
512
trd_reset_fifo(7) <= do_fifo_rst;
513
 
514
freq0 <= clk;
515
freq1 <= '0';
516
freq2 <= '0';
517
 
518
 
519
test_ctrl: trd_test_ctrl_m1
520
        generic map(
521
                SystemFreq      => 2000         -- значение системной тактовой частоты
522
        )
523
        port map(
524
                -- GLOBAL
525
                reset                   => reset,               -- 0 - сброс
526
                clk                             => clk,                 -- тактовая частота
527
 
528
                -- Управление тетрадой
529
                cmd_data_in     => trd_host_cmd_data(1),
530
 
531
                cmd                             => trd_host_cmd(1),
532
 
533
                cmd_data_out2   => trd_cmd_data(1),
534
 
535
 
536
                bx_irq                  => trd_irq(1),                  -- 1 - прерывание от тетрады
537
                bx_drq                  => trd_drq(1),                  -- управление DMA
538
 
539
                ---- DIO_IN ----
540
                di_clk                  => di_clk,                      -- тактовая частота записи в FIFO
541
                di_data                 => di_data,                     -- данные        out
542
                di_data_we              => di_data_we,          -- 1 - запись данных
543
                di_flag_wr              => di_flag_wr,          -- флаги FIFO
544
                di_fifo_rst             => di_fifo_rst,         -- 0 - сброс FIFO
545
                di_mode1                => di_mode1,            -- регистр MODE1
546
                di_start                => di_start,            -- 1 - разрешение работы (MODE0[5])
547
 
548
                ---- DIO_OUT ----
549
                do_clk                  => do_clk,                      -- тактовая частота чтения из FIFO
550
                do_data                 => do_data,                     -- данные  in
551
                do_data_cs              => do_data_cs,          -- 0 - чтение данных
552
                do_flag_rd              => do_flag_rd,          -- флаги FIFO
553
                do_fifo_rst             => do_fifo_rst,         -- 0 - сброс FIFO
554
                do_mode1                => do_mode1,            -- регистр MODE1
555
                do_start                => do_start,            -- 1 - разрешение работы (MODE0[5])
556
 
557
                clk_sys                 => clk200,              -- опорная тактовая частота
558
                clk_check0              => freq0,               -- измеряемая частота, вход 0
559
                clk_check1              => freq1,               -- измеряемая частота, вход 0
560
                clk_check2              => freq2                -- измеряемая частота, вход 0
561
 
562
            );
563
 
564
 
565
end ac701_a200t_core;

powered by: WebSVN 2.1.0

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