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

Subversion Repositories w11

[/] [w11/] [tags/] [w11a_V0.74/] [rtl/] [bplib/] [nxcramlib/] [nxcramlib.vhd] - Blame information for rev 37

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 37 wfjm
-- $Id: nxcramlib.vhd 788 2016-07-16 22:23:23Z mueller $
2 2 wfjm
--
3 37 wfjm
-- Copyright 2011-2016 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
4 2 wfjm
--
5
-- This program is free software; you may redistribute and/or modify it under
6
-- the terms of the GNU General Public License as published by the Free
7
-- Software Foundation, either version 2, or at your option any later version.
8
--
9
-- This program is distributed in the hope that it will be useful, but
10
-- WITHOUT ANY WARRANTY, without even the implied warranty of MERCHANTABILITY
11
-- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12
-- for complete details.
13
--
14
------------------------------------------------------------------------------
15 15 wfjm
-- Package Name:   nxcramlib
16
-- Description:    Nexys 2/3 CRAM drivers
17 2 wfjm
-- 
18
-- Dependencies:   -
19 37 wfjm
-- Tool versions:  ise 11.4-14.7; viv 2014.4-2016.2; ghdl 0.26-0.33
20 8 wfjm
--
21 2 wfjm
-- Revision History: 
22
-- Date         Rev Version  Comment
23 37 wfjm
-- 2016-07-16   788   1.1    add cram_(read0|read1|write)delay functions
24 15 wfjm
-- 2011-11-26   433   1.0    Initial version (extracted from nexys2lib)
25 2 wfjm
------------------------------------------------------------------------------
26
 
27
library ieee;
28
use ieee.std_logic_1164.all;
29
 
30
use work.slvtypes.all;
31
 
32 15 wfjm
package nxcramlib is
33 37 wfjm
 
34
pure function cram_delay(clk_mhz : positive;
35
                         delay_ps : positive) return positive;
36
pure function cram_read0delay(clk_mhz : positive) return positive;
37
pure function cram_read1delay(clk_mhz : positive) return positive;
38
pure function cram_writedelay(clk_mhz : positive) return positive;
39 2 wfjm
 
40 37 wfjm
constant cram_read0delay_ps : positive := 80000;   -- initial read delay
41
constant cram_read1delay_ps : positive := 30000;   -- page read delay
42
constant cram_writedelay_ps : positive := 75000;   -- write delay
43
 
44 15 wfjm
component nx_cram_dummy is              -- CRAM protection dummy 
45 2 wfjm
  port (
46
    O_MEM_CE_N : out slbit;             -- cram: chip enable   (act.low)
47
    O_MEM_BE_N : out slv2;              -- cram: byte enables  (act.low)
48
    O_MEM_WE_N : out slbit;             -- cram: write enable  (act.low)
49
    O_MEM_OE_N : out slbit;             -- cram: output enable (act.low)
50
    O_MEM_ADV_N  : out slbit;           -- cram: address valid (act.low)
51
    O_MEM_CLK : out slbit;              -- cram: clock
52
    O_MEM_CRE : out slbit;              -- cram: command register enable
53
    I_MEM_WAIT : in slbit;              -- cram: mem wait
54
    O_MEM_ADDR  : out slv23;            -- cram: address lines
55
    IO_MEM_DATA : inout slv16           -- cram: data lines
56
  );
57
end component;
58
 
59 15 wfjm
component nx_cram_memctl_as is          -- CRAM driver (async+page mode)
60 2 wfjm
  generic (
61 37 wfjm
    READ0DELAY : positive := 4;         -- read word 0 delay in clock cycles
62 2 wfjm
    READ1DELAY : positive := 2;         -- read word 1 delay in clock cycles
63 37 wfjm
    WRITEDELAY : positive := 4);        -- write delay in clock cycles
64 2 wfjm
  port (
65
    CLK : in slbit;                     -- clock
66
    RESET : in slbit;                   -- reset
67
    REQ   : in slbit;                   -- request
68
    WE    : in slbit;                   -- write enable
69
    BUSY : out slbit;                   -- controller busy
70
    ACK_R : out slbit;                  -- acknowledge read
71
    ACK_W : out slbit;                  -- acknowledge write
72
    ACT_R : out slbit;                  -- signal active read
73
    ACT_W : out slbit;                  -- signal active write
74
    ADDR : in slv22;                    -- address (32 bit word address)
75
    BE : in slv4;                       -- byte enable
76
    DI : in slv32;                      -- data in  (memory view)
77
    DO : out slv32;                     -- data out (memory view)
78
    O_MEM_CE_N : out slbit;             -- cram: chip enable   (act.low)
79
    O_MEM_BE_N : out slv2;              -- cram: byte enables  (act.low)
80
    O_MEM_WE_N : out slbit;             -- cram: write enable  (act.low)
81
    O_MEM_OE_N : out slbit;             -- cram: output enable (act.low)
82
    O_MEM_ADV_N : out slbit;            -- cram: address valid (act.low)
83
    O_MEM_CLK : out slbit;              -- cram: clock
84
    O_MEM_CRE : out slbit;              -- cram: command register enable
85
    I_MEM_WAIT : in slbit;              -- cram: mem wait
86
    O_MEM_ADDR  : out slv23;            -- cram: address lines
87
    IO_MEM_DATA : inout slv16           -- cram: data lines
88
  );
89
end component;
90
 
91 15 wfjm
end package nxcramlib;
92 37 wfjm
 
93
-- ----------------------------------------------------------------------------
94
package body nxcramlib is
95
 
96
-- -------------------------------------
97
pure function cram_delay(               -- calculate delay in clock cycles
98
  clk_mhz : positive;                     -- clock frequency in MHz
99
  delay_ps : positive)                    -- delay in ps
100
  return positive is
101
  variable period_ps : natural := 0;       -- clk period in ps
102
begin
103
  period_ps := 1000000 / clk_mhz;
104
  return (delay_ps + period_ps - 10) / period_ps;
105
end function cram_delay;
106
 
107
-- -------------------------------------
108
pure function cram_read0delay(          -- read0 delay in clock cycles
109
  clk_mhz : positive)                     -- clock frequency in MHz
110
  return positive is
111
begin
112
  return cram_delay(clk_mhz, cram_read0delay_ps);
113
end function cram_read0delay;
114
 
115
-- -------------------------------------
116
pure function cram_read1delay(          -- read1 delay in clock cycles
117
  clk_mhz : positive)                     -- clock frequency in MHz
118
  return positive is
119
begin
120
  return cram_delay(clk_mhz, cram_read1delay_ps);
121
end function cram_read1delay;
122
 
123
-- -------------------------------------
124
pure function cram_writedelay(          -- write delay in clock cycles
125
  clk_mhz : positive)                     -- clock frequency in MHz
126
  return positive is
127
begin
128
  return cram_delay(clk_mhz, cram_writedelay_ps);
129
end function cram_writedelay;
130
 
131
end package body nxcramlib;

powered by: WebSVN 2.1.0

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