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

Subversion Repositories pcie_ds_dma

[/] [pcie_ds_dma/] [trunk/] [core/] [ds_dma64/] [pcie_src/] [pcie_core64_m1/] [top/] [pcie_core64_m4.vhd] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 dsmv
-------------------------------------------------------------------------------
2
--
3
-- Title       : pcie_core64_m4
4
-- Author      : Dmitry Smekhov
5
-- Company     : Instrumental Systems 
6
-- E-mail      : dsmv@insys.ru
7
--
8
-- Version     : 1.2
9
--
10
-------------------------------------------------------------------------------
11
--
12
-- Description :  Контроллер шины PCI Express 
13
--                                Модификация 4 - Virtex 6 PCI Express 2.0 x4 
14
--
15
-------------------------------------------------------------------------------
16
--
17
--  Version 1.2         28.06.2012 
18
--                                      Добавлена возможность формирования прерываний INTA-INTC
19
--                                      Необходимо установить параметры в узле cl_v6pcie_x4
20
--                                      INTERRUPT_PIN               : bit_vector := X"1";
21
--                                      PCIE_CAP_INT_MSG_NUM        : bit_vector := X"1"
22
--                                      Установка параметров через функцию set_interrupt_pin 
23
--                                      не работает.
24
--                                      Узел cl_v6pcie_x4 должен сформировать правильное
25
--                                      значение линиии прерывания в регистре INTERRUPT PIN 
26
--
27
-------------------------------------------------------------------------------
28
--
29
--  Version 1.1         19.06.2012 
30
--                                      Добавлена установка регистра DeviceId через generic 
31
--
32
-------------------------------------------------------------------------------
33
--
34
--  Version 1.0         15.08.2011 
35
--                                      Создан из pcie_core64_m1 v1.0
36
--
37
-------------------------------------------------------------------------------
38
 
39
 
40
library ieee;
41
use ieee.std_logic_1164.all;
42
 
43
use work.core64_type_pkg.all;
44
 
45
package pcie_core64_m4_pkg is
46
 
47
--! контроллер PCI-Express 
48
component pcie_core64_m4 is
49
        generic (
50
                DEVICE_ID                       : in bit_vector := X"5507";     --! значение регистра DeviceID 
51
                refclk                          : in integer:=100;                              --! Значение опорной тактовой частоты [МГц]
52
                is_simulation           : in integer:=0;                         --! 0 - синтез, 1 - моделирование 
53
                interrupt_number        : in std_logic_vector( 1 downto 0 ):="00"        -- номер INTx: 0 - INTA, 1 - INTB, 2 - INTC, 3 - INTD 
54
 
55
        );
56
 
57
        port (
58
 
59
                ---- PCI-Express ----
60
                txp                             : out std_logic_vector( 3 downto 0 );
61
                txn                             : out std_logic_vector( 3 downto 0 );
62
 
63
                rxp                             : in  std_logic_vector( 3 downto 0 );
64
                rxn                             : in  std_logic_vector( 3 downto 0 );
65
 
66
                mgt250                  : in  std_logic; --! тактовая частота 250 MHz или 100 МГц от PCI_Express
67
 
68
                perst                   : in  std_logic;        --! 0 - сброс                                              
69
 
70
                px                              : out std_logic_vector( 7 downto 0 );    --! контрольные точки 
71
 
72
                pcie_lstatus    : out std_logic_vector( 15 downto 0 ); -- регистр LSTATUS
73
                pcie_link_up    : out std_logic;        -- 0 - завершена инициализация PCI-Express
74
 
75
 
76
                ---- Локальная шина ----                          
77
                clk_out                 : out std_logic;        --! тактовая частота 250 MHz              
78
                reset_out               : out std_logic;        --! 0 - сброс
79
                dcm_rstp                : out std_logic;        --! 1 - сброс DCM 266 МГц
80
 
81
                ---- BAR0 - блоки управления ----
82
                bp_host_data    : out std_logic_vector( 31 downto 0 );   --! шина данных - выход 
83
                bp_data                 : in  std_logic_vector( 31 downto 0 );  --! шина данных - вход
84
                bp_adr                  : out std_logic_vector( 19 downto 0 );   --! адрес регистра 
85
                bp_we                   : out std_logic_vector( 3 downto 0 );    --! 1 - запись в регистры 
86
                bp_rd                   : out std_logic_vector( 3 downto 0 );   --! 1 - чтение из регистров блока 
87
                bp_sel                  : out std_logic_vector( 1 downto 0 );    --! номер блока для чтения 
88
                bp_reg_we               : out std_logic;                        --! 1 - запись в регистр по адресам   0x100000 - 0x1FFFFF 
89
                bp_reg_rd               : out std_logic;                        --! 1 - чтение из регистра по адресам 0x100000 - 0x1FFFFF 
90
                bp_irq                  : in  std_logic;                        --! 1 - запрос прерывания 
91
 
92
                ---- BAR1 ----  
93
                aclk                    : in std_logic;                         --! тактовая частота локальной шины - 266 МГц
94
                aclk_lock               : in std_logic;                         --! 1 - захват частоты
95
                pb_master               : out type_pb_master;           --! запрос 
96
                pb_slave                : in  type_pb_slave                     --! ответ  
97
 
98
 
99
 
100
        );
101
end component;
102
 
103
end package;
104
 
105
 
106
 
107
library ieee;
108
use ieee.std_logic_1164.all;
109
 
110
use work.core64_type_pkg.all;
111
use work.core64_rx_engine_m2_pkg.all;
112
use work.core64_tx_engine_m2_pkg.all;
113
use work.core64_reg_access_pkg.all;
114
use work.core64_pb_disp_pkg.all;
115
use work.block_pe_fifo_ext_pkg.all;
116
use work.core64_interrupt_pkg.all;
117
 
118
--! контроллер PCI-Express 
119
entity pcie_core64_m4 is
120
        generic (
121
                DEVICE_ID                       : in bit_vector := X"5507";     --! значение регистра DeviceID 
122
                refclk                          : in integer:=100;                              --! Значение опорной тактовой частоты [МГц]
123
                is_simulation           : in integer:=0;                         --! 0 - синтез, 1 - моделирование 
124
                interrupt_number        : in std_logic_vector( 1 downto 0 ):="00"        -- номер INTx: 0 - INTA, 1 - INTB, 2 - INTC, 3 - INTD 
125
        );
126
 
127
        port (
128
 
129
                ---- PCI-Express ----
130
                txp                             : out std_logic_vector( 3 downto 0 );
131
                txn                             : out std_logic_vector( 3 downto 0 );
132
 
133
                rxp                             : in  std_logic_vector( 3 downto 0 );
134
                rxn                             : in  std_logic_vector( 3 downto 0 );
135
 
136
                mgt250                  : in  std_logic;        --! тактовая частота 250 MHz или 100 МГц от PCI_Express
137
 
138
                perst                   : in  std_logic;        --! 0 - сброс                                              
139
 
140
                px                              : out std_logic_vector( 7 downto 0 );    --! контрольные точки 
141
 
142
                pcie_lstatus    : out std_logic_vector( 15 downto 0 ); --! регистр LSTATUS
143
                pcie_link_up    : out std_logic;        --! 0 - завершена инициализация PCI-Express
144
 
145
 
146
                ---- Локальная шина ----                          
147
                clk_out                 : out std_logic;        --! тактовая частота 250 MHz              
148
                reset_out               : out std_logic;        --! 0 - сброс
149
                dcm_rstp                : out std_logic;        --! 1 - сброс DCM 266 МГц
150
 
151
                ---- BAR0 - блоки управления ----
152
                bp_host_data    : out std_logic_vector( 31 downto 0 );   --! шина данных - выход 
153
                bp_data                 : in  std_logic_vector( 31 downto 0 );  --! шина данных - вход
154
                bp_adr                  : out std_logic_vector( 19 downto 0 );   --! адрес регистра 
155
                bp_we                   : out std_logic_vector( 3 downto 0 );    --! 1 - запись в регистры 
156
                bp_rd                   : out std_logic_vector( 3 downto 0 );   --! 1 - чтение из регистров блока 
157
                bp_sel                  : out std_logic_vector( 1 downto 0 );    --! номер блока для чтения 
158
                bp_reg_we               : out std_logic;                        --! 1 - запись в регистр по адресам   0x100000 - 0x1FFFFF 
159
                bp_reg_rd               : out std_logic;                        --! 1 - чтение из регистра по адресам 0x100000 - 0x1FFFFF 
160
                bp_irq                  : in  std_logic;                        --! 1 - запрос прерывания 
161
 
162
                ---- BAR1 ----  
163
                aclk                    : in std_logic;                         --! тактовая частота локальной шины - 266 МГц
164
                aclk_lock               : in std_logic;                         --! 1 - захват частоты
165
                pb_master               : out type_pb_master;           --! запрос 
166
                pb_slave                : in  type_pb_slave                     --! ответ  
167
 
168
 
169
        );
170
end pcie_core64_m4;
171
 
172
 
173
architecture pcie_core64_m4 of pcie_core64_m4 is
174
 
175
function  set_refclk( refclk    : in integer ) return integer is
176
 
177
variable        ret     : integer;
178
 
179
begin
180
 
181
        case( refclk ) is
182
                when 100 =>     ret:=0;          -- 100 MHz --
183
                when 250 => ret:=2;             -- 250 MHz --
184
                when others => ret:=1;  -- 125 MHz --
185
        end case;
186
 
187
        return ret;
188
 
189
end set_refclk;
190
 
191
constant        REF_CLK_FREQ            : integer:=set_refclk( refclk );
192
 
193
function  set_interrupt_pin( num        : in std_logic_vector( 1 downto 0 ) ) return bit_vector is
194
 
195
variable        ret     : bit_vector( 3 downto 0 );
196
 
197
begin
198
 
199
        case( num ) is
200
                when "00" => ret:=x"1";         -- INTA -- 
201
                when "01" => ret:=x"2";         -- INTB --
202
                when "10" => ret:=x"3";         -- INTC --
203
                when "11" => ret:=x"4";         -- INTD --
204
                when others => ret:=x"0";
205
        end case;
206
 
207
        return ret;
208
 
209
end set_interrupt_pin;
210
 
211
constant        INTERRUPT_PIN                   : bit_vector( 3 downto 0 ):=set_interrupt_pin( interrupt_number );
212
 
213
 
214
component cl_v6pcie_x4
215
        generic (
216
                DEVICE_ID                                       : in bit_vector := X"5507";
217
                REF_CLK_FREQ                : integer    := 0;     -- 0 - 100 MHz; 1 - 125 MHz; 2 - 250 MHz      
218
                PL_FAST_TRAIN                           : in boolean;
219
                DISABLE_LANE_REVERSAL       : boolean    := TRUE
220
--          INTERRUPT_PIN               : bit_vector := X"1";
221
--          PCIE_CAP_INT_MSG_NUM        : bit_vector := X"1"
222
 
223
         );
224
    port (
225
      pci_exp_txp                    : out std_logic_vector(3 downto 0);
226
      pci_exp_txn                    : out std_logic_vector(3 downto 0);
227
      pci_exp_rxp                    : in std_logic_vector(3 downto 0);
228
      pci_exp_rxn                    : in std_logic_vector(3 downto 0);
229
      user_clk_out                   : out std_logic;
230
      user_reset_out                 : out std_logic;
231
      user_lnk_up                    : out std_logic;
232
      tx_buf_av                      : out std_logic_vector(5 downto 0);
233
      tx_cfg_req                     : out std_logic;
234
      tx_err_drop                    : out std_logic;
235
      s_axis_tx_tready               : out std_logic;
236
      s_axis_tx_tdata                : in std_logic_vector(63 downto 0);
237
      s_axis_tx_tlast                : in std_logic;
238
      s_axis_tx_tvalid               : in std_logic;
239
      s_axis_tx_tstrb                : in std_logic_vector(7 downto 0);
240
      s_axis_tx_tuser                : in std_logic_vector(3 downto 0);
241
      tx_cfg_gnt                     : in std_logic;
242
 
243
      m_axis_rx_tdata                : out std_logic_vector(63 downto 0);
244
      m_axis_rx_tstrb                : out std_logic_vector(7 downto 0);
245
      m_axis_rx_tlast                : out std_logic;
246
      m_axis_rx_tvalid               : out std_logic;
247
      m_axis_rx_tready               : in std_logic;
248
      m_axis_rx_tuser                : out std_logic_vector(21 downto 0);
249
      rx_np_ok                       : in std_logic;
250
      fc_cpld                        : out std_logic_vector(11 downto 0);
251
      fc_cplh                        : out std_logic_vector(7 downto 0);
252
      fc_npd                         : out std_logic_vector(11 downto 0);
253
      fc_nph                         : out std_logic_vector(7 downto 0);
254
      fc_pd                          : out std_logic_vector(11 downto 0);
255
      fc_ph                          : out std_logic_vector(7 downto 0);
256
      fc_sel                         : in std_logic_vector(2 downto 0);
257
      cfg_do                         : out std_logic_vector(31 downto 0);
258
      cfg_rd_wr_done                 : out std_logic;
259
      cfg_di                         : in std_logic_vector(31 downto 0);
260
      cfg_byte_en                    : in std_logic_vector(3 downto 0);
261
      cfg_dwaddr                     : in std_logic_vector(9 downto 0);
262
      cfg_wr_en                      : in std_logic;
263
      cfg_rd_en                      : in std_logic;
264
      cfg_err_cor                    : in std_logic;
265
      cfg_err_ur                     : in std_logic;
266
      cfg_err_ecrc                   : in std_logic;
267
      cfg_err_cpl_timeout            : in std_logic;
268
      cfg_err_cpl_abort              : in std_logic;
269
      cfg_err_cpl_unexpect           : in std_logic;
270
      cfg_err_posted                 : in std_logic;
271
      cfg_err_locked                 : in std_logic;
272
      cfg_err_tlp_cpl_header         : in std_logic_vector(47 downto 0);
273
      cfg_err_cpl_rdy                : out std_logic;
274
      cfg_interrupt                  : in std_logic;
275
      cfg_interrupt_rdy              : out std_logic;
276
      cfg_interrupt_assert           : in std_logic;
277
      cfg_interrupt_di               : in std_logic_vector(7 downto 0);
278
      cfg_interrupt_do               : out std_logic_vector(7 downto 0);
279
      cfg_interrupt_mmenable         : out std_logic_vector(2 downto 0);
280
      cfg_interrupt_msienable        : out std_logic;
281
      cfg_interrupt_msixenable       : out std_logic;
282
      cfg_interrupt_msixfm           : out std_logic;
283
      cfg_turnoff_ok                 : in std_logic;
284
      cfg_to_turnoff                 : out std_logic;
285
      cfg_trn_pending                : in std_logic;
286
      cfg_pm_wake                    : in std_logic;
287
      cfg_bus_number                 : out std_logic_vector(7 downto 0);
288
      cfg_device_number              : out std_logic_vector(4 downto 0);
289
      cfg_function_number            : out std_logic_vector(2 downto 0);
290
      cfg_status                     : out std_logic_vector(15 downto 0);
291
      cfg_command                    : out std_logic_vector(15 downto 0);
292
      cfg_dstatus                    : out std_logic_vector(15 downto 0);
293
      cfg_dcommand                   : out std_logic_vector(15 downto 0);
294
      cfg_lstatus                    : out std_logic_vector(15 downto 0);
295
      cfg_lcommand                   : out std_logic_vector(15 downto 0);
296
      cfg_dcommand2                  : out std_logic_vector(15 downto 0);
297
      cfg_pcie_link_state            : out std_logic_vector(2 downto 0);
298
      cfg_dsn                        : in std_logic_vector(63 downto 0);
299
      cfg_pmcsr_pme_en               : out std_logic;
300
      cfg_pmcsr_pme_status           : out std_logic;
301
      cfg_pmcsr_powerstate           : out std_logic_vector(1 downto 0);
302
      pl_initial_link_width          : out std_logic_vector(2 downto 0);
303
      pl_lane_reversal_mode          : out std_logic_vector(1 downto 0);
304
      pl_link_gen2_capable           : out std_logic;
305
      pl_link_partner_gen2_supported : out std_logic;
306
      pl_link_upcfg_capable          : out std_logic;
307
      pl_ltssm_state                 : out std_logic_vector(5 downto 0);
308
      pl_received_hot_rst            : out std_logic;
309
      pl_sel_link_rate               : out std_logic;
310
      pl_sel_link_width              : out std_logic_vector(1 downto 0);
311
      pl_directed_link_auton         : in std_logic;
312
      pl_directed_link_change        : in std_logic_vector(1 downto 0);
313
      pl_directed_link_speed         : in std_logic;
314
      pl_directed_link_width         : in std_logic_vector(1 downto 0);
315
      pl_upstream_prefer_deemph      : in std_logic;
316
      sys_clk                        : in std_logic;
317
      sys_reset                      : in std_logic);
318
  end component;
319
--signal     sys_clk_c : std_logic;
320
 
321
--signal     sys_reset_n_c : std_logic;
322
signal     trn_clk_c : std_logic;
323
signal     user_reset           : std_logic;
324
signal     user_lnk_up          : std_logic;
325
signal     cfg_trn_pending_n_c : std_logic;
326
signal     trn_tsof_n_c : std_logic;
327
signal     trn_teof_n_c : std_logic;
328
signal     trn_tsrc_rdy_n_c : std_logic;
329
signal     trn_tdst_rdy_n_c : std_logic;
330
signal     trn_tsrc_dsc_n_c : std_logic;
331
signal     trn_terrfwd_n_c : std_logic;
332
signal     trn_tdst_dsc_n_c : std_logic;
333
signal     trn_td_c : std_logic_vector((64 - 1) downto 0);
334
signal     trn_trem_n_c : std_logic_vector(7 downto 0);
335
signal     trn_tbuf_av_c : std_logic_vector(( 4 -1 )  downto 0);
336
signal     trn_rsof_n_c : std_logic;
337
signal     trn_reof_n_c : std_logic;
338
signal     trn_rsrc_rdy_n_c : std_logic;
339
signal     trn_rsrc_dsc_n_c : std_logic;
340
signal     trn_rdst_rdy_n_c : std_logic;
341
signal     trn_rerrfwd_n_c : std_logic;
342
signal     trn_rnp_ok_n_c : std_logic;
343
 
344
signal     trn_rd_c : std_logic_vector((64 - 1) downto 0);
345
signal     trn_rrem_n_c : std_logic_vector(7 downto 0);
346
signal     trn_rbar_hit_n_c : std_logic_vector(6 downto 0);
347
signal     trn_rfc_nph_av_c : std_logic_vector(7 downto 0);
348
signal     trn_rfc_npd_av_c : std_logic_vector(11 downto 0);
349
signal     trn_rfc_ph_av_c : std_logic_vector(7 downto 0);
350
signal     trn_rfc_pd_av_c : std_logic_vector(11 downto 0);
351
signal     trn_rcpl_streaming_n_c      : std_logic;
352
 
353
signal     cfg_do : std_logic_vector(31 downto 0);
354
signal     cfg_di : std_logic_vector(31 downto 0);
355
signal     cfg_dwaddr : std_logic_vector(9 downto 0) ;
356
signal     cfg_byte_en : std_logic_vector(3 downto 0);
357
signal     cfg_err_tlp_cpl_header : std_logic_vector(47 downto 0);
358
signal     cfg_wr_en : std_logic;
359
signal     cfg_rd_en : std_logic;
360
signal     cfg_rd_wr_done : std_logic;
361
signal     cfg_err_cor : std_logic;
362
signal     cfg_err_ur : std_logic;
363
signal     cfg_err_ecrc : std_logic;
364
signal     cfg_err_cpl_timeout : std_logic;
365
signal     cfg_err_cpl_abort : std_logic;
366
signal     cfg_err_cpl_unexpect : std_logic;
367
signal     cfg_err_posted : std_logic;
368
signal          cfg_err_locked  : std_logic;
369
signal      cfg_trn_pending                           : std_logic;
370
signal      cfg_dcommand2                             : std_logic_vector(15 downto 0);
371
signal      cfg_dsn                                   : std_logic_vector(63 downto 0);
372
 
373
 
374
signal      pl_initial_link_width                     : std_logic_vector(2 downto 0);
375
signal      pl_lane_reversal_mode                     : std_logic_vector(1 downto 0);
376
signal      pl_link_gen2_capable                      : std_logic;
377
signal      pl_link_partner_gen2_supported            : std_logic;
378
signal      pl_link_upcfg_capable                     : std_logic;
379
signal      pl_ltssm_state                            : std_logic_vector(5 downto 0);
380
signal      pl_received_hot_rst                       : std_logic;
381
signal      pl_sel_link_rate                          : std_logic;
382
signal      pl_sel_link_width                         : std_logic_vector(1 downto 0);
383
signal      pl_directed_link_auton                    : std_logic;
384
signal      pl_directed_link_change                   : std_logic_vector(1 downto 0);
385
signal      pl_directed_link_speed                    : std_logic;
386
signal      pl_directed_link_width                    : std_logic_vector(1 downto 0);
387
signal      pl_upstream_prefer_deemph                 : std_logic;
388
 
389
 
390
 
391
signal     cfg_err_cpl_rdy : std_logic;
392
signal     cfg_interrupt : std_logic;
393
signal     cfg_interrupt_rdy : std_logic;
394
 
395
signal     cfg_interrupt_assert : std_logic;
396
 
397
signal     cfg_interrupt_n                      : std_logic;
398
signal     cfg_interrupt_rdy_n          : std_logic;
399
signal     cfg_interrupt_assert_n       : std_logic;
400
 
401
 
402
signal     cfg_interrupt_di : std_logic_vector(7 downto 0);
403
signal     cfg_interrupt_do : std_logic_vector(7 downto 0);
404
signal     cfg_interrupt_mmenable : std_logic_vector(2 downto 0);
405
signal     cfg_interrupt_msienable: std_logic;
406
 
407
signal     cfg_turnoff_ok : std_logic;
408
signal     cfg_to_turnoff : std_logic;
409
signal     cfg_pm_wake : std_logic;
410
signal     cfg_pcie_link_state : std_logic_vector(2 downto 0);
411
signal     cfg_bus_number : std_logic_vector(7 downto 0);
412
signal     cfg_device_number : std_logic_vector(4 downto 0);
413
signal     cfg_function_number : std_logic_vector(2 downto 0);
414
signal     cfg_status : std_logic_vector(15 downto 0);
415
signal     cfg_command : std_logic_vector(15 downto 0);
416
signal     cfg_dstatus : std_logic_vector(15 downto 0);
417
signal     cfg_dcommand : std_logic_vector(15 downto 0);
418
signal     cfg_lstatus : std_logic_vector(15 downto 0);
419
signal     cfg_lcommand : std_logic_vector(15 downto 0);
420
--signal     unsigned_fast_simulation: unsigned(0 downto 0);
421
signal     vector_fast_simulation: std_logic_vector(0 downto 0):=(0=>'1');
422
 
423
signal  fc_sel                          : std_logic_vector( 2 downto 0 );
424
signal  sys_reset_p                     : std_logic;
425
 
426
signal  refclkout                       : std_logic;
427
 
428
 
429
signal clk                                      : std_logic;
430
signal rstp                                     : std_logic;
431
signal trn_rx                           : type_axi_rx;                  --! приём пакета
432
signal trn_rx_back                      : type_axi_rx_back;             --! готовность к приёму пакета
433
 
434
signal reg_access                       : type_reg_access;              --! запрос на доступ к регистрам 
435
 
436
signal rx_tx_engine                     : type_rx_tx_engine;    --! обмен RX->TX 
437
signal tx_rx_engine                     : type_tx_rx_engine;    --! обмен TX->RX 
438
 
439
signal rx_ext_fifo                      : type_rx_ext_fifo;             --! обмен RX->EXT_FIFO 
440
signal tx_ext_fifo                      : type_tx_ext_fifo;
441
signal  tx_ext_fifo_back        : type_tx_ext_fifo_back;
442
signal  reg_access_back         : type_reg_access_back;
443
signal  completer_id            : std_logic_vector( 15 downto 0 );
444
 
445
signal  trn_tx                          : type_axi_tx;
446
signal  trn_tx_back                     : type_axi_tx_back;
447
 
448
signal  reg_disp                        : type_reg_disp;
449
signal  reg_disp_back           : type_reg_disp_back;
450
 
451
signal  reg_ext_fifo            : type_reg_ext_fifo;
452
signal  reg_ext_fifo_back       : type_reg_ext_fifo_back;
453
 
454
signal  ext_fifo_disp           : type_ext_fifo_disp;           --! запрос на доступ от узла EXT_FIFO 
455
signal  ext_fifo_disp_back      : type_ext_fifo_disp_back;      --! ответ на запрос
456
 
457
signal  pb_rstp                         : std_logic;
458
 
459
signal  irq                                     : std_logic;
460
 
461
function  SET_FAST_TRAIN( is_simulation : integer ) return boolean is
462
 
463
variable        ret     : boolean;
464
begin
465
 
466
        if( is_simulation=0 ) then
467
                ret:=false;
468
        else
469
                ret:=true;
470
        end if;
471
        return ret;
472
 
473
end SET_FAST_TRAIN;
474
 
475
constant        PL_FAST_TRAIN   : boolean:= SET_FAST_TRAIN( is_simulation );
476
 
477
begin
478
 
479
--gen_sim: if( is_simulation/=0 ) generate
480
--      vector_fast_simulation <= (others=>'1');
481
--end generate;
482
--
483
--gen_syn: if( is_simulation=0 ) generate
484
--      vector_fast_simulation <= (others=>'0');
485
--end generate;
486
 
487
 
488
clk_out <= clk;
489
reset_out <= not pb_rstp after 1 ns when rising_edge( clk );
490
 
491
ep :  cl_v6pcie_x4
492
  generic map(
493
         DEVICE_ID                                              => DEVICE_ID,
494
     REF_CLK_FREQ                   => REF_CLK_FREQ,           -- 0 - 100 MHz; 1 - 125 MHz; 2 - 250 MHz
495
         PL_FAST_TRAIN                                  => PL_FAST_TRAIN
496
--       INTERRUPT_PIN                  => INTERRUPT_PIN,
497
--       PCIE_CAP_INT_MSG_NUM           => INTERRUPT_PIN
498
 
499
  )
500
  port map(
501
          pci_exp_txp                     => txp,
502
          pci_exp_txn                     => txn,
503
          pci_exp_rxp                     => rxp,
504
          pci_exp_rxn                     => rxn,
505
          user_clk_out                    => clk ,
506
          user_reset_out                  => user_reset,
507
          user_lnk_up                     => user_lnk_up,
508
          tx_buf_av                       => trn_tx_back.trn_tbuf_av ,
509
          tx_cfg_req                      => trn_tx_back.tx_cfg_req ,
510
          tx_err_drop                     => trn_tx_back.tx_err_drop ,
511
          s_axis_tx_tready                => trn_tx_back.s_axis_tx_tready ,
512
          s_axis_tx_tdata                 => trn_tx.s_axis_tx_tdata ,
513
          s_axis_tx_tstrb                 => trn_tx.s_axis_tx_tstrb ,
514
          s_axis_tx_tlast                 => trn_tx.s_axis_tx_tlast ,
515
          s_axis_tx_tvalid                => trn_tx.s_axis_tx_tvalid ,
516
          s_axis_tx_tuser                 => trn_tx.s_axis_tx_tuser,
517
          tx_cfg_gnt                      => trn_tx.tx_cfg_gnt ,
518
          m_axis_rx_tdata                 => trn_rx.m_axis_rx_tdata ,
519
          m_axis_rx_tstrb                 => trn_rx.m_axis_rx_tstrb ,
520
          m_axis_rx_tlast                 => trn_rx.m_axis_rx_tlast ,
521
          m_axis_rx_tvalid                => trn_rx.m_axis_rx_tvalid ,
522
          m_axis_rx_tready                => trn_rx_back.m_axis_rx_tready ,
523
          m_axis_rx_tuser                 => trn_rx.m_axis_rx_tuser,
524
          rx_np_ok                        => trn_rx_back.rx_np_ok ,
525
          fc_cpld                         => trn_tx_back.fc_cpld ,
526
          fc_cplh                         => trn_tx_back.fc_cplh ,
527
          fc_npd                          => trn_tx_back.fc_npd ,
528
          fc_nph                          => trn_tx_back.fc_nph ,
529
          fc_pd                           => trn_tx_back.fc_pd ,
530
          fc_ph                           => trn_tx_back.fc_ph ,
531
          fc_sel                          => trn_tx.fc_sel ,
532
          cfg_do                          => cfg_do ,
533
          cfg_rd_wr_done                  => cfg_rd_wr_done,
534
          cfg_di                          => cfg_di ,
535
          cfg_byte_en                     => cfg_byte_en ,
536
          cfg_dwaddr                      => cfg_dwaddr ,
537
          cfg_wr_en                       => cfg_wr_en ,
538
          cfg_rd_en                       => cfg_rd_en ,
539
 
540
          cfg_err_cor                     => cfg_err_cor ,
541
          cfg_err_ur                      => cfg_err_ur ,
542
          cfg_err_ecrc                    => cfg_err_ecrc ,
543
          cfg_err_cpl_timeout             => cfg_err_cpl_timeout ,
544
          cfg_err_cpl_abort               => cfg_err_cpl_abort ,
545
          cfg_err_cpl_unexpect            => cfg_err_cpl_unexpect ,
546
          cfg_err_posted                  => cfg_err_posted ,
547
          cfg_err_locked                  => cfg_err_locked ,
548
          cfg_err_tlp_cpl_header          => cfg_err_tlp_cpl_header ,
549
          cfg_err_cpl_rdy                 => cfg_err_cpl_rdy ,
550
          cfg_interrupt                   => cfg_interrupt ,
551
          --cfg_interrupt_rdy               => cfg_interrupt_rdy ,
552
          cfg_interrupt_assert            => cfg_interrupt_assert ,
553
          cfg_interrupt_di                => cfg_interrupt_di ,
554
          cfg_interrupt_do                => cfg_interrupt_do ,
555
          cfg_interrupt_mmenable          => cfg_interrupt_mmenable ,
556
          cfg_interrupt_msienable         => cfg_interrupt_msienable ,
557
          --cfg_interrupt_msixenable        => cfg_interrupt_msixenable ,
558
          --cfg_interrupt_msixfm            => cfg_interrupt_msixfm ,
559
          cfg_turnoff_ok                  => cfg_turnoff_ok ,
560
          cfg_to_turnoff                  => cfg_to_turnoff ,
561
          cfg_trn_pending                 => cfg_trn_pending ,
562
          cfg_pm_wake                     => cfg_pm_wake ,
563
          cfg_bus_number                  => cfg_bus_number ,
564
          cfg_device_number               => cfg_device_number ,
565
          cfg_function_number             => cfg_function_number ,
566
          cfg_status                      => cfg_status ,
567
          cfg_command                     => cfg_command ,
568
          cfg_dstatus                     => cfg_dstatus ,
569
          cfg_dcommand                    => trn_tx_back.cfg_dcommand  ,
570
          cfg_lstatus                     => cfg_lstatus ,
571
          cfg_lcommand                    => cfg_lcommand ,
572
          cfg_dcommand2                   => cfg_dcommand2 ,
573
          cfg_pcie_link_state             => cfg_pcie_link_state ,
574
          cfg_dsn                         => cfg_dsn ,
575
          cfg_pmcsr_pme_en                => open,
576
          cfg_pmcsr_pme_status            => open,
577
          cfg_pmcsr_powerstate            => open,
578
          pl_initial_link_width           => pl_initial_link_width ,
579
          pl_lane_reversal_mode           => pl_lane_reversal_mode ,
580
          pl_link_gen2_capable            => pl_link_gen2_capable ,
581
          pl_link_partner_gen2_supported  => pl_link_partner_gen2_supported ,
582
          pl_link_upcfg_capable           => pl_link_upcfg_capable ,
583
          pl_ltssm_state                  => pl_ltssm_state ,
584
          pl_received_hot_rst             => pl_received_hot_rst ,
585
          pl_sel_link_rate                => pl_sel_link_rate ,
586
          pl_sel_link_width               => pl_sel_link_width ,
587
          pl_directed_link_auton          => pl_directed_link_auton ,
588
          pl_directed_link_change         => pl_directed_link_change ,
589
          pl_directed_link_speed          => pl_directed_link_speed ,
590
          pl_directed_link_width          => pl_directed_link_width ,
591
          pl_upstream_prefer_deemph       => pl_upstream_prefer_deemph ,
592
          sys_clk                         =>  mgt250,
593
          sys_reset                       =>  sys_reset_p
594
 
595
);
596
 
597
sys_reset_p <= not perst;
598
 
599
pcie_link_up <= not user_lnk_up;
600
pcie_lstatus <= cfg_lstatus;
601
 
602
rstp <=  user_reset  after 1 ns when rising_edge( clk );
603
dcm_rstp <= user_reset;
604
 
605
pb_rstp <= rstp or ( not aclk_lock ) after 1 ns when rising_edge( clk );
606
 
607
--trn_tx_back.cfg_dcommand <= cfg_dcommand;
608
--  trn_rnp_ok_n_c              <= '0';
609
--  trn_rcpl_streaming_n_c      <= '1'; 
610
--  trn_terrfwd_n_c             <= '1';
611
--
612
--  cfg_err_cor             <= '1';
613
--  cfg_err_ur              <= '1';
614
--  cfg_err_ecrc            <= '1';
615
--  cfg_err_cpl_timeout     <= '1';
616
--  cfg_err_cpl_abort       <= '1';
617
--  cfg_err_cpl_unexpect    <= '1';
618
--  cfg_err_posted          <= '0';
619
--
620
--  cfg_interrupt_di <= X"00";
621
--
622
--  cfg_pm_wake             <= '1';
623
--  cfg_trn_pending         <= '1';
624
--  cfg_dwaddr                <= (others => '0');
625
--  cfg_err_tlp_cpl_header    <= (others => '0');
626
--  cfg_di                    <= (others => '0');
627
--  cfg_byte_en             <= X"F"; -- 4-bit bus
628
--  cfg_wr_en               <= '1';
629
--  cfg_rd_en               <= '1';      
630
 
631
  fc_sel             <= "000";
632
 
633
--  rx_np_ok           <= '1';
634
--
635
--  tx_cfg_gnt         <= '1';
636
--
637
  cfg_err_cor          <= '0';
638
  cfg_err_ur           <= '0';
639
  cfg_err_ecrc         <= '0';
640
  cfg_err_cpl_timeout  <= '0';
641
  cfg_err_cpl_abort    <= '0';
642
  cfg_err_cpl_unexpect <= '0';
643
  cfg_err_posted       <= '0';
644
  cfg_err_locked       <= '0';
645
  cfg_pm_wake          <= '0';
646
  cfg_trn_pending      <= '0';
647
 
648
--  trn_tx.s_axis_tx_tuser(0)   <= '0'; -- Unused for S6
649
--  trn_tx.s_axis_tx_tuser(1)   <= '0'; -- Error forward packet
650
--  trn_tx.s_axis_tx_tuser(2)   <= '0'; -- Stream packet
651
 
652
--  cfg_interrupt_assert <= '0';
653
--  cfg_interrupt        <= '0';
654
  cfg_interrupt_di     <= x"00";
655
 
656
  cfg_err_tlp_cpl_header <= (OTHERS => '0');
657
  cfg_dwaddr             <= (OTHERS => '0');
658
  cfg_rd_en            <= '0';
659
  cfg_wr_en            <= '0';
660
  cfg_byte_en          <= X"0";
661
  cfg_di               <= (others => '0');
662
  cfg_dsn              <= (others=>'0');
663
 
664
 
665
--  cfg_completer_id     <= (cfg_bus_number &
666
--                           cfg_device_number &
667
--                           cfg_function_number);
668
--  cfg_bus_mstr_enable  <= cfg_command(2);
669
 
670
  pl_directed_link_auton  <= '0';
671
  pl_directed_link_speed  <= '0';
672
  pl_directed_link_width  <= "00";
673
  pl_directed_link_change <= "00";
674
  pl_upstream_prefer_deemph <= '1';
675
 
676
--  cfg_completer_id_c          <= (cfg_bus_number &
677
--                                cfg_device_number &
678
--                                cfg_function_number);
679
--  cfg_bus_mstr_enable_c       <= cfg_command(2);
680
 
681
 
682
 
683
rx: core64_rx_engine_m2
684
        port map(
685
 
686
                --- General ---
687
                rstp                    => rstp,                        --! 1 - сброс 
688
                clk                             => clk,                         --! тактовая частота ядра - 250 MHz 
689
 
690
                trn_rx                  => trn_rx,                      --! приём пакета
691
                trn_rx_back             => trn_rx_back,         --! готовность к приёму пакета
692
 
693
                reg_access              => reg_access,          --! запрос на доступ к регистрам 
694
 
695
                rx_tx_engine    => rx_tx_engine,        --! обмен RX->TX 
696
                tx_rx_engine    => tx_rx_engine,        --! обмен TX->RX 
697
 
698
                rx_ext_fifo             => rx_ext_fifo          --! обмен RX->EXT_FIFO 
699
 
700
 
701
 
702
        );
703
 
704
 
705
tx: core64_tx_engine_m2
706
        generic map(
707
                interrupt_number                => interrupt_number             -- номер INTx: 0 - INTA, 1 - INTB, 2 - INTC, 3 - INTD 
708
        )
709
        port map(
710
 
711
                --- General ---
712
                rstp                    => rstp,                        --! 1 - сброс 
713
                clk                             => clk,                         --! тактовая частота ядра - 250 MHz 
714
 
715
                trn_tx                  => trn_tx,                      --! передача пакета
716
                trn_tx_back             => trn_tx_back,         --! готовность к передаче пакета
717
 
718
                completer_id    => completer_id,        --! идентификатор устройства 
719
 
720
                cfg_interrupt                   => cfg_interrupt_n,             -- 0 - изменение состояния прерывания
721
                cfg_interrupt_assert    => cfg_interrupt_assert_n,      -- 0 - формирование прерывания, 1 - сниятие прерывания 
722
                cfg_interrupt_rdy               => cfg_interrupt_rdy_n,         -- 0 - подтверждение изменения прерывания 
723
 
724
                reg_access_back => reg_access_back,     --! запрос на доступ к регистрам 
725
 
726
                rx_tx_engine    => rx_tx_engine,        --! обмен RX->TX 
727
                tx_rx_engine    => tx_rx_engine,        --! обмен TX->RX 
728
 
729
                tx_ext_fifo             => tx_ext_fifo,         --! обмен TX->EXT_FIFO 
730
                tx_ext_fifo_back=> tx_ext_fifo_back --! обмен TX->EXT_FIFO 
731
 
732
        );
733
 
734
  completer_id     <= (cfg_bus_number &
735
                       cfg_device_number &
736
                       cfg_function_number );
737
 
738
 
739
 reg: core64_reg_access
740
        port map(
741
                --- General ---
742
                rstp                            => rstp,        --! 1 - сброс 
743
                clk                                     => clk,         --! тактовая частота ядра - 250 MHz 
744
 
745
                --- RX_ENGINE ---- 
746
                reg_access                      => reg_access,  --! запрос на доступ к регистрам 
747
 
748
                --- TX_ENGINE ----
749
                reg_access_back         => reg_access_back,     --! ответ на запрос 
750
 
751
                ---- PB_DISP ----
752
                reg_disp                        => reg_disp,            --! запрос на доступ к регистрам из BAR1 
753
                reg_disp_back           => reg_disp_back,       --! ответ на запрос 
754
 
755
                ---- BLOCK EXT_FIFO ----
756
                reg_ext_fifo            => reg_ext_fifo,                --! запрос на доступ к блокам управления EXT_FIFO 
757
                reg_ext_fifo_back       => reg_ext_fifo_back,   --! ответ на запрос 
758
 
759
                ---- BAR0 - блоки управления ----
760
                bp_host_data            => bp_host_data,        --! шина данных - выход 
761
                bp_data                         => bp_data,                     --! шина данных - вход
762
                bp_adr                          => bp_adr,                      --! адрес регистра 
763
                bp_we                           => bp_we,                       --! 1 - запись в регистры 
764
                bp_rd                           => bp_rd,                       --! 1 - чтение из регистров блока 
765
                bp_sel                          => bp_sel,                      --! номер блока для чтения 
766
                bp_reg_we                       => bp_reg_we,           --! 1 - запись в регистр по адресам   0x100000 - 0x1FFFFF 
767
                bp_reg_rd                       => bp_reg_rd,           --! 1 - чтение из регистра по адресам 0x100000 - 0x1FFFFF 
768
                bp_irq                          => bp_irq                       --! 1 - запрос прерывания 
769
        );
770
 
771
 
772
 disp: core64_pb_disp
773
        port map(
774
                --- General ---
775
                rstp                            => pb_rstp,             --! 1 - сброс 
776
                clk                                     => clk,                 --! тактовая частота ядра - 250 MHz 
777
 
778
                ---- PB_DISP ----
779
                reg_disp                        => reg_disp,            --! запрос на доступ к регистрам из BAR1 
780
                reg_disp_back           => reg_disp_back,       --! ответ на запрос 
781
 
782
                ---- EXT_FIFO ----
783
                ext_fifo_disp           => ext_fifo_disp,               --! запрос на доступ от узла EXT_FIFO 
784
                ext_fifo_disp_back      => ext_fifo_disp_back,  --! ответ на запрос
785
 
786
                ---- BAR1 ----  
787
                aclk                            => aclk,                                --! тактовая частота локальной шины - 266 МГц
788
                pb_master                       => pb_master,                   --! запрос 
789
                pb_slave                        => pb_slave                             --! ответ  
790
 
791
        );
792
 
793
 
794
 
795
fifo: block_pe_fifo_ext
796
        port map(
797
 
798
                ---- Global ----         
799
                rstp                             => pb_rstp,
800
                clk                                      => clk,
801
                aclk                             => aclk,
802
 
803
                ---- TX_ENGINE ----      
804
                tx_ext_fifo                      => tx_ext_fifo,
805
                tx_ext_fifo_back         => tx_ext_fifo_back,
806
 
807
                ---- RX_ENGINE ----      
808
                rx_ext_fifo                      => rx_ext_fifo,
809
 
810
                ---- REG ----            
811
                reg_ext_fifo             => reg_ext_fifo,
812
                reg_ext_fifo_back        => reg_ext_fifo_back,
813
 
814
                ---- DISP  ----          
815
                ext_fifo_disp            => ext_fifo_disp,
816
                ext_fifo_disp_back       => ext_fifo_disp_back,
817
 
818
                irq                                      => irq,                                -- 1 - запрос прерывания
819
 
820
                test                            => px
821
        );
822
 
823
 
824
 
825
 
826
 int: core64_interrupt
827
        port map(
828
 
829
                rstp                                    => pb_rstp,                                     -- 1 - сброс
830
                clk                                             => clk,                                         -- Тактовая частота ядра 250 МГц
831
 
832
                irq                                             => irq,                                         -- 1 - запрос прерывания
833
 
834
                cfg_command10                   => cfg_command(10),                     -- 1 - прерывания запрещены 
835
                cfg_interrupt                   => cfg_interrupt_n,             -- 0 - изменение состояния прерывания
836
                cfg_interrupt_assert    => cfg_interrupt_assert_n,      -- 0 - формирование прерывания, 1 - сниятие прерывания 
837
                cfg_interrupt_rdy               => cfg_interrupt_rdy_n          -- 0 - подтверждение изменения прерывания 
838
 
839
        );
840
 
841
--cfg_interrupt <= not cfg_interrupt_n; 
842
--cfg_interrupt_assert <= not cfg_interrupt_assert_n;
843
--cfg_interrupt_rdy_n <= not cfg_interrupt_rdy; 
844
 
845
cfg_interrupt <= '0';
846
cfg_interrupt_assert <= '0';
847
--      cfg_interrupt_n_c <= '1';
848
--      cfg_interrupt_assert_n_c <= '1';
849
 
850
end pcie_core64_m4;

powered by: WebSVN 2.1.0

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