Project

General

Profile

Download (4.99 KB) Statistics
| Branch: | Tag: | Revision:
1 c62f5734 Christian Daniel
---------------------------------------------------------------------------------------------------
2
-- Filename    : usbrx_clkgen.vhd
3
-- Project     : OsmoSDR FPGA Firmware
4
-- Purpose     : Clock Management
5
---------------------------------------------------------------------------------------------------
6
7
-----------------------------------------------------------------------------------
8
-- Copyright (C) 2012 maintech GmbH, Otto-Hahn-Str. 15, 97204 Hoechberg, Germany --
9
-- written by Matthias Kleffel                                                   --
10
--                                                                               --
11
-- This program is free software; you can redistribute it and/or modify          --
12
-- it under the terms of the GNU General Public License as published by          --
13
-- the Free Software Foundation as version 3 of the License, or                  --
14
--                                                                               --
15
-- This program is distributed in the hope that it will be useful,               --
16
-- but WITHOUT ANY WARRANTY; without even the implied warranty of                --
17
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the                  --
18
-- GNU General Public License V3 for more details.                               --
19
--                                                                               --
20
-- You should have received a copy of the GNU General Public License             --
21
-- along with this program. If not, see <http://www.gnu.org/licenses/>.          --
22
-----------------------------------------------------------------------------------
23
24
library ieee;
25
	use ieee.std_logic_1164.all;
26
	use ieee.std_logic_misc.all;
27
	use ieee.numeric_std.all;
28
library xp2;
29
	use xp2.all;
30
	use xp2.components.all;
31
library work;
32
	use work.all;
33
	use work.mt_toolbox.all;
34
	
35
entity usbrx_clkgen is
36
	port(
37
		-- clock input
38
		clk_30_pclk	: in  std_logic;		-- 30MHz
39
		ext_rst     : in  std_logic;		-- external reset
40
	
41
		-- system clock
42
		clk_30 		: out std_logic;		-- 30MHz clock
43
		clk_80 		: out std_logic;		-- 80MHz clock
44
		rst_30	 	: out std_logic;		-- 30MHz reset
45 83340d0b Christian Daniel
		rst_80	 	: out std_logic			-- 80MHz reset
46 c62f5734 Christian Daniel
	);
47
end usbrx_clkgen;
48
49
architecture rtl of usbrx_clkgen is
50
51
	-- reset generation
52
	signal rst_pll 		: std_logic;		-- reset signal for PLLs
53
	signal pll_locked	: std_logic;		-- PLLs locked
54
	signal reset_i	 	: std_logic;		-- reset-signal
55
	
56
	-- system clock management
57
	signal clk_80_pll	: std_logic;
58
	
59
	-- enusure that signal-names are kept (important for timing contraints)
60
	attribute syn_keep of clk_80_pll : signal is true;
61
	
62
	-- component declaration
63
    component EPLLD1
64
        generic (CLKOK_BYPASS : in String; CLKOS_BYPASS : in String; 
65
                CLKOP_BYPASS : in String; DUTY : in Integer; 
66
                PHASEADJ : in String; PHASE_CNTL : in String; 
67
                CLKOK_DIV : in Integer; CLKFB_DIV : in Integer; 
68
                CLKOP_DIV : in Integer; CLKI_DIV : in Integer;
69
                FIN  : in String);
70
        port (CLKI: in std_logic; CLKFB: in std_logic; RST: in std_logic; 
71
            RSTK: in std_logic; DPAMODE: in std_logic; DRPAI3: in std_logic; 
72
            DRPAI2: in std_logic; DRPAI1: in std_logic; DRPAI0: in std_logic; 
73
            DFPAI3: in std_logic; DFPAI2: in std_logic; DFPAI1: in std_logic; 
74
            DFPAI0: in std_logic; PWD: in std_logic; CLKOP: out std_logic; 
75
            CLKOS: out std_logic; CLKOK: out std_logic; LOCK: out std_logic; 
76
            CLKINTFB: out std_logic);
77
    end component;
78
			
79
begin
80
81
	--
82
	-- reset generation
83
	--
84
	
85
	-- generate asynchronous reset-signal
86
	rg: entity mt_reset_gen
87
		port map (
88
			clk 		=> clk_30_pclk,
89
			ext_rst     => ext_rst,
90
			pll_locked	=> pll_locked,
91
			reset_pll	=> rst_pll,
92 83340d0b Christian Daniel
			reset_sys	=> reset_i
93 c62f5734 Christian Daniel
		);
94
	
95
	-- sync reset to clock-domains
96
	rs30: entity mt_reset_sync
97
		port map (
98
			clk     => clk_30_pclk,
99
			rst_in  => reset_i, 
100
			rst_out => rst_30
101
		);
102
	rs80: entity mt_reset_sync
103
		port map (
104
			clk     => clk_80_pll,
105
			rst_in  => reset_i, 
106
			rst_out => rst_80
107
		);
108
109
	--
110
	-- system clock
111
	--
112
	
113
	-- PLL for system-clock
114
    pll : EPLLD1
115
		generic map (
116
			FIN          => "30.0",
117
			CLKOK_BYPASS => "DISABLED",
118
			CLKOS_BYPASS => "DISABLED", 
119
			CLKOP_BYPASS => "DISABLED", 
120
			PHASE_CNTL   => "STATIC", 
121
			DUTY         => 8, 
122
			PHASEADJ     => "0.0",
123
			CLKOK_DIV    => 2,
124
			CLKOP_DIV    => 8,
125
			CLKFB_DIV    => 8, 
126
			CLKI_DIV     => 3
127
		)
128
		port map (
129
			CLKI    => clk_30_pclk,
130
			CLKFB   => clk_80_pll,
131
			RST     => rst_pll, 
132
			RSTK    => '0', 
133
			DPAMODE => '0',
134
			DRPAI3  => '0', 
135
			DRPAI2  => '0',
136
			DRPAI1  => '0',
137
			DRPAI0  => '0', 
138
			DFPAI3  => '0',
139
			DFPAI2  => '0',
140
			DFPAI1  => '0', 
141
			DFPAI0  => '0',
142
			PWD     => '0',
143
			CLKOP   => clk_80_pll, 
144
			CLKOS   => open, 
145
			CLKOK   => open,
146
			LOCK    => pll_locked,
147
			CLKINTFB=> open
148
		);
149
			
150
	-- output clocks
151
	clk_30 <= clk_30_pclk;
152
	clk_80 <= clk_80_pll;
153
	
154
end rtl;
Add picture from clipboard (Maximum size: 48.8 MB)