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

powered by: WebSVN 2.1.0

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