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/] [pcie_fifo_ext/] [ctrl_ext_ram.vhd] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 dsmv
-------------------------------------------------------------------------------
2
--
3
-- Title       : ctrl_ext_ram
4
-- Author      : Dmitry Smekhov
5
-- Company     : Instrumental Systems
6
-- E-mail      : dsmv@insys.ru
7
--
8
-- Version     : 1.2
9
--
10
-------------------------------------------------------------------------------
11
--
12
-- Description : Узел двухпортовой памяти
13
--                               Со стороны шины PLD_BUS - FIFO
14
--                               Со стороны шины PCI_Express - память
15
--
16
-------------------------------------------------------------------------------
17
--
18
--  Version 1.2  06.12.2011
19
--                               Добавлен local_adr_we для ctrl_ram_cmd 
20
--
21
-------------------------------------------------------------------------------
22
--
23
--  Version 1.1  05.04.2010
24
--                               Добавлен параметр is_dsp48 - разрешение использования
25
--                               блоков DSP48
26
--
27
-------------------------------------------------------------------------------
28
 
29
library ieee;
30
use ieee.std_logic_1164.all;
31
 
32
library work;
33
use work.core64_type_pkg.all;
34
 
35
package ctrl_ext_ram_pkg is
36
 
37
component ctrl_ext_ram is
38
        generic(
39
                is_dsp48                : in integer:=1         -- 1 - использовать DSP48, 0 - не использовать DSP48
40
        );
41
        port(
42
 
43
                ---- Global ----
44
                reset                           : in std_logic; -- 0 - сброс
45
                clk                                     : in std_logic;         --! Тактовая частота ядра - 250 МГц
46
                aclk                            : in std_logic;         --! Тактовая частота локальной шины - 266 МГц
47
 
48
                ---- ctrl_main ----
49
                ram_change                      : in std_logic; -- 1 - изменение блока памяти
50
                loc_adr_we                      : in std_logic; -- 1 - запись локального адреса
51
                data_in                         : in std_logic_vector( 31 downto 0 ); -- шина данных памяти
52
                dma_chn                         : in std_logic;         -- номер канала DMA
53
 
54
 
55
                ---- Регистры управления ----
56
                dma0_ctrl                       : in std_logic_vector( 7 downto 0 );     -- Регистр DMA_CTRL, канал 0
57
                dma1_ctrl                       : in std_logic_vector( 7 downto 0 );     -- Регистр DMA_CTRL, канал 0
58
 
59
 
60
                dma0_transfer_rdy       : out std_logic;        -- 1 - канал 0 готов к обмену
61
                dma1_transfer_rdy       : out std_logic;        -- 1 - канал 1 готов к обмену
62
 
63
 
64
                ---- PCI-Express ----
65
                dma_wr_en                       : in std_logic;         -- 1 - разрешение записи по DMA
66
                dma_wr                          : in std_logic;         -- 1 - запись по шине wr_data
67
                dma_wrdata                      : in std_logic_vector( 63 downto 0 );    -- данные DMA
68
                dma_wraddr                      : in std_logic_vector( 11 downto 0 );
69
 
70
                dma_rddata                      : out std_logic_vector( 63 downto 0 );   -- данные FIFO
71
                dma_rdaddr                      : in  std_logic_vector( 11 downto 0 );   -- адрес данных
72
 
73
                ---- DISP  ----
74
                ext_fifo_disp           : out type_ext_fifo_disp;               --! запрос на доступ от узла EXT_FIFO 
75
                ext_fifo_disp_back      : in  type_ext_fifo_disp_back   --! ответ на запрос
76
 
77
        );
78
end component;
79
 
80
end package;
81
 
82
 
83
library ieee;
84
use ieee.std_logic_1164.all;
85
use ieee.std_logic_arith.all;
86
use ieee.std_logic_unsigned.all;
87
 
88
library unisim;
89
use unisim.vcomponents.all;
90
 
91
library work;
92
use work.core64_type_pkg.all;
93
 
94
 
95
 
96
use work.ctrl_ram_cmd_pkg.all;
97
 
98
entity ctrl_ext_ram is
99
        generic(
100
                is_dsp48                        : in integer:=1         -- 1 - использовать DSP48, 0 - не использовать DSP48
101
        );
102
        port(
103
 
104
                ---- Global ----
105
                reset                           : in std_logic; -- 0 - сброс
106
                clk                                     : in std_logic;         --! Тактовая частота ядра - 250 МГц
107
                aclk                            : in std_logic;         --! Тактовая частота локальной шины - 266 МГц
108
 
109
                ---- ctrl_main ----
110
                ram_change                      : in std_logic; -- 1 - изменение блока памяти
111
                loc_adr_we                      : in std_logic; -- 1 - запись локального адреса
112
                data_in                         : in std_logic_vector( 31 downto 0 ); -- шина данных памяти
113
                dma_chn                         : in std_logic;         -- номер канала DMA
114
 
115
 
116
                ---- Регистры управления ----
117
                dma0_ctrl                       : in std_logic_vector( 7 downto 0 );     -- Регистр DMA_CTRL, канал 0
118
                dma1_ctrl                       : in std_logic_vector( 7 downto 0 );     -- Регистр DMA_CTRL, канал 0
119
 
120
 
121
                dma0_transfer_rdy       : out std_logic;        -- 1 - канал 0 готов к обмену
122
                dma1_transfer_rdy       : out std_logic;        -- 1 - канал 1 готов к обмену
123
 
124
 
125
                ---- PCI-Express ----
126
                dma_wr_en                       : in std_logic;         -- 1 - разрешение записи по DMA
127
                dma_wr                          : in std_logic;         -- 1 - запись по шине wr_data
128
                dma_wrdata                      : in std_logic_vector( 63 downto 0 );    -- данные DMA
129
                dma_wraddr                      : in std_logic_vector( 11 downto 0 );
130
 
131
                dma_rddata                      : out std_logic_vector( 63 downto 0 );   -- данные FIFO
132
                dma_rdaddr                      : in  std_logic_vector( 11 downto 0 );   -- адрес данных
133
 
134
                ---- DISP  ----
135
                ext_fifo_disp           : out type_ext_fifo_disp;               --! запрос на доступ от узла EXT_FIFO 
136
                ext_fifo_disp_back      : in  type_ext_fifo_disp_back   --! ответ на запрос
137
 
138
        );
139
end ctrl_ext_ram;
140
 
141
 
142
architecture ctrl_ext_ram of ctrl_ext_ram is
143
 
144
--signal        reg_write               : std_logic;
145
--signal        reg_write_C1    : std_logic;
146
--signal        reg_write_C2    : std_logic;
147
--signal        reg_write_C4    : std_logic;
148
--signal        reg_write_C8    : std_logic;
149
--signal        reg_write_D0    : std_logic;
150
--signal        reg_write_E0    : std_logic;
151
 
152
signal  reg_ch0_ctrl    : std_logic_vector( 7 downto 0 );
153
signal  reg_ch1_ctrl    : std_logic_vector( 7 downto 0 );
154
 
155
signal  pf_chn                  : std_logic;
156
 
157
signal  ram_adra                : std_logic_vector( 10 downto 0 );
158
signal  ram_adrb                : std_logic_vector( 10 downto 0 );
159
 
160
signal  ram_we_a                : std_logic;
161
signal  ram_we_b                : std_logic;
162
 
163
signal  pf_repack_di    : std_logic_vector( 63 downto 0 );
164
 
165
signal  pf_adr                  : std_logic_vector( 31 downto 0 );
166
signal  pf_ram_rd               : std_logic;
167
signal  pf_ram_rd_z             : std_logic;
168
 
169
begin
170
 
171
 
172
reg_ch0_ctrl <= dma0_ctrl;
173
reg_ch1_ctrl <= dma1_ctrl;
174
 
175
gen_ram_adr: for ii in 0 to 31 generate
176
 
177
ram1:   ram16x1d
178
                port map(
179
                        we      => loc_adr_we,
180
                        d       => data_in(ii),
181
                        wclk => clk,
182
                        a0      => dma_chn,
183
                        a1      => '0',
184
                        a2      => '0',
185
                        a3      => '0',
186
                        dpra0 => pf_chn,
187
                        dpra1 => '0',
188
                        dpra2 => '0',
189
                        dpra3 => '0',
190
                        dpo       => pf_adr( ii )
191
                );
192
 
193
 
194
end generate;
195
 
196
--pf_adr( 7 downto 0 ) <= x"00";
197
 
198
ram_adra( 8 downto 0 ) <= dma_wraddr( 11 downto 3 ) when dma_wr_en='0' else
199
                                                  dma_rdaddr( 11 downto 3 );
200
 
201
ram_adra( 10 ) <= dma_chn;
202
 
203
ram_we_a <= dma_wr and not dma_wr_en;
204
ram_we_b <= ext_fifo_disp_back.data_we;
205
 
206
 
207
ext_fifo_disp.data_we <= pf_ram_rd  after 1 ns when rising_edge( aclk );
208
ext_fifo_disp.adr <= pf_adr;
209
 
210
pf_ram_rd_z <= pf_ram_rd after 1 ns when rising_edge( aclk );
211
 
212
gen_ram_data: for ii in 0 to 7 generate
213
 
214
ram: RAMB16_S9_S9
215
  generic map(
216
    SIM_COLLISION_CHECK => "NONE"
217
    )
218
 
219
  port map(
220
    DOA   => dma_rddata( 7+ii*8 downto ii*8 ),
221
    DOB   => ext_fifo_disp.data( 7+ii*8 downto ii*8 ),
222
 
223
    ADDRA => ram_adra,
224
    ADDRB => ram_adrb,
225
    CLKA  => clk,
226
    CLKB  => aclk,
227
    DIA   => dma_wrdata( 7+ii*8 downto ii*8 ),
228
    DIB   => ext_fifo_disp_back.data( 7+ii*8 downto ii*8 ),
229
    DIPA  => (others=>'0'),
230
    DIPB  => (others=>'0'),
231
 
232
    ENA   => '1',
233
    ENB   => '1',
234
    SSRA  => '0',
235
    SSRB  => '0',
236
    WEA   => ram_we_a,
237
    WEB   => ram_we_b
238
    );
239
 
240
end generate;
241
 
242
 
243
cmd: ctrl_ram_cmd
244
        generic map(
245
                is_dsp48                => is_dsp48
246
        )
247
        port map(
248
                ---- Global ----
249
                reset                   => reset,                               -- 0 - сброс
250
                clk                             => clk,                                 -- Тактовая частота 250 МГц
251
                aclk                    => aclk,                                -- Тактовая частота 266 МГц 
252
 
253
                ---- Picoblaze ----
254
                dma_chn                 => dma_chn,                             -- номер канала DMA       
255
                reg_ch0_ctrl    => reg_ch0_ctrl,                -- регистр управления
256
                reg_ch1_ctrl    => reg_ch1_ctrl,                -- регистр управления
257
                reg_write_E0    => ram_change,          -- 1 - смена блока памяти
258
                dma0_transfer_rdy       => dma0_transfer_rdy,   -- 1 - блок памяти готов к обмену
259
                dma1_transfer_rdy       => dma1_transfer_rdy,   -- 1 - блок памяти готов к обмену
260
                loc_adr_we                      => loc_adr_we,                  -- 1 - запись локального адреса
261
 
262
                ---- PLB_BUS ----                         
263
                dmar0                   => ext_fifo_disp_back.dmar(0),           -- 1 - запрос DMA 0
264
                dmar1                   => ext_fifo_disp_back.dmar(1),          -- 1 - запрос DMA 1
265
                request_wr              => ext_fifo_disp.request_wr,            -- 1 - запрос на запись в регистр 
266
                request_rd              => ext_fifo_disp.request_rd,            -- 1 - запрос на чтение из регистра 
267
                allow_wr                => ext_fifo_disp_back.allow_wr,         -- 1 - разрешение записи 
268
                pb_complete             => ext_fifo_disp_back.complete,         --! 1 - завершение обмена по шине PLD_BUS
269
 
270
 
271
                pf_repack_we    => ext_fifo_disp_back.data_we,          -- 1 - запись в память
272
                pf_ram_rd_out   => pf_ram_rd,                                           -- 1 - чтение из памяти
273
 
274
                ---- Память ----           
275
                ram_adra_a9             => ram_adra(9), -- разряд 9 адреса памяти
276
                ram_adrb                => ram_adrb
277
 
278
        );
279
 
280
pf_chn <= ram_adrb(10);
281
 
282
end ctrl_ext_ram;

powered by: WebSVN 2.1.0

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