Project

General

Profile

Download (7.15 KB) Statistics
| Branch: | Tag: | Revision:
1
---------------------------------------------------------------------------------------------------
2
-- Filename    : usbrx_toplevel.vhd
3
-- Project     : OsmoSDR FPGA Firmware
4
-- Purpose     : Toplevel component
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 work;
29
	use work.all;
30
	use work.mt_toolbox.all;
31
	use work.usbrx.all;
32
	
33
entity usbrx_toplevel is
34
	port (
35
		-- common
36
		clk_in_pclk : in  std_logic;
37
		
38
		-- special control
39
		dings    : in  std_logic;
40
		dingsrst : in  std_logic;
41
		
42
		-- ADC interface
43
		adc_cs   : out std_logic;
44
		adc_sck  : out std_logic;
45
		adc_sd1  : in  std_logic;
46
		adc_sd2  : in  std_logic;
47
		
48
		-- control SPI
49
		ctl_int  : out std_logic;
50
		ctl_cs   : in  std_logic;
51
		ctl_sck  : in  std_logic;
52
		ctl_mosi : in  std_logic;
53
		ctl_miso : out std_logic;
54
	
55
		-- data SPIs
56
		rx_clk   : out std_logic;
57
		rx_syn   : out std_logic;
58
		rx_dat   : out std_logic;
59
		
60
		-- data SPIs
61
		tx_clk   : in  std_logic;
62
		tx_syn   : in  std_logic;
63
		tx_dat   : in  std_logic;
64
		
65
		-- gain PWMs
66
		gain0    : out std_logic;
67
		gain1    : out std_logic;
68
		
69
		-- GPS
70
		gps_1pps : in  std_logic;
71
		gps_10k  : in  std_logic;
72
	
73
		-- gpios
74
		led      : inout std_logic;
75
		gpio     : inout std_logic_vector(9 downto 0);
76
		
77
		-- virtual GNDs/VCCs
78
		vgnd     : out   std_logic_vector(11 downto 0);
79
		vcc33    : inout std_logic_vector(11 downto 0);
80
		vcc12    : inout std_logic_vector(4 downto 0)
81
	);
82
end usbrx_toplevel;
83

    
84
architecture rtl of usbrx_toplevel is
85

    
86
	-- clocks
87
	signal clk_30 : std_logic;
88
	signal clk_80 : std_logic;
89
	signal rst_30 : std_logic;
90
	signal rst_80 : std_logic;
91
	
92
	-- config
93
	signal cfg_pwm  : usbrx_pwm_config_t;
94
	signal cfg_gpio : usbrx_gpio_config_t;
95
	signal cfg_adc  : usbrx_adc_config_t;
96
	signal cfg_ssc  : usbrx_ssc_config_t;
97
	signal cfg_fil  : usbrx_fil_config_t;
98
	signal cfg_off  : usbrx_off_config_t;
99
	
100
	-- status
101
	signal stat_ref  : usbrx_ref_status_t;
102
	signal stat_gpio : usbrx_gpio_status_t;
103
	
104
	-- ADC <-> offset
105
	signal adc_off_clk : std_logic;
106
	signal adc_off_i   : unsigned(13 downto 0);
107
	signal adc_off_q   : unsigned(13 downto 0);
108
		
109
	-- offset <-> filter
110
	signal off_fil_clk : std_logic;
111
	signal off_fil_i   : signed(15 downto 0);
112
	signal off_fil_q   : signed(15 downto 0);
113
	
114
	-- filter <-> output
115
	signal fil_out_clk : std_logic;
116
	signal fil_out_i   : signed(15 downto 0);
117
	signal fil_out_q   : signed(15 downto 0);
118
	
119
	-- enusure that signal-names are kept (important for timing contraints)
120
	attribute syn_keep of clk_in_pclk : signal is true;
121
	
122
begin
123
	
124
	-- house-keeping
125
	cg: entity usbrx_clkgen
126
		port map (
127
			-- clock input
128
			clk_30_pclk	=> clk_in_pclk,
129
			ext_rst     => dingsrst,
130
			
131
			-- system clock
132
			clk_30 => clk_30,
133
			clk_80 => clk_80,
134
			rst_30 => rst_30,
135
			rst_80 => rst_80
136
		);
137
	
138
	-- register bank
139
	rb: entity usbrx_regbank
140
		port map (
141
			-- common
142
			clk   => clk_80,
143
			reset => rst_80,
144
			
145
			-- config
146
			cfg_pwm => cfg_pwm,
147
			cfg_adc => cfg_adc,
148
			cfg_ssc => cfg_ssc,
149
			cfg_fil => cfg_fil,
150
			cfg_off => cfg_off,
151
			cfg_gpio => cfg_gpio,
152
		
153
			-- status
154
			stat_ref => stat_ref,
155
			stat_gpio => stat_gpio,
156
	
157
			-- SPI interface
158
			spi_ncs  => ctl_cs,
159
			spi_sclk => ctl_sck,
160
			spi_mosi => ctl_mosi,
161
			spi_miso => ctl_miso
162
		);
163
		
164
	-- reference clock measurement
165
	refclk: entity usbrx_clkref
166
		port map (
167
			-- system clocks
168
			clk_sys  => clk_80,
169
			rst_sys  => rst_80,
170
			
171
			-- reference signal
172
			clk_ref  => clk_30,
173
			rst_ref  => rst_30,
174
			
175
			-- 1pps signal
176
			gps_1pps => gps_1pps,
177
			
178
			-- status
179
			status   => stat_ref
180
		);
181
		
182
	-- GPIOs
183
	io: entity usbrx_gpio
184
		port map (
185
			-- common
186
			clk    => clk_80,
187
			reset  => rst_80,
188
			
189
			-- GPIOs
190
			gpio(9 downto 0) => gpio,
191
			gpio(10)         => led,
192
			
193
			-- config / status
194
			config => cfg_gpio,
195
			status => stat_gpio
196
		);
197

    
198
	-- gain PWMs
199
	pwm: entity usbrx_pwm
200
		port map (
201
			-- common
202
			clk    => clk_80,
203
			reset  => rst_80,
204
	
205
			-- config
206
			config => cfg_pwm,
207
			
208
			-- PWM output
209
			pwm0   => gain0,
210
			pwm1   => gain1
211
		);
212
		
213
	-- A/D interface
214
	adc: entity usbrx_ad7357
215
		port map (
216
			-- common
217
			clk   => clk_80,
218
			reset => rst_80,
219
	
220
			-- config
221
			config => cfg_adc,
222
		
223
			-- ADC interface
224
			adc_cs  => adc_cs,
225
			adc_sck => adc_sck,
226
			adc_sd1 => adc_sd1,
227
			adc_sd2 => adc_sd2,
228
			
229
			-- output
230
			out_clk => adc_off_clk,
231
			out_i   => adc_off_i,
232
			out_q   => adc_off_q
233
		);
234
		
235
	-- offset stage
236
	off: entity usbrx_offset
237
		port map (
238
			-- common
239
			clk     => clk_80,
240
			reset   => rst_80,
241
			
242
			-- config
243
			config  => cfg_off,
244
			
245
			-- input
246
			in_clk  => adc_off_clk,
247
			in_i    => adc_off_i,
248
			in_q    => adc_off_q,
249
			
250
			-- output
251
			out_clk => off_fil_clk,
252
			out_i   => off_fil_i,
253
			out_q   => off_fil_q
254
		);
255

    
256

    
257
	-- decimation filter
258
 	fil: entity usbrx_decimate
259
		port map (
260
			-- common
261
			clk     => clk_80,
262
			reset   => rst_80,
263
			
264
			-- config
265
			config  => cfg_fil,
266
			
267
			-- input
268
			in_clk  => off_fil_clk,
269
			in_i    => off_fil_i,
270
			in_q    => off_fil_q,
271
			
272
			-- output
273
			out_clk => fil_out_clk,
274
			out_i   => fil_out_i,
275
			out_q   => fil_out_q
276
		);
277

    
278
	-- SSC output
279
	ssc: entity usbrx_ssc
280
		port map (
281
			-- common
282
			clk    => clk_80,
283
			reset  => rst_80,
284
			
285
			-- config 
286
			config => cfg_ssc,
287
			
288
			-- output
289
			in_clk => fil_out_clk,
290
			in_i   => fil_out_i,
291
			in_q   => fil_out_q,
292
			
293
			-- SSC interface
294
			ssc_clk => rx_clk,
295
			ssc_syn => rx_syn,
296
			ssc_dat => rx_dat
297
		);
298

    
299
	-- drive unused IOs
300
	ctl_int <= '1';
301
	
302
	-- virtual GNDs/VCCs
303
	vgnd  <= (others=>'0');
304
	vcc12 <= (others=>'Z');
305
	vcc33 <= (others=>'1');
306
		
307
end rtl;
308

    
309

    
(7-7/7)
Add picture from clipboard (Maximum size: 48.8 MB)