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_ambpex5/] [top/] [cl_ambpex5_m5.vhd] - Blame information for rev 2

Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

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