DDS.vhd


1
-- reference: "DDFS mit BROM" by Lothar Miller ( http://lothar-miller.de/s9y/archives/37-DDFS-mit-BROM.html)
2
3
library IEEE;
4
  use IEEE.std_logic_1164.all;
5
  use IEEE.numeric_std.all;
6
--------------------------------------------------
7
Entity DDS is
8
  
9
  generic (clock_frequency: integer:= 49152000   -- Hz : here enter main clock frequency
10
           
11
        );
12
--------------------------------------------------
13
   Port (   
14
            CLK        : in  std_logic;
15
            FREQ_INC   : in  std_logic_vector (11 downto 0);
16
            BCK        : in  std_logic;
17
            DIN_CNT    : in  integer;
18
            DIN_CNT_MAX: in integer; 
19
            PHASE_INC : in std_logic_vector (11 downto 0);
20
            DOUT       : out std_logic_vector (31 downto 0) := (others => '0')
21
        );
22
   end DDS;
23
--------------------------------------------------
24
Architecture BEHAVIOUR of DDS is
25
--------------------------------------------------
26
  signal RESULT   : signed (31 downto 0):= (others=>'0');
27
  --signal RESULT_TMP   : signed (31 downto 0);
28
  signal ACCUM    : unsigned (11 downto 0) := (others=>'0'); 
29
  signal ADDRESS  : integer range 0 to 4095 := 0;
30
  signal ADDRESS_TMP  : integer range 0 to 4095;
31
  signal ROMADDR  : integer range 0 to 4095 := 0;
32
  signal QUADRANT : std_logic := '0'; 
33
  signal QUADRANT_TMP : std_logic := '0'; 
34
  signal SIGN     : std_logic := '0';  
35
  signal SIGN_TMP : std_logic := '0';
36
  signal ACCUM_TMP: unsigned (11 downto 0) := (others=>'0');
37
  
38
  signal DOUT_TMP : std_logic_vector(31 downto 0):= (others=>'0');
39
40
type signal_shape_LUT is array(1023 downto 0) of std_logic_vector(31 downto 0); -- generated by MatLab-Script
41
constant sine_LUT: signal_shape_LUT := (
42
43
  0 => x"00000000",
44
  1 => x"002CCA1F",
45
  2 => x"00599438",
46
  3 => x"00865E43",
47
  4 => x"00B3283A",
48
  5 => x"00DFF214",
49
  6 => x"010CBBCC",
50
  7 => x"0139855B",
51
  8 => x"01664EB9",
52
  9 => x"019317E0",
53
  10 => x"01BFE0C9",
54
  11 => x"01ECA96C",
55
  12 => x"021971C4",
56
  13 => x"024639C8",
57
  14 => x"02730173",
58
  15 => x"029FC8BD",
59
  16 => x"02CC8F9F",
60
  17 => x"02F95612",
61
  18 => x"03261C11",
62
  19 => x"0352E192",
63
  20 => x"037FA690",
64
  21 => x"03AC6B04",
65
  22 => x"03D92EE7",
66
  23 => x"0405F232",
67
  24 => x"0432B4DE",
68
  25 => x"045F76E4",
69
  26 => x"048C383D",
70
  27 => x"04B8F8E2",
71
  28 => x"04E5B8CD",
72
  29 => x"051277F6",
73
  30 => x"053F3657",
74
  31 => x"056BF3E8",
75
  32 => x"0598B0A3",
76
  33 => x"05C56C81",
77
  34 => x"05F2277B",
78
  35 => x"061EE18A",
79
  36 => x"064B9AA8",
80
  37 => x"067852CC",
81
  38 => x"06A509F1",
82
  39 => x"06D1C00F",
83
  40 => x"06FE751F",
84
  41 => x"072B291C",
85
  42 => x"0757DBFD",
86
  43 => x"07848DBB",
87
  44 => x"07B13E51",
88
  45 => x"07DDEDB7",
89
  46 => x"080A9BE6",
90
  47 => x"083748D7",
91
  48 => x"0863F483",
92
  49 => x"08909EE4",
93
  50 => x"08BD47F2",
94
  51 => x"08E9EFA7",
95
  52 => x"091695FC",
96
  53 => x"09433AEA",
97
  54 => x"096FDE69",
98
  55 => x"099C8074",
99
  56 => x"09C92103",
100
  57 => x"09F5C00F",
101
  58 => x"0A225D92",
102
  59 => x"0A4EF984",
103
  60 => x"0A7B93DF",
104
  61 => x"0AA82C9B",
105
  62 => x"0AD4C3B3",
106
  63 => x"0B01591E",
107
  64 => x"0B2DECD6",
108
  65 => x"0B5A7ED5",
109
  66 => x"0B870F13",
110
  67 => x"0BB39D8A",
111
  68 => x"0BE02A32",
112
  69 => x"0C0CB505",
113
  70 => x"0C393DFB",
114
  71 => x"0C65C50F",
115
  72 => x"0C924A38",
116
  73 => x"0CBECD71",
117
  74 => x"0CEB4EB3",
118
  75 => x"0D17CDF5",
119
  76 => x"0D444B33",
120
  77 => x"0D70C664",
121
  78 => x"0D9D3F82",
122
  79 => x"0DC9B686",
123
  80 => x"0DF62B69",
124
  81 => x"0E229E24",
125
  82 => x"0E4F0EB1",
126
  83 => x"0E7B7D08",
127
  84 => x"0EA7E923",
128
  85 => x"0ED452FB",
129
  86 => x"0F00BA89",
130
  87 => x"0F2D1FC6",
131
  88 => x"0F5982AB",
132
  89 => x"0F85E332",
133
  90 => x"0FB24153",
134
  91 => x"0FDE9D08",
135
  92 => x"100AF64A",
136
  93 => x"10374D12",
137
  94 => x"1063A159",
138
  95 => x"108FF319",
139
  96 => x"10BC424A",
140
  97 => x"10E88EE5",
141
  98 => x"1114D8E5",
142
  99 => x"11412041",
143
  100 => x"116D64F4",
144
  101 => x"1199A6F6",
145
  102 => x"11C5E640",
146
  103 => x"11F222CC",
147
  104 => x"121E5C93",
148
  105 => x"124A938E",
149
  106 => x"1276C7B6",
150
  107 => x"12A2F905",
151
  108 => x"12CF2773",
152
  109 => x"12FB52FA",
153
  110 => x"13277B92",
154
  111 => x"1353A136",
155
  112 => x"137FC3DE",
156
  113 => x"13ABE383",
157
  114 => x"13D8001F",
158
  115 => x"140419AB",
159
  116 => x"14303020",
160
  117 => x"145C4377",
161
  118 => x"148853AA",
162
  119 => x"14B460B1",
163
  120 => x"14E06A86",
164
  121 => x"150C7122",
165
  122 => x"1538747F",
166
  123 => x"15647494",
167
  124 => x"1590715D",
168
  125 => x"15BC6AD1",
169
  126 => x"15E860EA",
170
  127 => x"161453A2",
171
  128 => x"164042F1",
172
  129 => x"166C2ED0",
173
  130 => x"1698173A",
174
  131 => x"16C3FC27",
175
  132 => x"16EFDD90",
176
  133 => x"171BBB6F",
177
  134 => x"174795BC",
178
  135 => x"17736C72",
179
  136 => x"179F3F89",
180
  137 => x"17CB0EFA",
181
  138 => x"17F6DABF",
182
  139 => x"1822A2D2",
183
  140 => x"184E672A",
184
  141 => x"187A27C2",
185
  142 => x"18A5E493",
186
  143 => x"18D19D95",
187
  144 => x"18FD52C3",
188
  145 => x"19290416",
189
  146 => x"1954B186",
190
  147 => x"19805B0D",
191
  148 => x"19AC00A5",
192
  149 => x"19D7A245",
193
  150 => x"1A033FE9",
194
  151 => x"1A2ED989",
195
  152 => x"1A5A6F1E",
196
  153 => x"1A8600A2",
197
  154 => x"1AB18E0D",
198
  155 => x"1ADD175A",
199
  156 => x"1B089C81",
200
  157 => x"1B341D7C",
201
  158 => x"1B5F9A44",
202
  159 => x"1B8B12D2",
203
  160 => x"1BB68720",
204
  161 => x"1BE1F726",
205
  162 => x"1C0D62DF",
206
  163 => x"1C38CA43",
207
  164 => x"1C642D4C",
208
  165 => x"1C8F8BF3",
209
  166 => x"1CBAE632",
210
  167 => x"1CE63C01",
211
  168 => x"1D118D5A",
212
  169 => x"1D3CDA36",
213
  170 => x"1D68228F",
214
  171 => x"1D93665E",
215
  172 => x"1DBEA59C",
216
  173 => x"1DE9E043",
217
  174 => x"1E15164C",
218
  175 => x"1E4047B0",
219
  176 => x"1E6B7468",
220
  177 => x"1E969C6E",
221
  178 => x"1EC1BFBC",
222
  179 => x"1EECDE4A",
223
  180 => x"1F17F812",
224
  181 => x"1F430D0E",
225
  182 => x"1F6E1D36",
226
  183 => x"1F992884",
227
  184 => x"1FC42EF1",
228
  185 => x"1FEF3077",
229
  186 => x"201A2D0F",
230
  187 => x"204524B2",
231
  188 => x"2070175B",
232
  189 => x"209B0501",
233
  190 => x"20C5ED9F",
234
  191 => x"20F0D12E",
235
  192 => x"211BAFA7",
236
  193 => x"21468904",
237
  194 => x"21715D3D",
238
  195 => x"219C2C4E",
239
  196 => x"21C6F62E",
240
  197 => x"21F1BAD7",
241
  198 => x"221C7A43",
242
  199 => x"2247346B",
243
  200 => x"2271E948",
244
  201 => x"229C98D5",
245
  202 => x"22C74309",
246
  203 => x"22F1E7DF",
247
  204 => x"231C8751",
248
  205 => x"23472156",
249
  206 => x"2371B5EA",
250
  207 => x"239C4505",
251
  208 => x"23C6CEA1",
252
  209 => x"23F152B7",
253
  210 => x"241BD140",
254
  211 => x"24464A37",
255
  212 => x"2470BD94",
256
  213 => x"249B2B52",
257
  214 => x"24C59368",
258
  215 => x"24EFF5D2",
259
  216 => x"251A5288",
260
  217 => x"2544A984",
261
  218 => x"256EFABF",
262
  219 => x"25994633",
263
  220 => x"25C38BD9",
264
  221 => x"25EDCBAA",
265
  222 => x"261805A1",
266
  223 => x"264239B7",
267
  224 => x"266C67E4",
268
  225 => x"26969023",
269
  226 => x"26C0B26E",
270
  227 => x"26EACEBD",
271
  228 => x"2714E50A",
272
  229 => x"273EF54F",
273
  230 => x"2768FF84",
274
  231 => x"279303A5",
275
  232 => x"27BD01A9",
276
  233 => x"27E6F98C",
277
  234 => x"2810EB45",
278
  235 => x"283AD6CF",
279
  236 => x"2864BC24",
280
  237 => x"288E9B3C",
281
  238 => x"28B87411",
282
  239 => x"28E2469D",
283
  240 => x"290C12DA",
284
  241 => x"2935D8C1",
285
  242 => x"295F984B",
286
  243 => x"29895172",
287
  244 => x"29B30430",
288
  245 => x"29DCB07E",
289
  246 => x"2A065655",
290
  247 => x"2A2FF5B0",
291
  248 => x"2A598E88",
292
  249 => x"2A8320D7",
293
  250 => x"2AACAC95",
294
  251 => x"2AD631BD",
295
  252 => x"2AFFB048",
296
  253 => x"2B292830",
297
  254 => x"2B52996F",
298
  255 => x"2B7C03FD",
299
  256 => x"2BA567D5",
300
  257 => x"2BCEC4F1",
301
  258 => x"2BF81B49",
302
  259 => x"2C216AD7",
303
  260 => x"2C4AB396",
304
  261 => x"2C73F57F",
305
  262 => x"2C9D308B",
306
  263 => x"2CC664B3",
307
  264 => x"2CEF91F3",
308
  265 => x"2D18B842",
309
  266 => x"2D41D79C",
310
  267 => x"2D6AEFF9",
311
  268 => x"2D940154",
312
  269 => x"2DBD0BA5",
313
  270 => x"2DE60EE7",
314
  271 => x"2E0F0B13",
315
  272 => x"2E380023",
316
  273 => x"2E60EE11",
317
  274 => x"2E89D4D6",
318
  275 => x"2EB2B46B",
319
  276 => x"2EDB8CCC",
320
  277 => x"2F045DF0",
321
  278 => x"2F2D27D3",
322
  279 => x"2F55EA6E",
323
  280 => x"2F7EA5BA",
324
  281 => x"2FA759B1",
325
  282 => x"2FD0064D",
326
  283 => x"2FF8AB87",
327
  284 => x"3021495A",
328
  285 => x"3049DFBF",
329
  286 => x"30726EB0",
330
  287 => x"309AF626",
331
  288 => x"30C3761B",
332
  289 => x"30EBEE8A",
333
  290 => x"31145F6B",
334
  291 => x"313CC8B9",
335
  292 => x"31652A6D",
336
  293 => x"318D8481",
337
  294 => x"31B5D6EF",
338
  295 => x"31DE21B0",
339
  296 => x"320664BF",
340
  297 => x"322EA015",
341
  298 => x"3256D3AC",
342
  299 => x"327EFF7E",
343
  300 => x"32A72385",
344
  301 => x"32CF3FB9",
345
  302 => x"32F75416",
346
  303 => x"331F6095",
347
  304 => x"3347652F",
348
  305 => x"336F61E0",
349
  306 => x"3397569F",
350
  307 => x"33BF4368",
351
  308 => x"33E72834",
352
  309 => x"340F04FD",
353
  310 => x"3436D9BD",
354
  311 => x"345EA66D",
355
  312 => x"34866B08",
356
  313 => x"34AE2788",
357
  314 => x"34D5DBE5",
358
  315 => x"34FD881B",
359
  316 => x"35252C22",
360
  317 => x"354CC7F6",
361
  318 => x"35745B8F",
362
  319 => x"359BE6E8",
363
  320 => x"35C369FA",
364
  321 => x"35EAE4C0",
365
  322 => x"36125733",
366
  323 => x"3639C14E",
367
  324 => x"36612309",
368
  325 => x"36887C60",
369
  326 => x"36AFCD4C",
370
  327 => x"36D715C6",
371
  328 => x"36FE55CA",
372
  329 => x"37258D50",
373
  330 => x"374CBC53",
374
  331 => x"3773E2CD",
375
  332 => x"379B00B8",
376
  333 => x"37C2160D",
377
  334 => x"37E922C6",
378
  335 => x"381026DF",
379
  336 => x"38372250",
380
  337 => x"385E1513",
381
  338 => x"3884FF23",
382
  339 => x"38ABE079",
383
  340 => x"38D2B910",
384
  341 => x"38F988E2",
385
  342 => x"39204FE8",
386
  343 => x"39470E1D",
387
  344 => x"396DC37A",
388
  345 => x"39946FF9",
389
  346 => x"39BB1396",
390
  347 => x"39E1AE49",
391
  348 => x"3A08400C",
392
  349 => x"3A2EC8DB",
393
  350 => x"3A5548AE",
394
  351 => x"3A7BBF80",
395
  352 => x"3AA22D4B",
396
  353 => x"3AC89209",
397
  354 => x"3AEEEDB4",
398
  355 => x"3B154046",
399
  356 => x"3B3B89BA",
400
  357 => x"3B61CA08",
401
  358 => x"3B88012C",
402
  359 => x"3BAE2F20",
403
  360 => x"3BD453DD",
404
  361 => x"3BFA6F5E",
405
  362 => x"3C20819D",
406
  363 => x"3C468A94",
407
  364 => x"3C6C8A3C",
408
  365 => x"3C928092",
409
  366 => x"3CB86D8D",
410
  367 => x"3CDE5129",
411
  368 => x"3D042B5F",
412
  369 => x"3D29FC2B",
413
  370 => x"3D4FC385",
414
  371 => x"3D758169",
415
  372 => x"3D9B35D0",
416
  373 => x"3DC0E0B4",
417
  374 => x"3DE68210",
418
  375 => x"3E0C19DE",
419
  376 => x"3E31A818",
420
  377 => x"3E572CB8",
421
  378 => x"3E7CA7B9",
422
  379 => x"3EA21914",
423
  380 => x"3EC780C5",
424
  381 => x"3EECDEC4",
425
  382 => x"3F12330D",
426
  383 => x"3F377D9A",
427
  384 => x"3F5CBE64",
428
  385 => x"3F81F567",
429
  386 => x"3FA7229C",
430
  387 => x"3FCC45FD",
431
  388 => x"3FF15F86",
432
  389 => x"40166F2F",
433
  390 => x"403B74F4",
434
  391 => x"406070CF",
435
  392 => x"408562BA",
436
  393 => x"40AA4AAF",
437
  394 => x"40CF28A9",
438
  395 => x"40F3FCA2",
439
  396 => x"4118C694",
440
  397 => x"413D8679",
441
  398 => x"41623C4D",
442
  399 => x"4186E808",
443
  400 => x"41AB89A6",
444
  401 => x"41D02122",
445
  402 => x"41F4AE74",
446
  403 => x"42193198",
447
  404 => x"423DAA88",
448
  405 => x"4262193E",
449
  406 => x"42867DB6",
450
  407 => x"42AAD7E8",
451
  408 => x"42CF27D0",
452
  409 => x"42F36D67",
453
  410 => x"4317A8A9",
454
  411 => x"433BD990",
455
  412 => x"43600016",
456
  413 => x"43841C35",
457
  414 => x"43A82DE8",
458
  415 => x"43CC352A",
459
  416 => x"43F031F4",
460
  417 => x"44142442",
461
  418 => x"44380C0E",
462
  419 => x"445BE952",
463
  420 => x"447FBC08",
464
  421 => x"44A3842B",
465
  422 => x"44C741B7",
466
  423 => x"44EAF4A4",
467
  424 => x"450E9CEE",
468
  425 => x"45323A8E",
469
  426 => x"4555CD81",
470
  427 => x"457955BF",
471
  428 => x"459CD345",
472
  429 => x"45C0460B",
473
  430 => x"45E3AE0D",
474
  431 => x"46070B45",
475
  432 => x"462A5DAE",
476
  433 => x"464DA542",
477
  434 => x"4670E1FC",
478
  435 => x"469413D6",
479
  436 => x"46B73ACB",
480
  437 => x"46DA56D6",
481
  438 => x"46FD67F1",
482
  439 => x"47206E16",
483
  440 => x"47436941",
484
  441 => x"4766596C",
485
  442 => x"47893E91",
486
  443 => x"47AC18AB",
487
  444 => x"47CEE7B5",
488
  445 => x"47F1ABAA",
489
  446 => x"48146483",
490
  447 => x"4837123C",
491
  448 => x"4859B4D0",
492
  449 => x"487C4C38",
493
  450 => x"489ED870",
494
  451 => x"48C15972",
495
  452 => x"48E3CF39",
496
  453 => x"490639BF",
497
  454 => x"49289900",
498
  455 => x"494AECF6",
499
  456 => x"496D359C",
500
  457 => x"498F72EC",
501
  458 => x"49B1A4E1",
502
  459 => x"49D3CB76",
503
  460 => x"49F5E6A5",
504
  461 => x"4A17F66A",
505
  462 => x"4A39FABF",
506
  463 => x"4A5BF39F",
507
  464 => x"4A7DE104",
508
  465 => x"4A9FC2EA",
509
  466 => x"4AC1994A",
510
  467 => x"4AE36421",
511
  468 => x"4B052368",
512
  469 => x"4B26D71A",
513
  470 => x"4B487F33",
514
  471 => x"4B6A1BAD",
515
  472 => x"4B8BAC83",
516
  473 => x"4BAD31AF",
517
  474 => x"4BCEAB2D",
518
  475 => x"4BF018F7",
519
  476 => x"4C117B08",
520
  477 => x"4C32D15B",
521
  478 => x"4C541BEC",
522
  479 => x"4C755AB4",
523
  480 => x"4C968DAE",
524
  481 => x"4CB7B4D6",
525
  482 => x"4CD8D026",
526
  483 => x"4CF9DF9A",
527
  484 => x"4D1AE32C",
528
  485 => x"4D3BDAD6",
529
  486 => x"4D5CC695",
530
  487 => x"4D7DA663",
531
  488 => x"4D9E7A3A",
532
  489 => x"4DBF4216",
533
  490 => x"4DDFFDF2",
534
  491 => x"4E00ADC8",
535
  492 => x"4E215194",
536
  493 => x"4E41E951",
537
  494 => x"4E6274F8",
538
  495 => x"4E82F487",
539
  496 => x"4EA367F7",
540
  497 => x"4EC3CF43",
541
  498 => x"4EE42A67",
542
  499 => x"4F04795D",
543
  500 => x"4F24BC21",
544
  501 => x"4F44F2AD",
545
  502 => x"4F651CFD",
546
  503 => x"4F853B0B",
547
  504 => x"4FA54CD3",
548
  505 => x"4FC55250",
549
  506 => x"4FE54B7C",
550
  507 => x"50053853",
551
  508 => x"502518D0",
552
  509 => x"5044ECED",
553
  510 => x"5064B4A7",
554
  511 => x"50846FF8",
555
  512 => x"50A41EDB",
556
  513 => x"50C3C14B",
557
  514 => x"50E35744",
558
  515 => x"5102E0C0",
559
  516 => x"51225DBB",
560
  517 => x"5141CE30",
561
  518 => x"5161321A",
562
  519 => x"51808974",
563
  520 => x"519FD439",
564
  521 => x"51BF1264",
565
  522 => x"51DE43F2",
566
  523 => x"51FD68DC",
567
  524 => x"521C811E",
568
  525 => x"523B8CB3",
569
  526 => x"525A8B97",
570
  527 => x"52797DC4",
571
  528 => x"52986336",
572
  529 => x"52B73BE8",
573
  530 => x"52D607D6",
574
  531 => x"52F4C6FA",
575
  532 => x"53137950",
576
  533 => x"53321ED3",
577
  534 => x"5350B77E",
578
  535 => x"536F434E",
579
  536 => x"538DC23B",
580
  537 => x"53AC3444",
581
  538 => x"53CA9961",
582
  539 => x"53E8F190",
583
  540 => x"54073CCA",
584
  541 => x"54257B0C",
585
  542 => x"5443AC51",
586
  543 => x"5461D094",
587
  544 => x"547FE7D1",
588
  545 => x"549DF202",
589
  546 => x"54BBEF23",
590
  547 => x"54D9DF30",
591
  548 => x"54F7C224",
592
  549 => x"551597FB",
593
  550 => x"553360AF",
594
  551 => x"55511C3C",
595
  552 => x"556ECA9E",
596
  553 => x"558C6BCF",
597
  554 => x"55A9FFCC",
598
  555 => x"55C78690",
599
  556 => x"55E50016",
600
  557 => x"56026C5A",
601
  558 => x"561FCB57",
602
  559 => x"563D1D08",
603
  560 => x"565A616A",
604
  561 => x"56779877",
605
  562 => x"5694C22C",
606
  563 => x"56B1DE83",
607
  564 => x"56CEED78",
608
  565 => x"56EBEF06",
609
  566 => x"5708E32A",
610
  567 => x"5725C9DE",
611
  568 => x"5742A31F",
612
  569 => x"575F6EE7",
613
  570 => x"577C2D33",
614
  571 => x"5798DDFD",
615
  572 => x"57B58142",
616
  573 => x"57D216FD",
617
  574 => x"57EE9F2A",
618
  575 => x"580B19C3",
619
  576 => x"582786C6",
620
  577 => x"5843E62D",
621
  578 => x"586037F3",
622
  579 => x"587C7C16",
623
  580 => x"5898B290",
624
  581 => x"58B4DB5D",
625
  582 => x"58D0F678",
626
  583 => x"58ED03DE",
627
  584 => x"59090389",
628
  585 => x"5924F576",
629
  586 => x"5940D9A1",
630
  587 => x"595CB004",
631
  588 => x"5978789C",
632
  589 => x"59943364",
633
  590 => x"59AFE059",
634
  591 => x"59CB7F75",
635
  592 => x"59E710B5",
636
  593 => x"5A029415",
637
  594 => x"5A1E098F",
638
  595 => x"5A397120",
639
  596 => x"5A54CAC4",
640
  597 => x"5A701676",
641
  598 => x"5A8B5432",
642
  599 => x"5AA683F5",
643
  600 => x"5AC1A5B9",
644
  601 => x"5ADCB97A",
645
  602 => x"5AF7BF35",
646
  603 => x"5B12B6E6",
647
  604 => x"5B2DA087",
648
  605 => x"5B487C15",
649
  606 => x"5B63498C",
650
  607 => x"5B7E08E8",
651
  608 => x"5B98BA24",
652
  609 => x"5BB35D3D",
653
  610 => x"5BCDF22D",
654
  611 => x"5BE878F2",
655
  612 => x"5C02F187",
656
  613 => x"5C1D5BE8",
657
  614 => x"5C37B811",
658
  615 => x"5C5205FE",
659
  616 => x"5C6C45AB",
660
  617 => x"5C867713",
661
  618 => x"5CA09A33",
662
  619 => x"5CBAAF06",
663
  620 => x"5CD4B589",
664
  621 => x"5CEEADB8",
665
  622 => x"5D08978F",
666
  623 => x"5D227309",
667
  624 => x"5D3C4022",
668
  625 => x"5D55FED7",
669
  626 => x"5D6FAF24",
670
  627 => x"5D895105",
671
  628 => x"5DA2E475",
672
  629 => x"5DBC6971",
673
  630 => x"5DD5DFF5",
674
  631 => x"5DEF47FD",
675
  632 => x"5E08A184",
676
  633 => x"5E21EC88",
677
  634 => x"5E3B2904",
678
  635 => x"5E5456F4",
679
  636 => x"5E6D7655",
680
  637 => x"5E868722",
681
  638 => x"5E9F8958",
682
  639 => x"5EB87CF3",
683
  640 => x"5ED161EE",
684
  641 => x"5EEA3847",
685
  642 => x"5F02FFF8",
686
  643 => x"5F1BB900",
687
  644 => x"5F346358",
688
  645 => x"5F4CFEFF",
689
  646 => x"5F658BF0",
690
  647 => x"5F7E0A27",
691
  648 => x"5F9679A0",
692
  649 => x"5FAEDA58",
693
  650 => x"5FC72C4B",
694
  651 => x"5FDF6F75",
695
  652 => x"5FF7A3D2",
696
  653 => x"600FC95F",
697
  654 => x"6027E018",
698
  655 => x"603FE7F9",
699
  656 => x"6057E0FF",
700
  657 => x"606FCB25",
701
  658 => x"6087A669",
702
  659 => x"609F72C6",
703
  660 => x"60B73039",
704
  661 => x"60CEDEBE",
705
  662 => x"60E67E51",
706
  663 => x"60FE0EEF",
707
  664 => x"61159094",
708
  665 => x"612D033D",
709
  666 => x"614466E6",
710
  667 => x"615BBB8B",
711
  668 => x"61730128",
712
  669 => x"618A37BB",
713
  670 => x"61A15F3F",
714
  671 => x"61B877B2",
715
  672 => x"61CF810E",
716
  673 => x"61E67B52",
717
  674 => x"61FD6678",
718
  675 => x"6214427F",
719
  676 => x"622B0F61",
720
  677 => x"6241CD1D",
721
  678 => x"62587BAD",
722
  679 => x"626F1B0F",
723
  680 => x"6285AB40",
724
  681 => x"629C2C3B",
725
  682 => x"62B29DFD",
726
  683 => x"62C90083",
727
  684 => x"62DF53C9",
728
  685 => x"62F597CD",
729
  686 => x"630BCC89",
730
  687 => x"6321F1FC",
731
  688 => x"63380821",
732
  689 => x"634E0EF6",
733
  690 => x"63640676",
734
  691 => x"6379EE9E",
735
  692 => x"638FC76C",
736
  693 => x"63A590DB",
737
  694 => x"63BB4AE8",
738
  695 => x"63D0F591",
739
  696 => x"63E690D1",
740
  697 => x"63FC1CA5",
741
  698 => x"6411990A",
742
  699 => x"642705FC",
743
  700 => x"643C6379",
744
  701 => x"6451B17D",
745
  702 => x"6466F004",
746
  703 => x"647C1F0C",
747
  704 => x"64913E92",
748
  705 => x"64A64E90",
749
  706 => x"64BB4F06",
750
  707 => x"64D03FEF",
751
  708 => x"64E52148",
752
  709 => x"64F9F30E",
753
  710 => x"650EB53E",
754
  711 => x"652367D4",
755
  712 => x"65380ACE",
756
  713 => x"654C9E28",
757
  714 => x"656121DF",
758
  715 => x"657595EF",
759
  716 => x"6589FA56",
760
  717 => x"659E4F11",
761
  718 => x"65B2941C",
762
  719 => x"65C6C974",
763
  720 => x"65DAEF16",
764
  721 => x"65EF04FF",
765
  722 => x"66030B2D",
766
  723 => x"6617019B",
767
  724 => x"662AE846",
768
  725 => x"663EBF2D",
769
  726 => x"6652864B",
770
  727 => x"66663D9D",
771
  728 => x"6679E521",
772
  729 => x"668D7CD3",
773
  730 => x"66A104B1",
774
  731 => x"66B47CB7",
775
  732 => x"66C7E4E3",
776
  733 => x"66DB3D31",
777
  734 => x"66EE859E",
778
  735 => x"6701BE28",
779
  736 => x"6714E6CC",
780
  737 => x"6727FF85",
781
  738 => x"673B0853",
782
  739 => x"674E0131",
783
  740 => x"6760EA1D",
784
  741 => x"6773C313",
785
  742 => x"67868C12",
786
  743 => x"67994515",
787
  744 => x"67ABEE1B",
788
  745 => x"67BE8720",
789
  746 => x"67D11021",
790
  747 => x"67E3891B",
791
  748 => x"67F5F20D",
792
  749 => x"68084AF2",
793
  750 => x"681A93C8",
794
  751 => x"682CCC8C",
795
  752 => x"683EF53B",
796
  753 => x"68510DD3",
797
  754 => x"68631651",
798
  755 => x"68750EB1",
799
  756 => x"6886F6F2",
800
  757 => x"6898CF10",
801
  758 => x"68AA9709",
802
  759 => x"68BC4EDA",
803
  760 => x"68CDF67F",
804
  761 => x"68DF8DF8",
805
  762 => x"68F11540",
806
  763 => x"69028C55",
807
  764 => x"6913F334",
808
  765 => x"692549DB",
809
  766 => x"69369047",
810
  767 => x"6947C675",
811
  768 => x"6958EC63",
812
  769 => x"696A020E",
813
  770 => x"697B0773",
814
  771 => x"698BFC90",
815
  772 => x"699CE162",
816
  773 => x"69ADB5E7",
817
  774 => x"69BE7A1B",
818
  775 => x"69CF2DFD",
819
  776 => x"69DFD189",
820
  777 => x"69F064BE",
821
  778 => x"6A00E798",
822
  779 => x"6A115A16",
823
  780 => x"6A21BC34",
824
  781 => x"6A320DEF",
825
  782 => x"6A424F47",
826
  783 => x"6A528037",
827
  784 => x"6A62A0BE",
828
  785 => x"6A72B0D9",
829
  786 => x"6A82B085",
830
  787 => x"6A929FC0",
831
  788 => x"6AA27E88",
832
  789 => x"6AB24CDA",
833
  790 => x"6AC20AB3",
834
  791 => x"6AD1B812",
835
  792 => x"6AE154F4",
836
  793 => x"6AF0E156",
837
  794 => x"6B005D36",
838
  795 => x"6B0FC892",
839
  796 => x"6B1F2367",
840
  797 => x"6B2E6DB3",
841
  798 => x"6B3DA773",
842
  799 => x"6B4CD0A5",
843
  800 => x"6B5BE948",
844
  801 => x"6B6AF158",
845
  802 => x"6B79E8D3",
846
  803 => x"6B88CFB7",
847
  804 => x"6B97A601",
848
  805 => x"6BA66BB0",
849
  806 => x"6BB520C0",
850
  807 => x"6BC3C531",
851
  808 => x"6BD258FF",
852
  809 => x"6BE0DC28",
853
  810 => x"6BEF4EAA",
854
  811 => x"6BFDB083",
855
  812 => x"6C0C01B0",
856
  813 => x"6C1A4230",
857
  814 => x"6C287200",
858
  815 => x"6C36911D",
859
  816 => x"6C449F87",
860
  817 => x"6C529D3A",
861
  818 => x"6C608A34",
862
  819 => x"6C6E6674",
863
  820 => x"6C7C31F7",
864
  821 => x"6C89ECBA",
865
  822 => x"6C9796BD",
866
  823 => x"6CA52FFC",
867
  824 => x"6CB2B877",
868
  825 => x"6CC03029",
869
  826 => x"6CCD9712",
870
  827 => x"6CDAED30",
871
  828 => x"6CE83280",
872
  829 => x"6CF56700",
873
  830 => x"6D028AAF",
874
  831 => x"6D0F9D8A",
875
  832 => x"6D1C9F8F",
876
  833 => x"6D2990BC",
877
  834 => x"6D367110",
878
  835 => x"6D434087",
879
  836 => x"6D4FFF21",
880
  837 => x"6D5CACDC",
881
  838 => x"6D6949B4",
882
  839 => x"6D75D5AA",
883
  840 => x"6D8250B9",
884
  841 => x"6D8EBAE1",
885
  842 => x"6D9B1420",
886
  843 => x"6DA75C73",
887
  844 => x"6DB393DA",
888
  845 => x"6DBFBA51",
889
  846 => x"6DCBCFD7",
890
  847 => x"6DD7D46A",
891
  848 => x"6DE3C809",
892
  849 => x"6DEFAAB1",
893
  850 => x"6DFB7C61",
894
  851 => x"6E073D17",
895
  852 => x"6E12ECD0",
896
  853 => x"6E1E8B8C",
897
  854 => x"6E2A1949",
898
  855 => x"6E359604",
899
  856 => x"6E4101BB",
900
  857 => x"6E4C5C6E",
901
  858 => x"6E57A61A",
902
  859 => x"6E62DEBE",
903
  860 => x"6E6E0658",
904
  861 => x"6E791CE6",
905
  862 => x"6E842266",
906
  863 => x"6E8F16D7",
907
  864 => x"6E99FA37",
908
  865 => x"6EA4CC85",
909
  866 => x"6EAF8DBE",
910
  867 => x"6EBA3DE1",
911
  868 => x"6EC4DCED",
912
  869 => x"6ECF6ADF",
913
  870 => x"6ED9E7B6",
914
  871 => x"6EE45371",
915
  872 => x"6EEEAE0E",
916
  873 => x"6EF8F78B",
917
  874 => x"6F032FE7",
918
  875 => x"6F0D5720",
919
  876 => x"6F176D34",
920
  877 => x"6F217223",
921
  878 => x"6F2B65EA",
922
  879 => x"6F354887",
923
  880 => x"6F3F19FB",
924
  881 => x"6F48DA42",
925
  882 => x"6F52895B",
926
  883 => x"6F5C2745",
927
  884 => x"6F65B3FF",
928
  885 => x"6F6F2F87",
929
  886 => x"6F7899DB",
930
  887 => x"6F81F2FA",
931
  888 => x"6F8B3AE3",
932
  889 => x"6F947193",
933
  890 => x"6F9D970B",
934
  891 => x"6FA6AB47",
935
  892 => x"6FAFAE48",
936
  893 => x"6FB8A00B",
937
  894 => x"6FC1808F",
938
  895 => x"6FCA4FD3",
939
  896 => x"6FD30DD6",
940
  897 => x"6FDBBA95",
941
  898 => x"6FE45610",
942
  899 => x"6FECE046",
943
  900 => x"6FF55934",
944
  901 => x"6FFDC0DA",
945
  902 => x"70061737",
946
  903 => x"700E5C49",
947
  904 => x"7016900F",
948
  905 => x"701EB287",
949
  906 => x"7026C3B1",
950
  907 => x"702EC38B",
951
  908 => x"7036B213",
952
  909 => x"703E8F4A",
953
  910 => x"70465B2C",
954
  911 => x"704E15BA",
955
  912 => x"7055BEF2",
956
  913 => x"705D56D3",
957
  914 => x"7064DD5C",
958
  915 => x"706C528B",
959
  916 => x"7073B660",
960
  917 => x"707B08D8",
961
  918 => x"708249F4",
962
  919 => x"708979B2",
963
  920 => x"70909811",
964
  921 => x"7097A50F",
965
  922 => x"709EA0AD",
966
  923 => x"70A58AE7",
967
  924 => x"70AC63BF",
968
  925 => x"70B32B32",
969
  926 => x"70B9E13F",
970
  927 => x"70C085E5",
971
  928 => x"70C71925",
972
  929 => x"70CD9AFB",
973
  930 => x"70D40B68",
974
  931 => x"70DA6A6A",
975
  932 => x"70E0B800",
976
  933 => x"70E6F42A",
977
  934 => x"70ED1EE7",
978
  935 => x"70F33835",
979
  936 => x"70F94013",
980
  937 => x"70FF3681",
981
  938 => x"71051B7E",
982
  939 => x"710AEF08",
983
  940 => x"7110B120",
984
  941 => x"711661C3",
985
  942 => x"711C00F2",
986
  943 => x"71218EAA",
987
  944 => x"71270AED",
988
  945 => x"712C75B7",
989
  946 => x"7131CF0A",
990
  947 => x"713716E3",
991
  948 => x"713C4D43",
992
  949 => x"71417227",
993
  950 => x"71468591",
994
  951 => x"714B877E",
995
  952 => x"715077ED",
996
  953 => x"715556DF",
997
  954 => x"715A2453",
998
  955 => x"715EE047",
999
  956 => x"71638ABB",
1000
  957 => x"716823AE",
1001
  958 => x"716CAB20",
1002
  959 => x"7171210F",
1003
  960 => x"7175857C",
1004
  961 => x"7179D865",
1005
  962 => x"717E19CA",
1006
  963 => x"718249AA",
1007
  964 => x"71866804",
1008
  965 => x"718A74D8",
1009
  966 => x"718E7026",
1010
  967 => x"719259EC",
1011
  968 => x"7196322A",
1012
  969 => x"7199F8DF",
1013
  970 => x"719DAE0C",
1014
  971 => x"71A151AE",
1015
  972 => x"71A4E3C6",
1016
  973 => x"71A86453",
1017
  974 => x"71ABD355",
1018
  975 => x"71AF30CB",
1019
  976 => x"71B27CB5",
1020
  977 => x"71B5B711",
1021
  978 => x"71B8DFE0",
1022
  979 => x"71BBF721",
1023
  980 => x"71BEFCD4",
1024
  981 => x"71C1F0F8",
1025
  982 => x"71C4D38C",
1026
  983 => x"71C7A491",
1027
  984 => x"71CA6405",
1028
  985 => x"71CD11E9",
1029
  986 => x"71CFAE3B",
1030
  987 => x"71D238FC",
1031
  988 => x"71D4B22C",
1032
  989 => x"71D719C9",
1033
  990 => x"71D96FD3",
1034
  991 => x"71DBB44A",
1035
  992 => x"71DDE72E",
1036
  993 => x"71E0087F",
1037
  994 => x"71E2183B",
1038
  995 => x"71E41663",
1039
  996 => x"71E602F7",
1040
  997 => x"71E7DDF5",
1041
  998 => x"71E9A75F",
1042
  999 => x"71EB5F32",
1043
  1000 => x"71ED0570",
1044
  1001 => x"71EE9A18",
1045
  1002 => x"71F01D2A",
1046
  1003 => x"71F18EA6",
1047
  1004 => x"71F2EE8A",
1048
  1005 => x"71F43CD8",
1049
  1006 => x"71F5798E",
1050
  1007 => x"71F6A4AE",
1051
  1008 => x"71F7BE35",
1052
  1009 => x"71F8C625",
1053
  1010 => x"71F9BC7E",
1054
  1011 => x"71FAA13E",
1055
  1012 => x"71FB7466",
1056
  1013 => x"71FC35F6",
1057
  1014 => x"71FCE5EE",
1058
  1015 => x"71FD844D",
1059
  1016 => x"71FE1114",
1060
  1017 => x"71FE8C41",
1061
  1018 => x"71FEF5D7",
1062
  1019 => x"71FF4DD3",
1063
  1020 => x"71FF9437",
1064
  1021 => x"71FFC902",
1065
  1022 => x"71FFEC33",
1066
  1023 => x"71FFFDCC",
1067
others => x"00000000"
1068
);
1069
1070
begin
1071
   -- phase accumulator  
1072
   process begin
1073
     wait until rising_edge(CLK);
1074
     if BCK = '1'then
1075
        if (DIN_CNT = DIN_CNT_MAX-1) then
1076
           ACCUM_TMP <= ACCUM_TMP + unsigned(FREQ_INC);
1077
           ACCUM <= ACCUM_TMP + unsigned(PHASE_INC);
1078
        end if;
1079
     end if; 
1080
   end process;
1081
     
1082
   -- BROM      
1083
   process begin
1084
     wait until rising_edge(CLK);
1085
     if BCK = '1' then
1086
        if (DIN_CNT = DIN_CNT_MAX-1) then
1087
           ROMADDR <= ADDRESS;     -- clocked address --> BRAM
1088
        end if;
1089
     end if;
1090
   end process;
1091
 
1092
   -- 1 clock cycle latency caused by BROM
1093
   process begin
1094
     wait until rising_edge(CLK);
1095
     if BCK = '1' then
1096
        if (DIN_CNT = DIN_CNT_MAX-1) then
1097
           SIGN    <= ACCUM(ACCUM'left);
1098
        end if;
1099
     end if;
1100
   end process;
1101
   
1102
1103
   QUADRANT <= ACCUM(ACCUM'left-1);
1104
   RESULT   <= signed(sine_LUT(ROMADDR));
1105
1106
   ADDRESS  <=  to_integer(ACCUM(ACCUM'high-2 downto ACCUM'high-11)) when (QUADRANT = '0') else
1107
        1023-to_integer(ACCUM(ACCUM'high-2 downto ACCUM'high-11));
1108
1109
   DOUT <= std_logic_vector(RESULT) when (SIGN = '1') else
1110
        std_logic_vector(0-RESULT) ;
1111
1112
 
1113
end BEHAVIOUR;