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

Subversion Repositories pcie_ds_dma

[/] [pcie_ds_dma/] [trunk/] [core/] [adm/] [dio64/] [trd_admdio64_out_v4.vhd] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 dsmv
---------------------------------------------------------------------------------------------------
2
--
3
-- Title       : trd_admdio64_out_v1
4
-- Author      : Ilya Ivanov
5
-- Company     : Instrumental System
6
--
7
-- Version     : 1.3
8
--
9
---------------------------------------------------------------------------------------------------
10
--
11
-- Description :  Тетрада цифрового ввода.
12
--                                Модификация 1 - Используется FIFO 1024x64
13
--                              
14
---------------------------------------------------------------------------------------------------
15
--
16
--      Версия 1.3      18.07.2007      Dmitry Smekhov
17
--                              Добавлены выходы cmd_data_out2, start, bx_clk
18
--                              Убран вход b_clk
19
--
20
---------------------------------------------------------------------------------------------------
21
--
22
--      Версия 1.2      18.08.2006      Dmitry Smekhov
23
--                              Используется cl_fifo1024x64_v2
24
--
25
---------------------------------------------------------------------------------------------------
26
--
27
--      Версия 1.1      07.09.2005      Dmitry Smekhov
28
--                              Добавлен выход fifo_cnt - число слов в FIFO     
29
--                              и выходы регистров MODE0, MODE1, MODE2, MODE3
30
--
31
---------------------------------------------------------------------------------------------------
32
 
33
library ieee;
34
use ieee.std_logic_1164.all;
35
use IEEE.std_logic_unsigned.all ;
36
 
37
 
38
 
39
 
40
library work;
41
use work.cl_chn_v3_pkg.all;
42
use work.adm2_pkg.all;
43
 
44
package trd_admdio64_out_v4_pkg is
45
 
46
constant  ID_DIO_OUT            : std_logic_vector( 15 downto 0 ):=x"0012"; -- идентификатор тетрады
47
constant  ID_MODE_DIO_OUT       : std_logic_vector( 15 downto 0 ):=x"0001"; -- модификатор тетрады
48
constant  VER_DIO_OUT           : std_logic_vector( 15 downto 0 ):=x"0103";      -- версия тетрады
49
constant  RES_DIO_OUT           : std_logic_vector( 15 downto 0 ):=x"0020";      -- ресурсы тетрады
50
constant  FIFO_DIO_OUT          : std_logic_vector( 15 downto 0 ):=x"0400"; -- размер FIFO
51
constant  FTYPE_DIO_OUT         : std_logic_vector( 15 downto 0 ):=x"0040"; -- ширина FIFO
52
 
53
component trd_admdio64_out_v4 is
54
        port(
55
 
56
                -- GLOBAL
57
                reset                   : in std_logic;         -- 0 - сброс
58
                clk                             : in std_logic;         -- тактовая частота
59
 
60
                -- Управление тетрадой
61
                data_in                 : in std_logic_vector( 63 downto 0 ); -- шина данных DATA
62
                cmd_data_in             : in std_logic_vector( 15 downto 0 ); -- шина данных CMD_DATA
63
                cmd                             : in bl_cmd;            -- сигналы управления
64
 
65
                cmd_data_out    : out std_logic_vector( 15 downto 0 ); -- выходы регистров, через буфер
66
                cmd_data_out2   : out std_logic_vector( 15 downto 0 ); -- выходы регистров, без буфера
67
 
68
                bx_irq                  : out std_logic;        -- 1 - прерывание от тетрады
69
                bx_drq                  : out bl_drq;           -- управление DMA         
70
 
71
                mode0                   : out std_logic_vector( 15 downto 0 );   -- регистр MODE0
72
                mode1                   : out std_logic_vector( 15 downto 0 );   -- регистр MODE1
73
                mode2                   : out std_logic_vector( 15 downto 0 );   -- регистр MODE2
74
                mode3                   : out std_logic_vector( 15 downto 0 );   -- регистр MODE3
75
 
76
                fifo_rst                : out std_logic;        -- 0 - сброс FIFO
77
                start                   : out std_logic;        --  1 - разрешение работы (MODE0[5])
78
 
79
                -- Чтение из FIFO
80
                data_out                : out std_logic_vector(63 downto 0);     -- шина данных FIFO
81
                data_cs         : in std_logic;                                                 -- 0 - чтение данных
82
                flag_rd         : out bl_fifo_flag;                                             -- флаги FIFO
83
                clk_rd          : in std_logic;                                                 -- тактовая частота чтения данных
84
                fifo_cnt                : out std_logic_vector( 12 downto 0 );   -- число слов в FIFO
85
 
86
                -- Тестовые выводы -- 
87
                test                    : out std_logic_vector(7 downto 0)
88
                --------------------------------------------
89
            );
90
end component;
91
 
92
end trd_admdio64_out_v4_pkg;
93
 
94
 
95
library ieee;
96
use ieee.std_logic_1164.all;
97
use IEEE.std_logic_unsigned.all ;
98
 
99
library unisim;
100
use unisim.vcomponents.all;
101
 
102
library work;
103
use work.cl_chn_v4_pkg.all;
104
use work.adm2_pkg.all;
105
use work.cl_fifo1024x65_v5_pkg.all;
106
 
107
entity trd_admdio64_out_v4 is
108
        port(
109
 
110
                -- GLOBAL
111
                reset                   : in std_logic;         -- 0 - сброс
112
                clk                             : in std_logic;         -- тактовая частота
113
 
114
                -- Управление тетрадой
115
                data_in                 : in std_logic_vector( 63 downto 0 ); -- шина данных DATA
116
                cmd_data_in             : in std_logic_vector( 15 downto 0 ); -- шина данных CMD_DATA
117
                cmd                             : in bl_cmd;            -- сигналы управления
118
 
119
                cmd_data_out    : out std_logic_vector( 15 downto 0 ); -- выходы регистров, через буфер
120
                cmd_data_out2   : out std_logic_vector( 15 downto 0 ); -- выходы регистров, без буфера
121
 
122
                bx_irq                  : out std_logic;        -- 1 - прерывание от тетрады
123
                bx_drq                  : out bl_drq;           -- управление DMA         
124
 
125
                mode0                   : out std_logic_vector( 15 downto 0 );   -- регистр MODE0
126
                mode1                   : out std_logic_vector( 15 downto 0 );   -- регистр MODE1
127
                mode2                   : out std_logic_vector( 15 downto 0 );   -- регистр MODE2
128
                mode3                   : out std_logic_vector( 15 downto 0 );   -- регистр MODE3
129
 
130
                fifo_rst                : out std_logic;        -- 0 - сброс FIFO
131
                start                   : out std_logic;        --  1 - разрешение работы (MODE0[5])
132
 
133
                -- Чтение из FIFO
134
                data_out                : out std_logic_vector(63 downto 0);     -- шина данных FIFO
135
                data_cs         : in std_logic;                                                 -- 0 - чтение данных
136
                flag_rd         : out bl_fifo_flag;                                             -- флаги FIFO
137
                clk_rd          : in std_logic;                                                 -- тактовая частота чтения данных
138
                fifo_cnt                : out std_logic_vector( 12 downto 0 );   -- число слов в FIFO
139
 
140
                -- Тестовые выводы -- 
141
                test                    : out std_logic_vector(7 downto 0)
142
                --------------------------------------------
143
            );
144
end trd_admdio64_out_v4;
145
 
146
 
147
architecture trd_admdio64_out_v4 of trd_admdio64_out_v4 is
148
 
149
 
150
component ctrl_start_v3 is
151
        port(
152
 
153
                reset   : in std_logic;                                                 -- 0 - сброс
154
                mode0   : in std_logic_vector( 15 downto 0 );    -- регистр MODE0
155
                stmode  : in std_logic_vector( 15 downto 0 );    -- регистр STMODE
156
                fmode   : in std_logic_vector(  5 downto 0 );    -- регистр FMODE
157
                fdiv    : in std_logic_vector( 15 downto 0 );    -- регистр FDIV
158
                fdiv_we : in std_logic;                                                 -- 1 - запись в регистр FDIV
159
 
160
                cnt0    : in std_logic_vector( 15 downto 0 );    -- счётчик начальной задержки
161
                cnt1    : in std_logic_vector( 15 downto 0 );    -- счётчик принимаемых слов
162
                cnt2    : in std_logic_vector( 15 downto 0 );    -- счётчик пропускаемых слов
163
 
164
                b_clk   : in std_logic_vector( 15 downto 0 );    -- входы тактовой частоты
165
                b_start : in std_logic_vector( 15 downto 0 );    -- входы сигнала START
166
 
167
                bx_clk  : out std_logic;                        -- выход тактовой частоты, глобальный
168
                bi_clk  : out std_logic;                        -- выход тактовой частота, опережает bx_clk
169
                bx_start                : out std_logic;        -- выход сигнала start синхронный с bx_clk
170
                bx_start_a              : out std_logic;        -- асинхронный выход сигнала start 
171
                bx_start_sync   : out std_logic;        -- импульс синхронизации
172
 
173
                goe0    : out std_logic;                        -- включение генератора 60MHz
174
                goe1    : out std_logic                         -- включение генератора 50MHz
175
 
176
        );
177
 
178
end  component;
179
 
180
component cl_fifo1024x64_v3 is
181
        port(
182
                -- сброс
183
                 reset                          : in std_logic;         -- 0 - сброс
184
 
185
                -- запись
186
                 clk_wr                         : in std_logic;         -- тактовая частота
187
                 data_in                        : in std_logic_vector(63 downto 0); -- данные
188
                 data_en                        : in std_logic;         -- 1 - запись в fifo
189
                 flag_wr                        : out bl_fifo_flag;     -- флаги fifo, синхронно с clk_wr
190
                 cnt_wr                         : out std_logic_vector( 9 downto 0 ); -- счётчик слов
191
 
192
                 -- чтение
193
                 clk_rd                         : in std_logic;         -- тактовая частота
194
                 data_out                       : out std_logic_vector(63 downto 0);   -- данные
195
                 data_cs                        : in std_logic;         -- 0 - чтение из fifo
196
                 flag_rd                        : out bl_fifo_flag;     -- флаги fifo, синхронно с clk_rd
197
                 cnt_rd                         : out std_logic_vector( 9 downto 0 ); -- счётчик слов 
198
 
199
                 cnt_pae                        : in std_logic_vector(12 downto 0);      -- номер слова FIFO при котором оно еще почти пустое
200
                 cnt_paf                        : in std_logic_vector(12 downto 0);      -- номер слова FIFO при котором оно почти полное
201
                 rt_mode                        : in std_logic          -- 1 - retransmit  
202
 
203
            );
204
end component;
205
 
206
signal rst,fifo_rst0            : std_logic;
207
signal flag_wr                  : bl_fifo_flag;
208
signal c_mode0                          : std_logic_vector(15 downto 0);
209
signal fdiv,stmode,fmode        : std_logic_vector(15 downto 0);
210
signal status                           : std_logic_vector(15 downto 0);
211
signal cnt0,cnt1,cnt2           : std_logic_vector(15 downto 0);
212
signal fdiv_we                          : std_logic;
213
signal clk_trd,start_trd        : std_logic;
214
signal clk_d,cw,cw0                     : std_logic;
215
signal cnt_wr                       : std_logic_vector( 9 downto 0 );
216
signal cnt_rd                       : std_logic_vector( 9 downto 0 );
217
signal  sflag_pae                       : std_logic_vector( 15 downto 0 );
218
signal  sflag_paf                       : std_logic_vector( 15 downto 0 );
219
 
220
 
221
begin
222
 
223
xstatus: ctrl_buft16 port map(
224
        t => cmd.status_cs,
225
        i =>  status,
226
        o => cmd_data_out );
227
 
228
cmd_data_out2 <= status;
229
 
230
chn: cl_chn_v4
231
        generic map(
232
          -- 2 - out - для тетрады вывода
233
          -- 1 - in  - для тетрады ввода
234
          chn_type                      => 2
235
        )
236
 
237
        port map (
238
                reset                   => reset,
239
                clk                     => clk,
240
                -- Флаги
241
                cmd_rdy                 => '1',
242
                rdy                             => '1', --flag_wr.hf,
243
                fifo_flag               => flag_wr,
244
                --st9                           => ready,
245
                -- Тетрада      
246
                data_in                 => cmd_data_in,
247
                cmd                             => cmd,
248
                bx_irq                  => bx_irq,
249
                bx_drq                  => bx_drq,
250
                status                  => status,
251
                -- Управление
252
                mode0                   => c_mode0,
253
                mode1                   => mode1,
254
                mode2                   => mode2,
255
                mode3                   => mode3,
256
                sflag_pae               => sflag_pae,
257
                sflag_paf               => sflag_paf,
258
                fdiv                    => fdiv,
259
                fdiv_we                 => fdiv_we,
260
                fmode                   => fmode,
261
                stmode                  => stmode,
262
                rst                             => rst,
263
                fifo_rst                => fifo_rst0
264
        );
265
 
266
 
267
x_fifo: cl_fifo1024x65_v5
268
        port map(
269
                -- сброс
270
                 reset                  => fifo_rst0,
271
                -- запись
272
                 clk_wr                 => clk,
273
                 data_in                => data_in,
274
                 data_en                => cmd.data_we,
275
                 flag_wr                => flag_wr,
276
                 --cnt_wr         => cnt_wr,
277
                 -- чтение
278
                 clk_rd                 => clk_rd,
279
                 data_out               => data_out,
280
                 data_cs                => data_cs,
281
                 flag_rd                => flag_rd
282
                 --cnt_rd                       => cnt_rd
283
 
284
            );
285
 
286
fifo_rst<=fifo_rst0;
287
 
288
fifo_cnt( 9 downto 0 ) <= cnt_rd;
289
fifo_cnt( 12 downto 10 ) <= (others=>'0');
290
 
291
mode0 <= c_mode0;
292
start <= c_mode0(5);
293
 
294
end trd_admdio64_out_v4;
295
 
296
 

powered by: WebSVN 2.1.0

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