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/] [techmap/] [altera_mf/] [clkgen_altera_mf.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
 
20
library ieee;
21
use ieee.std_logic_1164.all;
22
library techmap;
23
use techmap.gencomp.all;
24
-- pragma translate_off
25
library altera_mf;
26
use altera_mf.altpll;
27
-- pragma translate_on
28
 
29
entity altera_pll is
30
  generic (
31
    clk_mul  : integer := 1;
32
    clk_div  : integer := 1;
33
    clk_freq : integer := 25000;
34
    clk2xen  : integer := 0;
35
    sdramen  : integer := 0
36
  );
37
  port (
38
    inclk0  : in  std_ulogic;
39
    c0      : out std_ulogic;
40
    c0_2x   : out std_ulogic;
41
    e0      : out std_ulogic;
42
    locked  : out std_ulogic
43
);
44
end;
45
 
46
architecture rtl of altera_pll is
47
 
48
  component altpll
49
  generic (
50
    operation_mode         : string := "NORMAL" ;
51
    inclk0_input_frequency : positive;
52
    width_clock            : positive := 6;
53
    clk0_multiply_by       : positive := 1;
54
    clk0_divide_by         : positive := 1;
55
    clk1_multiply_by       : positive := 1;
56
    clk1_divide_by         : positive := 1;
57
    extclk0_multiply_by    : positive := 1;
58
    extclk0_divide_by      : positive := 1
59
  );
60
  port (
61
    inclk       : in std_logic_vector(1 downto 0);
62
    clkena      : in std_logic_vector(5 downto 0);
63
    extclkena   : in std_logic_vector(3 downto 0);
64
    clk         : out std_logic_vector(width_clock-1 downto 0);
65
    extclk      : out std_logic_vector(3 downto 0);
66
    locked      : out std_logic
67
  );
68
  end component;
69
 
70
  signal clkena : std_logic_vector (5 downto 0);
71
  signal clkout : std_logic_vector (5 downto 0);
72
  signal inclk  : std_logic_vector (1 downto 0);
73
  signal extclk : std_logic_vector (3 downto 0);
74
 
75
  constant clk_period : integer := 1000000000/clk_freq;
76
  constant CLK_MUL2X : integer := clk_mul * 2;
77
begin
78
 
79
  clkena(5 downto 2) <= (others => '0');
80
  noclk2xgen: if (clk2xen = 0) generate clkena(1 downto 0) <= "01"; end generate;
81
  clk2xgen: if (clk2xen /= 0) generate clkena(1 downto 0) <= "11"; end generate;
82
 
83
  inclk <= '0' & inclk0;
84
  c0 <= clkout(0); c0_2x <= clkout(1); e0 <= extclk(0);
85
 
86
  sden : if sdramen = 1 generate
87
    altpll0 : altpll
88
    generic map (
89
      operation_mode => "ZERO_DELAY_BUFFER", inclk0_input_frequency => clk_period,
90
      extclk0_multiply_by => clk_mul, extclk0_divide_by => clk_div,
91
      clk0_multiply_by => clk_mul, clk0_divide_by => clk_div,
92
      clk1_multiply_by => CLK_MUL2X, clk1_divide_by => clk_div)
93
    port map ( clkena => clkena, inclk => inclk, extclkena => clkena(3 downto 0),
94
      clk => clkout, locked => locked, extclk => extclk);
95
  end generate;
96
 
97
  nosd : if sdramen = 0 generate
98
    altpll0 : altpll
99
    generic map (
100
      operation_mode => "NORMAL", inclk0_input_frequency => clk_period,
101
      extclk0_multiply_by => clk_mul, extclk0_divide_by => clk_div,
102
      clk0_multiply_by => clk_mul, clk0_divide_by => clk_div,
103
      clk1_multiply_by => CLK_MUL2X, clk1_divide_by => clk_div)
104
    port map ( clkena => clkena, inclk => inclk, extclkena => clkena(3 downto 0),
105
      clk => clkout, locked => locked, extclk => extclk);
106
  end generate;
107
 
108
end;
109
 
110
library ieee;
111
use ieee.std_logic_1164.all;
112
-- pragma translate_off
113
library altera_mf;
114
library grlib;
115
use grlib.stdlib.all;
116
-- pragma translate_on
117
library techmap;
118
use techmap.gencomp.all;
119
 
120
entity clkgen_altera_mf is
121
 generic (
122
    clk_mul  : integer := 1;
123
    clk_div  : integer := 1;
124
    sdramen  : integer := 0;
125
    sdinvclk : integer := 0;
126
    pcien    : integer := 0;
127
    pcidll   : integer := 0;
128
    pcisysclk: integer := 0;
129
    freq     : integer := 25000;
130
    clk2xen  : integer := 0);
131
  port (
132
    clkin   : in  std_logic;
133
    pciclkin: in  std_logic;
134
    clk     : out std_logic;                    -- main clock
135
    clkn    : out std_logic;                    -- inverted main clock
136
    clk2x   : out std_logic;                    -- double clock    
137
    sdclk   : out std_logic;                    -- SDRAM clock
138
    pciclk  : out std_logic;                    -- PCI clock
139
    cgi     : in clkgen_in_type;
140
    cgo     : out clkgen_out_type);
141
end;
142
 
143
architecture rtl of clkgen_altera_mf is
144
 
145
  constant VERSION : integer := 1;
146
  constant CLKIN_PERIOD : integer := 20;
147
 
148
  signal   clk_i             : std_logic;
149
  signal   clkint, pciclkint : std_logic;
150
  signal   pllclk, pllclkn   : std_logic;  -- generated clocks
151
  signal   s_clk             : std_logic;
152
 
153
  -- altera pll
154
  component altera_pll
155
    generic (
156
      clk_mul  : integer := 1;
157
      clk_div  : integer := 1;
158
      clk_freq : integer := 25000;
159
      clk2xen  : integer := 0;
160
      sdramen  : integer := 0
161
    );
162
    port (
163
      inclk0 : in  std_ulogic;
164
      e0     : out std_ulogic;
165
      c0     : out std_ulogic;
166
      c0_2x  : out std_ulogic;
167
      locked : out std_ulogic);
168
  end component;
169
 
170
 
171
begin
172
 
173
  cgo.pcilock <= '1';
174
 
175
--   c0 : if (PCISYSCLK = 0) generate
176
--     Clkint <= Clkin;
177
--   end generate;
178
 
179
--   c1 : if (PCISYSCLK = 1) generate
180
--     Clkint <= pciclkin;
181
--   end generate;
182
 
183
--   c2 : if (PCIEN = 1) generate
184
--     p0 : if (PCIDLL = 1) generate
185
--       pciclkint <= pciclkin;
186
--       pciclk    <= pciclkint;
187
--     end generate;
188
--     p1 : if (PCIDLL = 0) generate
189
--       u0 : if (PCISYSCLK = 0) generate
190
--         pciclkint <= pciclkin;
191
--       end generate;
192
--       pciclk <= clk_i when (PCISYSCLK = 1) else pciclkint;
193
--     end generate;
194
--   end generate;
195
 
196
--   c3 : if (PCIEN = 0) generate
197
--     pciclk <= Clkint;
198
--   end generate;
199
 
200
 
201
  c0: if (PCISYSCLK = 0) or (PCIEN = 0) generate
202
    clkint <= clkin;
203
  end generate c0;
204
 
205
  c1: if PCIEN /= 0 generate
206
    d0: if PCISYSCLK = 1 generate
207
      clkint <= pciclkin;
208
    end generate d0;
209
    pciclk <= pciclkin;
210
  end generate c1;
211
 
212
  c2: if PCIEN = 0 generate
213
    pciclk <= '0';
214
  end generate c2;
215
 
216
  sdclk_pll : altera_pll
217
  generic map (clk_mul, clk_div, freq, clk2xen, sdramen)
218
  port map ( inclk0 => clkint, e0 => sdclk, c0 => s_clk, c0_2x => clk2x,
219
        locked => cgo.clklock);
220
  clk <= s_clk;
221
  clkn <= not s_clk;
222
 
223
-- pragma translate_off
224
  bootmsg : report_version
225
  generic map (
226
    "clkgen_altera" & ": altpll sdram/pci clock generator, version " & tost(VERSION),
227
    "clkgen_altera" & ": Frequency " &  tost(freq) & " KHz, PLL scaler " & tost(clk_mul) & "/" & tost(clk_div));
228
-- pragma translate_on
229
 
230
 
231
end;
232
 
233
 

powered by: WebSVN 2.1.0

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