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

Subversion Repositories pcie_ds_dma

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

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 dsmv
-------------------------------------------------------------------------------
2
--
3
-- Title       : ambpex5_v20_sx50t_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 ambpex5_v20_sx50t_core_pkg is
21
 
22
component ambpex5_v20_sx50t_core is
23
        generic (
24
                is_simulation   : integer:=0     -- 0 - синтез, 1 - моделирование ADM
25
        );
26
        port(
27
                ---- PCI-Express ----
28
                txp                                     : out std_logic_vector( 7 downto 0 );
29
                txn                                     : out std_logic_vector( 7 downto 0 );
30
 
31
                rxp                                     : in  std_logic_vector( 7 downto 0 ):=(others=>'0');
32
                rxn                                     : in  std_logic_vector( 7 downto 0 ):=(others=>'0');
33
 
34
                mgt251_p                        : in  std_logic:='0';   -- тактовая частота 250 MHz от PCI_Express
35
                mgt251_n                        : in  std_logic:='0';
36
 
37
                bperst                          : in  std_logic:='0';    -- 0 - сброс                                               
38
 
39
                btp                                     : out std_logic_vector(3 downto 1);        -- контрольные точки
40
 
41
                ---- Светодиоды ----
42
                bled1                           : out std_logic;
43
                bled2                           : out std_logic;
44
                bled3                           : out std_logic;
45
                bled4                           : out std_logic
46
        );
47
end component;
48
 
49
end package;
50
 
51
library ieee;
52
use ieee.std_logic_1164.all;
53
use ieee.std_logic_arith.all;
54
use ieee.std_logic_unsigned.all;
55
 
56
 
57
library unisim;
58
use unisim.vcomponents.all;
59
 
60
 
61
use work.adm2_pkg.all;
62
use work.cl_ambpex5_m5_pkg.all;
63
use work.trd_main_v8_pkg.all;
64
use work.trd_pio_std_v4_pkg.all;
65
use work.trd_admdio64_out_v4_pkg.all;
66
use work.trd_admdio64_in_v6_pkg.all;
67
use work.trd_test_ctrl_m1_pkg.all;
68
 
69
 
70
entity ambpex5_v20_sx50t_core is
71
        generic (
72
                is_simulation   : integer:=0     -- 0 - синтез, 1 - моделирование ADM
73
        );
74
        port(
75
                ---- PCI-Express ----
76
                txp                                     : out std_logic_vector( 7 downto 0 );
77
                txn                                     : out std_logic_vector( 7 downto 0 );
78
 
79
                rxp                                     : in  std_logic_vector( 7 downto 0 ):=(others=>'0');
80
                rxn                                     : in  std_logic_vector( 7 downto 0 ):=(others=>'0');
81
 
82
                mgt251_p                        : in  std_logic:='0';   -- тактовая частота 250 MHz от PCI_Express
83
                mgt251_n                        : in  std_logic:='0';
84
 
85
                bperst                          : in  std_logic:='0';    -- 0 - сброс                                               
86
 
87
                btp                                     : out std_logic_vector(3 downto 1);        -- контрольные точки
88
 
89
                ---- Светодиоды ----
90
                bled1                           : out std_logic;
91
                bled2                           : out std_logic;
92
                bled3                           : out std_logic;
93
                bled4                           : out std_logic
94
        );
95
end ambpex5_v20_sx50t_core;
96
 
97
 
98
architecture ambpex5_v20_sx50t_core of ambpex5_v20_sx50t_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  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
        10=>x"0101",                    -- Версия прошивки ПЛИС
204
        11=>x"0000",                    -- Модификация прошивки ПЛИС
205
        12=>"0000000011001011", -- Используемые тетрады
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
        20=>x"0102",                    -- Номер сборки прошивки
214
        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
xled1:  obuf_s_16 port map( bled1, led_h1 );
270
xled2:  obuf_s_16 port map( bled2, led_h2 );
271
xled3:  obuf_s_16 port map( bled3, led_h3 );
272
xled4:  obuf_s_16 port map( bled4, led_h4 );
273
 
274
 
275
tp1 <= not tp1 when rising_edge( clk );
276
tp2 <= px(2);
277
tp3 <= clk30k;
278
 
279
btp1: obuf_f_16 port map( btp(1), tp1 );
280
btp2: obuf_f_16 port map( btp(2), tp2 );
281
btp3: obuf_f_16 port map( btp(3), tp3 );
282
 
283
 
284
 
285
 
286
amb: cl_ambpex5_m5
287
        generic map(
288
                ---- Константы тетрад ----
289
                trd_rom                 => trd_rom,
290
                ---- Разрешение чтения из регистра DATA ----
291
                trd_in                  => "0000000001000001",
292
                ---- Разрешение чтения из регистра STATUS ----
293
                trd_st                  => "0000000011000011",
294
 
295
                is_simulation   => is_simulation        -- 0 - синтез, 1 - моделирование ADM
296
        )
297
        port map(
298
        ---- PCI-Express ----
299
                txp                             => txp,
300
                txn                             => txn,
301
 
302
                rxp                             => rxp,
303
                rxn                             => rxn,
304
 
305
                mgt251_p                => mgt251_p,    -- тактовая частота 250 MHz от PCI_Express
306
                mgt251_n                => mgt251_n,
307
 
308
 
309
                bperst                  => bperst,      -- 0 - сброс                                               
310
 
311
                p                               => px,
312
 
313
                led_h1                  => led_h1,      -- 0 - светится светодиод H1
314
                led_h2                  => led_h2,      -- 0 - светится светодиод H2 
315
                led_h3                  => led_h3,      -- 0 - светится светодиод H3 
316
                led_h4                  => led_h4,      -- 0 - светится светодиод H4
317
 
318
                ---- Внутренняя шина ----
319
                clk_out                 => clk,                 -- тактовая частота
320
                reset_out               => reset_main,  -- 0 - сброс
321
                test_mode               => test_mode,   -- 1 - тестовый режим
322
                clk30k                  => clk30k,              -- тактовая частота 30 кГц
323
                clk200_out              => clk200,              -- тактовая частота 200 МГц
324
 
325
                ---- Шина адреса для подключения к узлу начального тестирования тетрады MAIN ----               
326
                trd_host_adr    => trd_host_adr( 15 downto 0 ),
327
 
328
                ---- Шина данных, через которую производиться запись в регистры тетрады ----            
329
                trd_host_data   => trd_host_data,
330
 
331
                ---- Шина данных, через которую производиться запись в регистры тетрады ----            
332
                trd_host_cmd_data=>trd_host_cmd_data,
333
 
334
                ---- Комада управления для каждой тетрады ----          
335
                trd_host_cmd    => trd_host_cmd,
336
 
337
                ---- Выходы региста DATA от каждой тетрады ----
338
                trd_data                => trd_data,
339
 
340
                ---- Выходы регистров STATUS, CMD_ADR, CMD_DATA от каждой тетрады ----
341
                trd_cmd_data    => trd_cmd_data,
342
 
343
                ---- Запросы DMA от каждой тетрады ----
344
                trd_drq                 => trd_drq,
345
 
346
                ---- Запросы DMA от тетрады MAIN (после маршрутизации) ----
347
                trd_main_drq    => trd_main_drq,
348
 
349
                ---- Регистры управления DMA ----
350
                trd_main_sel_drq=> trd_main_sel_drq,
351
 
352
                ---- Сброс FIFO от каждой тетрады ----
353
                trd_reset_fifo  => trd_reset_fifo,
354
 
355
                ---- Запросы прерываения от тетрады MAIN (после маршрутизации) ----
356
                trd_main_irq    => trd_main_irq
357
 
358
        );
359
 
360
 
361
 
362
main: trd_main_v8
363
        port map
364
        (
365
 
366
                -- GLOBAL
367
                reset                   => reset_main,
368
                clk                             => clk,
369
 
370
                -- T0            
371
                adr_in                  => trd_host_adr( 6 downto 0 ),
372
                data_in                 => trd_host_data(0),
373
                cmd_data_in     => trd_host_cmd_data(0),
374
 
375
                cmd                             => trd_host_cmd(0),
376
 
377
                data_out                => trd_data(0),
378
                cmd_data_out    => trd_cmd_data(0),
379
 
380
                bx_drq                  => trd_drq(0),                   -- управление DMA
381
 
382
                test_mode               => test_mode,
383
                test_mode_init  => '1',
384
 
385
                b1_irq                  => trd_irq(1),
386
                b2_irq                  => trd_irq(2),
387
                b3_irq                  => trd_irq(3),
388
                b4_irq                  => trd_irq(4),
389
                b5_irq                  => trd_irq(5),
390
                b6_irq                  => trd_irq(6),
391
                b7_irq                  => trd_irq(7),
392
 
393
 
394
                b1_drq                  => trd_drq(1),
395
                b2_drq                  => trd_drq(2),
396
                b3_drq                  => trd_drq(3),
397
                b4_drq                  => trd_drq(4),
398
                b5_drq                  => trd_drq(5),
399
                b6_drq                  => trd_drq(6),
400
                b7_drq                  => trd_drq(7),
401
 
402
 
403
                int1                    => trd_main_irq(1),
404
 
405
                drq0                    => trd_main_drq(0),
406
                drq1                    => trd_main_drq(1),
407
                drq2                    => trd_main_drq(2),
408
                drq3                    => trd_main_drq(3),
409
 
410
                reset_out               => reset,
411
 
412
                fifo_rst_out    => trd_reset_fifo(0),
413
 
414
                -- Синхронизация
415
                b_clk                   => (others=>'0'),
416
 
417
                b_start                 => (others=>'0'),
418
 
419
                -- SYNX
420
                sn_rdy0                 => '0',
421
                sn_rdy1                 => '0',
422
                sn_start_en     => '0',
423
                sn_sync0                => '0'
424
 
425
                );
426
 
427
 
428
 
429
 
430
 
431
dio_in: trd_admdio64_in_v6
432
        port map(
433
                -- GLOBAL
434
                reset                           => reset,               -- 0 - сброс
435
                clk                                     => clk,                 -- тактовая частота
436
 
437
                -- Управление тетрадой
438
                cmd_data_in             => trd_host_cmd_data(6),
439
                cmd                                     => trd_host_cmd(6),
440
 
441
                data_out2                       => trd_data(6),
442
                cmd_data_out2           => trd_cmd_data(6),
443
 
444
 
445
                bx_irq                          => trd_irq(6),                  -- 1 - прерывание от тетрады
446
                bx_drq                          => trd_drq(6),                  -- управление DMA
447
 
448
                mode1                           => di_mode1,                    -- регистр MODE1
449
 
450
                fifo_rst                        => di_fifo_rst,                                 -- 0 - сброс FIFO (выход)
451
 
452
                start                           => di_start,                    --  1 - разрешение работы (MODE0[5])
453
 
454
                -- Запись FIFO                                  
455
                data_in             => di_data,                 -- данные для записи в FIFO
456
                data_wr             => di_data_we,              -- 1 - строб записи
457
                flag_wr                         => di_flag_wr,          -- флаги FIFO, синхронно с clk_wr
458
                clk_wr                          => di_clk               -- тактовая частота записи в FIFO
459
        );
460
 
461
trd_reset_fifo(6) <= di_fifo_rst;
462
 
463
 
464
 
465
dio_out: trd_admdio64_out_v4
466
        port map(
467
 
468
                -- GLOBAL
469
                reset                           => reset,               -- 0 - сброс
470
                clk                                     => clk,                 -- тактовая частота
471
 
472
                -- Управление тетрадой
473
                data_in                         => trd_host_data(7),
474
                cmd_data_in             => trd_host_cmd_data(7),
475
 
476
                cmd                                     => trd_host_cmd(7),
477
 
478
                cmd_data_out2           => trd_cmd_data(7),
479
 
480
 
481
                bx_irq                          => trd_irq(7),                  -- 1 - прерывание от тетрады
482
                bx_drq                          => trd_drq(7),                  -- управление DMA
483
 
484
                mode1                           => do_mode1,    -- регистр MODE1
485
 
486
                fifo_rst                        => do_fifo_rst,                 -- 0 - сброс FIFO
487
                start                           => do_start,                    --  1 - разрешение работы (MODE0[5])
488
 
489
                -- Чтение из FIFO
490
                data_out                        => do_data,                     -- шина данных FIFO
491
                data_cs                 => do_data_cs,          -- 0 - чтение данных
492
                flag_rd                 => do_flag_rd,          -- флаги FIFO
493
                clk_rd                  => do_clk                                                       -- тактовая частота чтения данных
494
 
495
           );
496
 
497
trd_reset_fifo(7) <= do_fifo_rst;
498
 
499
freq0 <= clk;
500
freq1 <= '0';
501
freq2 <= '0';
502
 
503
 
504
test_ctrl: trd_test_ctrl_m1
505
        generic map(
506
                SystemFreq      => 2000         -- значение системной тактовой частоты
507
        )
508
        port map(
509
                -- GLOBAL
510
                reset                   => reset,               -- 0 - сброс
511
                clk                             => clk,                 -- тактовая частота
512
 
513
                -- Управление тетрадой
514
                cmd_data_in     => trd_host_cmd_data(1),
515
 
516
                cmd                             => trd_host_cmd(1),
517
 
518
                cmd_data_out2   => trd_cmd_data(1),
519
 
520
 
521
                bx_irq                  => trd_irq(1),                  -- 1 - прерывание от тетрады
522
                bx_drq                  => trd_drq(1),                  -- управление DMA
523
 
524
                ---- DIO_IN ----
525
                di_clk                  => di_clk,                      -- тактовая частота записи в FIFO
526
                di_data                 => di_data,                     -- данные        out
527
                di_data_we              => di_data_we,          -- 1 - запись данных
528
                di_flag_wr              => di_flag_wr,          -- флаги FIFO
529
                di_fifo_rst             => di_fifo_rst,         -- 0 - сброс FIFO
530
                di_mode1                => di_mode1,            -- регистр MODE1
531
                di_start                => di_start,            -- 1 - разрешение работы (MODE0[5])
532
 
533
                ---- DIO_OUT ----
534
                do_clk                  => do_clk,                      -- тактовая частота чтения из FIFO
535
                do_data                 => do_data,                     -- данные  in
536
                do_data_cs              => do_data_cs,          -- 0 - чтение данных
537
                do_flag_rd              => do_flag_rd,          -- флаги FIFO
538
                do_fifo_rst             => do_fifo_rst,         -- 0 - сброс FIFO
539
                do_mode1                => do_mode1,            -- регистр MODE1
540
                do_start                => do_start,            -- 1 - разрешение работы (MODE0[5])
541
 
542
                clk_sys                 => clk200,              -- опорная тактовая частота
543
                clk_check0              => freq0,               -- измеряемая частота, вход 0
544
                clk_check1              => freq1,               -- измеряемая частота, вход 0
545
                clk_check2              => freq2                -- измеряемая частота, вход 0
546
 
547
            );
548
 
549
 
550
end ambpex5_v20_sx50t_core;

powered by: WebSVN 2.1.0

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