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

Subversion Repositories pcie_ds_dma

[/] [pcie_ds_dma/] [trunk/] [projects/] [ml605_lx240t_core/] [src/] [top/] [ml605_lx240t_core.vhd] - Blame information for rev 2

Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

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