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

Subversion Repositories all_digital_fm_receiver

[/] [all_digital_fm_receiver/] [trunk/] [nco.vhd] - Blame information for rev 5

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 rahmatulla
LIBRARY ieee;
2
USE ieee.std_logic_1164.all;
3
USE IEEE.numeric_std.ALL;
4
 
5
 
6
 
7
ENTITY nco IS
8
-- Declarations
9
 port ( clk   : in  std_logic;
10
                        reset   : in  std_logic;
11
                        din                     : in    signed(11 downto 0);
12
                        dout    : out signed(7 downto 0)
13
                );
14
END nco ;
15
 
16
-- hds interface_end
17
ARCHITECTURE behavior OF nco IS
18
type vectype is array (0 to 256) of signed(7 downto 0);
19
-- ROM cosrom 
20
constant cosrom  : vectype := (
21
 
22
1 => "01111111",
23
2 => "01111111",
24
3 => "01111111",
25
4 => "01111111",
26
5 => "01111111",
27
6 => "01111111",
28
7 => "01111111",
29
8 => "01111111",
30
9 => "01111111",
31
10 => "01111111",
32
11 => "01111111",
33
12 => "01111111",
34
13 => "01111111",
35
14 => "01111111",
36
15 => "01111111",
37
16 => "01111111",
38
17 => "01111111",
39
18 => "01111111",
40
19 => "01111111",
41
20 => "01111111",
42
21 => "01111111",
43
22 => "01111111",
44
23 => "01111111",
45
24 => "01111111",
46
25 => "01111110",
47
26 => "01111110",
48
27 => "01111110",
49
28 => "01111110",
50
29 => "01111110",
51
30 => "01111110",
52
31 => "01111110",
53
32 => "01111110",
54
33 => "01111101",
55
34 => "01111101",
56
35 => "01111101",
57
36 => "01111101",
58
37 => "01111101",
59
38 => "01111101",
60
39 => "01111100",
61
40 => "01111100",
62
41 => "01111100",
63
42 => "01111100",
64
43 => "01111100",
65
44 => "01111011",
66
45 => "01111011",
67
46 => "01111011",
68
47 => "01111011",
69
48 => "01111010",
70
49 => "01111010",
71
50 => "01111010",
72
51 => "01111010",
73
52 => "01111010",
74
53 => "01111001",
75
54 => "01111001",
76
55 => "01111001",
77
56 => "01111001",
78
57 => "01111000",
79
58 => "01111000",
80
59 => "01111000",
81
60 => "01110111",
82
61 => "01110111",
83
62 => "01110111",
84
63 => "01110111",
85
64 => "01110110",
86
65 => "01110110",
87
66 => "01110110",
88
67 => "01110101",
89
68 => "01110101",
90
69 => "01110101",
91
70 => "01110100",
92
71 => "01110100",
93
72 => "01110100",
94
73 => "01110011",
95
74 => "01110011",
96
75 => "01110011",
97
76 => "01110010",
98
77 => "01110010",
99
78 => "01110010",
100
79 => "01110001",
101
80 => "01110001",
102
81 => "01110001",
103
82 => "01110000",
104
83 => "01110000",
105
84 => "01101111",
106
85 => "01101111",
107
86 => "01101111",
108
87 => "01101110",
109
88 => "01101110",
110
89 => "01101101",
111
90 => "01101101",
112
91 => "01101101",
113
92 => "01101100",
114
93 => "01101100",
115
94 => "01101011",
116
95 => "01101011",
117
96 => "01101010",
118
97 => "01101010",
119
98 => "01101010",
120
99 => "01101001",
121
100 => "01101001",
122
101 => "01101000",
123
102 => "01101000",
124
103 => "01100111",
125
104 => "01100111",
126
105 => "01100110",
127
106 => "01100110",
128
107 => "01100101",
129
108 => "01100101",
130
109 => "01100100",
131
110 => "01100100",
132
111 => "01100011",
133
112 => "01100011",
134
113 => "01100010",
135
114 => "01100010",
136
115 => "01100001",
137
116 => "01100001",
138
117 => "01100000",
139
118 => "01100000",
140
119 => "01011111",
141
120 => "01011111",
142
121 => "01011110",
143
122 => "01011110",
144
123 => "01011101",
145
124 => "01011101",
146
125 => "01011100",
147
126 => "01011100",
148
127 => "01011011",
149
128 => "01011011",
150
129 => "01011010",
151
130 => "01011001",
152
131 => "01011001",
153
132 => "01011000",
154
133 => "01011000",
155
134 => "01010111",
156
135 => "01010111",
157
136 => "01010110",
158
137 => "01010101",
159
138 => "01010101",
160
139 => "01010100",
161
140 => "01010100",
162
141 => "01010011",
163
142 => "01010010",
164
143 => "01010010",
165
144 => "01010001",
166
145 => "01010001",
167
146 => "01010000",
168
147 => "01001111",
169
148 => "01001111",
170
149 => "01001110",
171
150 => "01001110",
172
151 => "01001101",
173
152 => "01001100",
174
153 => "01001100",
175
154 => "01001011",
176
155 => "01001010",
177
156 => "01001010",
178
157 => "01001001",
179
158 => "01001000",
180
159 => "01001000",
181
160 => "01000111",
182
161 => "01000111",
183
162 => "01000110",
184
163 => "01000101",
185
164 => "01000101",
186
165 => "01000100",
187
166 => "01000011",
188
167 => "01000011",
189
168 => "01000010",
190
169 => "01000001",
191
170 => "01000001",
192
171 => "01000000",
193
172 => "00111111",
194
173 => "00111110",
195
174 => "00111110",
196
175 => "00111101",
197
176 => "00111100",
198
177 => "00111100",
199
178 => "00111011",
200
179 => "00111010",
201
180 => "00111010",
202
181 => "00111001",
203
182 => "00111000",
204
183 => "00111000",
205
184 => "00110111",
206
185 => "00110110",
207
186 => "00110101",
208
187 => "00110101",
209
188 => "00110100",
210
189 => "00110011",
211
190 => "00110011",
212
191 => "00110010",
213
192 => "00110001",
214
193 => "00110000",
215
194 => "00110000",
216
195 => "00101111",
217
196 => "00101110",
218
197 => "00101101",
219
198 => "00101101",
220
199 => "00101100",
221
200 => "00101011",
222
201 => "00101010",
223
202 => "00101010",
224
203 => "00101001",
225
204 => "00101000",
226
205 => "00100111",
227
206 => "00100111",
228
207 => "00100110",
229
208 => "00100101",
230
209 => "00100100",
231
210 => "00100100",
232
211 => "00100011",
233
212 => "00100010",
234
213 => "00100001",
235
214 => "00100001",
236
215 => "00100000",
237
216 => "00011111",
238
217 => "00011110",
239
218 => "00011110",
240
219 => "00011101",
241
220 => "00011100",
242
221 => "00011011",
243
222 => "00011011",
244
223 => "00011010",
245
224 => "00011001",
246
225 => "00011000",
247
226 => "00011000",
248
227 => "00010111",
249
228 => "00010110",
250
229 => "00010101",
251
230 => "00010100",
252
231 => "00010100",
253
232 => "00010011",
254
233 => "00010010",
255
234 => "00010001",
256
235 => "00010001",
257
236 => "00010000",
258
237 => "00001111",
259
238 => "00001110",
260
239 => "00001101",
261
240 => "00001101",
262
241 => "00001100",
263
242 => "00001011",
264
243 => "00001010",
265
244 => "00001010",
266
245 => "00001001",
267
246 => "00001000",
268
247 => "00000111",
269
248 => "00000110",
270
249 => "00000110",
271
250 => "00000101",
272
251 => "00000100",
273
252 => "00000011",
274
253 => "00000010",
275
254 => "00000010",
276
255 => "00000001",
277
256 => "00000000");
278
 
279
signal dtemp  : unsigned(17 downto 0);
280
signal din_buf  : signed(17 downto 0);
281
signal dtemp1  : integer;
282
constant offset : unsigned(17 downto 0) := "000100000000000000";
283
 
284
begin
285
 
286
process(CLK, RESET)
287
begin
288
        if (RESET='1') then
289
            dout <= (others => '0');
290
            din_buf <= (others => '0');
291
                                                dtemp <= (others => '0');
292
                                                dtemp1 <= 0;
293
        elsif rising_edge(CLK) then
294
                        din_buf <= din(11)&din(11)&din(11)&din(11)&din(11)&din(11)&din;
295
                                                dtemp <= dtemp + unsigned(din_buf) + offset;
296
                                                dtemp1 <= to_integer(dtemp(17 downto 8));
297
                                                if (dtemp1 >= 0) and (dtemp1 < 257) then
298
                                                        dout <= cosrom(dtemp1);
299
                                                elsif (dtemp1 >= 257) and (dtemp1 < 513) then
300
                                                        dout <= -cosrom(512-dtemp1);
301
                                                elsif (dtemp1 >= 513) and (dtemp1 < 769) then
302
                                                        dout <= -cosrom(dtemp1-512);
303
                                                else
304
                                                        dout <= cosrom(1024-dtemp1);
305
                                                end if;
306
    end if;
307
end process;
308
END behavior;

powered by: WebSVN 2.1.0

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