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

Subversion Repositories pcie_ds_dma

[/] [pcie_ds_dma/] [trunk/] [core/] [adm/] [cl_sp605/] [top/] [cl_sp605.vhd] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 dsmv
 -------------------------------------------------------------------------------
2
--
3
-- Title       : cl_sp605
4
-- Author      : Dmitry Smekhov
5
-- Company     : Instrumental Systems
6
-- E-mail      : dsmv@insys.ru
7
--
8
-- Version     : 1.0
9
--
10
-------------------------------------------------------------------------------
11
--
12
-- Description :        Узел подключения тетрад для модуля ML605
13
--                                      Модификация 1 - Используется pcie_core64_m5
14
--
15
-------------------------------------------------------------------------------
16
--
17
--  Version 1.0  15.08.2011
18
--
19
-------------------------------------------------------------------------------
20
 
21
library ieee;
22
use ieee.std_logic_1164.all;
23
 
24
library work;
25
use work.adm2_pkg.all;
26
 
27
 
28
package cl_sp605_pkg is
29
 
30
constant rom_empty: bl_trd_rom:=(others=>x"0000");
31
 
32
component cl_sp605 is
33
        generic (
34
 
35
                 ---- Параметры PLL ----
36
                 --- CLKOUT5 - 200 МГц ---
37
                 --- CLKOUT6 - 266 МГц ---      
38
 
39
             CLKFBOUT_MULT_F    : real := 16.000;
40
             CLKFBOUT_PHASE     : real := 0.000;
41
             CLKIN1_PERIOD              : real := 4.000;
42
             CLKOUT0_DIVIDE_F   : real := 1.000;
43
             CLKOUT0_DUTY_CYCLE : real := 0.500;
44
             CLKOUT0_PHASE              : real := 0.000;
45
             CLKOUT1_DIVIDE     : integer := 4;
46
             CLKOUT1_DUTY_CYCLE : real := 0.500;
47
             CLKOUT1_PHASE              : real := 0.000;
48
             CLKOUT2_DIVIDE     : integer := 3;
49
             CLKOUT2_DUTY_CYCLE : real := 0.500;
50
             CLKOUT2_PHASE              : real := 0.000;
51
             CLKOUT3_DIVIDE     : integer := 1;
52
             CLKOUT3_DUTY_CYCLE : real := 0.500;
53
             CLKOUT3_PHASE              : real := 0.000;
54
             CLKOUT4_CASCADE    : boolean := FALSE;
55
             CLKOUT4_DIVIDE     : integer := 1;
56
             CLKOUT4_DUTY_CYCLE : real := 0.500;
57
             CLKOUT4_PHASE              : real := 0.000;
58
             CLKOUT5_DIVIDE     : integer := 4;
59
             CLKOUT5_DUTY_CYCLE : real := 0.500;
60
             CLKOUT5_PHASE              : real := 0.000;
61
             CLKOUT6_DIVIDE     : integer := 3;
62
             CLKOUT6_DUTY_CYCLE : real := 0.500;
63
             CLKOUT6_PHASE              : real := 0.000;
64
             CLOCK_HOLD                 : boolean := FALSE;
65
             DIVCLK_DIVIDE              : integer := 5;
66
 
67
 
68
                ---- Константы тетрад ----
69
                trd_rom                 : in std_logic_array_16xbl_trd_rom:=(others=>(others=>(others=>'0')));
70
                ---- Разрешение чтения из регистра DATA ----
71
                trd_in                  : in std_logic_vector( 15 downto 0 ):=x"0000";
72
                ---- Разрешение чтения из регистра STATUS ----
73
                trd_st                  : in std_logic_vector( 15 downto 0 ):=x"0000";
74
 
75
                is_simulation   : integer:=0     -- 0 - синтез, 1 - моделирование ADM
76
        );
77
        port (
78
                ---- PCI-Express ----
79
                txp                             : out std_logic_vector( 0 downto 0 );
80
                txn                             : out std_logic_vector( 0 downto 0 );
81
 
82
                rxp                             : in  std_logic_vector( 0 downto 0 );
83
                rxn                             : in  std_logic_vector( 0 downto 0 );
84
 
85
                mgt125_p                : in  std_logic; -- тактовая частота 125 MHz от PCI_Express
86
                mgt125_n                : in  std_logic;
87
 
88
 
89
                bperst                  : in  std_logic;        -- 0 - сброс                                               
90
 
91
                p                               : out std_logic_vector( 3 downto 1 );
92
 
93
                led_h1                  : out std_logic;        -- 0 - светится светодиод H1
94
                led_h2                  : out std_logic;        -- 0 - светится светодиод H2
95
                led_h3                  : out std_logic;        -- 0 - светится светодиод H3
96
                led_h4                  : out std_logic;        -- 0 - светится светодиод H4
97
 
98
 
99
                ---- Внутренняя шина ----
100
                clk_out                 : out std_logic;        -- тактовая частота
101
                reset_out               : out std_logic;        -- 0 - сброс
102
                test_mode               : in std_logic;         -- 1 - тестовый режим
103
                clk30k                  : out std_logic;        -- тактовая частота 30 кГц
104
 
105
                clk200_out              : out std_logic;        -- тактовая частота 200 МГц
106
 
107
                clk0_pll                : out std_logic;        -- выход PLL CLKOUT0 
108
                clk0_pll_b              : out std_logic;        -- выход PLL CLKOUT0B 
109
 
110
                clk1_pll                : out std_logic;        -- выход PLL CLKOUT1 
111
                clk1_pll_b              : out std_logic;        -- выход PLL CLKOUT1B 
112
 
113
                clk2_pll                : out std_logic;        -- выход PLL CLKOUT2 
114
                clk2_pll_b              : out std_logic;        -- выход PLL CLKOUT2B 
115
 
116
                clk3_pll                : out std_logic;        -- выход PLL CLKOUT3 
117
                clk3_pll_b              : out std_logic;        -- выход PLL CLKOUT3B 
118
 
119
                clk4_pll                : out std_logic;        -- выход PLL CLKOUT4 
120
 
121
 
122
                clk_lock_out    : out std_logic;        -- 1 - частота установлена 
123
 
124
                ---- Шина адреса для подключения к узлу начального тестирования тетрады MAIN ----               
125
                trd_host_adr    : out std_logic_vector( 15 downto 0 );
126
 
127
                ---- Шина данных, через которую производиться запись в регистр DATA ----                
128
                trd_host_data   : out std_logic_array_16x64;
129
 
130
                ---- Шина данных, через которую производиться запись в регистры тетрады ----            
131
                trd_host_cmd_data       : out std_logic_array_16x16;
132
 
133
                ---- Комада управления для каждой тетрады ----          
134
                trd_host_cmd    : out std_logic_array_16xbl_cmd;
135
 
136
                ---- Выходы региста DATA от каждой тетрады ----
137
                trd_data                : in  std_logic_array_16x64:=(others=>(others=>'0'));
138
 
139
                ---- Выходы регистров STATUS, CMD_ADR, CMD_DATA от каждой тетрады ----
140
                trd_cmd_data    : in  std_logic_array_16x16:=(others=>(others=>'0'));
141
 
142
                ---- Запросы DMA от каждой тетрады ----
143
                trd_drq                 : in  std_logic_array_16xbl_drq:=(others=>(others=>'0'));
144
 
145
                ---- Запросы DMA от тетрады MAIN (после маршрутизации) ----
146
                trd_main_drq    : in  std_logic_array_16xbl_drq:=(others=>(others=>'0'));
147
 
148
                ---- Регистры управления DMA ----
149
                trd_main_sel_drq: in  std_logic_array_16x6:=(others=>(others=>'0'));
150
 
151
                ---- Сброс FIFO от каждой тетрады ----
152
                trd_reset_fifo  : in  std_logic_array_16xbl_reset_fifo:=(others=>'0');
153
 
154
                ---- Запросы прерываения от тетрады MAIN (после маршрутизации) ----
155
                trd_main_irq    : in std_logic_array_16xbl_irq:=(others=>'0')
156
 
157
 
158
        );
159
end component;
160
 
161
end package;
162
 
163
 
164
 
165
library ieee;
166
use ieee.std_logic_1164.all;
167
use ieee.std_logic_arith.all;
168
use ieee.std_logic_unsigned.all;
169
 
170
library unisim;
171
use unisim.vcomponents.all;
172
 
173
library work;
174
use work.adm2_pkg.all;
175
 
176
use work.pb_adm_ctrl_m2_pkg.all;
177
use work.ctrl_blink_pkg.all;
178
 
179
 
180
 
181
entity cl_sp605 is
182
        generic (
183
 
184
                 ---- Параметры PLL ----
185
                 --- CLKOUT5 - 200 МГц ---
186
                 --- CLKOUT6 - 266 МГц ---      
187
 
188
             CLKFBOUT_MULT_F    : real := 16.000;
189
             CLKFBOUT_PHASE     : real := 0.000;
190
             CLKIN1_PERIOD              : real := 4.000;
191
             CLKOUT0_DIVIDE_F   : real := 1.000;
192
             CLKOUT0_DUTY_CYCLE : real := 0.500;
193
             CLKOUT0_PHASE              : real := 0.000;
194
             CLKOUT1_DIVIDE     : integer := 4;
195
             CLKOUT1_DUTY_CYCLE : real := 0.500;
196
             CLKOUT1_PHASE              : real := 0.000;
197
             CLKOUT2_DIVIDE     : integer := 3;
198
             CLKOUT2_DUTY_CYCLE : real := 0.500;
199
             CLKOUT2_PHASE              : real := 0.000;
200
             CLKOUT3_DIVIDE     : integer := 1;
201
             CLKOUT3_DUTY_CYCLE : real := 0.500;
202
             CLKOUT3_PHASE              : real := 0.000;
203
             CLKOUT4_CASCADE    : boolean := FALSE;
204
             CLKOUT4_DIVIDE     : integer := 1;
205
             CLKOUT4_DUTY_CYCLE : real := 0.500;
206
             CLKOUT4_PHASE              : real := 0.000;
207
             CLKOUT5_DIVIDE     : integer := 4;
208
             CLKOUT5_DUTY_CYCLE : real := 0.500;
209
             CLKOUT5_PHASE              : real := 0.000;
210
             CLKOUT6_DIVIDE     : integer := 3;
211
             CLKOUT6_DUTY_CYCLE : real := 0.500;
212
             CLKOUT6_PHASE              : real := 0.000;
213
             CLOCK_HOLD                 : boolean := FALSE;
214
             DIVCLK_DIVIDE              : integer := 5;
215
 
216
 
217
                ---- Константы тетрад ----
218
                trd_rom                 : in std_logic_array_16xbl_trd_rom:=(others=>(others=>(others=>'0')));
219
                ---- Разрешение чтения из регистра DATA ----
220
                trd_in                  : in std_logic_vector( 15 downto 0 ):=x"0000";
221
                ---- Разрешение чтения из регистра STATUS ----
222
                trd_st                  : in std_logic_vector( 15 downto 0 ):=x"0000";
223
 
224
                is_simulation   : integer:=0     -- 0 - синтез, 1 - моделирование ADM
225
        );
226
        port (
227
                ---- PCI-Express ----
228
                txp                             : out std_logic_vector( 0 downto 0 );
229
                txn                             : out std_logic_vector( 0 downto 0 );
230
 
231
                rxp                             : in  std_logic_vector( 0 downto 0 );
232
                rxn                             : in  std_logic_vector( 0 downto 0 );
233
 
234
                mgt125_p                : in  std_logic; -- тактовая частота 125 MHz от PCI_Express
235
                mgt125_n                : in  std_logic;
236
 
237
 
238
                bperst                  : in  std_logic;        -- 0 - сброс                                               
239
 
240
                p                               : out std_logic_vector( 3 downto 1 );
241
 
242
                led_h1                  : out std_logic;        -- 0 - светится светодиод H1
243
                led_h2                  : out std_logic;        -- 0 - светится светодиод H2
244
                led_h3                  : out std_logic;        -- 0 - светится светодиод H3
245
                led_h4                  : out std_logic;        -- 0 - светится светодиод H4
246
 
247
 
248
                ---- Внутренняя шина ----
249
                clk_out                 : out std_logic;        -- тактовая частота
250
                reset_out               : out std_logic;        -- 0 - сброс
251
                test_mode               : in std_logic;         -- 1 - тестовый режим
252
                clk30k                  : out std_logic;        -- тактовая частота 30 кГц
253
 
254
                clk200_out              : out std_logic;        -- тактовая частота 200 МГц
255
 
256
                clk0_pll                : out std_logic;        -- выход PLL CLKOUT0 
257
                clk0_pll_b              : out std_logic;        -- выход PLL CLKOUT0B 
258
 
259
                clk1_pll                : out std_logic;        -- выход PLL CLKOUT1 
260
                clk1_pll_b              : out std_logic;        -- выход PLL CLKOUT1B 
261
 
262
                clk2_pll                : out std_logic;        -- выход PLL CLKOUT2 
263
                clk2_pll_b              : out std_logic;        -- выход PLL CLKOUT2B 
264
 
265
                clk3_pll                : out std_logic;        -- выход PLL CLKOUT3 
266
                clk3_pll_b              : out std_logic;        -- выход PLL CLKOUT3B 
267
 
268
                clk4_pll                : out std_logic;        -- выход PLL CLKOUT4 
269
 
270
                clk_lock_out    : out std_logic;        -- 1 - частота установлена 
271
 
272
                ---- Шина адреса для подключения к узлу начального тестирования тетрады MAIN ----               
273
                trd_host_adr    : out std_logic_vector( 15 downto 0 );
274
 
275
                ---- Шина данных, через которую производиться запись в регистр DATA ----                
276
                trd_host_data   : out std_logic_array_16x64;
277
 
278
                ---- Шина данных, через которую производиться запись в регистры тетрады ----            
279
                trd_host_cmd_data       : out std_logic_array_16x16;
280
 
281
                ---- Комада управления для каждой тетрады ----          
282
                trd_host_cmd    : out std_logic_array_16xbl_cmd;
283
 
284
                ---- Выходы региста DATA от каждой тетрады ----
285
                trd_data                : in  std_logic_array_16x64:=(others=>(others=>'0'));
286
 
287
                ---- Выходы регистров STATUS, CMD_ADR, CMD_DATA от каждой тетрады ----
288
                trd_cmd_data    : in  std_logic_array_16x16:=(others=>(others=>'0'));
289
 
290
                ---- Запросы DMA от каждой тетрады ----
291
                trd_drq                 : in  std_logic_array_16xbl_drq:=(others=>(others=>'0'));
292
 
293
                ---- Запросы DMA от тетрады MAIN (после маршрутизации) ----
294
                trd_main_drq    : in  std_logic_array_16xbl_drq:=(others=>(others=>'0'));
295
 
296
                ---- Регистры управления DMA ----
297
                trd_main_sel_drq: in  std_logic_array_16x6:=(others=>(others=>'0'));
298
 
299
                ---- Сброс FIFO от каждой тетрады ----
300
                trd_reset_fifo  : in  std_logic_array_16xbl_reset_fifo:=(others=>'0');
301
 
302
                ---- Запросы прерываения от тетрады MAIN (после маршрутизации) ----
303
                trd_main_irq    : in std_logic_array_16xbl_irq:=(others=>'0')
304
 
305
 
306
        );
307
 
308
 
309
 
310
end cl_sp605;
311
 
312
 
313
architecture cl_sp605 of cl_sp605 is
314
 
315
---------------------------------------------------------------------------
316
 
317
component cl_adm_simulation is
318
 
319
        generic(
320
                        ---- Константы тетрад ----
321
                        trd_rom                 : in std_logic_array_16xbl_trd_rom:=(others=>(others=>(others=>'0')));
322
                        ---- Разрешение чтения из регистра DATA ----
323
                        trd_in                  : in std_logic_vector( 15 downto 0 ):=x"0000";
324
                        ---- Разрешение чтения из регистра STATUS ----
325
                        trd_st                  : in std_logic_vector( 15 downto 0 ):=x"0000";
326
 
327
                        PERIOD_CLK              : in time:= 10 ns;      -- период тактового сигнала
328
                        RESET_PAUSE             : in time:= 102 ns      -- время снятия сигнала RESET
329
 
330
        );
331
 
332
        port(
333
 
334
 
335
                ---- Внутренняя шина ----
336
                clk_out                 : out std_logic;
337
                reset_out               : out std_logic;
338
                test_mode               : in std_logic;         -- 1 - тестовый режим
339
 
340
 
341
                ---- Шина адреса для подключения к узлу начального тестирования тетрады MAIN ----               
342
                trd_host_adr    : out std_logic_vector( 15 downto 0 );
343
 
344
                ---- Шина данных, через которую производиться запись в регистры тетрады ----            
345
                trd_host_data   : out std_logic_vector( 63 downto 0 );
346
 
347
                ---- Комада управления для каждой тетрады ----          
348
                trd_host_cmd    : out std_logic_array_16xbl_cmd;
349
 
350
                ---- Выходы региста DATA от каждой тетрады ----
351
                trd_data                : in  std_logic_array_16x64:=(others=>(others=>'0'));
352
 
353
                ---- Выходы регистров STATUS, CMD_ADR, CMD_DATA от каждой тетрады ----
354
                trd_cmd_data    : in  std_logic_array_16x16:=(others=>(others=>'0'));
355
 
356
                ---- Запросы DMA от тетрады MAIN (после маршрутизации) ----
357
                trd_main_drq    : in  std_logic_array_16xbl_drq:=(others=>(others=>'0'));
358
 
359
                ---- Регистры управления DMA ----
360
                trd_main_sel_drq: in  std_logic_array_16x6:=(others=>(others=>'0'));
361
 
362
                ---- Сброс FIFO от каждой тетрады ----
363
                trd_reset_fifo  : in  std_logic_array_16xbl_reset_fifo:=(others=>'0');
364
 
365
                ---- Запросы прерываения от тетрады MAIN (после маршрутизации) ----
366
                trd_main_irq    : in std_logic_array_16xbl_irq:=(others=>'0')
367
 
368
 
369
        );
370
 
371
end component;
372
 
373
 
374
component pcie_core64_m7 is
375
        generic (
376
                Device_ID               : in std_logic_vector( 15 downto 0 ):=x"0000"; -- идентификатор модуля
377
                Revision                : in std_logic_vector( 15 downto 0 ):=x"0000"; -- версия модуля
378
                PLD_VER                 : in std_logic_vector( 15 downto 0 ):=x"0000"; -- версия ПЛИС
379
 
380
                is_simulation   : integer:=0     --! 0 - синтез, 1 - моделирование 
381
        );
382
 
383
        port (
384
 
385
                ---- PCI-Express ----
386
                txp                             : out std_logic_vector( 0 downto 0 );
387
                txn                             : out std_logic_vector( 0 downto 0 );
388
 
389
                rxp                             : in  std_logic_vector( 0 downto 0 );
390
                rxn                             : in  std_logic_vector( 0 downto 0 );
391
 
392
                mgt125                  : in  std_logic; -- тактовая частота 125 MHz от PCI_Express
393
 
394
                perst                   : in  std_logic;        -- 0 - сброс                                               
395
 
396
                px                              : out std_logic_vector( 7 downto 0 );    --! контрольные точки 
397
 
398
                pcie_lstatus    : out std_logic_vector( 15 downto 0 ); -- регистр LSTATUS
399
                pcie_link_up    : out std_logic;        -- 0 - завершена инициализация PCI-Express
400
 
401
 
402
                ---- Локальная шина ----                          
403
                clk250_out              : out std_logic;                --! тактовая частота 250 MHz              
404
                reset_out               : out std_logic;                --! 0 - сброс
405
                dcm_rstp                : out std_logic;                --! 1 - сброс DCM 266 МГц
406
                clk                             : in std_logic;                 --! тактовая частота локальной шины - 266 МГц
407
                clk_lock                : in std_logic;                 --! 1 - захват частоты
408
 
409
                ---- BAR1 ----
410
                lc_adr                  : out std_logic_vector( 31 downto 0 );   --! шина адреса
411
                lc_host_data    : out std_logic_vector( 63 downto 0 );   --! шина данных - выход
412
                lc_data                 : in  std_logic_vector( 63 downto 0 );   --! шина данных - вход
413
                lc_wr                   : out std_logic;        --! 1 - запись
414
                lc_rd                   : out std_logic;        --! 1 - чтение, данные должны быть на шестой такт после rd 
415
                lc_dma_req              : in  std_logic_vector( 1 downto 0 );    --! 1 - запрос DMA
416
                lc_irq                  : in  std_logic         --! 1 - запрос прерывания 
417
 
418
 
419
 
420
        );
421
end component;
422
 
423
 
424
 
425
 
426
signal  mgt125                  : std_logic;
427
signal  perst                   : std_logic;
428
 
429
signal  lc_adr                  : std_logic_vector( 31 downto 0 );
430
signal  lc_host_data    : std_logic_vector( 63 downto 0 );
431
signal  lc_data                 : std_logic_vector( 63 downto 0 );
432
signal  lc_wr                   : std_logic;
433
signal  lc_rd                   : std_logic;
434
signal  lc_dma_req              : std_logic_vector( 1 downto 0 );
435
signal  lc_irq                  : std_logic;
436
 
437
signal  irq1                    : std_logic;    -- 1 - прерывание в HOST
438
signal  dmar0                   : std_logic;    -- 1 - запрос DMA 0
439
signal  dmar1                   : std_logic;    -- 1 - запрос DMA 1
440
signal  dmar2                   : std_logic;    -- 1 - запрос DMA 2
441
signal  dmar3                   : std_logic;    -- 1 - запрос DMA 3               
442
 
443
signal  trdi_host_data  : std_logic_vector( 63 downto 0 );
444
 
445
signal  dcm_rstp                : std_logic;
446
signal  clk_lock                : std_logic;
447
signal  clk250                  : std_logic;
448
signal  clk200                  : std_logic;
449
signal  clk200x                 : std_logic;
450
signal  clk266x                 : std_logic;
451
signal  clkfb                   : std_logic;
452
 
453
signal  clk30i                  : std_logic;
454
signal  cnt30k0                 : std_logic;
455
signal  cnt30k1                 : std_logic;
456
signal  cnt30k2                 : std_logic;
457
signal  cnt30i0                 : std_logic;
458
signal  cnt30i1                 : std_logic;
459
signal  cnt30i2                 : std_logic;
460
signal  cnt30ce0                : std_logic;
461
signal  cnt30ce1                : std_logic;
462
signal  cnt30ce2                : std_logic;
463
signal  cnt30start              : std_logic;
464
signal  cnt30start1             : std_logic;
465
 
466
---- Комада управления для каждой тетрады ----
467
signal trdi_host_cmd        : std_logic_array_16xbl_cmd;
468
 
469
signal  clk                             : std_logic:='0';
470
signal  reset                   : std_logic;
471
 
472
signal  pcie_link_up    : std_logic;
473
signal  pcie_lstatus    : std_logic_vector( 15 downto 0 );
474
 
475
signal  px                              : std_logic_vector( 7 downto 0 );
476
 
477
signal  trd4_host_data  : std_logic_vector( 63 downto 0 );
478
 
479
attribute       period  : string;
480
attribute       period of clk:signal is "250 MHz";
481
 
482
attribute buffer_type   : string;
483
attribute clock_buffer  : string;
484
--attribute clock_buffer of signal_name: signal is "{bufgdll|ibufg|bufgp|ibuf|none}";   
485
attribute buffer_type  of clk_out: signal is "none";
486
attribute buffer_type  of clk: signal is "none";
487
 
488
attribute clock_buffer of clk_out               : signal is "none";
489
attribute clock_buffer of clk                   : signal is "none";
490
attribute clock_buffer of clk200_out    : signal is "none";
491
 
492
attribute syn_keep      : boolean;
493
attribute syn_keep of trd_host_data : signal is true;
494
attribute syn_keep of trd_host_cmd_data: signal is true;
495
 
496
begin
497
 
498
--      
499
------- component PLL_BASE -----
500
--xpll: PLL_BASE
501
--  generic map(
502
--     BANDWIDTH                                        => BANDWIDTH,                                
503
--     CLKFBOUT_MULT                            => CLKFBOUT_MULT,                            
504
--     CLKFBOUT_PHASE                   => CLKFBOUT_PHASE,                   
505
--     CLKIN_PERIOD                             => CLKIN_PERIOD,                             
506
--     CLKOUT0_DIVIDE                   => CLKOUT0_DIVIDE,                   
507
--     CLKOUT0_DUTY_CYCLE               => CLKOUT0_DUTY_CYCLE,       
508
--     CLKOUT0_PHASE                            => CLKOUT0_PHASE,                            
509
--     CLKOUT1_DIVIDE                   => CLKOUT1_DIVIDE,                   
510
--     CLKOUT1_DUTY_CYCLE               => CLKOUT1_DUTY_CYCLE,       
511
--     CLKOUT1_PHASE                            => CLKOUT1_PHASE,                            
512
--     CLKOUT2_DIVIDE                   => CLKOUT2_DIVIDE,                   
513
--     CLKOUT2_DUTY_CYCLE               => CLKOUT2_DUTY_CYCLE,       
514
--     CLKOUT2_PHASE                            => CLKOUT2_PHASE,                            
515
--     CLKOUT3_DIVIDE                   => CLKOUT3_DIVIDE,                   
516
--     CLKOUT3_DUTY_CYCLE               => CLKOUT3_DUTY_CYCLE,       
517
--     CLKOUT3_PHASE                            => CLKOUT3_PHASE,                            
518
--     CLKOUT4_DIVIDE                   => CLKOUT4_DIVIDE,                   
519
--     CLKOUT4_DUTY_CYCLE               => CLKOUT4_DUTY_CYCLE,       
520
--     CLKOUT4_PHASE                            => CLKOUT4_PHASE,                            
521
--     CLKOUT5_DIVIDE                   => CLKOUT5_DIVIDE,                   
522
--     CLKOUT5_DUTY_CYCLE               => CLKOUT5_DUTY_CYCLE,       
523
--     CLKOUT5_PHASE                            => CLKOUT5_PHASE,                            
524
--     CLK_FEEDBACK                             => CLK_FEEDBACK,                             
525
--     COMPENSATION                             => COMPENSATION,                             
526
--     DIVCLK_DIVIDE                            => DIVCLK_DIVIDE,                            
527
--     REF_JITTER                               => REF_JITTER,                       
528
--     RESET_ON_LOSS_OF_LOCK            => RESET_ON_LOSS_OF_LOCK             
529
--  )
530
--  port map(
531
--     CLKFBOUT         => clkfb,
532
--     CLKOUT0  => clk266x,
533
--     CLKOUT1  => clk200x,
534
--     CLKOUT2  => clk2_pll,
535
--     CLKOUT3  => clk3_pll,
536
--     CLKOUT4  => clk4_pll,
537
--     CLKOUT5  => clk5_pll,
538
----     LOCKED         => clk_lock,
539
--     CLKFBIN  => clkfb,
540
--     CLKIN            => clk250,
541
--     RST              => dcm_rstp
542
--  );
543
     --
544
--xpll: MMCM_BASE
545
--  generic map(
546
--     BANDWIDTH                        => "OPTIMIZED",
547
--     CLKFBOUT_MULT_F          => CLKFBOUT_MULT_F,     
548
--     CLKFBOUT_PHASE   => CLKFBOUT_PHASE,      
549
--     CLKIN1_PERIOD            => CLKIN1_PERIOD,               
550
--     CLKOUT0_DIVIDE_F         => CLKOUT0_DIVIDE_F,    
551
--     CLKOUT0_DUTY_CYCLE => CLKOUT0_DUTY_CYCLE, 
552
--     CLKOUT0_PHASE            => CLKOUT0_PHASE,               
553
--     CLKOUT1_DIVIDE   => CLKOUT1_DIVIDE,      
554
--     CLKOUT1_DUTY_CYCLE => CLKOUT1_DUTY_CYCLE, 
555
--     CLKOUT1_PHASE            => CLKOUT1_PHASE,               
556
--     CLKOUT2_DIVIDE   => CLKOUT2_DIVIDE,      
557
--     CLKOUT2_DUTY_CYCLE => CLKOUT2_DUTY_CYCLE, 
558
--     CLKOUT2_PHASE            => CLKOUT2_PHASE,               
559
--     CLKOUT3_DIVIDE   => CLKOUT3_DIVIDE,      
560
--     CLKOUT3_DUTY_CYCLE => CLKOUT3_DUTY_CYCLE, 
561
--     CLKOUT3_PHASE            => CLKOUT3_PHASE,               
562
--     CLKOUT4_CASCADE  => CLKOUT4_CASCADE,     
563
--     CLKOUT4_DIVIDE   => CLKOUT4_DIVIDE,      
564
--     CLKOUT4_DUTY_CYCLE => CLKOUT4_DUTY_CYCLE, 
565
--     CLKOUT4_PHASE            => CLKOUT4_PHASE,               
566
--     CLKOUT5_DIVIDE   => CLKOUT5_DIVIDE,      
567
--     CLKOUT5_DUTY_CYCLE => CLKOUT5_DUTY_CYCLE, 
568
--     CLKOUT5_PHASE            => CLKOUT5_PHASE,               
569
--     CLKOUT6_DIVIDE   => CLKOUT6_DIVIDE,      
570
--     CLKOUT6_DUTY_CYCLE => CLKOUT6_DUTY_CYCLE, 
571
--     CLKOUT6_PHASE            => CLKOUT6_PHASE,               
572
--     CLOCK_HOLD               => CLOCK_HOLD,          
573
--     DIVCLK_DIVIDE            => DIVCLK_DIVIDE                
574
----     REF_JITTER1 : real := 0.010;
575
----     STARTUP_WAIT : boolean := FALSE
576
--  )
577
--  port map(
578
--     CLKFBOUT         => clkfb,
579
--     --CLKFBOUTB      : out std_ulogic;
580
--     CLKOUT0  => clk0_pll,
581
--     CLKOUT0B         => clk0_pll_b,
582
--     CLKOUT1  => clk1_pll,
583
--     CLKOUT1B         => clk1_pll_b,
584
--     CLKOUT2  => clk2_pll,
585
--     CLKOUT2B         => clk2_pll_b,
586
--     CLKOUT3  => clk3_pll,
587
--     CLKOUT3B         => clk3_pll_b,
588
--     CLKOUT4  => clk4_pll,
589
--     CLKOUT5  => clk200x,
590
--     CLKOUT6  => clk266x,
591
--     LOCKED   => clk_lock,
592
--     CLKFBIN  => clkfb,
593
--     CLKIN1   => clk250,
594
--     PWRDWN   => '0',
595
--     RST              => dcm_rstp
596
--  );  
597
clk_lock <= '1';
598
clk <= clk250;
599
 
600
xclk200: bufg port map( clk200, clk200x );
601
--xclk266: bufg port map( clk, clk266x );
602
clk200_out <= clk200;
603
clk_lock_out <= clk_lock;
604
 
605
 
606
 
607
gen_syn: if( is_simulation=0 or  is_simulation=2 ) generate
608
 
609
 
610
clk_out <= clk;
611
reset_out <= reset after 1 ns when rising_edge( clk );
612
clk30k <= clk30i;
613
 
614
 
615
refclk_ibuf : IBUFDS  port map (O => mgt125, I => mgt125_p, IB => mgt125_n );
616
 
617
--refclk_ibuf : IBUFDS_GTXE1
618
--     port map(
619
--       O       => mgt125,
620
--       ODIV2   => open,
621
--       I       => mgt125_p,
622
--       IB      => mgt125_n,
623
--       CEB     => '0'
624
--        );
625
 
626
xmperst: ibuf port map( perst, bperst );
627
 
628
 
629
pcie: pcie_core64_m7
630
generic map(
631
                is_simulation   => is_simulation        -- 0 - синтез, 1 - моделирование 
632
        )
633
 
634
        port map(
635
 
636
                ---- PCI-Express ----
637
                txp                             => txp,
638
                txn                             => txn,
639
 
640
                rxp                             => rxp,
641
                rxn                             => rxn,
642
 
643
                mgt125                  => mgt125,
644
 
645
                perst                   => perst,
646
 
647
                px                              => px,
648
 
649
                pcie_lstatus    => pcie_lstatus,         -- регистр LSTATUS
650
                pcie_link_up    => pcie_link_up,         -- 0 - завершена инициализация PCI-Express
651
 
652
                ---- Локальная шина ----                          
653
                clk250_out              => clk250,                      -- тактовая частота 250 MHz               
654
                reset_out               => reset,                       -- 0 - сброс
655
                dcm_rstp                => dcm_rstp,            -- 1 - сброс DCM 266 МГц 
656
                clk                             => clk,                         -- тактовая частота локальной шины - 266 МГц
657
                clk_lock                => clk_lock,            -- 1 - захват частоты
658
 
659
                lc_adr                  => lc_adr,                      -- шина адреса
660
                lc_host_data    => lc_host_data,        -- шина данных - выход
661
                lc_data                 => lc_data,                     -- шина данных - вход
662
                lc_wr                   => lc_wr,                       -- 1 - запись
663
                lc_rd                   => lc_rd,                       -- 1 - чтение, данные должны быть на четвёртый такт после rd
664
                lc_dma_req              => lc_dma_req,          -- 1 - запрос DMA
665
                lc_irq                  => lc_irq                       -- 1 - запрос прерывания 
666
 
667
        );
668
 
669
 
670
 
671
p(1) <= px(0); -- int_req_fl
672
p(2) <= px(1); -- int_req_main
673
p(3) <= px(2); -- int_ack
674
 
675
 
676
blink:  ctrl_blink
677
        generic map(
678
                is_simulation   => is_simulation
679
        )
680
        port map(
681
                clk                             => clk250,              -- тактовая частота 250 
682
                reset                   => reset,       -- 0 - сброс
683
                clk30k                  => clk30i,      -- тактовая частота 30 кГц
684
 
685
                pcie_link_up    => pcie_link_up,        -- 0 - завершена инициализация PCI-Express
686
                pcie_lstatus    => pcie_lstatus,        -- регистра LSTATUS
687
 
688
                led_h1                  => led_h1               -- светодиод
689
        );
690
 
691
 
692
led_h2 <= reset and not dmar1;
693
led_h3 <= reset and not dmar0;
694
led_h4 <= reset and not px(0);
695
 
696
 
697
ad:     pb_adm_ctrl_m2
698
        generic map (
699
                ---- Разрешение чтения из регистра DATA ----
700
                trd1_in         => conv_integer( trd_in(1) ),
701
                trd2_in         => conv_integer( trd_in(2) ),
702
                trd3_in         => conv_integer( trd_in(3) ),
703
                trd4_in         => conv_integer( trd_in(4) ),
704
                trd5_in         => conv_integer( trd_in(5) ),
705
                trd6_in         => conv_integer( trd_in(6) ),
706
                trd7_in         => conv_integer( trd_in(7) ),
707
 
708
                ---- Разрешение чтения из регистра STATUS ----
709
                trd1_st         => conv_integer( trd_st(1) ),
710
                trd2_st         => conv_integer( trd_st(2) ),
711
                trd3_st         => conv_integer( trd_st(3) ),
712
                trd4_st         => conv_integer( trd_st(4) ),
713
                trd5_st         => conv_integer( trd_st(5) ),
714
                trd6_st         => conv_integer( trd_st(6) ),
715
                trd7_st         => conv_integer( trd_st(7) ),
716
 
717
                ---- Константы тетрады ----
718
                rom0            => trd_rom(0),
719
                rom1            => trd_rom(1),
720
                rom2            => trd_rom(2),
721
                rom3            => trd_rom(3),
722
                rom4            => trd_rom(4),
723
                rom5            => trd_rom(5),
724
                rom6            => trd_rom(6),
725
                rom7            => trd_rom(7)
726
 
727
        )
728
 
729
        port map(
730
                ---- GLOBAL ----
731
                reset                   => reset,                       -- 0 - сброс
732
                clk                             => clk,                         -- тактовая частота
733
 
734
                ---- PLD_BUS ----
735
                lc_adr                  => lc_adr( 17 downto 11 ),      -- шина адреса
736
                lc_host_data    => lc_host_data,        -- шина данных, вход
737
                lc_data                 => lc_data,                     -- шина данных, выход
738
                lc_wr                   => lc_wr,                       -- 1 - запись
739
                lc_rd                   => lc_rd,                       -- 1 - чтение
740
 
741
 
742
                test_mode               => test_mode,                   -- 1 - тестовый режим
743
 
744
                ---- Шина адреса для подключения к узлу начального тестирования тетрады MAIN ----               
745
                trd_host_adr    => trd_host_adr( 6 downto 0 ),
746
 
747
                ---- Шина данных, через которую производиться запись в регистры тетрады ----            
748
                trd_host_data   => trdi_host_data,
749
 
750
                ---- Шина данных, через которую производиться запись в регистр DATA тетрады 4 ----              
751
                trd4_host_data  => trd4_host_data,
752
 
753
                ---- Комада управления для каждой тетрады ----          
754
                trd_host_cmd    => trdi_host_cmd,
755
 
756
                ---- Выходы региста DATA от каждой тетрады ----
757
                trd_data                => trd_data,
758
 
759
                ---- Выходы регистров STATUS, CMD_ADR, CMD_DATA от каждой тетрады ----
760
                trd_cmd_data    => trd_cmd_data,
761
 
762
                ---- Сброс FIFO от каждой тетрады ----
763
                trd_reset_fifo  => trd_reset_fifo,
764
 
765
                ---- Запросы DMA от каждой тетрады ----
766
                trd_drq                 => trd_drq,
767
 
768
                ---- Источники прерываний и DRQ ----
769
                int1                    => trd_main_irq(1),
770
 
771
                drq0                    => trd_main_drq(0),
772
                drq1                    => trd_main_drq(1),
773
                drq2                    => trd_main_drq(2),
774
                drq3                    => trd_main_drq(3),
775
 
776
                ---- Выход DRQ и IRQ ----
777
                irq1                    => irq1,
778
                dmar0                   => dmar0,
779
                dmar1                   => dmar1,
780
                dmar2                   => dmar2,
781
                dmar3                   => dmar3
782
 
783
        );
784
 
785
 
786
 
787
 
788
lc_dma_req <= dmar1 & dmar0;
789
lc_irq <= irq1;
790
 
791
end generate;
792
 
793
gen_simulation: if( is_simulation=1 ) generate
794
 
795
clk_out <= clk;
796
 
797
ctrl: cl_adm_simulation
798
 
799
        generic map(
800
                        ---- Константы тетрад ----
801
                        trd_rom                 => trd_rom,
802
                        ---- Разрешение чтения из регистра DATA ----
803
                        trd_in                  => trd_in,
804
                        ---- Разрешение чтения из регистра STATUS ----
805
                        trd_st                  => trd_st,
806
 
807
                        PERIOD_CLK              => 4 ns,        -- период тактового сигнала
808
                        RESET_PAUSE             => 102 ns       -- время снятия сигнала RESET
809
 
810
        )
811
 
812
        port map(
813
 
814
 
815
                ---- Внутренняя шина ----
816
                clk_out                 => clk,
817
                reset_out               => reset_out,
818
                test_mode               => test_mode,           -- 1 - тестовый режим
819
 
820
 
821
                ---- Шина адреса для подключения к узлу начального тестирования тетрады MAIN ----               
822
                trd_host_adr    => trd_host_adr,
823
 
824
                ---- Шина данных, через которую производиться запись в регистры тетрады ----            
825
                trd_host_data   => trdi_host_data,
826
 
827
                ---- Комада управления для каждой тетрады ----          
828
                trd_host_cmd    => trdi_host_cmd,
829
 
830
                ---- Выходы региста DATA от каждой тетрады ----
831
                trd_data                => trd_data,
832
 
833
                ---- Выходы регистров STATUS, CMD_ADR, CMD_DATA от каждой тетрады ----
834
                trd_cmd_data    => trd_cmd_data,
835
 
836
                ---- Запросы DMA от тетрады MAIN (после маршрутизации) ----
837
                trd_main_drq    => trd_main_drq,
838
 
839
                ---- Регистры управления DMA ----
840
                trd_main_sel_drq=> trd_main_sel_drq,
841
 
842
                ---- Сброс FIFO от каждой тетрады ----
843
                trd_reset_fifo  => trd_reset_fifo,
844
 
845
                ---- Запросы прерываения от тетрады MAIN (после маршрутизации) ----
846
                trd_main_irq    => trd_main_irq
847
 
848
 
849
        );
850
 
851
 
852
--trd_host_data <= trdi_host_data;      
853
trd4_host_data <= trdi_host_data;
854
 
855
 
856
end generate;
857
 
858
---- Формирование сигналов управления -----
859
 
860
gen_cmd: for ii in 0 to 7 generate
861
 
862
trd_host_cmd(ii).data_cs <= trdi_host_cmd(ii).data_cs;
863
trd_host_cmd(ii).data_oe <= '0';
864
trd_host_cmd(ii).cmd_data_cs <= trdi_host_cmd(ii).cmd_data_cs;
865
trd_host_cmd(ii).status_cs <= trdi_host_cmd(ii).status_cs;
866
 
867
trd_host_cmd(ii).data_we                <= trdi_host_cmd(ii).data_we after 0.4 ns when rising_edge( clk );
868
trd_host_cmd(ii).cmd_data_we    <= trdi_host_cmd(ii).cmd_data_we after 0.4 ns when rising_edge( clk );
869
trd_host_cmd(ii).cmd_adr_we     <= trdi_host_cmd(ii).cmd_adr_we after 0.4 ns when rising_edge( clk );
870
 
871
trd_host_cmd(ii).adr                    <= trdi_host_cmd(ii).adr;
872
 
873
gen_data: if( ii/=4 ) generate
874
                --trd_host_data(ii) <= trdi_host_data after 0.4 ns when rising_edge( clk );
875
 
876
                gen_bus: for jj in 0 to 63 generate
877
                attribute syn_keep of xfd : label is true;
878
                begin
879
                        xfd:  fd port map( q=>trd_host_data(ii)(jj), c=>clk, d=>trdi_host_data(jj) );
880
                end generate;
881
 
882
        end generate;
883
 
884
        gen_data_t4: if( ii=4 ) generate
885
                --trd_host_data(ii) <= trd4_host_data after 0.4 ns when rising_edge( clk );
886
 
887
                gen_bus: for jj in 0 to 63 generate
888
                attribute syn_keep of xfd : label is true;
889
                begin
890
                        xfd: fd port map( q=>trd_host_data(ii)(jj), c=>clk, d=>trd4_host_data(jj) );
891
                end generate;
892
 
893
        end generate;
894
 
895
trd_host_cmd_data(ii) <= trdi_host_data( 15 downto 0 ) after 0.4 ns when rising_edge( clk );
896
 
897
end generate;
898
 
899
 
900
---- Формирование частоты 30 кГц ----
901
 
902
cnt30start  <= dcm_rstp after 1 ns when rising_edge( clk250 );
903
cnt30start1 <= cnt30start after 1 ns when rising_edge( clk250 );
904
 
905
cnt30i0 <= ((cnt30start xor cnt30start1) or cnt30k0) and not cnt30start;
906
cnt30i1 <= ((cnt30start xor cnt30start1) or cnt30k1 )and not cnt30start;
907
cnt30i2 <=  not cnt30k2 and not cnt30start;
908
cnt30ce1 <= (cnt30start xor cnt30start1) or cnt30k0 or cnt30start;
909
cnt30ce2 <=  (cnt30k1 and cnt30ce1) or cnt30start;
910
 
911
xcnt0: srlc32e port map( q31=>cnt30k0, clk=>clk250, d=>cnt30i0, a=>"11111",   ce=>'1' );
912
xcnt1: srlc32e port map( q31=>cnt30k1, clk=>clk250, d=>cnt30i1, a=>"11111",   ce=>cnt30ce1 );
913
xcnt2: srlc32e port map( q=>cnt30k2, clk=>clk250,   d=>cnt30i2,   a=>"01001", ce=>cnt30ce2 );
914
 
915
clk30i <= cnt30k2;
916
 
917
end cl_sp605;
918
 
919
 
920
 

powered by: WebSVN 2.1.0

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