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

Subversion Repositories mips_enhanced

[/] [mips_enhanced/] [trunk/] [grlib-gpl-1.0.19-b3188/] [lib/] [gaisler/] [misc/] [misc.vhd] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 dimamali
------------------------------------------------------------------------------
2
--  This file is a part of the GRLIB VHDL IP LIBRARY
3
--  Copyright (C) 2003, Gaisler Research
4
--
5
--  This program is free software; you can redistribute it and/or modify
6
--  it under the terms of the GNU General Public License as published by
7
--  the Free Software Foundation; either version 2 of the License, or
8
--  (at your option) any later version.
9
--
10
--  This program is distributed in the hope that it will be useful,
11
--  but WITHOUT ANY WARRANTY; without even the implied warranty of
12
--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
--  GNU General Public License for more details.
14
--
15
--  You should have received a copy of the GNU General Public License
16
--  along with this program; if not, write to the Free Software
17
--  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
18
-----------------------------------------------------------------------------
19
-- Package:     misc
20
-- File:        misc.vhd
21
-- Author:      Jiri Gaisler - Gaisler Research
22
-- Description: Misc models
23
------------------------------------------------------------------------------
24
 
25
library ieee;
26
use ieee.std_logic_1164.all;
27
 
28
library grlib;
29
use grlib.amba.all;
30
use grlib.devices.all;
31
use grlib.stdlib.all;
32
library techmap;
33
use techmap.gencomp.all;
34
library gaisler;
35
 
36
package misc is
37
 
38
-- reset generator with filter
39
 
40
  component rstgen
41
  generic (acthigh : integer := 0; syncrst : integer := 0;
42
           scanen : integer := 0);
43
  port (
44
    rstin     : in  std_ulogic;
45
    clk       : in  std_ulogic;
46
    clklock   : in  std_ulogic;
47
    rstout    : out std_ulogic;
48
    rstoutraw : out std_ulogic;
49
    testrst   : in  std_ulogic := '0';
50
    testen    : in  std_ulogic := '0');
51
  end component;
52
 
53
  type gptimer_in_type is record
54
    dhalt    : std_ulogic;
55
    extclk   : std_ulogic;
56
  end record;
57
 
58
  type gptimer_out_type is record
59
    tick     : std_logic_vector(0 to 7);
60
    timer1   : std_logic_vector(31 downto 0);
61
    wdogn    : std_ulogic;
62
    wdog    : std_ulogic;
63
  end record;
64
 
65
  component gptimer
66
  generic (
67
    pindex   : integer := 0;
68
    paddr    : integer := 0;
69
    pmask    : integer := 16#fff#;
70
    pirq     : integer := 0;
71
    sepirq   : integer := 0;     -- use separate interrupts for each timer
72
    sbits    : integer := 16;                   -- scaler bits
73
    ntimers  : integer range 1 to 7 := 1;       -- number of timers
74
    nbits    : integer := 32;                   -- timer bits
75
    wdog     : integer := 0
76
  );
77
  port (
78
    rst    : in  std_ulogic;
79
    clk    : in  std_ulogic;
80
    apbi   : in  apb_slv_in_type;
81
    apbo   : out apb_slv_out_type;
82
    gpti   : in gptimer_in_type;
83
    gpto   : out gptimer_out_type
84
  );
85
  end component;
86
 
87
-- 32-bit ram with AHB interface
88
 
89
  component ahbram
90
  generic (
91
    hindex  : integer := 0;
92
    haddr   : integer := 0;
93
    hmask   : integer := 16#fff#;
94
    tech    : integer := DEFMEMTECH;
95
    kbytes  : integer := 1);
96
  port (
97
    rst    : in  std_ulogic;
98
    clk    : in  std_ulogic;
99
    ahbsi  : in  ahb_slv_in_type;
100
    ahbso  : out ahb_slv_out_type);
101
  end component;
102
 
103
  type ahbram_out_type is record
104
    ce : std_ulogic;
105
  end record;
106
 
107
  component ftahbram is
108
    generic (
109
      hindex    : integer := 0;
110
      haddr     : integer := 0;
111
      hmask     : integer := 16#fff#;
112
      tech      : integer := DEFMEMTECH;
113
      kbytes    : integer := 1;
114
      pindex    : integer := 0;
115
      paddr     : integer := 0;
116
      pmask     : integer := 16#fff#;
117
      edacen    : integer := 1;
118
      autoscrub : integer := 0;
119
      errcnten  : integer := 0;
120
      cntbits   : integer range 1 to 8 := 1;
121
      ahbpipe   : integer := 0);
122
    port (
123
      rst     : in  std_ulogic;
124
      clk     : in  std_ulogic;
125
      ahbsi   : in  ahb_slv_in_type;
126
      ahbso   : out ahb_slv_out_type;
127
      apbi    : in  apb_slv_in_type;
128
      apbo    : out apb_slv_out_type;
129
      aramo   : out ahbram_out_type
130
    );
131
  end component;
132
 
133
  component ahbtrace is
134
  generic (
135
    hindex  : integer := 0;
136
    ioaddr    : integer := 16#000#;
137
    iomask    : integer := 16#E00#;
138
    tech    : integer := DEFMEMTECH;
139
    irq     : integer := 0;
140
    kbytes  : integer := 1);
141
  port (
142
    rst    : in  std_ulogic;
143
    clk    : in  std_ulogic;
144
    ahbmi  : in  ahb_mst_in_type;
145
    ahbsi  : in  ahb_slv_in_type;
146
    ahbso  : out ahb_slv_out_type
147
  );
148
  end component;
149
 
150
type ahb_dma_in_type is record
151
  address         : std_logic_vector(31 downto 0);
152
  wdata           : std_logic_vector(31 downto 0);
153
  start           : std_ulogic;
154
  burst           : std_ulogic;
155
  write           : std_ulogic;
156
  busy            : std_ulogic;
157
  irq             : std_ulogic;
158
  size            : std_logic_vector(1 downto 0);
159
end record;
160
 
161
type ahb_dma_out_type is record
162
  start           : std_ulogic;
163
  active          : std_ulogic;
164
  ready           : std_ulogic;
165
  retry           : std_ulogic;
166
  mexc            : std_ulogic;
167
  haddr           : std_logic_vector(9 downto 0);
168
  rdata           : std_logic_vector(31 downto 0);
169
end record;
170
 
171
  component ahbmst
172
  generic (
173
    hindex  : integer := 0;
174
    hirq    : integer := 0;
175
    venid   : integer := VENDOR_GAISLER;
176
    devid   : integer := 0;
177
    version : integer := 0;
178
    chprot  : integer := 3;
179
    incaddr : integer := 0);
180
   port (
181
      rst  : in  std_ulogic;
182
      clk  : in  std_ulogic;
183
      dmai : in ahb_dma_in_type;
184
      dmao : out ahb_dma_out_type;
185
      ahbi : in  ahb_mst_in_type;
186
      ahbo : out ahb_mst_out_type
187
      );
188
  end component;
189
 
190
  type gpio_in_type is record
191
    din      : std_logic_vector(31 downto 0);
192
    sig_in   : std_logic_vector(31 downto 0);
193
    sig_en   : std_logic_vector(31 downto 0);
194
  end record;
195
 
196
  type gpio_out_type is record
197
    dout     : std_logic_vector(31 downto 0);
198
    oen      : std_logic_vector(31 downto 0);
199
    val      : std_logic_vector(31 downto 0);
200
    sig_out  : std_logic_vector(31 downto 0);
201
  end record;
202
 
203
  type ahb2ahb_ctrl_type is record
204
    slck  : std_ulogic;
205
    blck  : std_ulogic;
206
  end record;
207
 
208
 component grgpio
209
  generic (
210
    pindex   : integer := 0;
211
    paddr    : integer := 0;
212
    pmask    : integer := 16#fff#;
213
    imask    : integer := 16#0000#;
214
    nbits    : integer := 16;                   -- GPIO bits
215
    oepol    : integer := 0;                    -- Output enable polarity
216
    syncrst  : integer := 0;
217
    bypass   : integer := 16#0000#;
218
    scantest : integer := 0;
219
    bpdir    : integer := 16#0000#
220
  );
221
  port (
222
    rst    : in  std_ulogic;
223
    clk    : in  std_ulogic;
224
    apbi   : in  apb_slv_in_type;
225
    apbo   : out apb_slv_out_type;
226
    gpioi  : in  gpio_in_type;
227
    gpioo  : out gpio_out_type
228
  );
229
  end component;
230
 
231
  component ahb2ahb
232
  generic(
233
    memtech : integer := 0;
234
    hsindex : integer := 0;
235
    hmindex : integer := 0;
236
    slv     : integer := 0;
237
    dir     : integer := 0;   -- 0 - down, 1 - up
238
    ffact    : integer := 0;
239
    pfen    : integer range 0 to 1 := 0;
240
    rbufsz  : integer range 2 to 32 := 8;
241
    wbufsz  : integer range 2 to 32 := 2;
242
    iburst   : integer range 4 to 8 :=  8;
243
    rburst   : integer range 2 to 32 := 8;
244
    irqsync : integer range 0 to 2 := 0;
245
    bar0     : integer range 0 to 1073741823 := 0;
246
    bar1     : integer range 0 to 1073741823 := 0;
247
    bar2     : integer range 0 to 1073741823 := 0;
248
    bar3     : integer range 0 to 1073741823 := 0;
249
    sbus     : integer := 0;
250
    mbus     : integer := 0;
251
    ioarea   : integer := 0;
252
    ibrsten  : integer := 0);
253
  port (
254
    rstn   : in std_ulogic;
255
    hclkm  : in std_ulogic;
256
    hclks  : in std_ulogic;
257
    ahbsi  : in ahb_slv_in_type;
258
    ahbso  : out ahb_slv_out_type;
259
    ahbmi  : in ahb_mst_in_type;
260
    ahbmo  : out ahb_mst_out_type;
261
    ahbso2 : in ahb_slv_out_vector;
262
    lcki   : in ahb2ahb_ctrl_type;
263
    lcko   : out ahb2ahb_ctrl_type
264
    );
265
  end component;
266
 
267
  component ahbbridge
268
  generic(
269
    memtech     : integer := 0;
270
    ffact       : integer := 2;
271
    -- high-speed bus
272
    hsb_hsindex : integer := 0;
273
    hsb_hmindex : integer := 0;
274
    hsb_iclsize : integer range 4 to 8 := 8;
275
    hsb_bank0     : integer range 0 to 1073741823 := 0;
276
    hsb_bank1     : integer range 0 to 1073741823 := 0;
277
    hsb_bank2     : integer range 0 to 1073741823 := 0;
278
    hsb_bank3     : integer range 0 to 1073741823 := 0;
279
    hsb_ioarea   : integer := 0;
280
    -- low-speed bus
281
    lsb_hsindex : integer := 0;
282
    lsb_hmindex : integer := 0;
283
    lsb_rburst  : integer range 16 to 32 := 16;
284
    lsb_wburst  : integer range 2 to 32 :=  8;
285
    lsb_bank0     : integer range 0 to 1073741823 := 0;
286
    lsb_bank1     : integer range 0 to 1073741823 := 0;
287
    lsb_bank2     : integer range 0 to 1073741823 := 0;
288
    lsb_bank3     : integer range 0 to 1073741823 := 0;
289
    lsb_ioarea    : integer := 0);
290
  port (
291
    rstn    : in std_ulogic;
292
    hsb_clk : in std_ulogic;
293
    lsb_clk : in std_ulogic;
294
    hsb_ahbsi : in  ahb_slv_in_type;
295
    hsb_ahbso : out ahb_slv_out_type;
296
    hsb_ahbsov: in  ahb_slv_out_vector;
297
    hsb_ahbmi : in  ahb_mst_in_type;
298
    hsb_ahbmo : out ahb_mst_out_type;
299
    lsb_ahbsi : in  ahb_slv_in_type;
300
    lsb_ahbso : out ahb_slv_out_type;
301
    lsb_ahbsov: in  ahb_slv_out_vector;
302
    lsb_ahbmi : in  ahb_mst_in_type;
303
    lsb_ahbmo : out ahb_mst_out_type);
304
  end component;
305
 
306
  function ahb2ahb_membar(memaddr : ahb_addr_type; prefetch, cache : std_ulogic;
307
                          addrmask : ahb_addr_type)
308
  return integer;
309
 
310
  function ahb2ahb_iobar(memaddr : ahb_addr_type; addrmask : ahb_addr_type)
311
  return integer;
312
 
313
  type ahbstat_in_type is record
314
    cerror : std_logic_vector(0 to NAHBSLV-1);
315
  end record;
316
 
317
  component ahbstat is
318
    generic(
319
      pindex : integer := 0;
320
      paddr  : integer := 0;
321
      pmask  : integer := 16#FFF#;
322
      pirq   : integer := 0;
323
      nftslv : integer range 1 to NAHBSLV - 1 := 3);
324
    port(
325
      rst   : in std_ulogic;
326
      clk   : in std_ulogic;
327
      ahbmi : in ahb_mst_in_type;
328
      ahbsi : in ahb_slv_in_type;
329
      stati : in ahbstat_in_type;
330
      apbi  : in apb_slv_in_type;
331
      apbo  : out apb_slv_out_type
332
    );
333
  end component;
334
 
335
  type nuhosp3_in_type is record
336
    flash_d     : std_logic_vector(15 downto 0);
337
    smsc_data   : std_logic_vector(31 downto 0);
338
    smsc_ardy   : std_ulogic;
339
    smsc_intr   : std_ulogic;
340
    smsc_nldev  : std_ulogic;
341
    lcd_data    : std_logic_vector(7 downto 0);
342
  end record;
343
 
344
  type nuhosp3_out_type is record
345
    flash_a     : std_logic_vector(20 downto 0);
346
    flash_d     : std_logic_vector(15 downto 0);
347
    flash_oen   : std_ulogic;
348
    flash_wen   : std_ulogic;
349
    flash_cen   : std_ulogic;
350
    smsc_addr   : std_logic_vector(14 downto 0);
351
    smsc_data   : std_logic_vector(31 downto 0);
352
    smsc_nbe    : std_logic_vector(3 downto 0);
353
    smsc_resetn : std_ulogic;
354
    smsc_nrd    : std_ulogic;
355
    smsc_nwr    : std_ulogic;
356
    smsc_ncs    : std_ulogic;
357
    smsc_aen    : std_ulogic;
358
    smsc_lclk   : std_ulogic;
359
    smsc_wnr    : std_ulogic;
360
    smsc_rdyrtn : std_ulogic;
361
    smsc_cycle  : std_ulogic;
362
    smsc_nads   : std_ulogic;
363
    smsc_ben    : std_ulogic;
364
    lcd_data    : std_logic_vector(7 downto 0);
365
    lcd_rs      : std_ulogic;
366
    lcd_rw      : std_ulogic;
367
    lcd_en      : std_ulogic;
368
    lcd_backl   : std_ulogic;
369
    lcd_ben     : std_ulogic;
370
  end record;
371
 
372
  component nuhosp3
373
  generic (
374
    hindex  : integer := 0;
375
    haddr   : integer := 0;
376
    hmask   : integer := 16#fff#;
377
    ioaddr : integer := 16#200#;
378
    iomask : integer := 16#fff#);
379
  port (
380
    rst    : in  std_ulogic;
381
    clk    : in  std_ulogic;
382
    ahbsi  : in  ahb_slv_in_type;
383
    ahbso  : out ahb_slv_out_type;
384
    nui    : in  nuhosp3_in_type;
385
    nuo    : out nuhosp3_out_type
386
  );
387
  end component;
388
 
389
-- On-chip Logic Analyzer
390
 
391
  component logan is
392
 
393
  generic (
394
    dbits   : integer range 0 to 256 := 32;        -- Number of traced signals
395
    depth   : integer range 256 to 16384 := 1024;  -- Depth of trace buffer
396
    trigl   : integer range 1 to 63 := 1;          -- Number of trigger levels
397
    usereg  : integer range 0 to 1 := 1;           -- Use input register
398
    usequal : integer range 0 to 1 := 0;
399
    usediv  : integer range 0 to 1 := 1;
400
    pindex  : integer := 0;
401
    paddr   : integer := 0;
402
    pmask   : integer := 16#F00#;
403
    memtech : integer := DEFMEMTECH);
404
  port (
405
    rstn    : in  std_logic;
406
    clk     : in  std_logic;
407
    tclk    : in  std_logic;
408
    apbi    : in  apb_slv_in_type;                        -- APB in record
409
    apbo    : out apb_slv_out_type;                       -- APB out record
410
    signals : in  std_logic_vector(dbits - 1 downto 0));  -- Traced signals
411
 
412
  end component;
413
 
414
  type ps2_in_type is record
415
    ps2_clk_i      : std_ulogic;
416
    ps2_data_i     : std_ulogic;
417
  end record;
418
 
419
  type ps2_out_type is record
420
    ps2_clk_o      : std_ulogic;
421
    ps2_clk_oe     : std_ulogic;
422
    ps2_data_o     : std_ulogic;
423
    ps2_data_oe    : std_ulogic;
424
  end record;
425
 
426
  component apbps2
427
  generic(
428
    pindex      : integer := 0;
429
    paddr       : integer := 0;
430
    pmask       : integer := 16#fff#;
431
    pirq        : integer := 0;
432
    fKHz        : integer := 50000;
433
    fixed       : integer := 1);
434
  port(
435
    rst         : in std_ulogic;                -- Global asynchronous reset
436
    clk         : in std_ulogic;                -- Global clock
437
    apbi        : in apb_slv_in_type;
438
    apbo        : out apb_slv_out_type;
439
    ps2i        : in ps2_in_type;
440
    ps2o        : out ps2_out_type
441
    );
442
  end component;
443
 
444
  type apbvga_out_type is record
445
    hsync           : std_ulogic;                       -- horizontal sync
446
    vsync           : std_ulogic;                       -- vertical sync
447
    comp_sync       : std_ulogic;                       -- composite sync
448
    blank           : std_ulogic;                       -- blank signal
449
    video_out_r     : std_logic_vector(7 downto 0);     -- red channel
450
    video_out_g     : std_logic_vector(7 downto 0);     -- green channel
451
    video_out_b     : std_logic_vector(7 downto 0);     -- blue channel
452
  end record;
453
 
454
  component apbvga
455
  generic(
456
    memtech     : integer := DEFMEMTECH;
457
    pindex      : integer := 0;
458
    paddr       : integer := 0;
459
    pmask       : integer := 16#fff#);
460
  port(
461
    rst             : in std_ulogic;                        -- Global asynchronous reset
462
    clk             : in std_ulogic;                        -- Global clock
463
    vgaclk          : in std_ulogic;                        -- VGA clock
464
    apbi            : in apb_slv_in_type;
465
    apbo            : out apb_slv_out_type;
466
    vgao            : out apbvga_out_type
467
    );
468
  end component;
469
 
470
  component svgactrl
471
  generic(
472
    length      : integer := 384;        -- Fifo-length
473
    part        : integer := 128;        -- Fifo-part lenght
474
    memtech     : integer := DEFMEMTECH;
475
    pindex      : integer := 0;
476
    paddr       : integer := 0;
477
    pmask       : integer := 16#fff#;
478
    hindex      : integer := 0;
479
    hirq        : integer := 0;
480
    clk0        : integer := 40000;
481
    clk1        : integer := 20000;
482
    clk2        : integer := 15385;
483
    clk3        : integer := 0;
484
    burstlen    : integer range 2 to 8 := 8
485
    );
486
  port (
487
    rst       : in std_logic;
488
    clk       : in std_logic;
489
    vgaclk    : in std_logic;
490
    apbi      : in apb_slv_in_type;
491
    apbo      : out apb_slv_out_type;
492
    vgao      : out apbvga_out_type;
493
    ahbi      : in  ahb_mst_in_type;
494
    ahbo      : out ahb_mst_out_type;
495
    clk_sel   : out std_logic_vector(1 downto 0)
496
    );
497
 
498
  end component;
499
 
500
  constant vgao_none : apbvga_out_type :=
501
        ('0', '0', '0', '0', "00000000", "00000000", "00000000");
502
  constant ps2o_none : ps2_out_type := ('1', '1', '1', '1');
503
 
504
--  component ahbrom
505
--  generic (
506
--    hindex  : integer := 0;
507
--    haddr   : integer := 0;
508
--    hmask   : integer := 16#fff#;
509
--    pipe    : integer := 0;
510
--    tech    : integer := 0;
511
--    kbytes  : integer := 1);
512
--  port (
513
--    rst     : in  std_ulogic;
514
--    clk     : in  std_ulogic;
515
--    ahbsi   : in  ahb_slv_in_type;
516
--    ahbso   : out ahb_slv_out_type
517
--  );
518
--  end component;
519
 
520
  component ahbdma
521
   generic (
522
     hindex : integer := 0;
523
     pindex : integer := 0;
524
     paddr  : integer := 0;
525
     pmask  : integer := 16#fff#;
526
     pirq   : integer := 0;
527
     dbuf   : integer := 0);
528
   port (
529
      rst  : in  std_logic;
530
      clk  : in  std_ulogic;
531
      apbi : in  apb_slv_in_type;
532
      apbo : out apb_slv_out_type;
533
      ahbi : in  ahb_mst_in_type;
534
      ahbo : out ahb_mst_out_type
535
      );
536
  end component;
537
 
538
   -----------------------------------------------------------------------------
539
   -- Interface type declarations for FIFO controller
540
   -----------------------------------------------------------------------------
541
   type FIFO_In_Type is record
542
      Din:                 Std_Logic_Vector(31 downto 0); -- data input
543
      Pin:                 Std_Logic_Vector( 3 downto 0); -- parity input
544
      EFn:                 Std_ULogic;                    -- empty flag
545
      FFn:                 Std_ULogic;                    -- full flag
546
      HFn:                 Std_ULogic;                    -- half flag
547
   end record;
548
 
549
   type FIFO_Out_Type is record
550
      Dout:                Std_Logic_Vector(31 downto 0); -- data output
551
      Den:                 Std_Logic_Vector(31 downto 0); -- data enable
552
      Pout:                Std_Logic_Vector( 3 downto 0); -- parity output
553
      Pen:                 Std_Logic_Vector( 3 downto 0); -- parity enable
554
      WEn:                 Std_ULogic;                    -- write enable
555
      REn:                 Std_ULogic;                    -- read enable
556
   end record;
557
 
558
   -----------------------------------------------------------------------------
559
   -- Component declaration for GR FIFO Interface
560
   -----------------------------------------------------------------------------
561
   component grfifo is
562
      generic (
563
         hindex:           Integer := 0;
564
         pindex:           Integer := 0;
565
         paddr:            Integer := 0;
566
         pmask:            Integer := 16#FFF#;
567
         pirq:             Integer := 1;                 -- index of first irq
568
         dwidth:           Integer := 16;                -- data width
569
         ptrwidth:         Integer range 4 to 16 := 12;  --  16 to  64k bytes
570
                                                         -- 128 to 512k bits
571
         singleirq:        Integer range 0 to 1 := 0;    -- single irq output
572
         oepol:            Integer := 1);                -- output enable polarity
573
      port (
574
         rstn:       in    Std_ULogic;
575
         clk:        in    Std_ULogic;
576
         apbi:       in    APB_Slv_In_Type;
577
         apbo:       out   APB_Slv_Out_Type;
578
         ahbi:       in    AHB_Mst_In_Type;
579
         ahbo:       out   AHB_Mst_Out_Type;
580
         fifoi:      in    FIFO_In_Type;
581
         fifoo:      out   FIFO_Out_Type);
582
   end component;
583
 
584
   -----------------------------------------------------------------------------
585
   -- Interface type declarations for CAN controllers
586
   -----------------------------------------------------------------------------
587
   type Analog_In_Type is record
588
      Ain:                 Std_Logic_Vector(31 downto 0); -- address input
589
      Din:                 Std_Logic_Vector(31 downto 0); -- data input
590
      Rdy:                 Std_ULogic;                    -- adc ready input
591
      Trig:                Std_Logic_Vector( 2 downto 0); -- adc trigger inputs
592
   end record;
593
 
594
   type Analog_Out_Type is record
595
      Aout:                Std_Logic_Vector(31 downto 0); -- address output
596
      Aen:                 Std_Logic_Vector(31 downto 0); -- address enable
597
      Dout:                Std_Logic_Vector(31 downto 0); -- dac data output
598
      Den:                 Std_Logic_Vector(31 downto 0); -- dac data enable
599
      Wr:                  Std_ULogic;                    -- dac write strobe
600
      CS:                  Std_ULogic;                    -- adc chip select
601
      RC:                  Std_ULogic;                    -- adc read/convert
602
   end record;
603
 
604
   -----------------------------------------------------------------------------
605
   -- Component declaration for GR ADC/DAC Interface
606
   -----------------------------------------------------------------------------
607
   component gradcdac is
608
      generic (
609
         pindex:           Integer := 0;
610
         paddr:            Integer := 0;
611
         pmask:            Integer := 16#FFF#;
612
         pirq:             Integer := 1;                 -- index of first irq
613
         awidth:           Integer := 8;                 -- address width
614
         dwidth:           Integer := 16;                -- data width
615
         oepol:            Integer := 1);                -- output enable polarity
616
      port (
617
         rstn:       in    Std_ULogic;
618
         clk:        in    Std_ULogic;
619
         apbi:       in    APB_Slv_In_Type;
620
         apbo:       out   APB_Slv_Out_Type;
621
         adi:        in    Analog_In_Type;
622
         ado:        out   Analog_Out_Type);
623
   end component;
624
 
625
  component grclkgate
626
  generic (
627
    pindex   : integer := 0;
628
    paddr    : integer := 0;
629
    pmask    : integer := 16#fff#;
630
    nbits    : integer := 16
631
  );
632
  port (
633
    rst    : in  std_ulogic;
634
    clk    : in  std_ulogic;
635
    apbi   : in  apb_slv_in_type;
636
    apbo   : out apb_slv_out_type;
637
    clockdis  : out std_logic_vector(nbits-1 downto 0);
638
    reset     : out std_logic_vector(nbits-1 downto 0)
639
  );
640
  end component;
641
 
642
  -----------------------------------------------------------------------------
643
  -- I2C types and components
644
  -----------------------------------------------------------------------------
645
 
646
  type i2c_in_type is record
647
      scl : std_ulogic;
648
      sda : std_ulogic;
649
  end record;
650
 
651
  type i2c_out_type is record
652
      scl    : std_ulogic;
653
      scloen : std_ulogic;
654
      sda    : std_ulogic;
655
      sdaoen : std_ulogic;
656
  end record;
657
 
658
  -- AMBA wrapper for OC I2C-master
659
  component i2cmst
660
    generic (
661
      pindex : integer;
662
      paddr  : integer;
663
      pmask  : integer;
664
      pirq   : integer;
665
      oepol  : integer range 0 to 1 := 0
666
      );
667
    port (
668
      rstn   : in  std_ulogic;
669
      clk    : in  std_ulogic;
670
      apbi   : in  apb_slv_in_type;
671
      apbo   : out apb_slv_out_type;
672
      i2ci   : in  i2c_in_type;
673
      i2co   : out i2c_out_type
674
    );
675
  end component;
676
 
677
  component i2cslv
678
    generic (
679
      pindex  : integer := 0;
680
      paddr   : integer := 0;
681
      pmask   : integer := 16#fff#;
682
      pirq    : integer := 0;
683
      hardaddr : integer range 0 to 1 := 0;
684
      tenbit   : integer range 0 to 1 := 0;
685
      i2caddr  : integer range 0 to 1023 := 0;
686
      oepol    : integer range 0 to 1 := 0
687
      );
688
    port (
689
      rstn    : in  std_ulogic;
690
      clk     : in  std_ulogic;
691
      apbi    : in  apb_slv_in_type;
692
      apbo    : out apb_slv_out_type;
693
      i2ci    : in  i2c_in_type;
694
      i2co    : out i2c_out_type
695
      );
696
  end component;
697
 
698
  -----------------------------------------------------------------------------
699
  -- SPI controller
700
  -----------------------------------------------------------------------------
701
  type spi_in_type is record
702
    miso    : std_ulogic;
703
    mosi    : std_ulogic;
704
    sck     : std_ulogic;
705
    spisel  : std_ulogic;
706
  end record;
707
 
708
  type spi_out_type is record
709
    miso     : std_ulogic;
710
    misooen  : std_ulogic;
711
    mosi     : std_ulogic;
712
    mosioen  : std_ulogic;
713
    sck      : std_ulogic;
714
    sckoen   : std_ulogic;
715
    ssn  : std_logic_vector(7 downto 0);  -- used by GE/OC SPI core
716
  end record;
717
 
718
  component spictrl
719
    generic (
720
      pindex   : integer := 0;
721
      paddr    : integer := 0;
722
      pmask    : integer := 16#fff#;
723
      pirq     : integer := 0;
724
      fdepth   : integer range 1 to 7  := 1;
725
      slvselen : integer range 0 to 1  := 0;
726
      slvselsz : integer range 1 to 32 := 1;
727
      oepol    : integer range 0 to 1  := 0
728
      );
729
    port (
730
      rstn   : in std_ulogic;
731
      clk    : in std_ulogic;
732
      apbi   : in apb_slv_in_type;
733
      apbo   : out apb_slv_out_type;
734
      spii   : in  spi_in_type;
735
      spio   : out spi_out_type;
736
      slvsel : out std_logic_vector((slvselsz-1) downto 0)
737
    );
738
  end component;
739
 
740
  function nandtree(v : std_logic_vector) return std_ulogic;
741
 
742
end;
743
 
744
 
745
package body misc is
746
 
747
  function ahb2ahb_membar(memaddr : ahb_addr_type; prefetch, cache : std_ulogic;
748
                          addrmask : ahb_addr_type)
749
  return integer is
750
    variable tmp : std_logic_vector(29 downto 0);
751
    variable bar : std_logic_vector(31 downto 0);
752
    variable res : integer range 0 to 1073741823;
753
  begin
754
    bar := ahb_membar(memaddr, prefetch, cache, addrmask);
755
    tmp := (others => '0');
756
    tmp(29 downto 18) := bar(31 downto 20);
757
    tmp(17 downto 0) := bar(17 downto 0);
758
    res := conv_integer(tmp);
759
    return(res);
760
  end;
761
 
762
  function ahb2ahb_iobar(memaddr : ahb_addr_type; addrmask : ahb_addr_type)
763
  return integer is
764
    variable tmp : std_logic_vector(29 downto 0);
765
    variable bar : std_logic_vector(31 downto 0);
766
    variable res : integer range 0 to 1073741823;
767
  begin
768
    bar := ahb_iobar(memaddr, addrmask);
769
    tmp := (others => '0');
770
    tmp(29 downto 18) := bar(31 downto 20);
771
    tmp(17 downto 0) := bar(17 downto 0);
772
    res := conv_integer(tmp);
773
    return(res);
774
  end;
775
 
776
  function nandtree(v : std_logic_vector) return std_ulogic is
777
  variable a : std_logic_vector(v'length-1 downto 0);
778
  variable b : std_logic_vector(v'length downto 0);
779
  begin
780
 
781
    a := v; b(0) := '1';
782
 
783
    for i in 0 to v'length-1 loop
784
      b(i+1) := a(i) nand b(i);
785
    end loop;
786
 
787
    return b(v'length);
788
 
789
  end;
790
 
791
 
792
end;

powered by: WebSVN 2.1.0

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