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_sim/] [sim/] [trd_pcie_pkg.vhd] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 dsmv
---------------------------------------------------------------------------------------------------
2
--
3
-- Title       : trd_pkg.vhd
4
-- Author      : Dmitry Smekhov
5
-- Company     : Instrumental System
6
--      
7
-- Version         : 1.0
8
---------------------------------------------------------------------------------------------------
9
--
10
-- Description : Набор функций для доступа к тетрадам через шину PCI Express 
11
--
12
---------------------------------------------------------------------------------------------------
13
--                                      
14
--  Version 1.0  02.07.2011
15
--                                Создан из trd_simulation_pkg.vhd v1.0
16
--
17
--
18
---------------------------------------------------------------------------------------------------
19
 
20
library ieee;
21
use ieee.std_logic_1164.all;
22
use ieee.std_logic_arith.all;
23
use ieee.std_logic_textio.all;
24
use ieee.std_logic_unsigned.all;
25
 
26
library work;
27
use work.cmd_sim_pkg.all;
28
 
29
use std.textio.all;
30
use std.textio;
31
 
32
package trd_pkg is
33
 
34
 
35
constant MODE0          : integer:=0;
36
constant IRQ_MASK       : integer:=1;
37
constant IRQ_INV        : integer:=2;
38
constant FMODE          : integer:=3;
39
constant FDIV           : integer:=4;
40
constant STMODE         : integer:=5;
41
constant CNT0           : integer:=6;
42
constant CNT1           : integer:=7;
43
constant CNT2           : integer:=8;
44
constant MODE1          :  integer:=9;
45
constant MODE2          :  integer:=10;
46
constant MODE3          :  integer:=11;
47
constant MODE4          :  integer:=12;
48
constant SYNX           :  integer:=13;
49
constant THDAC          :  integer:=14;
50
constant MUX            :  integer:=15;
51
 
52
constant ID                     :  integer:=16#100#;
53
constant VER            :  integer:=16#102#;
54
constant TRES           :  integer:=16#103#;
55
 
56
constant REG200         :  integer:=16#200#;
57
constant REG201         :  integer:=16#201#;
58
 
59
 
60
constant TRDIND_MODE0           : integer:=0;
61
constant TRDIND_IRQ_MASK        : integer:=1;
62
constant TRDIND_IRQ_INV         : integer:=2;
63
constant TRDIND_FMODE           : integer:=3;
64
constant TRDIND_FDIV            : integer:=4;
65
constant TRDIND_STMODE          : integer:=5;
66
constant TRDIND_CNT0            : integer:=6;
67
constant TRDIND_CNT1            : integer:=7;
68
constant TRDIND_CNT2            : integer:=8;
69
constant TRDIND_MODE1           :  integer:=9;
70
constant TRDIND_MODE2           :  integer:=10;
71
constant TRDIND_MODE3           :  integer:=11;
72
constant TRDIND_SFLAG           :  integer:=12;
73
constant TRDIND_SYNX            :  integer:=13;
74
constant TRDIND_THDAC           :  integer:=14;
75
constant TRDIND_MUX                     :  integer:=15;
76
 
77
constant TRDIND_SFLAG_PAE       :  integer:=12;
78
constant TRDIND_SFLAG_PAF       :  integer:=13;
79
 
80
 
81
constant TRDIND_CHAN1           :  integer:=16#10#;
82
constant TRDIND_CHAN2           :  integer:=16#11#;
83
constant TRDIND_FORMAT          :  integer:=16#12#;
84
constant TRDIND_FSRC            :  integer:=16#13#;
85
constant TRDIND_FDVR            :  integer:=16#14#;
86
constant TRDIND_GAIN            :  integer:=16#15#;
87
constant TRDIND_INP                     :  integer:=16#16#;
88
constant TRDIND_CONTROL1        :  integer:=16#17#;
89
 
90
constant TRDIND_ID                      :  integer:=16#100#;
91
constant TRDIND_IDMOD           :  integer:=16#101#;
92
constant TRDIND_VER                     :  integer:=16#102#;
93
constant TRDIND_TRES            :  integer:=16#103#;
94
 
95
constant TRDIND_REG200          :  integer:=16#200#;
96
constant TRDIND_REG201          :  integer:=16#201#;
97
 
98
constant TRDIND_FLAGCLR         :  integer:=16#200#;
99
constant TRDIND_ADC_OR          :  integer:=16#208#;
100
constant TRDIND_PRT_STATUS      :  integer:=16#209#;
101
constant TRDIND_PRT_CNTL        :  integer:=16#20A#;
102
constant TRDIND_PRT_CNTH        :  integer:=16#20B#;
103
constant TRDIND_TL_ADR          :  integer:=16#20C#;
104
constant TRDIND_TL_DATA         :  integer:=16#20E#;
105
constant TRDIND_TL_MODE         :  integer:=16#20E#;
106
 
107
 
108
 
109
 
110
 
111
---- Переключение между режимами работы ----            
112
procedure trd_test_mode (
113
                signal  cmd:    out bh_cmd; -- команда для ADSP
114
                signal  ret:    in  bh_ret; -- ответ ADSP
115
                mode:                   in  integer -- 1 - тестовый режим
116
                                                                        -- 0 - рабочий режим
117
                );
118
 
119
---- Запись в косвенный регистр без ожидания готовности ----            
120
procedure trd_cmd (
121
                signal  cmd:    out bh_cmd; -- команда для ADSP
122
                signal  ret:    in  bh_ret; -- ответ ADSP
123
                trd:                    in integer; -- номер тетрады
124
                reg:                    in integer; -- номер регистра
125
                data:                   in std_logic_vector( 15 downto 0 ) -- данные
126
                );
127
 
128
---- Запись в косвенный регистр с ожиданием готовности ----             
129
procedure trd_wait_cmd (
130
                signal  cmd:    out bh_cmd; -- команда для ADSP
131
                signal  ret:    in  bh_ret; -- ответ ADSP
132
                trd:                    in integer; -- номер тетрады
133
                reg:                    in integer; -- номер регистра
134
                data:                   in std_logic_vector( 15 downto 0 ) -- данные
135
                );
136
 
137
---- Чтение из косвенного регистра с ожиданием готовности ----          
138
procedure trd_wait_cmd_in (
139
                signal  cmd:    out bh_cmd; -- команда для ADSP
140
                signal  ret:    in  bh_ret; -- ответ ADSP
141
                trd:                    in integer; -- номер тетрады
142
                reg:                    in integer; -- номер регистра
143
                data:                   out std_logic_vector( 15 downto 0 ) -- данные
144
                );
145
 
146
---- Чтение из косвенного регистра без ожидания готовности ----         
147
procedure trd_cmd_in (
148
                signal  cmd:    out bh_cmd; -- команда для ADSP
149
                signal  ret:    in  bh_ret; -- ответ ADSP
150
                trd:                    in integer; -- номер тетрады
151
                reg:                    in integer; -- номер регистра
152
                data:                   out std_logic_vector( 15 downto 0 ) -- данные
153
                );
154
 
155
---- Запись 64-х разрядного числа в регистр DATA ----           
156
procedure trd_data_out64 (
157
                signal  cmd:    out bh_cmd; -- команда для ADSP
158
                signal  ret:    in  bh_ret; -- ответ ADSP
159
                trd:                    in integer; -- номер тетрады
160
                data:                   in std_logic_vector( 63 downto 0 ) -- данные
161
                );
162
 
163
---- Чтение 64-х разрядного числа из регистра DATA ----         
164
procedure trd_data_in64 (
165
                signal  cmd:    out bh_cmd; -- команда для ADSP
166
                signal  ret:    in  bh_ret; -- ответ ADSP
167
                trd:                    in integer; -- номер тетрады
168
                data:                   out std_logic_vector( 63 downto 0 ) -- данные
169
                );
170
 
171
---- Запись 32-х разрядного числа в регистр DATA ----           
172
procedure trd_data_out32 (
173
                signal  cmd:    out bh_cmd; -- команда для ADSP
174
                signal  ret:    in  bh_ret; -- ответ ADSP
175
                trd:                    in integer; -- номер тетрады
176
                data:                   in std_logic_vector( 31 downto 0 ) -- данные
177
                );
178
 
179
---- Чтение 32-х разрядного числа из регистра DATA ----         
180
procedure trd_data_in32 (
181
                signal  cmd:    out bh_cmd; -- команда для ADSP
182
                signal  ret:    in  bh_ret; -- ответ ADSP
183
                trd:                    in integer; -- номер тетрады
184
                data:                   out std_logic_vector( 31 downto 0 ) -- данные
185
                );
186
 
187
 
188
---- Запись массива 32-х разрядных чисел в регистр DATA ----            
189
procedure trd_data_array_out32 (
190
                signal  cmd     : out bh_cmd;                                           -- команда для ADSP
191
                signal  ret     : in  bh_ret;                                           -- ответ ADSP
192
                trd                     : in integer;                                           -- номер тетрады
193
                data            : in mem32( mem_size-1 downto 0 );       -- данные
194
                n                       : in integer                                            -- размер блока памяти
195
);
196
 
197
---- Чтение массива 32-х разрядных чисел из регистра DATA ----
198
procedure trd_data_array_in32 (
199
                signal  cmd     : out bh_cmd;                                           -- команда для ADSP
200
                signal  ret     : in  bh_ret;                                           -- ответ ADSP
201
                trd                     : in integer;                                           -- номер тетрады
202
                data            : out mem32( mem_size-1 downto 0 );      -- данные
203
                n                       : in integer                                            -- размер блока памяти
204
);
205
 
206
---- Запись массива 64-х разрядных чисел в регистр DATA ----
207
procedure trd_data_array_out64 (
208
                signal  cmd     : out bh_cmd;                                           -- команда для ADSP
209
                signal  ret     : in  bh_ret;                                           -- ответ ADSP
210
                trd                     : in integer;                                           -- номер тетрады
211
                data            : in mem64( mem_size-1 downto 0 );       -- данные
212
                n                       : in integer                                            -- размер блока памяти
213
);
214
 
215
---- Чтение массива 64-х разрядных чисел из регистра DATA ----
216
procedure trd_data_array_in64 (
217
                signal  cmd     : out bh_cmd;                                           -- команда для ADSP
218
                signal  ret     : in  bh_ret;                                           -- ответ ADSP
219
                trd                     : in integer;                                           -- номер тетрады
220
                data            : out mem64( mem_size-1 downto 0 );      -- данные
221
                n                       : in integer                                            -- размер блока памяти
222
);
223
 
224
---- Чтение регистра STATUS ----
225
procedure trd_status (
226
                signal  cmd:    out bh_cmd; -- команда для ADSP
227
                signal  ret:    in  bh_ret; -- ответ ADSP
228
                trd:                    in integer; -- номер тетрады
229
                data:                   out std_logic_vector( 15 downto 0 ) -- данные
230
                );
231
 
232
 
233
 
234
 
235
end package     trd_pkg;
236
 
237
package body trd_pkg is
238
 
239
 
240
procedure trd_test_mode (
241
                signal  cmd:    out bh_cmd; -- команда для ADSP
242
                signal  ret:    in  bh_ret; -- ответ ADSP
243
                mode:                   in  integer -- 1 - тестовый режим
244
                                                                        -- 0 - рабочий режим
245
                ) is
246
begin
247
        if( mode=1 ) then
248
         trd_data_out32( cmd, ret, 0, x"00000002" );
249
        else
250
         trd_data_out32( cmd, ret, 0, x"00000001" );
251
        end if;
252
end trd_test_mode;
253
 
254
procedure trd_cmd (
255
                signal  cmd:    out bh_cmd; -- команда для ADSP
256
                signal  ret:    in  bh_ret; -- ответ ADSP
257
                trd:                    in integer; -- номер тетрады
258
                reg:                    in integer; -- номер регистра
259
                data:                   in std_logic_vector( 15 downto 0 ) -- данные
260
                ) is
261
variable v: std_logic_vector( 31 downto 0 );
262
begin
263
        v:=conv_std_logic_vector( reg, 32 );
264
        data_write(  cmd, ret, x"20000000"+conv_std_logic_vector(trd*4096*4+4096*4096, 32), v );
265
        v( 31 downto 16 ):=(others=>'0');
266
        v( 15 downto 0 ):=data;
267
        data_write( cmd, ret, x"20000000"+conv_std_logic_vector(trd*4096*4+3*4096, 32), v );
268
end;
269
 
270
procedure trd_wait_cmd (
271
                signal  cmd:    out bh_cmd; -- команда для ADSP
272
                signal  ret:    in  bh_ret; -- ответ ADSP
273
                trd:                    in integer; -- номер тетрады
274
                reg:                    in integer; -- номер регистра
275
                data:                   in std_logic_vector( 15 downto 0 ) -- данные
276
                ) is
277
variable v: std_logic_vector( 31 downto 0 );
278
variable b: std_logic;
279
begin
280
        v:=conv_std_logic_vector( reg, 32 );
281
        data_write(  cmd, ret, x"20000000"+conv_std_logic_vector(trd*4096*4+2*4096, 32), v );
282
        lp1: loop
283
                data_read( cmd, ret, x"20000000"+conv_std_logic_vector(trd*4096*4+0, 32), v );
284
                b:=v(0);
285
                if(b='1')then
286
                        exit lp1;
287
                end if;
288
        end loop;
289
 
290
        v( 31 downto 16 ):=(others=>'0');
291
        v( 15 downto 0 ):=data;
292
        data_write( cmd, ret, x"20000000"+conv_std_logic_vector(trd*4096*4+3*4096, 32), v );
293
end;
294
 
295
procedure trd_cmd_in (
296
                signal  cmd:    out bh_cmd; -- команда для ADSP
297
                signal  ret:    in  bh_ret; -- ответ ADSP
298
                trd:                    in integer; -- номер тетрады
299
                reg:                    in integer; -- номер регистра
300
                data:                   out std_logic_vector( 15 downto 0 ) -- данные
301
                ) is
302
variable v: std_logic_vector( 31 downto 0 );
303
begin
304
        v:=conv_std_logic_vector( reg, 32 );
305
        data_write(  cmd, ret, x"20000000"+conv_std_logic_vector(trd*4096*4+2*4096, 32), v );
306
        data_read( cmd, ret, x"20000000"+conv_std_logic_vector(trd*4096*4+3*4096, 32), v );
307
        data:=v( 15 downto 0 );
308
end;
309
 
310
 
311
procedure trd_wait_cmd_in (
312
                signal  cmd:    out bh_cmd; -- команда для ADSP
313
                signal  ret:    in  bh_ret; -- ответ ADSP
314
                trd:                    in integer; -- номер тетрады
315
                reg:                    in integer; -- номер регистра
316
                data:                   out std_logic_vector( 15 downto 0 ) -- данные
317
                ) is
318
variable v: std_logic_vector( 31 downto 0 );
319
variable b: std_logic;
320
begin
321
        v:=conv_std_logic_vector( reg, 32 );
322
        data_write(  cmd, ret, x"20000000"+conv_std_logic_vector(trd*4096*4+2*4096, 32), v );
323
 
324
        lp1: loop
325
                data_read( cmd, ret, x"20000000"+conv_std_logic_vector(trd*4096*4+0, 32), v );
326
                b:=v(0);
327
                if(b='1')then
328
                        exit lp1;
329
                end if;
330
        end loop;
331
 
332
        data_read( cmd, ret, x"20000000"+conv_std_logic_vector(trd*4096*4+3*4096, 32), v );
333
        data:=v( 15 downto 0 );
334
end;
335
 
336
procedure trd_data_out64 (
337
                signal  cmd:    out bh_cmd; -- команда для ADSP
338
                signal  ret:    in  bh_ret; -- ответ ADSP
339
                trd:                    in integer; -- номер тетрады
340
                data:                   in std_logic_vector( 63 downto 0 ) -- данные
341
                )  is
342
begin
343
        data_write64( cmd, ret, x"20000000"+conv_std_logic_vector(trd*4096*4+4096, 32), data );
344
end;
345
 
346
procedure trd_data_in64 (
347
                signal  cmd:    out bh_cmd; -- команда для ADSP
348
                signal  ret:    in  bh_ret; -- ответ ADSP
349
                trd:                    in integer; -- номер тетрады
350
                data:                   out std_logic_vector( 63 downto 0 ) -- данные
351
                ) is
352
begin
353
        data_read64( cmd, ret, x"20000000"+conv_std_logic_vector(trd*4096*4+4096, 32), data );
354
end;
355
 
356
procedure trd_data_out32 (
357
                signal  cmd:    out bh_cmd; -- команда для ADSP
358
                signal  ret:    in  bh_ret; -- ответ ADSP
359
                trd:                    in integer; -- номер тетрады
360
                data:                   in std_logic_vector( 31 downto 0 ) -- данные
361
                ) is
362
begin
363
        data_write( cmd, ret, x"20000000"+conv_std_logic_vector(trd*4096*4+4096, 32), data );
364
 
365
end;
366
 
367
procedure trd_data_in32 (
368
                signal  cmd:    out bh_cmd; -- команда для ADSP
369
                signal  ret:    in  bh_ret; -- ответ ADSP
370
                trd:                    in integer; -- номер тетрады
371
                data:                   out std_logic_vector( 31 downto 0 ) -- данные
372
                ) is
373
begin
374
        data_read( cmd, ret, x"20000000"+conv_std_logic_vector(trd*4096*4+4096, 32), data );
375
 
376
end;
377
 
378
 
379
procedure trd_data_array_out32 (
380
                signal  cmd     : out bh_cmd;                                           -- команда для ADSP
381
                signal  ret     : in  bh_ret;                                           -- ответ ADSP
382
                trd                     : in integer;                                           -- номер тетрады
383
                data            : in mem32( mem_size-1 downto 0 );       -- данные
384
                n                       : in integer                                            -- размер блока памяти
385
) is
386
 variable adr   : mem32( mem_size-1 downto 0 ); -- адрес
387
begin
388
        for i in 0 to mem_size-1  loop
389
                adr(i):=x"20000000"+conv_std_logic_vector(trd*4096*4+4096, 32);
390
        end loop;
391
        array_write( cmd, ret, adr, data, n );
392
 
393
end;
394
 
395
procedure trd_data_array_in32 (
396
                signal  cmd     : out bh_cmd;                                           -- команда для ADSP
397
                signal  ret     : in  bh_ret;                                           -- ответ ADSP
398
                trd                     : in integer;                                           -- номер тетрады
399
                data            : out mem32( mem_size-1 downto 0 );      -- данные
400
                n                       : in integer                                            -- размер блока памяти
401
) is
402
 variable adr   : mem32( mem_size-1 downto 0 ); -- адрес
403
begin
404
        for i in 0 to mem_size-1  loop
405
                adr(i):=x"20000000"+conv_std_logic_vector(trd*4096*4+4096, 32);
406
        end loop;
407
        array_read( cmd, ret, adr, data, n );
408
 
409
end;
410
 
411
procedure trd_data_array_out64 (
412
                signal  cmd     : out bh_cmd;                                           -- команда для ADSP
413
                signal  ret     : in  bh_ret;                                           -- ответ ADSP
414
                trd                     : in integer;                                           -- номер тетрады
415
                data            : in mem64( mem_size-1 downto 0 );       -- данные
416
                n                       : in integer                                            -- размер блока памяти
417
) is
418
 variable adr   : mem32( mem_size-1 downto 0 ); -- адрес
419
begin
420
        for i in 0 to mem_size-1  loop
421
                adr(i):=x"20000000"+conv_std_logic_vector(trd*4096*4+4096, 32);
422
        end loop;
423
        array_write64( cmd, ret, adr, data, n );
424
 
425
end;
426
 
427
procedure trd_data_array_in64 (
428
                signal  cmd     : out bh_cmd;                                           -- команда для ADSP
429
                signal  ret     : in  bh_ret;                                           -- ответ ADSP
430
                trd                     : in integer;                                           -- номер тетрады
431
                data            : out mem64( mem_size-1 downto 0 );      -- данные
432
                n                       : in integer                                            -- размер блока памяти
433
) is
434
 variable adr   : mem32( mem_size-1 downto 0 ); -- адрес
435
begin
436
        for i in 0 to mem_size-1  loop
437
                adr(i):=x"20000000"+conv_std_logic_vector(trd*4096*4+4096, 32);
438
        end loop;
439
        array_read64( cmd, ret, adr, data, n );
440
 
441
end;
442
 
443
 
444
procedure trd_status (
445
                signal  cmd:    out bh_cmd; -- команда для ADSP
446
                signal  ret:    in  bh_ret; -- ответ ADSP
447
                trd:                    in integer; -- номер тетрады
448
                data:                   out std_logic_vector( 15 downto 0 ) -- данные
449
                ) is
450
 variable v: std_logic_vector( 31 downto 0 );
451
begin
452
        data_read( cmd, ret, x"20000000"+conv_std_logic_vector(trd*4096*4+0, 32), v );
453
        data:=v( 15 downto 0 );
454
 
455
end;
456
 
457
 
458
 
459
 
460
end package     body trd_pkg;
461
 

powered by: WebSVN 2.1.0

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