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_ac701/] [top/] [cl_ac701.vhd] - Blame information for rev 47

Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

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