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

Subversion Repositories pcie_ds_dma

[/] [pcie_ds_dma/] [trunk/] [projects/] [sp605_lx45t_core/] [src/] [top/] [sp605_lx45t_core.vhd] - Blame information for rev 37

Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

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