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/] [components/] [pcie_core/] [pcie_core64_wishbone.vhd] - Blame information for rev 38

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 dsmv
-------------------------------------------------------------------------------
2
--
3
-- Title       : pcie_core64_wishbone
4
-- Author      : Dmitry Smekhov
5
-- Company     : Instrumental Systems
6
-- E-mail      : dsmv@insys.ru
7
--
8
-- Version     : 1.0
9
--
10
-------------------------------------------------------------------------------
11
--
12
-- Description :  Контроллер PCI Express
13
--                                Модификация Wishbone - Spartan-6 PCI Express v1.1 x1
14
--                                Шина Wishbone 64 разряда
15
--                                Блок PE_MAIN 
16
--
17
-------------------------------------------------------------------------------
18
-- 
19
-- Version 1.1 (15.10.2011) :   Kuzmi4
20
--          Construct Module Architecture for WB bus : CORE64_M6 + PE_MAIN + PB_WB_BRIDGE
21
-- 
22
-- Version 1.2 (16.10.2011) :   Kuzmi4
23
--          Del PE_MAIN - useless module
24
--
25
-- Version 1.3 (19.10.2011) :   dsmv
26
--          return PE_MAIN to design (software driver req this module for correct WRK: req constants)
27
-- 
28
-------------------------------------------------------------------------------
29
library ieee;
30
use ieee.std_logic_1164.all;
31
 
32
package pcie_core64_wishbone_pkg is
33
 
34
component pcie_core64_wishbone is
35
generic
36
(
37
    Device_ID       : in std_logic_vector( 15 downto 0 ):=x"0000";  -- идентификатор модуля
38
    Revision        : in std_logic_vector( 15 downto 0 ):=x"0000";  -- версия модуля
39
    PLD_VER         : in std_logic_vector( 15 downto 0 ):=x"0000";  -- версия ПЛИС
40
 
41
    is_simulation   : integer:=0                                    --! 0 - синтез, 1 - моделирование 
42
);
43
port
44
(
45
    ---- PCI-Express ----
46
    txp             : out std_logic_vector( 0 downto 0 );
47
    txn             : out std_logic_vector( 0 downto 0 );
48
 
49
    rxp             : in  std_logic_vector( 0 downto 0 );
50
    rxn             : in  std_logic_vector( 0 downto 0 );
51
 
52
    mgt125          : in  std_logic;    -- тактовая частота 125 MHz от PCI_Express
53
 
54
    perst           : in  std_logic;    -- 0 - сброс 
55
 
56
    px              : out std_logic_vector( 7 downto 0 );   --! контрольные точки 
57
 
58
    pcie_lstatus    : out std_logic_vector( 15 downto 0 );  -- регистр LSTATUS
59
    pcie_link_up    : out std_logic;                        -- 0 - завершена инициализация PCI-Express
60
 
61
    ---- Wishbone SYS_CON -----
62
    o_wb_clk        :   out std_logic;
63
    o_wb_rst        :   out std_logic;
64
    ---- Wishbone BUS -----
65
    ov_wbm_addr     :   out std_logic_vector(31 downto 0);
66
    ov_wbm_data     :   out std_logic_vector(63 downto 0);
67
    ov_wbm_sel      :   out std_logic_vector( 7 downto 0);
68
    o_wbm_we        :   out std_logic;
69
    o_wbm_cyc       :   out std_logic;
70
    o_wbm_stb       :   out std_logic;
71
    ov_wbm_cti      :   out std_logic_vector( 2 downto 0);  -- Cycle Type Identifier Address Tag
72
    ov_wbm_bte      :   out std_logic_vector( 1 downto 0);  -- Burst Type Extension Address Tag
73
 
74
    iv_wbm_data     :   in  std_logic_vector(63 downto 0);
75
    i_wbm_ack       :   in  std_logic;
76
    i_wbm_err       :   in  std_logic;                      -- error input - abnormal cycle termination
77
    i_wbm_rty       :   in  std_logic;                      -- retry input - interface is not ready
78
 
79
    i_wdm_irq_0     :   in  std_logic;
80
    iv_wbm_irq_dmar :   in  std_logic_vector( 1 downto 0)
81
 
82
);
83
end component pcie_core64_wishbone;
84
 
85
end package pcie_core64_wishbone_pkg;
86
-------------------------------------------------------------------------------
87
library ieee;
88
use ieee.std_logic_1164.all;
89
 
90
use work.core64_type_pkg.all;
91
use work.pcie_core64_m6_pkg.all;
92
use work.core64_pb_wishbone_pkg.all;
93
use work.block_pe_main_pkg.all;
94
 
95
entity pcie_core64_wishbone is
96
generic
97
(
98
    Device_ID       : in std_logic_vector( 15 downto 0 ):=x"0000";  -- идентификатор модуля
99
    Revision        : in std_logic_vector( 15 downto 0 ):=x"0000";  -- версия модуля
100
    PLD_VER         : in std_logic_vector( 15 downto 0 ):=x"0000";  -- версия ПЛИС
101
 
102
    is_simulation   : integer:=0                                    --! 0 - синтез, 1 - моделирование 
103
);
104
port
105
(
106
    ---- PCI-Express ----
107
    txp             : out std_logic_vector( 0 downto 0 );
108
    txn             : out std_logic_vector( 0 downto 0 );
109
 
110
    rxp             : in  std_logic_vector( 0 downto 0 );
111
    rxn             : in  std_logic_vector( 0 downto 0 );
112
 
113
    mgt125          : in  std_logic;    -- тактовая частота 125 MHz от PCI_Express
114
 
115
    perst           : in  std_logic;    -- 0 - сброс 
116
 
117
    px              : out std_logic_vector( 7 downto 0 );   --! контрольные точки 
118
 
119
    pcie_lstatus    : out std_logic_vector( 15 downto 0 );  -- регистр LSTATUS
120
    pcie_link_up    : out std_logic;                        -- 0 - завершена инициализация PCI-Express
121
 
122
    ---- Wishbone SYS_CON -----
123
    o_wb_clk        :   out std_logic;
124
    o_wb_rst        :   out std_logic;
125
    ---- Wishbone BUS -----
126
    ov_wbm_addr     :   out std_logic_vector(31 downto 0);
127
    ov_wbm_data     :   out std_logic_vector(63 downto 0);
128
    ov_wbm_sel      :   out std_logic_vector( 7 downto 0);
129
    o_wbm_we        :   out std_logic;
130
    o_wbm_cyc       :   out std_logic;
131
    o_wbm_stb       :   out std_logic;
132
    ov_wbm_cti      :   out std_logic_vector( 2 downto 0);  -- Cycle Type Identifier Address Tag
133
    ov_wbm_bte      :   out std_logic_vector( 1 downto 0);  -- Burst Type Extension Address Tag
134
 
135
    iv_wbm_data     :   in  std_logic_vector(63 downto 0);
136
    i_wbm_ack       :   in  std_logic;
137
    i_wbm_err       :   in  std_logic;                      -- error input - abnormal cycle termination
138
    i_wbm_rty       :   in  std_logic;                      -- retry input - interface is not ready
139
 
140
    i_wdm_irq_0     :   in  std_logic;
141
    iv_wbm_irq_dmar :   in  std_logic_vector( 1 downto 0)
142
 
143
);
144
end pcie_core64_wishbone;
145
 
146
architecture pcie_core64_wishbone of pcie_core64_wishbone is
147
-------------------------------------------------------------------------------
148
--
149
-- BAR0 - блоки управления ----
150
signal  bp_host_data    : std_logic_vector( 31 downto 0 );       --! шина данных - выход 
151
signal  bp_data                 : std_logic_vector( 31 downto 0 );  --! шина данных - вход
152
signal  bp_adr                  : std_logic_vector( 19 downto 0 );       --! адрес регистра внутри блока 
153
signal  bp_we                   : std_logic_vector( 3 downto 0 );        --! 1 - запись в регистры 
154
signal  bp_rd                   : std_logic_vector( 3 downto 0 );   --! 1 - чтение из регистров блока 
155
signal  bp_sel                  : std_logic_vector( 1 downto 0 );        --! номер блока для чтения 
156
signal  bp_reg_we               : std_logic;                    --! 1 - запись в регистр по адресам   0x100000 - 0x1FFFFF 
157
signal  bp_reg_rd               : std_logic;                    --! 1 - чтение из регистра по адресам 0x100000 - 0x1FFFFF 
158
signal  bp_irq                  : std_logic;                                            --! 1 - запрос прерывания 
159
 
160
signal  pb_master               : type_pb_master;               --! запрос 
161
signal  pb_slave                : type_pb_slave;                --! ответ  
162
 
163
signal  pb_reset                : std_logic;
164
signal  brd_mode                : std_logic_vector( 15 downto 0 );
165
 
166
signal  bp0_data                : std_logic_vector( 31 downto 0 );
167
-------------------------------------------------------------------------------
168
--
169
-- Declare Global SYS_CON stuff:
170 38 dsmv
signal  clk                     : std_logic;
171
signal  reset                   : std_logic;
172
signal  dcm_rst                 : std_logic;
173
signal  reset_p                 : std_logic;
174
signal  reset_p_z1              : std_logic;
175
signal  reset_p_z2              : std_logic;
176 2 dsmv
-------------------------------------------------------------------------------
177
begin
178
-------------------------------------------------------------------------------
179
--
180
-- Instantiate CORE64_M6 module with PB BUS:
181
--
182
CORE    :   pcie_core64_m6
183
generic map
184
(
185
    is_simulation   => is_simulation    --! 0 - синтез, 1 - моделирование 
186
)
187
port map
188
(
189
    ---- PCI-Express ----
190
    txp             => txp,
191
    txn             => txn,
192
 
193
    rxp             => rxp,
194
    rxn             => rxn,
195
 
196
    mgt125          => mgt125,
197
 
198
    perst           => perst,
199
 
200
    px              => px,
201
 
202
    pcie_lstatus    => pcie_lstatus,
203
    pcie_link_up    => pcie_link_up,
204
 
205
    ---- Локальная шина ----
206 38 dsmv
    clk_out         => clk,             -- S6 PCIE x1 module clock output
207
    reset_out       => reset,           -- 
208
    dcm_rstp        => dcm_rst,         -- S6 PCIE x1 module INV trn_reset_n_c
209 2 dsmv
 
210
    ---- BAR1 (PB bus) ----
211 38 dsmv
    aclk            => clk,  -- !!! same clock as clk_out
212 2 dsmv
    aclk_lock       => '1',             -- 
213
    pb_master       => pb_master,       --
214
    pb_slave        => pb_slave,        -- 
215
 
216
    ---- BAR0 (to PE_MAIN) - блоки управления ----
217
    bp_host_data    => bp_host_data,
218
    bp_data         => bp_data,
219
    bp_adr          => bp_adr,
220
    bp_we           => bp_we,
221
    bp_rd           => bp_rd,
222
    bp_sel          => bp_sel,
223
    bp_reg_we       => bp_reg_we,
224
    bp_reg_rd       => bp_reg_rd,
225
    bp_irq          => bp_irq
226
 
227
);
228
-- Deal with CORE BP Input data:
229
bp_data <= bp0_data when bp_sel="00" else (others=>'0');
230
-------------------------------------------------------------------------------
231
--
232
-- Instantiate PE_MAIN module:
233
--
234
PE_MAIN    :   block_pe_main
235
generic map
236
(
237
    Device_ID       => Device_ID,   -- идентификатор модуля
238
    Revision        => Revision,    -- версия модуля
239
    PLD_VER         => PLD_VER,     -- версия ПЛИС
240
    BLOCK_CNT       => x"0008"      -- число блоков управления 
241
)
242
port map
243
(
244
    ---- Global ----
245 38 dsmv
    reset_hr1       => reset,     -- 0 - сброс
246
    clk             => clk,  -- Тактовая частота PCIE x1 S6
247 2 dsmv
    pb_reset        => pb_reset,        -- 0 - сброс ведомой ПЛИС
248
 
249
    ---- HOST ----
250
    bl_adr          => bp_adr( 4 downto 0 ),    -- адрес
251
    bl_data_in      => bp_host_data,            -- данные
252
    bl_data_out     => bp0_data,                -- данные
253
    bl_data_we      => bp_we(0),                -- 1 - запись данных   
254
 
255
    ---- Управление ----
256
    brd_mode        => brd_mode                 -- регистр BRD_MODE
257
 
258 38 dsmv
);
259
 
260
 
261
reset_p <= (not reset) or (not brd_mode(3));
262
reset_p_z1 <= reset_p    after 1 ns when rising_edge( clk );
263
reset_p_z2 <= reset_p_z1 after 1 ns when rising_edge( clk );
264
 
265 2 dsmv
-------------------------------------------------------------------------------
266
--
267
-- Instantiate PB BUS <-> WB BUS translator module:
268
--
269
PW_WB   :   core64_pb_wishbone
270
port map
271
(
272 38 dsmv
    reset           => reset_p_z2,      --! 1 - сброс
273
    clk             => clk,                     --! тактовая частота локальной шины 
274 2 dsmv
 
275
    ---- BAR1 ----
276
    pb_master       => pb_master,       --! запрос 
277
    pb_slave        => pb_slave,        --! ответ  
278
 
279
    ---- Wishbone BUS -----
280
    ov_wbm_addr     => ov_wbm_addr,
281
    ov_wbm_data     => ov_wbm_data,
282
    ov_wbm_sel      => ov_wbm_sel,
283
    o_wbm_we        => o_wbm_we,
284
    o_wbm_cyc       => o_wbm_cyc,
285
    o_wbm_stb       => o_wbm_stb,
286
    ov_wbm_cti      => ov_wbm_cti,      -- Cycle Type Identifier Address Tag
287
    ov_wbm_bte      => ov_wbm_bte,      -- Burst Type Extension Address Tag
288
 
289
    iv_wbm_data     => iv_wbm_data,
290
    i_wbm_ack       => i_wbm_ack,
291
    i_wbm_err       => i_wbm_err,       -- error input - abnormal cycle termination
292
    i_wbm_rty       => i_wbm_rty,       -- retry input - interface is not ready
293
 
294
    i_wdm_irq_0     => i_wdm_irq_0,
295
    iv_wbm_irq_dmar => iv_wbm_irq_dmar
296
);
297
-------------------------------------------------------------------------------
298
--
299
-- Module Output route:
300
--
301 38 dsmv
o_wb_clk    <= clk;  -- route from PW_WB wrk clock
302 2 dsmv
--
303 38 dsmv
 
304
pr_o_wb_rst: process( reset_p, clk ) begin
305
        if( reset_p='1' ) then
306
                o_wb_rst <= '1' after 1 ns;
307
        elsif( rising_edge( clk ) ) then
308
                o_wb_rst <= reset_p_z2 after 1 ns;
309
        end if;
310
end process;
311
 
312
 
313 2 dsmv
-------------------------------------------------------------------------------
314
end pcie_core64_wishbone;

powered by: WebSVN 2.1.0

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