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 40

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 40 dsmv
-- Version     : 1.4
9 2 dsmv
--
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 40 dsmv
use work.block_pe_main_pkg.all;
94 2 dsmv
 
95 40 dsmv
library unisim;
96
use unisim.vcomponents.all;
97
 
98 2 dsmv
entity pcie_core64_wishbone is
99
generic
100
(
101
    Device_ID       : in std_logic_vector( 15 downto 0 ):=x"0000";  -- идентификатор модуля
102
    Revision        : in std_logic_vector( 15 downto 0 ):=x"0000";  -- версия модуля
103
    PLD_VER         : in std_logic_vector( 15 downto 0 ):=x"0000";  -- версия ПЛИС
104
 
105
    is_simulation   : integer:=0                                    --! 0 - синтез, 1 - моделирование 
106
);
107
port
108
(
109
    ---- PCI-Express ----
110
    txp             : out std_logic_vector( 0 downto 0 );
111
    txn             : out std_logic_vector( 0 downto 0 );
112
 
113
    rxp             : in  std_logic_vector( 0 downto 0 );
114
    rxn             : in  std_logic_vector( 0 downto 0 );
115
 
116
    mgt125          : in  std_logic;    -- тактовая частота 125 MHz от PCI_Express
117
 
118
    perst           : in  std_logic;    -- 0 - сброс 
119
 
120
    px              : out std_logic_vector( 7 downto 0 );   --! контрольные точки 
121
 
122
    pcie_lstatus    : out std_logic_vector( 15 downto 0 );  -- регистр LSTATUS
123
    pcie_link_up    : out std_logic;                        -- 0 - завершена инициализация PCI-Express
124
 
125
    ---- Wishbone SYS_CON -----
126
    o_wb_clk        :   out std_logic;
127
    o_wb_rst        :   out std_logic;
128
    ---- Wishbone BUS -----
129
    ov_wbm_addr     :   out std_logic_vector(31 downto 0);
130
    ov_wbm_data     :   out std_logic_vector(63 downto 0);
131
    ov_wbm_sel      :   out std_logic_vector( 7 downto 0);
132
    o_wbm_we        :   out std_logic;
133
    o_wbm_cyc       :   out std_logic;
134
    o_wbm_stb       :   out std_logic;
135
    ov_wbm_cti      :   out std_logic_vector( 2 downto 0);  -- Cycle Type Identifier Address Tag
136
    ov_wbm_bte      :   out std_logic_vector( 1 downto 0);  -- Burst Type Extension Address Tag
137
 
138
    iv_wbm_data     :   in  std_logic_vector(63 downto 0);
139
    i_wbm_ack       :   in  std_logic;
140
    i_wbm_err       :   in  std_logic;                      -- error input - abnormal cycle termination
141
    i_wbm_rty       :   in  std_logic;                      -- retry input - interface is not ready
142
 
143
    i_wdm_irq_0     :   in  std_logic;
144
    iv_wbm_irq_dmar :   in  std_logic_vector( 1 downto 0)
145
 
146
);
147
end pcie_core64_wishbone;
148
 
149
architecture pcie_core64_wishbone of pcie_core64_wishbone is
150
-------------------------------------------------------------------------------
151
--
152
-- BAR0 - блоки управления ----
153
signal  bp_host_data    : std_logic_vector( 31 downto 0 );       --! шина данных - выход 
154
signal  bp_data                 : std_logic_vector( 31 downto 0 );  --! шина данных - вход
155
signal  bp_adr                  : std_logic_vector( 19 downto 0 );       --! адрес регистра внутри блока 
156
signal  bp_we                   : std_logic_vector( 3 downto 0 );        --! 1 - запись в регистры 
157
signal  bp_rd                   : std_logic_vector( 3 downto 0 );   --! 1 - чтение из регистров блока 
158
signal  bp_sel                  : std_logic_vector( 1 downto 0 );        --! номер блока для чтения 
159
signal  bp_reg_we               : std_logic;                    --! 1 - запись в регистр по адресам   0x100000 - 0x1FFFFF 
160
signal  bp_reg_rd               : std_logic;                    --! 1 - чтение из регистра по адресам 0x100000 - 0x1FFFFF 
161
signal  bp_irq                  : std_logic;                                            --! 1 - запрос прерывания 
162
 
163
signal  pb_master               : type_pb_master;               --! запрос 
164
signal  pb_slave                : type_pb_slave;                --! ответ  
165
 
166
signal  pb_reset                : std_logic;
167
signal  brd_mode                : std_logic_vector( 15 downto 0 );
168
 
169
signal  bp0_data                : std_logic_vector( 31 downto 0 );
170
-------------------------------------------------------------------------------
171
--
172
-- Declare Global SYS_CON stuff:
173 38 dsmv
signal  clk                     : std_logic;
174
signal  reset                   : std_logic;
175
signal  dcm_rst                 : std_logic;
176
signal  reset_p                 : std_logic;
177
signal  reset_p_z1              : std_logic;
178 40 dsmv
signal  reset_p_z2              : std_logic;
179
 
180
signal  clk62x                  : std_logic:='0';
181
signal  clk62                   : std_logic;
182
 
183 2 dsmv
-------------------------------------------------------------------------------
184
begin
185
-------------------------------------------------------------------------------
186
--
187
-- Instantiate CORE64_M6 module with PB BUS:
188
--
189
CORE    :   pcie_core64_m6
190
generic map
191
(
192
    is_simulation   => is_simulation    --! 0 - синтез, 1 - моделирование 
193
)
194
port map
195
(
196
    ---- PCI-Express ----
197
    txp             => txp,
198
    txn             => txn,
199
 
200
    rxp             => rxp,
201
    rxn             => rxn,
202
 
203
    mgt125          => mgt125,
204
 
205
    perst           => perst,
206
 
207
    px              => px,
208
 
209
    pcie_lstatus    => pcie_lstatus,
210
    pcie_link_up    => pcie_link_up,
211
 
212
    ---- Локальная шина ----
213 38 dsmv
    clk_out         => clk,             -- S6 PCIE x1 module clock output
214
    reset_out       => reset,           -- 
215
    dcm_rstp        => dcm_rst,         -- S6 PCIE x1 module INV trn_reset_n_c
216 2 dsmv
 
217
    ---- BAR1 (PB bus) ----
218 40 dsmv
    aclk            => clk62,           -- clock for local bus
219 2 dsmv
    aclk_lock       => '1',             -- 
220
    pb_master       => pb_master,       --
221
    pb_slave        => pb_slave,        -- 
222
 
223
    ---- BAR0 (to PE_MAIN) - блоки управления ----
224
    bp_host_data    => bp_host_data,
225
    bp_data         => bp_data,
226
    bp_adr          => bp_adr,
227
    bp_we           => bp_we,
228
    bp_rd           => bp_rd,
229
    bp_sel          => bp_sel,
230
    bp_reg_we       => bp_reg_we,
231
    bp_reg_rd       => bp_reg_rd,
232
    bp_irq          => bp_irq
233
 
234
);
235
-- Deal with CORE BP Input data:
236
bp_data <= bp0_data when bp_sel="00" else (others=>'0');
237
-------------------------------------------------------------------------------
238
--
239
-- Instantiate PE_MAIN module:
240
--
241
PE_MAIN    :   block_pe_main
242
generic map
243
(
244
    Device_ID       => Device_ID,   -- идентификатор модуля
245
    Revision        => Revision,    -- версия модуля
246
    PLD_VER         => PLD_VER,     -- версия ПЛИС
247
    BLOCK_CNT       => x"0008"      -- число блоков управления 
248
)
249
port map
250
(
251
    ---- Global ----
252 38 dsmv
    reset_hr1       => reset,     -- 0 - сброс
253
    clk             => clk,  -- Тактовая частота PCIE x1 S6
254 2 dsmv
    pb_reset        => pb_reset,        -- 0 - сброс ведомой ПЛИС
255
 
256
    ---- HOST ----
257
    bl_adr          => bp_adr( 4 downto 0 ),    -- адрес
258
    bl_data_in      => bp_host_data,            -- данные
259
    bl_data_out     => bp0_data,                -- данные
260
    bl_data_we      => bp_we(0),                -- 1 - запись данных   
261
 
262
    ---- Управление ----
263
    brd_mode        => brd_mode                 -- регистр BRD_MODE
264
 
265 38 dsmv
);
266
 
267
 
268 40 dsmv
clk62x <= not clk62x after 1 ns when rising_edge( clk );
269
xclk62: bufg port map( clk62, clk62x );
270
 
271 38 dsmv
reset_p <= (not reset) or (not brd_mode(3));
272 40 dsmv
reset_p_z1 <= reset_p    after 1 ns when rising_edge( clk62 );
273
reset_p_z2 <= reset_p_z1 after 1 ns when rising_edge( clk62 );
274 38 dsmv
 
275 2 dsmv
-------------------------------------------------------------------------------
276
--
277
-- Instantiate PB BUS <-> WB BUS translator module:
278
--
279
PW_WB   :   core64_pb_wishbone
280
port map
281
(
282 38 dsmv
    reset           => reset_p_z2,      --! 1 - сброс
283 40 dsmv
    clk             => clk62,                   --! тактовая частота локальной шины 
284 2 dsmv
 
285
    ---- BAR1 ----
286
    pb_master       => pb_master,       --! запрос 
287
    pb_slave        => pb_slave,        --! ответ  
288
 
289
    ---- Wishbone BUS -----
290
    ov_wbm_addr     => ov_wbm_addr,
291
    ov_wbm_data     => ov_wbm_data,
292
    ov_wbm_sel      => ov_wbm_sel,
293
    o_wbm_we        => o_wbm_we,
294
    o_wbm_cyc       => o_wbm_cyc,
295
    o_wbm_stb       => o_wbm_stb,
296
    ov_wbm_cti      => ov_wbm_cti,      -- Cycle Type Identifier Address Tag
297
    ov_wbm_bte      => ov_wbm_bte,      -- Burst Type Extension Address Tag
298
 
299
    iv_wbm_data     => iv_wbm_data,
300
    i_wbm_ack       => i_wbm_ack,
301
    i_wbm_err       => i_wbm_err,       -- error input - abnormal cycle termination
302
    i_wbm_rty       => i_wbm_rty,       -- retry input - interface is not ready
303
 
304
    i_wdm_irq_0     => i_wdm_irq_0,
305
    iv_wbm_irq_dmar => iv_wbm_irq_dmar
306
);
307
-------------------------------------------------------------------------------
308
--
309
-- Module Output route:
310
--
311 40 dsmv
o_wb_clk    <= clk62;  -- route from PW_WB wrk clock
312 2 dsmv
--
313 38 dsmv
 
314 40 dsmv
pr_o_wb_rst: process( reset_p, clk62 ) begin
315 38 dsmv
        if( reset_p='1' ) then
316
                o_wb_rst <= '1' after 1 ns;
317 40 dsmv
        elsif( rising_edge( clk62 ) ) then
318 38 dsmv
                o_wb_rst <= reset_p_z2 after 1 ns;
319
        end if;
320
end process;
321
 
322
 
323 2 dsmv
-------------------------------------------------------------------------------
324
end pcie_core64_wishbone;

powered by: WebSVN 2.1.0

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