Forum: FPGA, VHDL & Co. Probleme mit Signalgenerator


von Tom (Gast)


Lesenswert?

Hallo zusammen,

ich habe folgendes Problem: ich möchte in VHDL in Kombination mit einem 
De0-Nano-Board einen Signalgenerator bauen. Dafür habe ich mir zunächst 
die DDS-Lösungen von Lothar Miller angeguckt, dann aber doch etwas 
umgebaut, da mir bei der DDS fehlt, dass man die Schrittauflösung nicht 
einstellen kann.

Zunächst der Code:
1
library ieee;
2
use ieee.std_logic_1164.all;
3
use ieee.numeric_std.all;
4
5
6
entity Generator_1 is
7
  Generic ( Systemclock : integer   := 50000000  -- Hertz
8
        );
9
  port (
10
    clk      : in std_logic; -- Systemclock (50 MHz)
11
      microsteps  : in unsigned(31 downto 0) := (others => '0'); -- Anzahl der Schritte, in die die Wellenform unterteilt wird
12
      cnt_check   : in unsigned(31 downto 0) := (others => '0'); 
13
      run         : in unsigned(31 downto 0) := (others => '0'); -- 0 = steht, 1 = links, 2 = rechts
14
15
      rechteck    : out std_logic_vector(15 downto 0) := (others => '0');
16
      saegezahn   : out std_logic_vector(15 downto 0) := (others => '0');
17
      sinus       : out std_logic_vector(15 downto 0) := (others => '0')
18
19
      );
20
end Generator_1;
21
22
architecture bhv of Generator_1 is
23
    type sinus_array_t is array (0 to 4095) of integer range 0 to 4095;
24
    constant sinus_array_c : sinus_array_t :=
25
 (2048,2051,2054,2057,2060,2063,2066,2069,2073,2076,2079,2082,2085,2088,2091,2095,2098,2101,2104,2107,2110,2113,2117,2120,2123,2126,2129,2132,2135,2139,2142,2145,2148,2151,2154,2157,2161,2164,2167,2170,2173,2176,2179,2182,2186,2189,2192,2195,2198,2201,2204,2208,2211,2214,2217,2220,2223,2226,2229,2233,2236,2239,2242,2245,2248,2251,2254,2258,2261,2264,2267,2270,2273,2276,2279,2283,2286,2289,2292,2295,2298,2301,2304,2308,2311,2314,2317,2320,2323,2326,2329,2332,2336,2339,2342,2345,2348,2351,2354,2357,2360,2364,2367,2370,2373,2376,2379,2382,2385,2388,2391,2395,2398,2401,2404,2407,2410,2413,2416,2419,2422,2425,2429,2432,2435,2438,2441,2444,2447,2450,2453,2456,2459,2462,2466,2469,2472,2475,2478,2481,2484,2487,2490,2493,2496,2499,2502,2505,2508,2512,2515,2518,2521,2524,2527,2530,2533,2536,2539,2542,2545,2548,2551,2554,2557,2560,2563,2566,2569,2572,2576,2579,2582,2585,2588,2591,2594,2597,2600,2603,2606,2609,2612,2615,2618,2621,2624,2627,2630,2633,2636,2639,2642,2645,2648,2651,2654,2657,2660,2663,2666,2669,2672,2675,2678,2681,2684,2687,2690,2693,2696,2699,2702,2705,2708,2711,2714,2717,2720,2723,2726,2729,2732,2734,2737,2740,2743,2746,2749,2752,2755,2758,2761,2764,2767,2770,2773,2776,2779,2782,2785,2787,2790,2793,2796,2799,2802,2805,2808,2811,2814,2817,2820,2823,2825,2828,2831,2834,2837,2840,2843,2846,2849,2851,2854,2857,2860,2863,2866,2869,2872,2875,2877,2880,2883,2886,2889,2892,2895,2897,2900,2903,2906,2909,2912,2915,2917,2920,2923,2926,2929,2932,2934,2937,2940,2943,2946,2949,2951,2954,
26
2957,2960,2963,2965,2968,2971,2974,2977,2979,2982,2985,2988,2991,2993,2996,2999,3002,3005,3007,3010,3013,3016,3018,3021,3024,3027,3029,3032,3035,3038,3040,3043,3046,3049,3051,3054,3057,3060,3062,3065,3068,3071,3073,3076,3079,3081,3084,3087,3090,3092,3095,3098,3100,3103,3106,3108,3111,3114,3116,3119,3122,3125,3127,3130,3133,3135,3138,3140,3143,3146,3148,3151,3154,3156,3159,3162,3164,3167,3170,3172,3175,3177,3180,3183,3185,3188,3190,3193,3196,3198,3201,3203,3206,3209,3211,3214,3216,3219,3222,3224,3227,3229,3232,3234,3237,3240,3242,3245,3247,3250,3252,3255,3257,3260,3262,3265,3267,3270,3272,3275,3278,3280,3283,3285,3288,3290,3293,3295,3298,3300,3302,3305,3307,3310,3312,3315,3317,3320,3322,3325,3327,3330,3332,3335,3337,3339,3342,3344,3347,3349,3352,3354,3356,3359,3361,3364,3366,3368,3371,3373,3376,3378,3380,3383,3385,3388,3390,3392,3395,3397,3399,3402,3404,3406,3409,3411,3413,3416,3418,3420,3423,3425,3427,3430,3432,3434,3437,3439,3441,3444,3446,3448,3450,3453,3455,3457,3460,3462,3464,3466,3469,3471,3473,3475,3478,3480,3482,3484,3487,3489,3491,3493,3496,3498,3500,3502,3504,3507,3509,3511,3513,3515,3518,3520,3522,3524,3526,3529,3531,3533,3535,3537,3539,3541,3544,3546,3548,3550,3552,3554,3556,3559,3561,3563,3565,3567,3569,3571,3573,3575,3577,3580,3582,3584,3586,3588,3590,3592,3594,3596,3598,3600,3602,3604,3606,3608,3610,3612,3614,3616,3618,3621,3623,3625,3627,3629,3631,3633,3634,3636,3638,3640,3642,3644,3646,3648,3650,3652,3654,3656,3658,3660,3662,3664,3666,3668,3670,3672,3673,3675,
27
3677,3679,3681,3683,3685,3687,3689,3690,3692,3694,3696,3698,3700,3702,3704,3705,3707,3709,3711,3713,3715,3716,3718,3720,3722,3724,3725,3727,3729,3731,3733,3734,3736,3738,3740,3741,3743,3745,3747,3748,3750,3752,3754,3755,3757,3759,3761,3762,3764,3766,3767,3769,3771,3773,3774,3776,3778,3779,3781,3783,3784,3786,3788,3789,3791,3793,3794,3796,3797,3799,3801,3802,3804,3806,3807,3809,3810,3812,3814,3815,3817,3818,3820,3821,3823,3825,3826,3828,3829,3831,3832,3834,3835,3837,3838,3840,3842,3843,3845,3846,3848,3849,3851,3852,3853,3855,3856,3858,3859,3861,3862,3864,3865,3867,3868,3870,3871,3872,3874,3875,3877,3878,3879,3881,3882,3884,3885,3886,3888,3889,3891,3892,3893,3895,3896,3897,3899,3900,3901,3903,3904,3905,3907,3908,3909,3911,3912,3913,3914,3916,3917,3918,3920,3921,3922,3923,3925,3926,3927,3928,3930,3931,3932,3933,3935,3936,3937,3938,3939,3941,3942,3943,3944,3945,3946,3948,3949,3950,3951,3952,3953,3955,3956,3957,3958,3959,3960,3961,3963,3964,3965,3966,3967,3968,3969,3970,3971,3972,3973,3974,3976,3977,3978,3979,3980,3981,3982,3983,3984,3985,3986,3987,3988,3989,3990,3991,3992,3993,3994,3995,3996,3997,3998,3999,4000,4001,4001,4002,4003,4004,4005,4006,4007,4008,4009,4010,4011,4012,4012,4013,4014,4015,4016,4017,4018,4018,4019,4020,4021,4022,4023,4023,4024,4025,4026,4027,4028,4028,4029,4030,4031,4031,4032,4033,4034,4035,4035,4036,4037,4038,4038,4039,4040,4040,4041,4042,4043,4043,4044,4045,4045,4046,4047,4047,4048,4049,4049,4050,4051,4051,4052,4053,4053,4054,4055,4055,4056,4056,4057,4058,
28
4058,4059,4059,4060,4061,4061,4062,4062,4063,4063,4064,4064,4065,4066,4066,4067,4067,4068,4068,4069,4069,4070,4070,4071,4071,4072,4072,4072,4073,4073,4074,4074,4075,4075,4076,4076,4076,4077,4077,4078,4078,4079,4079,4079,4080,4080,4080,4081,4081,4082,4082,4082,4083,4083,4083,4084,4084,4084,4085,4085,4085,4086,4086,4086,4086,4087,4087,4087,4088,4088,4088,4088,4089,4089,4089,4089,4090,4090,4090,4090,4090,4091,4091,4091,4091,4091,4092,4092,4092,4092,4092,4092,4093,4093,4093,4093,4093,4093,4093,4094,4094,4094,4094,4094,4094,4094,4094,4094,4094,4094,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4095,4094,4094,4094,4094,4094,4094,4094,4094,4094,4094,4093,4093,4093,4093,4093,4093,4093,4092,4092,4092,4092,4092,4092,4091,4091,4091,4091,4091,4090,4090,4090,4090,4090,4089,4089,4089,4089,4088,4088,4088,4088,4087,4087,4087,4087,4086,4086,4086,4085,4085,4085,4084,4084,4084,4083,4083,4083,4082,4082,4082,4081,4081,4081,4080,4080,4079,4079,4079,4078,4078,4078,4077,4077,4076,4076,4075,4075,4075,4074,4074,4073,4073,4072,4072,4071,4071,4070,4070,4069,4069,4068,4068,4067,4067,4066,4066,4065,4065,4064,4064,4063,4063,4062,4061,4061,4060,4060,4059,4058,4058,4057,4057,4056,4055,4055,4054,4054,4053,4052,4052,4051,4050,4050,4049,4048,4048,4047,4046,4046,4045,4044,4044,4043,4042,4042,4041,4040,4039,4039,4038,4037,4036,4036,4035,4034,4033,4033,4032,4031,4030,4030,4029,4028,4027,4026,4026,4025,4024,4023,4022,4021,
29
4021,4020,4019,4018,4017,4016,4015,4015,4014,4013,4012,4011,4010,4009,4008,4007,4007,4006,4005,4004,4003,4002,4001,4000,3999,3998,3997,3996,3995,3994,3993,3992,3991,3990,3989,3988,3987,3986,3985,3984,3983,3982,3981,3980,3979,3978,3977,3976,3975,3974,3973,3972,3971,3970,3969,3967,3966,3965,3964,3963,3962,3961,3960,3959,3957,3956,3955,3954,3953,3952,3951,3949,3948,3947,3946,3945,3944,3942,3941,3940,3939,3938,3936,3935,3934,3933,3931,3930,3929,3928,3927,3925,3924,3923,3921,3920,3919,3918,3916,3915,3914,3913,3911,3910,3909,3907,3906,3905,3903,3902,3901,3899,3898,3897,3895,3894,3893,3891,3890,3888,3887,3886,3884,3883,3882,3880,3879,3877,3876,3875,3873,3872,3870,3869,3867,3866,3864,3863,3862,3860,3859,3857,3856,3854,3853,3851,3850,3848,3847,3845,3844,3842,3841,3839,3838,3836,3835,3833,3832,3830,3828,3827,3825,3824,3822,3821,3819,3818,3816,3814,3813,3811,3810,3808,3806,3805,3803,3802,3800,3798,3797,3795,3793,3792,3790,3788,3787,3785,3783,3782,3780,3778,3777,3775,3773,3772,3770,3768,3767,3765,3763,3761,3760,3758,3756,3755,3753,3751,3749,3748,3746,3744,3742,3741,3739,3737,3735,3733,3732,3730,3728,3726,3724,3723,3721,3719,3717,3715,3714,3712,3710,3708,3706,3704,3703,3701,3699,3697,3695,3693,3691,3690,3688,3686,3684,3682,3680,3678,3676,3674,3672,3671,3669,3667,3665,3663,3661,3659,3657,3655,3653,3651,3649,3647,3645,3643,3641,3639,3637,3635,3634,3632,3630,3628,3626,3624,3622,3620,3617,3615,3613,3611,3609,3607,3605,3603,3601,3599,3597,3595,3593,3591,3589,3587,3585,3583,3581,3579,3576,3574,
30
3572,3570,3568,3566,3564,3562,3560,3557,3555,3553,3551,3549,3547,3545,3543,3540,3538,3536,3534,3532,3530,3527,3525,3523,3521,3519,3517,3514,3512,3510,3508,3506,3503,3501,3499,3497,3494,3492,3490,3488,3486,3483,3481,3479,3477,3474,3472,3470,3468,3465,3463,3461,3458,3456,3454,3452,3449,3447,3445,3442,3440,3438,3436,3433,3431,3429,3426,3424,3422,3419,3417,3415,3412,3410,3408,3405,3403,3401,3398,3396,3393,3391,3389,3386,3384,3382,3379,3377,3374,3372,3370,3367,3365,3362,3360,3358,3355,3353,3350,3348,3345,3343,3341,3338,3336,3333,3331,3328,3326,3323,3321,3319,3316,3314,3311,3309,3306,3304,3301,3299,3296,3294,3291,3289,3286,3284,3281,3279,3276,3274,3271,3269,3266,3264,3261,3259,3256,3254,3251,3248,3246,3243,3241,3238,3236,3233,3231,3228,3225,3223,3220,3218,3215,3213,3210,3207,3205,3202,3200,3197,3194,3192,3189,3187,3184,3181,3179,3176,3173,3171,3168,3166,3163,3160,3158,3155,3152,3150,3147,3144,3142,3139,3137,3134,3131,3129,3126,3123,3120,3118,3115,3112,3110,3107,3104,3102,3099,3096,3094,3091,3088,3086,3083,3080,3077,3075,3072,3069,3066,3064,3061,3058,3056,3053,3050,3047,3045,3042,3039,3036,3034,3031,3028,3025,3023,3020,3017,3014,3012,3009,3006,3003,3000,2998,2995,2992,2989,2986,2984,2981,2978,2975,2972,2970,2967,2964,2961,2958,2956,2953,2950,2947,2944,2942,2939,2936,2933,2930,2927,2925,2922,2919,2916,2913,2910,2907,2905,2902,2899,2896,2893,2890,2887,2885,2882,2879,2876,2873,2870,2867,2864,2862,2859,2856,2853,2850,2847,2844,2841,2838,2836,2833,2830,2827,2824,2821,2818,2815,2812,2809,
31
2806,2804,2801,2798,2795,2792,2789,2786,2783,2780,2777,2774,2771,2768,2765,2763,2760,2757,2754,2751,2748,2745,2742,2739,2736,2733,2730,2727,2724,2721,2718,2715,2712,2709,2706,2703,2700,2697,2694,2691,2688,2685,2682,2679,2676,2673,2670,2668,2665,2662,2659,2656,2653,2650,2647,2644,2640,2637,2634,2631,2628,2625,2622,2619,2616,2613,2610,2607,2604,2601,2598,2595,2592,2589,2586,2583,2580,2577,2574,2571,2568,2565,2562,2559,2556,2553,2550,2547,2544,2541,2537,2534,2531,2528,2525,2522,2519,2516,2513,2510,2507,2504,2501,2498,2495,2492,2489,2485,2482,2479,2476,2473,2470,2467,2464,2461,2458,2455,2452,2449,2446,2442,2439,2436,2433,2430,2427,2424,2421,2418,2415,2412,2408,2405,2402,2399,2396,2393,2390,2387,2384,2381,2377,2374,2371,2368,2365,2362,2359,2356,2353,2350,2346,2343,2340,2337,2334,2331,2328,2325,2322,2318,2315,2312,2309,2306,2303,2300,2297,2294,2290,2287,2284,2281,2278,2275,2272,2269,2265,2262,2259,2256,2253,2250,2247,2244,2240,2237,2234,2231,2228,2225,2222,2219,2215,2212,2209,2206,2203,2200,2197,2193,2190,2187,2184,2181,2178,2175,2172,2168,2165,2162,2159,2156,2153,2150,2146,2143,2140,2137,2134,2131,2128,2124,2121,2118,2115,2112,2109,2106,2102,2099,2096,2093,2090,2087,2084,2080,2077,2074,2071,2068,2065,2062,2058,2055,2052,2049,2046,2043,2040,2037,2033,2030,2027,2024,2021,2018,2015,2011,2008,2005,2002,1999,1996,1993,1989,1986,1983,1980,1977,1974,1971,1967,1964,1961,1958,1955,1952,1949,1945,1942,1939,1936,1933,1930,1927,1923,1920,1917,1914,1911,1908,1905,1902,1898,1895,1892,1889,1886,
32
1883,1880,1876,1873,1870,1867,1864,1861,1858,1855,1851,1848,1845,1842,1839,1836,1833,1830,1826,1823,1820,1817,1814,1811,1808,1805,1801,1798,1795,1792,1789,1786,1783,1780,1777,1773,1770,1767,1764,1761,1758,1755,1752,1749,1745,1742,1739,1736,1733,1730,1727,1724,1721,1718,1714,1711,1708,1705,1702,1699,1696,1693,1690,1687,1683,1680,1677,1674,1671,1668,1665,1662,1659,1656,1653,1649,1646,1643,1640,1637,1634,1631,1628,1625,1622,1619,1616,1613,1610,1606,1603,1600,1597,1594,1591,1588,1585,1582,1579,1576,1573,1570,1567,1564,1561,1558,1554,1551,1548,1545,1542,1539,1536,1533,1530,1527,1524,1521,1518,1515,1512,1509,1506,1503,1500,1497,1494,1491,1488,1485,1482,1479,1476,1473,1470,1467,1464,1461,1458,1455,1451,1448,1445,1442,1439,1436,1433,1430,1427,1425,1422,1419,1416,1413,1410,1407,1404,1401,1398,1395,1392,1389,1386,1383,1380,1377,1374,1371,1368,1365,1362,1359,1356,1353,1350,1347,1344,1341,1338,1335,1332,1330,1327,1324,1321,1318,1315,1312,1309,1306,1303,1300,1297,1294,1291,1289,1286,1283,1280,1277,1274,1271,1268,1265,1262,1259,1257,1254,1251,1248,1245,1242,1239,1236,1233,1231,1228,1225,1222,1219,1216,1213,1210,1208,1205,1202,1199,1196,1193,1190,1188,1185,1182,1179,1176,1173,1170,1168,1165,1162,1159,1156,1153,1151,1148,1145,1142,1139,1137,1134,1131,1128,1125,1123,1120,1117,1114,1111,1109,1106,1103,1100,1097,1095,1092,1089,1086,1083,1081,1078,1075,1072,1070,1067,1064,1061,1059,1056,1053,1050,1048,1045,1042,1039,1037,1034,1031,1029,1026,1023,1020,1018,1015,1012,1009,1007,1004,1001,999,996,
33
993,991,988,985,983,980,977,975,972,969,966,964,961,958,956,953,951,948,945,943,940,937,935,932,929,927,924,922,919,916,914,911,908,906,903,901,898,895,893,890,888,885,882,880,877,875,872,870,867,864,862,859,857,854,852,849,847,844,841,839,836,834,831,829,826,824,821,819,816,814,811,809,806,804,801,799,796,794,791,789,786,784,781,779,776,774,772,769,767,764,762,759,757,754,752,750,747,745,742,740,737,735,733,730,728,725,723,721,718,716,713,711,709,706,704,702,699,697,694,692,690,687,685,683,680,678,676,673,671,669,666,664,662,659,657,655,653,650,648,646,643,641,639,637,634,632,630,627,625,623,621,618,616,614,612,609,607,605,603,601,598,596,594,592,589,587,585,583,581,578,576,574,572,570,568,565,563,561,559,557,555,552,550,548,546,544,542,540,538,535,533,531,529,527,525,523,521,519,516,514,512,510,508,506,504,502,500,498,496,494,492,490,488,486,484,482,480,478,475,473,471,469,467,465,463,461,460,458,456,454,452,450,448,446,444,442,440,438,436,434,432,430,428,426,424,423,421,419,417,415,413,411,409,407,405,404,402,400,398,396,394,392,391,389,387,385,383,381,380,378,376,374,372,371,369,367,365,363,362,360,358,356,354,353,351,349,347,346,344,342,340,339,337,335,334,332,330,328,327,325,
34
323,322,320,318,317,315,313,312,310,308,307,305,303,302,300,298,297,295,293,292,290,289,287,285,284,282,281,279,277,276,274,273,271,270,268,267,265,263,262,260,259,257,256,254,253,251,250,248,247,245,244,242,241,239,238,236,235,233,232,231,229,228,226,225,223,222,220,219,218,216,215,213,212,211,209,208,207,205,204,202,201,200,198,197,196,194,193,192,190,189,188,186,185,184,182,181,180,179,177,176,175,174,172,171,170,168,167,166,165,164,162,161,160,159,157,156,155,154,153,151,150,149,148,147,146,144,143,142,141,140,139,138,136,135,134,133,132,131,130,129,128,126,125,124,123,122,121,120,119,118,117,116,115,114,113,112,111,110,109,108,107,106,105,104,103,102,101,100,99,98,97,96,95,94,93,92,91,90,89,88,88,87,86,85,84,83,82,81,80,80,79,78,77,76,75,74,74,73,72,71,70,69,69,68,67,66,65,65,64,63,62,62,61,60,59,59,58,57,56,56,55,54,53,53,52,51,51,50,49,49,48,47,47,46,45,45,44,43,43,42,41,41,40,40,39,38,38,37,37,36,35,35,34,34,33,32,32,31,31,30,30,29,29,28,28,27,27,26,26,25,25,24,24,23,23,22,22,21,21,20,20,20,19,19,18,18,17,17,17,16,16,16,15,15,14,14,14,13,13,13,
35
12,12,12,11,11,11,10,10,10,9,9,9,8,8,8,8,7,7,7,7,6,6,6,6,5,5,5,5,5,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,9,9,9,9,10,10,10,11,11,11,12,12,12,13,13,13,14,14,15,15,15,16,16,16,17,17,18,18,19,19,19,20,20,21,21,22,22,23,23,23,24,24,25,25,26,26,27,27,28,28,29,29,30,31,31,32,32,33,33,34,34,35,36,36,37,37,38,39,39,40,40,41,42,42,43,44,44,45,46,46,47,48,48,49,50,50,51,52,52,53,54,55,55,56,57,57,58,59,60,60,61,62,63,64,64,65,66,67,67,68,69,70,71,72,72,73,74,75,76,77,77,78,79,80,81,82,83,83,84,85,86,87,88,89,90,91,92,93,94,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,121,122,123,124,
36
125,126,127,128,129,130,131,132,134,135,136,137,138,139,140,142,143,144,145,146,147,149,150,151,152,153,154,156,157,158,159,160,162,163,164,165,167,168,169,170,172,173,174,175,177,178,179,181,182,183,184,186,187,188,190,191,192,194,195,196,198,199,200,202,203,204,206,207,209,210,211,213,214,216,217,218,220,221,223,224,225,227,228,230,231,233,234,236,237,239,240,242,243,244,246,247,249,250,252,253,255,257,258,260,261,263,264,266,267,269,270,272,274,275,277,278,280,281,283,285,286,288,289,291,293,294,296,298,299,301,302,304,306,307,309,311,312,314,316,317,319,321,322,324,326,328,329,331,333,334,336,338,340,341,343,345,347,348,350,352,354,355,357,359,361,362,364,366,368,370,371,373,375,377,379,380,382,384,386,388,390,391,393,395,397,399,401,403,405,406,408,410,412,414,416,418,420,422,423,425,427,429,431,433,435,437,439,441,443,445,447,449,451,453,455,457,459,461,462,464,466,468,470,472,474,477,479,481,483,485,487,489,491,493,495,497,499,501,503,505,507,509,511,513,515,518,520,522,524,526,528,530,532,534,536,539,541,543,545,547,549,551,554,556,558,560,562,564,566,569,571,573,575,577,580,582,584,586,588,591,593,595,597,599,602,604,606,608,611,613,615,617,620,622,624,626,629,631,633,635,
37
638,640,642,645,647,649,651,654,656,658,661,663,665,668,670,672,675,677,679,682,684,686,689,691,693,696,698,700,703,705,707,710,712,715,717,719,722,724,727,729,731,734,736,739,741,743,746,748,751,753,756,758,760,763,765,768,770,773,775,778,780,783,785,788,790,793,795,797,800,802,805,807,810,812,815,817,820,823,825,828,830,833,835,838,840,843,845,848,850,853,855,858,861,863,866,868,871,873,876,879,881,884,886,889,892,894,897,899,902,905,907,910,912,915,918,920,923,925,928,931,933,936,939,941,944,947,949,952,955,957,960,962,965,968,970,973,976,979,981,984,987,989,992,995,997,1000,1003,1005,1008,1011,1014,1016,1019,1022,1024,1027,1030,1033,1035,1038,1041,1044,1046,1049,1052,1055,1057,1060,1063,1066,1068,1071,1074,1077,1079,1082,1085,1088,1090,1093,1096,1099,1102,1104,1107,1110,1113,1116,1118,1121,1124,1127,1130,1132,1135,1138,1141,1144,1146,1149,1152,1155,1158,1161,1163,1166,1169,1172,1175,1178,1180,1183,1186,1189,1192,1195,1198,1200,1203,1206,1209,1212,1215,1218,1220,1223,1226,1229,1232,1235,1238,1241,1244,1246,1249,1252,1255,1258,1261,1264,1267,1270,1272,1275,1278,1281,1284,1287,1290,1293,1296,1299,1302,1305,1308,1310,1313,1316,1319,1322,1325,1328,1331,1334,1337,1340,1343,1346,1349,1352,1355,1358,1361,1363,1366,1369,1372,1375,1378,1381,1384,1387,1390,1393,1396,1399,1402,1405,1408,1411,1414,1417,1420,1423,1426,1429,1432,1435,1438,1441,
38
1444,1447,1450,1453,1456,1459,1462,1465,1468,1471,1474,1477,1480,1483,1486,1489,1492,1495,1498,1501,1504,1507,1510,1513,1516,1519,1523,1526,1529,1532,1535,1538,1541,1544,1547,1550,1553,1556,1559,1562,1565,1568,1571,1574,1577,1580,1583,1587,1590,1593,1596,1599,1602,1605,1608,1611,1614,1617,1620,1623,1626,1629,1633,1636,1639,1642,1645,1648,1651,1654,1657,1660,1663,1666,1670,1673,1676,1679,1682,1685,1688,1691,1694,1697,1700,1704,1707,1710,1713,1716,1719,1722,1725,1728,1731,1735,1738,1741,1744,1747,1750,1753,1756,1759,1763,1766,1769,1772,1775,1778,1781,1784,1787,1791,1794,1797,1800,1803,1806,1809,1812,1816,1819,1822,1825,1828,1831,1834,1837,1841,1844,1847,1850,1853,1856,1859,1862,1866,1869,1872,1875,1878,1881,1884,1887,1891,1894,1897,1900,1903,1906,1909,1913,1916,1919,1922,1925,1928,1931,1934,1938,1941,1944,1947,1950,1953,1956,1960,1963,1966,1969,1972,1975,1978,1982,1985,1988,1991,1994,1997,2000,2004,2007,2010,2013,2016,2019,2022,2026,2029,2032,2035,2038,2041,2044,2048);
39
40
    signal index      : integer range 0 to 4095;
41
    signal phase        : unsigned(11 downto 0) := (others => '0');
42
    signal sinus_u      : unsigned(11 downto 0) := (others => '0');
43
    signal saegezahn_u  : unsigned(11 downto 0) := (others => '0');
44
    signal rechteck_u   : unsigned(11 downto 0) := (others => '0');
45
   signal cnt          : unsigned(31 downto 0) := (others => '0');
46
47
begin
48
    process begin
49
    wait until rising_edge(clk);
50
    if (cnt = cnt_check)  and (run = x"00000001") then
51
        phase <= resize(phase + microsteps,12);
52
        cnt <= x"00000000";
53
    elsif (cnt = cnt_check)  and (run = x"00000002") then
54
        phase <= resize(phase - microsteps,12);
55
        cnt <= x"00000000";
56
    else
57
        if (cnt < cnt_check) then
58
            cnt <= cnt + 1;
59
        else
60
            cnt <= x"00000000";
61
        end if;
62
    end if;
63
    end process;
64
65
    index <= to_integer(phase);
66
67
    sinus_u     <= to_unsigned( sinus_array_c (index), sinus_u'length);
68
    saegezahn_u <= phase;
69
70
    process begin
71
        wait until rising_edge(clk);
72
        if (phase >= x"555" and phase <= x"DDD") then
73
            rechteck_u <= x"FFF";
74
        else
75
            rechteck_u <= x"000";
76
        end if;
77
    end process;
78
79
  -- convert output values
80
    sinus     <= ('0','0','1','1') & std_logic_vector(sinus_u);
81
    saegezahn <= ('0','0','1','1') & std_logic_vector(saegezahn_u);
82
    rechteck  <= ('0','0','1','1') & std_logic_vector(rechteck_u);
83
84
end bhv;

Ich übergebe der Funktion drei Werte:
-microsteps gibt die Auflösung der Wellenform an und sollte zwischen 1 
(höchste Auflösung von 4096 Schritten) und 128 (32 Schritte) liegen.
-cnt_check gibt den Wert an, wie oft der Schritt mit Microstep 
inkrementiert wird. Dieser Wert errechnet sich extern wie folgt:

cnt_check = (50000000/Wunschfrequenz)/(4096/Microsteps)

-run lässt die Wellenform links oder rechts laufen


Jetzt zum Problem: lasse ich dieses Programm durch Modelsim laufen, 
funktioniert es super: ich kann Frequenzen bis 10 kHz erzeugen, die 
Microsteps einstellen, links/rechtslauf...alles super.
Sobald ich das Programm jedoch auf mein Cyclone 4 spiele, fangen die 
Probleme an: bis 800-900 Hz geht es noch, aber dann ist der Sägezahn zb 
total stufig (immer ausgehend von höchster Schrittauflösung, also 
Microstep = 1). Interessanterweise ist die Anzahl der Stufen genau 
gleich dem Wert von cnt_check...und das versteh ich mal gar nicht.

Vielleicht weiß einer von euch Rat!?

Vielen Dank schon mal

Gruß Tom

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Vorneweg:
sinus     <= ('0','0','1','1') & std_logic_vector(sinus_u);
Das ginge auch so:
sinus     <= "0011" & std_logic_vector(sinus_u);

Tom schrieb:
> bis 800-900 Hz geht es noch
Wer hat dann 800-900 Hz?
Die "fertige" Sinuswelle? Für die von dir gewünschte Auflösung muss Die 
muss ja schon mal 4000mal schneller sein. Dein Design muss also wie dein 
DAC schon mal 4MHz können.

> Vielleicht weiß einer von euch Rat!?
Hast du Timing Constraints angegeben? Weiß deine Toolchain, mit welchem 
Quarztakt du das Ganze fahren willst?

> Sobald ich das Programm
Programmierst du VHPL?
Wenn nicht, dann ist es kein Programm, sondern eine Beschreibung. Denn 
VHDL heißt Hardware-Beschreibungs-Sprache, nicht 
Hardware-Programmier-Sprache...

: Bearbeitet durch Moderator
von bit spalter (Gast)


Lesenswert?

Tom schrieb:
> Vielleicht weiß einer von euch Rat!?


Hinweis:
phase <= resize(phase + microsteps,12);

Phase und microstep sind von unterschiedlichen typ, da kann sich die 
Synthese vertun.

Gruß

von peter (Gast)


Lesenswert?

-----------------------------
VHDL heißt Hardware-Beschreibungs-Sprache
-----------------------------

Dieses VHDL gibt es nicht mehr.
Es wurde gemäß ISO als VHPL festgeschrieben.

Zur Zeit bleibt die Endung(VHDL) noch bis 2017 bestehen.

von Tom (Gast)


Lesenswert?

Mein dac wird über SPI angesteuert und hat eine Settling Time von 4.5us.

Die Angabe der Hertz war auf das Ausgangssignal, also Sinus, sägezahn 
etc bezogen.

Nein ich habe keine Constrains angegeben, weiß ehrlicherweise nicht wie 
das geht geschweige denn was das Toolchain ist.

Sry ich arbeite noch nicht so lange mit VHDL...

von Duke Scarring (Gast)


Lesenswert?

Tom schrieb:
> Nein ich habe keine Constrains angegeben, weiß ehrlicherweise nicht wie
> das geht
Du muß dem ganzen Programmpaket (=Toolchain) sagen, daß außen am Chip 
ein 50 MHz Takt anliegt.

Laut 
http://www.alterawiki.com/wiki/Timing_Constraints#Clocks_at_input_pins
gibt es das Kommando create_clock
Das muß in die zum Projekt gehörige .sdc-Datei.
Ggf. muß diese Datei von Dir angelegt werden.

Duke

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

peter schrieb:
> Es wurde gemäß ISO als VHPL festgeschrieben.
Peter, das hättest du gerne, dann wärst du viele deiner Probleme los...

von T.U.Darmstadt (Gast)


Lesenswert?

peter schrieb:
> -----------------------------
> VHDL heißt Hardware-Beschreibungs-Sprache
> -----------------------------
> Dieses VHDL gibt es nicht mehr.
> Es wurde gemäß ISO als VHPL festgeschrieben.
> Zur Zeit bleibt die Endung(VHDL) noch bis 2017 bestehen.
Waum nur wird in praktisch jedem Beitrag darüber gestritten, was VHDL 
ist und dass man je ja niemals "programmieren" nennen darf.

Ein Blick in die Latein-Fibel zeigt doch:

programma = Bekanntmachung, Veröffentlichung, Mitteilung, Aufsatz, 
Vorstellung, Vorschrift, Beschreibung,

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Thomas Ulrich schrieb:
> Waum nur wird in praktisch jedem Beitrag darüber gestritten,
Weil immer wieder Peter seinen Kopf rausstreckt. Alle anderen sind sich 
soweit einig, dass man mit VHDL etwas beschreibt, was man sich im Kopf 
vorstellt.

Das Problem, Hardware zu "programmieren", ist, dass "Programmieren" 
schon vorbelegt ist und damit auch die Denkweise zum bekannten 
sequenziellen "Programmieren" neigt.

von T.U.Darmstadt (Gast)


Lesenswert?

Lothar Miller schrieb:
> Das Problem, Hardware zu "programmieren", ist, dass "Programmieren"
> schon vorbelegt ist und damit auch die Denkweise zum bekannten
> sequenziellen "Programmieren" neigt.
Da ist freilich was dran. Das ist aber ein Problem unserer Zeit, dass 
die Jungen heute mit der Programmierung von PCs gross geworden sind und 
zwar mit der abstrakten. Benutzt haben sie nur C und JAVA oder Python. 
Andere Programmiersprachen sind ihnen fremd. Daher haben sie keinen 
Bezug zur Hardware und können sich ganz offentlich nicht mehr 
vorstellen, wie ein Hardware aussehen muss, die so arbeitet, wie sie es 
möchen.

Die Schlussfolgerung kann eigentlich nur lauten: Mit der Hardware 
anfangen und digitale Bausteine verbauen und sich dann nach oben 
vorarbeiten.

von Jürgen S. (engineer) Benutzerseite


Lesenswert?

peter schrieb:
> Dieses VHDL gibt es nicht mehr.
> Es wurde gemäß ISO als VHPL festgeschrieben.
> Zur Zeit bleibt die Endung(VHDL) noch bis 2017 bestehen.

Ups, das hätte ich jetzt fast geglaubt :-)

Ein Umbenennen ist aber nicht notwendig. Man muss nur ein wenig 
Um*denken*. Der Begiff VHDL wurde geprägt, als es noch keine high level 
synthesis in der heutigen Form gab und vor allem die 
Beschreibungsoptionen bei Weitem nicht so universell waren, wie es heute 
ist. Zu Begin gab es eigentlich nur Gatter-Equivalente und rudimentäre 
Darstellungen von Zuweisungen, oft nur die boolschen Operatoren. Da war 
der Begriff "Hardware wird beschrieben" absolut treffend.

Heute sind wir aber 25 Jahre weiter. Die Tools verstehen inzwischen 
Anweisungen, die sich allein auf den Synthesprozess beziehen. Gesteuert 
wird damit die Synthesesoftware und daher ist der Begriff 
"Programmierung" durchaus treffend, und dies sogar innerh der verengten 
Definition des Begriffes den die Softwarelandschaft besetzt hält.

Klassischer Fall ist die bedingte Synthese von Funktionen durch 
verschachtelte Schleifen, welche komplizierte Ablaufvorgaben darstellen, 
die nur in die Synthesesoftware zu Gesicht bekommt. Genau betrachtet, 
ist es sogar nur die erste Stufe der Synthesesoftware, die (wie früher 
der BAISC-Interpreter) die Befehle zyklisch abarbeitet und eine flache 
Vorschrift daraus baut.

An der Stelle ist VHDL eine Software (nämlich ein Programm), das eine 
andere Software (das Tool) dazu bringt, eine Software (das 
Programmierfile) zu erzeugen. Deshalb ist VHDL-Entwicklung (nicht 
"FPGA-Entwicklung"!) für mich klar Softwareentwicklung und die 
Erstellung derselben ein Programmiervorgang. Besonders auch, weil neben 
dem VHDL noch Scripte angelegt werden, die die Synthese steuern und 
constraints gesetzt werden, die keine Hardware direkt beschreiben, wie 
das früher der Fall war, sondern die Funktion der Hardware, also wieder 
eine Abstraktionsebene höher. State Machines sind auch so ein Stück 
Software mit dem ein Ablauf hinprogrammiert wird. Wie die daraus 
erzeugte Hardware am Ende aussieht, ist komplett offen. Das regelt die 
Synthese anhand vor (in)direkten Voreinstellungen.

Es müsste also heissten: Versatile Hardware and Function Definition 
Language (VHAFDL). Anzubieten hätte ich sonst noch die Virtual Function 
Design Language (VFDL).

von Jürgen S. (engineer) Benutzerseite


Lesenswert?

@Peter: Deine Sinustabelle scheint mir nicht in Ordnung. Die beiden 
Werte 2048 am Anfang und Ende, das ist verdächtig. Dein Sinus hat dort 
die Steigung 0 statt 1. Einer der beiden Werte ist zuviel.

Den Sinus würde ich auch generisch beschreiben, wie ich das in meinem 
Sinusartikel dargestellt habe. Kostet viel weniger Platz und ist auch 
genau genug. Tabellen lohnen sich erst ab 14 Bit Y-Auflösung und 
generell braucht es eigentlich auch nur die Werte eines Viertelbogens. 
Siehe den unteren Block im Bild.
http://home.arcor.de/jusuihe/images/soundsynthesizer96circuit.gif

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Jürgen Schuhmacher schrieb:
> @Peter: Deine Sinustabelle scheint mir nicht in Ordnung.
Du meinst wahrscheinlich Tom. Könnte natürlich auch sein dass Peters 
Tabelle nicht ganz stimmt... ;-)

von Tom (Gast)


Lesenswert?

Also auf die Gefahr hin, dasss ich jetzt gesteinigt werde, hier nochmal 
mein aktueller Code. Ich habe ihn nun wieder komplett auf eine einfache 
DDS zurückgesetzt und kriege trotzdem in meinem Sägezahnsignal ab ca. 
200 Hz Treppenstufen, die mit steigender Frequenz immer größer werden 
und dann kippt dass Signal plötzlich um, sprich wird an der y-Achse 
gespiegelt und hat wieder eine ganz niedrige Frequenz. Ich habe mir 
diverse DDS Beispiele angeguckt und sehe nicht, wo bei mir das Problem 
ist. Kann es eventuell daran liegen, dass ich meinen 12-Bit DAC über SPI 
mit einem SPI Takt von 200kHz ansteuer und es da zu Timingproblemen 
kommt?


Hier der Code:
1
library ieee;
2
use ieee.std_logic_1164.all;
3
use ieee.numeric_std.all;
4
5
6
entity Generator_1 is
7
  Generic ( Systemclock : integer   := 50000000  -- Hertz
8
        );
9
  port (
10
    clk      : in std_logic; -- Systemclock (50 MHz)
11
      microsteps  : in unsigned(31 downto 0) := (others => '0'); 
12
13
      run         : in unsigned(31 downto 0) := (others => '0'); -- 0 = steht, 1 = links, 2 = rechts
14
15
      rechteck    : out std_logic_vector(15 downto 0) := (others => '0');
16
      saegezahn   : out std_logic_vector(15 downto 0) := (others => '0')
17
18
      );
19
end Generator_1;
20
21
architecture bhv of Generator_1 is
22
23
24
    signal phase        : unsigned(31 downto 0) := (others => '0');
25
    signal saegezahn_u  : unsigned(11 downto 0) := (others => '0');
26
    signal rechteck_u   : unsigned(11 downto 0) := (others => '0');
27
28
29
begin
30
    process begin
31
    wait until rising_edge(clk);
32
    if run = x"00000001" then
33
        phase <= phase + microsteps;
34
    elsif run = x"00000002" then
35
        phase <= phase - microsteps;
36
    end if;
37
    end process;
38
39
    saegezahn_u <= phase(31 downto 20);
40
41
42
    process begin
43
        wait until rising_edge(clk);
44
        if (saegezahn_u >= x"555" and saegezahn_u <= x"DDD") then
45
            rechteck_u <= x"FFF";
46
        else
47
            rechteck_u <= x"000";
48
        end if;
49
    end process;
50
   
51
52
  -- convert output values
53
54
      saegezahn <= "0011" & std_logic_vector(saegezahn_u);
55
      rechteck  <= "0011" & std_logic_vector(rechteck_u);
56
57
end bhv;

Bitte seit so nett und sagt mir einfach was ich falsch mache und nicht 
ob man VHDL programmiert oder beschreibt :)

Vielen Dank

von peter (Gast)


Lesenswert?

Du solltest vielleicht einfach mal eine Testbench schreiben und schauen, 
ob das Signal, das rauskommen soll, auch rauskommt. Wenn ja, gibt es bei 
der Übergabe an den DAC Probleme.

von Tom (Gast)


Lesenswert?

Es kommt raus und funktioniert in Modelsim so wie es soll...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

peter schrieb:
> Du solltest vielleicht einfach mal eine Testbench schreiben
Ich denke, das tut er, wie Tom schrieb:
>>>>> Modelsim ... super



Tom schrieb:
> Kann es eventuell daran liegen, dass ich meinen 12-Bit DAC
Welchen?
> über SPI mit einem SPI Takt von 200kHz ansteuer
Wie?
Wie (oft) übergibst du die Daten an den DAC?

von Tom (Gast)


Lesenswert?

Der DAC ist der MCP4821 und den SPI Takt von 200kHz habe ich wegen der 
Settling Time des DACs gewählt. Der SPI Master wurde von Lothar Miller 
1:1 übernommen.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Bliebe da noch die Frage:
>>> Wie (oft) übergibst du die Daten an den DAC?
Du hast doch ein Oszi: mit welcher Frequenz wird der CS des DAC 
angesteuert?
Oder andersrum: wie ist das ganze Zeug miteinander verschaltet?

> Kann es eventuell daran liegen, dass ich meinen 12-Bit DAC über SPI mit
> einem SPI Takt von 200kHz ansteuer und es da zu Timingproblemen kommt?
Der SPI des DAC kann 100 Mal mehr...

: Bearbeitet durch Moderator
von Peter (Gast)


Lesenswert?

Ok, das mit dem ModelSim hatte ich über lesen. Dann kann es nur am DAc 
liegen und wenn ich Deine Beschreibung mit dem seltsamen Output lese, 
scheint mir in der Tat das IF zum DAC das Problem: Da interferieren 
Deine Solldaten mit der Abtastfrequenz = Updatefrequenz des DAC. Das ist 
ein klassisches Abtastproblem. Die Übergabefrequenz an den DAC muss 
mindestens dopplet so hoch sein, wie die DDS-Frequenz.

von Tom (Gast)


Lesenswert?

Also bisher habe ich mit 200kHz den TX_Start des SPI-Masters angesteuert 
und dem Wert "SPI-Taktfrequenz" im SPI-Master habe ich den Wert 1000000 
zugewiesen.

Ich geb lediglich die Daten aus der DDS an den SPI-Master. Beide Blöcke 
laufen mit 50MHz und die Restlichen Frequenzen siehe oben...

Ich dacjhte immer dass der Wert für TX-Start quasi meine SPI-Clock ist, 
aber anscheinend hab ich das nicht verstanden.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Tom schrieb:
> Also bisher habe ich mit 200kHz den TX_Start des SPI-Masters angesteuert
Und die Daten, die zum TX_Start gehören?
> und dem Wert "SPI-Taktfrequenz" im SPI-Master habe ich den Wert 1000000
> zugewiesen.
Du hast mit 200kHz eine SPI-Übertragung angestoßen, deren SPI-Clock nur 
mit 1MMz läuft? Du könntest also höchstens 5 Bit übertragen...

Merke: du darfst eine neue SPI Übertragung erst starten, wenn die "alte" 
fertig ist. Ich vermute aber fast, das hat meine SPI-Engine sowieso 
gemacht. Das erkennst du aber wie gesagt ganz leicht am Slave-Select...

Zum Thema "Takt": die Häufigkeit, mit der du eine Modul aktivierst, 
heißt nicht Takt. Niemals. Der SPI Takt hört auf den Namen SCLK. Und das 
war es, was ich mit dem Stichwort "SPI Takt" assoziiere. Deshalb habe 
ich da auch ausdauernd nachgefragt.

> Ich dacjhte immer dass der Wert für TX-Start quasi meine SPI-Clock ist,
> aber anscheinend hab ich das nicht verstanden.
Nein, da musst du noch nacharbeiten...

von Tom (Gast)


Lesenswert?

Lothar Miller schrieb:
> Zum Thema "Takt": die Häufigkeit, mit der du eine Modul aktivierst,
> heißt nicht Takt. Niemals. Der SPI Takt hört auf den Namen SCLK. Und das
> war es, was ich mit dem Stichwort "SPI Takt" assoziiere. Deshalb habe
> ich da auch ausdauernd nachgefragt.

Das heißt also das der Wert, den ich für "SPI_Taktfrequenz" eingebe, 
äquivalent zu SCLK ist!? Denn wenn dem so ist, dann funktioniert etwas 
Grundlegendes nicht: ich habe jetzt mal für die SPI_Taktfrequenz 
20000000 eingegeben, messe am Osci aber nur ein SCLK von 1 MHz...was zum 
Henker verraff ich denn hier?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Tom schrieb:
> was zum Henker verraff ich denn hier?
Keine Ahnung, ich kenne deine VHDL Beschreibung nicht...
Häng doch einfach mal die paar Dateien hier an.

> Osci
Oszi von Oszi-lloskop.

von Tom (Gast)


Lesenswert?

DDS:
1
library ieee;
2
use ieee.std_logic_1164.all;
3
use ieee.numeric_std.all;
4
5
6
entity Generator_1 is
7
  Generic ( Systemclock : integer   := 50000000  -- Hertz
8
        );
9
  port (
10
    clk      : in std_logic; -- Systemclock (50 MHz)
11
      microsteps  : in unsigned(31 downto 0) := (others => '0'); 
12
13
      run         : in unsigned(31 downto 0) := (others => '0'); -- 0 = steht, 1 = links, 2 = rechts
14
15
      rechteck    : out std_logic_vector(15 downto 0) := (others => '0');
16
      saegezahn   : out std_logic_vector(15 downto 0) := (others => '0')
17
18
      );
19
end Generator_1;
20
21
architecture bhv of Generator_1 is
22
23
24
    signal phase        : unsigned(31 downto 0) := (others => '0');
25
    signal saegezahn_u  : unsigned(11 downto 0) := (others => '0');
26
    signal rechteck_u   : unsigned(11 downto 0) := (others => '0');
27
28
29
begin
30
    process begin
31
    wait until rising_edge(clk);
32
    if run = x"00000001" then
33
        phase <= phase + microsteps;
34
    elsif run = x"00000002" then
35
        phase <= phase - microsteps;
36
    end if;
37
    end process;
38
39
    saegezahn_u <= phase(31 downto 20);
40
41
42
    process begin
43
        wait until rising_edge(clk);
44
        if (saegezahn_u >= x"555" and saegezahn_u <= x"DDD") then
45
            rechteck_u <= x"FFF";
46
        else
47
            rechteck_u <= x"000";
48
        end if;
49
    end process;
50
   
51
52
  -- convert output values
53
54
      saegezahn <= "0011" & std_logic_vector(saegezahn_u);
55
      rechteck  <= "0011" & std_logic_vector(rechteck_u);
56
57
end bhv;

SPI-Master
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
use IEEE.NUMERIC_STD.ALL;
4
5
6
entity SPI_Master_1 is  -- SPI-Modus 0: CPOL=0, CPHA=0
7
    Generic ( Quarz_Taktfrequenz : integer   := 50000000;  -- Hertz 
8
              SPI_Taktfrequenz   : integer   := 20000000;  -- Hertz / zur Berechnung des Reload-Werts für Taktteiler
9
              Laenge             : integer   := 16        -- Anzahl der zu übertragenden Bits
10
             ); 
11
    Port ( TX_Data  : in  STD_LOGIC_VECTOR (Laenge-1 downto 0); -- Sendedaten
12
           RX_Data  : out STD_LOGIC_VECTOR (Laenge-1 downto 0); -- Empfangsdaten
13
           MOSI     : out STD_LOGIC;                           
14
           MISO     : in  STD_LOGIC;
15
           SCLK     : out STD_LOGIC;
16
           SS       : out STD_LOGIC;
17
           TX_Start : in  STD_LOGIC;
18
           TX_Done  : out STD_LOGIC;
19
           clk      : in  STD_LOGIC
20
         );
21
end SPI_Master_1;
22
23
architecture Behavioral of SPI_Master_1 is
24
  signal   delay       : integer range 0 to (Quarz_Taktfrequenz/(2*SPI_Taktfrequenz));
25
  constant clock_delay : integer := (Quarz_Taktfrequenz/(2*SPI_Taktfrequenz))-1;
26
  
27
  type   spitx_states is (spi_stx,spi_txactive,spi_etx);
28
  signal spitxstate    : spitx_states := spi_stx;
29
30
  signal spiclk    : std_logic;
31
  signal spiclklast: std_logic;
32
33
  signal bitcounter    : integer range 0 to Laenge; -- wenn bitcounter = Laenge --> alle Bits uebertragen
34
  signal tx_reg        : std_logic_vector(Laenge-1 downto 0) := (others=>'0');
35
  signal rx_reg        : std_logic_vector(Laenge-1 downto 0) := (others=>'0');
36
37
begin
38
  ------ Verwaltung --------
39
  process begin 
40
     wait until rising_edge(CLK);
41
     if(delay>0) then delay <= delay-1;
42
     else             delay <= clock_delay;  
43
     end if;
44
     spiclklast <= spiclk;
45
     case spitxstate is
46
       when spi_stx =>
47
             SS          <= '1'; -- slave select disabled
48
             TX_Done     <= '0';
49
             bitcounter  <= Laenge;
50
             spiclk      <= '0'; -- SPI-Modus 0
51
             if(TX_Start = '1') then 
52
                spitxstate <= spi_txactive; 
53
                SS         <= '0';
54
                delay      <= clock_delay; 
55
             end if;
56
57
       when spi_txactive =>  -- Daten aus tx_reg uebertragen
58
             if (delay=0) then -- shift
59
                spiclk <= not spiclk;
60
                if (bitcounter=0) then -- alle Bits uebertragen -> deselektieren
61
                   spiclk     <= '0';  -- SPI-Modus 0
62
                   spitxstate <= spi_etx;
63
                end if;
64
                if(spiclk='1') then    -- SPI-Modus 0
65
                   bitcounter <= bitcounter-1;  
66
                end if;  
67
             end if;
68
69
       when spi_etx =>
70
             SS      <= '1'; -- disable Slave Select 
71
             TX_Done <= '1';
72
             if(TX_Start = '0') then -- Handshake: warten, bis Start-Flag geloescht
73
               spitxstate <= spi_stx;
74
             end if;
75
     end case;
76
  end process;   
77
  
78
  ---- Empfangsschieberegister -----
79
  process begin 
80
     wait until rising_edge(CLK);
81
     if (spiclk='1' and  spiclklast='0') then -- SPI-Modus 0
82
        rx_reg <= rx_reg(rx_reg'left-1 downto 0) & MISO;
83
     end if;
84
  end process;   
85
     
86
  ---- Sendeschieberegister -------
87
  process begin 
88
     wait until rising_edge(CLK);
89
     if (spitxstate=spi_stx) then   -- Zurücksetzen, wenn SS inaktiv
90
        tx_reg <= TX_Data;
91
     end if;
92
     if (spiclk='0' and  spiclklast='1') then -- SPI-Modus 0
93
        tx_reg <= tx_reg(tx_reg'left-1 downto 0) & tx_reg(0);
94
     end if;
95
  end process;   
96
97
  SCLK    <= spiclk;
98
  MOSI    <= tx_reg(tx_reg'left);
99
  RX_Data <= rx_reg;
100
  
101
end Behavioral;

Und an TX_Start zupf ich mit 200kHz

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Tom schrieb:
> Und an TX_Start zupf ich mit 200kHz
Und WIE zupfst du da? Und WIE kommen die Daten von der DDFS zum SPI? Du 
tust dir schon sehr schwer, deinen Code herauszurücken, dass man da mal 
drüber schauen könnte...

Tom schrieb:
> messe am Osci aber nur ein SCLK von 1 MHz...
Wir meinen aber schon den selben SCLK? Du hast nicht am SS gemessen?

von Tom (Gast)


Lesenswert?

Entschuldige bitte, ich weiß nicht genau was du mit Code rausrücken 
meinst, ich habe den Code doch eben gepostet? Ich habe eine PLL, die mir 
am Ausgang 200kHz erzeugt und die führe ich einfach auf den TX_Start. 
Oder was meinst du? Ich mach das alles in QuartusII, da zieh ich einfach 
zwischen den Blöcken Leitungen und so kommen die Daten dann vom DDS 
Block zum SPI Block :)

>Wir meinen aber schon den selben SCLK? Du hast nicht am SS gemessen?

Ne, meine schon den SCLK.

von uwe (Gast)


Lesenswert?

> Ich habe eine PLL, die mir am Ausgang 200kHz erzeugt und die führe ich
> einfach auf den TX_Start.
Das hört sich verdächtig nach mehreren Takten an.
Zeig uns mal deine Taktgeneratoren. Wo kommen die 50MHz her? Wo die 
200kHz? Wie hängen die zusammen?

von Tom (Gast)


Lesenswert?

Korrekt, es sind zwei Takte: 50 MHz und 200kHz. Die 50MHz gebe einmal 
auf die PLL und erzeuge damit 200kHz und einmal gebe ich die 50MHz 
unverändert direkt auf die DDS und den SPI-Master.
Die 50MHz kommen direkt vom Quartz des DE0-Nano-Board.

Ich habe es mittlerweile halbwegs hinbekommen, sprich, die SPI-Signale 
kommen korrekt am DAC an und dieser erzeugt  mir auch die gewünschten 
Wellenformen aus der DDS, allerdings hab ich in den Flanken noch eine 
Rise, bzw Falltime von ca 20us...

Vllt. hat jemand eine Idee, ansonsten ist es zu verschmerzen.

von Duke Scarring (Gast)


Lesenswert?

Tom schrieb:
> Die 50MHz gebe einmal
> auf die PLL und erzeuge damit 200kHz und einmal gebe ich die 50MHz
> unverändert direkt auf die DDS und den SPI-Master.
Schlechte Idee. Teile mal die 50 MHz durch 250 und mach Dir damit ein 
200 kHz-Enable.

Duke

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Tom schrieb:
> Ich mach das alles in QuartusII, da zieh ich einfach zwischen den
> Blöcken Leitungen und so kommen die Daten dann vom DDS Block zum SPI
> Block :)
Ach, Schreck. Dann mach wenigstens einen Screenshot von deiner 
Schaltung.
Oder viel besser: du kannst doch VHDL, dann mach doch das bisschen 
Verdrahtung auch in VHDL...

Ich hätte da einen kleinen Anreiz im 
Beitrag "kruder Fehler bei FPGA-Programmierung (ISE WEBpack-Schematic)". Der gefällt mir noch 
immer... ;-)

>> Wir meinen aber schon den selben SCLK? Du hast nicht am SS gemessen?
> Ne, meine schon den SCLK.
Dann bin ich mir nicht ganz sicher, ob deine ganze Taktmimik schon 
korrekt läuft...

> Ich habe es mittlerweile halbwegs hinbekommen,
Du hast es hingebastelt.

> sprich, die SPI-Signale kommen korrekt am DAC an und dieser erzeugt
> mir auch die gewünschten  Wellenformen aus der DDS, allerdings
> hab ich in den Flanken noch eine Rise, bzw Falltime von ca 20us...
In den Flanken welcher Signale hast du diese Zeit?

> Vllt. hat jemand eine Idee
Das Stichwort Enable ist schon gefallen. Oder andersrum: es gibt in 
einem Anfängerdesign nur EINEN Takt.

von Tom (Gast)


Angehängte Dateien:

Lesenswert?

Anbei der Schaltplan.

>In den Flanken welcher Signale hast du diese Zeit?

In den Flanken meines Analogsignals, also zB die fallende Flanke des 
Sägezahns, oder beim Rechteckt die steigtende und fallende Flanke.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Tom schrieb:
> Anbei der Schaltplan.
Na gut, wenn denn so sein muss. Das geht schon. Mir gibt allerdings zu 
denken, dass dein SCLK nur 1MHz ist...

> In den Flanken meines Analogsignals, also zB die fallende Flanke des
> Sägezahns, oder beim Rechteckt die steigtende und fallende Flanke.
Tja, ich vermute, da ist dein DAC zu langsam. Die 4,5us Settling Time 
gilt nicht für den gesamten Bereich, sondern nur "from 1/4 to 3/4 
full-scale range"

: Bearbeitet durch Moderator
von Jürgen S. (engineer) Benutzerseite


Lesenswert?

Das sind eindeutig Abtastfehler. Der DAC kommt nicht mit den eingegeben 
Daten mit und pickt sich nur Teile davon haraus. Kann es sein, dass die 
SPI-FSM durchläuft und so nur jeden zweiten Wert nimmt oder ganz und gar 
das Ganze am jittern ist? Bis welche Frequenzen hin kann man denn gut 
übertragen, bzw wo genau ist denn dieser Sprung zu den "langsamen" 
Frequenzen am Ausgang?

von Tom (Gast)


Lesenswert?

Lothar Miller schrieb:
> Na gut, wenn denn so sein muss. Das geht schon. Mir gibt allerdings zu
> denken, dass dein SCLK nur 1MHz ist...

Hat sich geklärt, hatte nur einen doofen Zahlendreher...

> Tja, ich vermute, da ist dein DAC zu langsam. Die 4,5us Settling Time
> gilt nicht für den gesamten Bereich, sondern nur "from 1/4 to 3/4
> full-scale range"

Das kann natürlich sein, dann werd ich mal nach schnelleren gucken.

Trotzdem erstmal vielen Dank für eure Hilfe!

von T.U.Darmstadt (Gast)


Lesenswert?

Jürgen Schuhmacher schrieb:
> @Peter: Deine Sinustabelle scheint mir nicht in Ordnung. Die beiden
> Werte 2048 am Anfang und Ende, das ist verdächtig. Dein Sinus hat dort
> die Steigung 0 statt 1. Einer der beiden Werte ist zuviel.
Da ist in der Tat etwas dran. Vielleicht ein Wert zuviel?

> Den Sinus würde ich auch generisch beschreiben, wie ich das in meinem
> Sinusartikel dargestellt habe. Kostet viel weniger Platz
Bist Du da wirklich sicher, dass so ein Sinus wenige Platz verbraucht? 
Getestet?

> Tabellen lohnen sich erst ab 14 Bit Y-Auflösung
Dafür hätte ich ganz gerne eine nähere Begründung

> generell braucht es eigentlich auch nur die Werte eines Viertelbogens.
Dann muss aber zusätzlich gerechnet werden und wenn der Platz vorhanden 
sind, sind Tabellen definitiv das schnellste Mittel. Tabellen lssen sich 
ohnedies in heutigen Power-Applikationen sehr leicht im DDR-RAM 
unterbringen und bei den meisten professionellen Signalgeneratoren wird 
das auch genau so realisiert.

von Duke Scarring (Gast)


Lesenswert?

Thomas Ulrich schrieb:
>> generell braucht es eigentlich auch nur die Werte eines Viertelbogens.
> Dann muss aber zusätzlich gerechnet werden
Nicht wirklich. Man guckt auf die zwei MSBs um den Quadranten zu 
ermitteln und subtrahiert nix oder den Wert oder die Adresse oder 
beides. Fertig.

Duke

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Duke Scarring schrieb:
> Man guckt auf die zwei MSBs um den Quadranten zu ermitteln und
> subtrahiert nix oder den Wert oder die Adresse oder beides. Fertig.
So wie dort: 
http://www.lothar-miller.de/s9y/archives/37-DDFS-mit-BROM.html

von T.U.Darmstadt (Gast)


Lesenswert?

Duke Scarring schrieb:
> Nicht wirklich. Man guckt auf die zwei MSBs um den Quadranten zu
> ermitteln und subtrahiert
Die Methodik ist mir freilich geläufig, keine Sorge, dennoch erfordert 
sie wenigstens eine Berechnung, nämlich diese:

> subtrahiert
- aber nicht nur diese: Will einer DDS sauber betreiben braucht es auch 
noch eine Interpolation und somit eine Steigung. Mit einer Tabelle lässt 
sich dies in einem Aufwasch erledigen. Bei einem SRAM bei Bedarf sogar 
mit nur einem Takt zusätzlicher Latenz. Aber das sind jetzt zu 
allgemeine Themen. Der TE wollte ja seinen Signalgenerator i.O. bringen.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Thomas Ulrich schrieb:
> will einer DDS sauber betreiben braucht es auch noch eine Interpolation
Das ist jetzt aber sehr pauschal und päpstlicher als der Papst. Braucht 
man dann eine lineare, eine kubische oder sogar noch eine höhere Ordnung 
für diese Interpolation?

von T.U.Darmstadt (Gast)


Lesenswert?

Man bedenke das Phasenrauschen, das bei geringen zeitlichen Auflösungen 
entsteht. Schon eine einfache lineare Interpolation kann da abhelfen.

von Lang (Gast)


Lesenswert?

Hallo, ich mal wieder :)
Ich habe ein weiteres Problem mit meinem Signalgenerator, diesmal 
betrifft es aber nur ihn selbst. Ich möchte einen Sägezahn mit einer 
etwas runderen Steigung erzeugen, die Kurve habe ich mir in Matlab 
erzeugt und die Werte in nem Lookup Table abgelegt. Gleiches gilt auch 
für den gespiegelten Sägezahn, der aber eine etwas andere Kurvenform hat 
als der für den Rechtslauf. Wenn ich jetzt zwischen links und rechts 
fahren hin und herschalte soll er zwischen den Lookuptables springen--> 
funktioniert. Da die Werte aber nicht genau identisch sind, muss ich 
einen Klimmzug machen und beim wechsel in einer For-schleife einmal das 
Array durchgehen und gucken, wo der identische Wert im Andern Array 
liegt. Würde ich das nicht machen, dann würde es zu einem Sprung beim 
Signalwechsel kommen.

Wie immer gilt: Modelsim-Simulation funktioniert, aber in Quartus lässt 
sich es sich nicht Kompilieren...ich versteh es nicht. Vllt könnt ihr ja 
helfen. Hier erstmal der Code:
1
library ieee;
2
use ieee.std_logic_1164.all;
3
use ieee.numeric_std.all;
4
5
6
entity Generator_1 is
7
  port (
8
    clk        : in std_logic; -- Systemclock (50 MHz)
9
      microsteps    : in unsigned(31 downto 0) := (others => '0');
10
      run           : in unsigned(31 downto 0) := (others => '0'); -- 0 = steht, 1 = links, 2 = rechts
11
    y          : in signed(31 downto 0) := (others => '0');
12
    control      : in unsigned(31 downto 0) := (others => '0'); 
13
14
      rechteck      : out std_logic_vector(15 downto 0) := (others => '0');
15
      saegezahn     : out std_logic_vector(15 downto 0) := (others => '0');
16
    saegezahn_inv   : out std_logic_vector(15 downto 0) := (others => '0')
17
      );
18
    
19
end Generator_1;
20
21
architecture bhv of Generator_1 is
22
23
type saw_load_array_t is array (0 to 4095) of integer range 0 to 4095;
24
constant saw_load_array_c : saw_load_array_t :=
25
(0,6,7,9,10,11,13,14,15,17,18,19,21,22,23,25,26,27,29,30,31,33,34,35,37,38,39,41,42,43,45,46,47,49,50,51,53,54,55,57,58,59,61,62,63,65,66,67,69,70,71,73,74,75,77,78,79,81,82,83,85,86,87,89,90,91,93,94,95,96,98,99,100,102,103,104,106,107,108,110,111,112,114,115,116,118,119,120,122,123,124,125,127,128,129,131,132,133,135,136,137,139,140,141,143,144,145,147,148,149,150,152,153,154,156,157,158,160,161,162,164,165,166,167,169,170,171,173,174,175,177,178,179,181,182,183,184,186,187,188,190,191,192,194,195,196,197,199,200,201,203,204,205,207,208,209,210,212,213,214,216,217,218,220,221,222,223,225,226,227,229,230,231,232,234,235,236,238,239,240,242,243,244,245,247,248,249,251,252,253,254,256,257,258,260,261,262,263,265,266,267,269,270,271,272,274,275,276,278,279,280,281,283,284,285,287,288,289,290,292,293,294,295,297,298,299,301,302,303,304,306,307,308,310,311,312,313,315,316,317,318,320,321,322,324,325,326,327,329,330,331,332,334,335,336,338,339,340,341,343,344,345,346,348,349,350,352,353,354,355,357,358,359,360,362,363,364,365,367,368,369,371,372,373,374,376,377,378,379,381,382,383,384,386,387,388,389,391,392,393,394,396,397,398,399,401,402,403,405,406,407,408,410,411,412,413,415,416,417,418,420,421,422,423,425,426,427,428,430,431,432,433,435,436,437,438,440,441,442,443,445,446,447,448,450,451,452,453,455,456,457,458,460,461,462,463,465,466,467,468,469,471,472,473,474,476,477,478,479,481,482,483,484,486,487,488,489,491,492,493,494,496,497,498,499,500,
26
502,503,504,505,507,508,509,510,512,513,514,515,517,518,519,520,521,523,524,525,526,528,529,530,531,533,534,535,536,537,539,540,541,542,544,545,546,547,548,550,551,552,553,555,556,557,558,560,561,562,563,564,566,567,568,569,571,572,573,574,575,577,578,579,580,582,583,584,585,586,588,589,590,591,592,594,595,596,597,599,600,601,602,603,605,606,607,608,609,611,612,613,614,616,617,618,619,620,622,623,624,625,626,628,629,630,631,632,634,635,636,637,639,640,641,642,643,645,646,647,648,649,651,652,653,654,655,657,658,659,660,661,663,664,665,666,667,669,670,671,672,673,675,676,677,678,679,681,682,683,684,685,687,688,689,690,691,693,694,695,696,697,699,700,701,702,703,705,706,707,708,709,711,712,713,714,715,716,718,719,720,721,722,724,725,726,727,728,730,731,732,733,734,736,737,738,739,740,741,743,744,745,746,747,749,750,751,752,753,754,756,757,758,759,760,762,763,764,765,766,768,769,770,771,772,773,775,776,777,778,779,780,782,783,784,785,786,788,789,790,791,792,793,795,796,797,798,799,800,802,803,804,805,806,808,809,810,811,812,813,815,816,817,818,819,820,822,823,824,825,826,827,829,830,831,832,833,834,836,837,838,839,840,841,843,844,845,846,847,848,850,851,852,853,854,855,857,858,859,860,861,862,864,865,866,867,868,869,871,872,873,874,875,876,878,879,880,881,882,883,884,886,887,888,889,890,891,893,894,895,896,897,898,899,901,902,903,904,905,906,908,909,910,911,912,913,914,916,917,918,919,920,921,923,924,925,926,927,928,929,931,932,933,934,935,936,937,939,940,941,942,943,944,945,947,948,949,950,951,952,954,955,956,957,958,959,960,962,963,964,965,966,967,968,970,971,972,973,974,975,976,977,979,980,981,982,983,984,985,987,988,989,990,991,992,993,995,996,997,998,999,1000,
27
1001,1003,1004,1005,1006,1007,1008,1009,1010,1012,1013,1014,1015,1016,1017,1018,1020,1021,1022,1023,1024,1025,1026,1027,1029,1030,1031,1032,1033,1034,1035,1036,1038,1039,1040,1041,1042,1043,1044,1045,1047,1048,1049,1050,1051,1052,1053,1054,1056,1057,1058,1059,1060,1061,1062,1063,1065,1066,1067,1068,1069,1070,1071,1072,1074,1075,1076,1077,1078,1079,1080,1081,1083,1084,1085,1086,1087,1088,1089,1090,1091,1093,1094,1095,1096,1097,1098,1099,1100,1102,1103,1104,1105,1106,1107,1108,1109,1110,1112,1113,1114,1115,1116,1117,1118,1119,1120,1122,1123,1124,1125,1126,1127,1128,1129,1130,1132,1133,1134,1135,1136,1137,1138,1139,1140,1142,1143,1144,1145,1146,1147,1148,1149,1150,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1163,1164,1165,1166,1167,1168,1169,1170,1171,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1365,1366,1367,1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1396,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1474,1475,1476,1477,1478,1479,1480,1481,1482,1483,1484,1485,1486,1487,1488,1489,1490,1491,1492,1493,1494,1495,1497,1498,1499,1500,
28
1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,1515,1516,1517,1518,1519,1521,1522,1523,1524,1525,1526,1527,1528,1529,1530,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540,1541,1542,1543,1544,1545,1546,1548,1549,1550,1551,1552,1553,1554,1555,1556,1557,1558,1559,1560,1561,1562,1563,1564,1565,1566,1567,1568,1569,1570,1571,1572,1573,1574,1575,1576,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,1595,1596,1597,1598,1599,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1615,1616,1617,1618,1619,1620,1621,1622,1623,1624,1625,1626,1627,1628,1629,1630,1631,1632,1633,1634,1635,1636,1637,1638,1639,1640,1641,1642,1643,1644,1645,1646,1647,1648,1649,1650,1651,1652,1653,1654,1655,1656,1657,1658,1659,1660,1661,1663,1664,1665,1666,1667,1668,1669,1670,1671,1672,1673,1674,1675,1676,1677,1678,1679,1680,1681,1682,1683,1684,1685,1686,1687,1688,1689,1690,1691,1692,1693,1694,1695,1696,1697,1698,1699,1700,1701,1702,1703,1704,1705,1706,1707,1708,1709,1710,1711,1712,1713,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1787,1788,1789,1790,1791,1792,1793,1794,1795,1796,1797,1798,1799,1800,1801,1802,1803,1804,1805,1806,1807,1808,1809,1810,1811,1812,1813,1814,1815,1816,1817,1818,1819,1820,1821,1822,1823,1824,1825,1826,1827,1828,1829,1830,1831,1832,1833,1834,1835,1836,1837,1838,1839,1840,1841,1842,1843,1844,1845,1846,1847,1848,1849,1850,1851,1852,1853,1854,1855,1856,1857,1858,1859,1860,1861,1862,1863,1864,1865,1866,1867,1868,1869,1870,1871,1872,1873,1874,1875,1876,1877,1878,1879,1880,1881,1882,1883,1884,1885,1886,1887,1887,1888,1889,1890,1891,1892,1893,1894,1895,1896,1897,1898,1899,1900,1901,1902,1903,1904,1905,1906,1907,1908,1909,1910,1911,1912,1913,1914,1915,1916,1917,1918,1919,1920,1921,1922,1923,1924,1925,1926,1927,1928,1929,1930,1931,1932,1933,1934,1935,1936,1936,1937,1938,1939,1940,1941,1942,1943,1944,1945,1946,1947,1948,1949,1950,1951,1952,1953,1954,1955,1956,1957,1958,1959,1960,1961,1962,1963,1964,1965,1966,1967,1968,1969,1970,1971,1972,1973,1973,1974,1975,1976,1977,1978,1979,1980,1981,1982,1983,1984,1985,1986,1987,1988,1989,1990,1991,1992,1993,1994,1995,1996,1997,1998,1999,2000,
29
2001,2002,2003,2004,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026,2027,2028,2029,2030,2031,2032,2032,2033,2034,2035,2036,2037,2038,2039,2040,2041,2042,2043,2044,2045,2046,2047,2048,2049,2050,2051,2052,2053,2054,2055,2056,2057,2057,2058,2059,2060,2061,2062,2063,2064,2065,2066,2067,2068,2069,2070,2071,2072,2073,2074,2075,2076,2077,2078,2079,2080,2080,2081,2082,2083,2084,2085,2086,2087,2088,2089,2090,2091,2092,2093,2094,2095,2096,2097,2098,2099,2100,2101,2102,2102,2103,2104,2105,2106,2107,2108,2109,2110,2111,2112,2113,2114,2115,2116,2117,2118,2119,2120,2121,2122,2122,2123,2124,2125,2126,2127,2128,2129,2130,2131,2132,2133,2134,2135,2136,2137,2138,2139,2140,2141,2141,2142,2143,2144,2145,2146,2147,2148,2149,2150,2151,2152,2153,2154,2155,2156,2157,2158,2159,2159,2160,2161,2162,2163,2164,2165,2166,2167,2168,2169,2170,2171,2172,2173,2174,2175,2176,2177,2177,2178,2179,2180,2181,2182,2183,2184,2185,2186,2187,2188,2189,2190,2191,2192,2193,2194,2194,2195,2196,2197,2198,2199,2200,2201,2202,2203,2204,2205,2206,2207,2208,2209,2210,2210,2211,2212,2213,2214,2215,2216,2217,2218,2219,2220,2221,2222,2223,2224,2225,2225,2226,2227,2228,2229,2230,2231,2232,2233,2234,2235,2236,2237,2238,2239,2240,2241,2241,2242,2243,2244,2245,2246,2247,2248,2249,2250,2251,2252,2253,2254,2255,2255,2256,2257,2258,2259,2260,2261,2262,2263,2264,2265,2266,2267,2268,2269,2270,2270,2271,2272,2273,2274,2275,2276,2277,2278,2279,2280,2281,2282,2283,2284,2284,2285,2286,2287,2288,2289,2290,2291,2292,2293,2294,2295,2296,2297,2297,2298,2299,2300,2301,2302,2303,2304,2305,2306,2307,2308,2309,2310,2311,2311,2312,2313,2314,2315,2316,2317,2318,2319,2320,2321,2322,2323,2324,2324,2325,2326,2327,2328,2329,2330,2331,2332,2333,2334,2335,2336,2337,2337,2338,2339,2340,2341,2342,2343,2344,2345,2346,2347,2348,2349,2349,2350,2351,2352,2353,2354,2355,2356,2357,2358,2359,2360,2361,2362,2362,2363,2364,2365,2366,2367,2368,2369,2370,2371,2372,2373,2374,2374,2375,2376,2377,2378,2379,2380,2381,2382,2383,2384,2385,2386,2386,2387,2388,2389,2390,2391,2392,2393,2394,2395,2396,2397,2397,2398,2399,2400,2401,2402,2403,2404,2405,2406,2407,2408,2409,2409,2410,2411,2412,2413,2414,2415,2416,2417,2418,2419,2420,2420,2421,2422,2423,2424,2425,2426,2427,2428,2429,2430,2431,2431,2432,2433,2434,2435,2436,2437,2438,2439,2440,2441,2442,2442,2443,2444,2445,2446,2447,2448,2449,2450,2451,2452,2453,2453,2454,2455,2456,2457,2458,2459,2460,2461,2462,2463,2464,2464,2465,2466,2467,2468,2469,2470,2471,2472,2473,2474,2474,2475,2476,2477,2478,2479,2480,2481,2482,2483,2484,2485,2485,2486,2487,2488,2489,2490,2491,2492,2493,2494,2495,2495,2496,2497,2498,2499,2500,
30
2501,2502,2503,2504,2505,2505,2506,2507,2508,2509,2510,2511,2512,2513,2514,2515,2516,2516,2517,2518,2519,2520,2521,2522,2523,2524,2525,2526,2526,2527,2528,2529,2530,2531,2532,2533,2534,2535,2535,2536,2537,2538,2539,2540,2541,2542,2543,2544,2545,2545,2546,2547,2548,2549,2550,2551,2552,2553,2554,2555,2555,2556,2557,2558,2559,2560,2561,2562,2563,2564,2565,2565,2566,2567,2568,2569,2570,2571,2572,2573,2574,2574,2575,2576,2577,2578,2579,2580,2581,2582,2583,2583,2584,2585,2586,2587,2588,2589,2590,2591,2592,2593,2593,2594,2595,2596,2597,2598,2599,2600,2601,2602,2602,2603,2604,2605,2606,2607,2608,2609,2610,2611,2611,2612,2613,2614,2615,2616,2617,2618,2619,2620,2620,2621,2622,2623,2624,2625,2626,2627,2628,2629,2629,2630,2631,2632,2633,2634,2635,2636,2637,2638,2638,2639,2640,2641,2642,2643,2644,2645,2646,2647,2647,2648,2649,2650,2651,2652,2653,2654,2655,2656,2656,2657,2658,2659,2660,2661,2662,2663,2664,2665,2665,2666,2667,2668,2669,2670,2671,2672,2673,2674,2674,2675,2676,2677,2678,2679,2680,2681,2682,2682,2683,2684,2685,2686,2687,2688,2689,2690,2691,2691,2692,2693,2694,2695,2696,2697,2698,2699,2700,2700,2701,2702,2703,2704,2705,2706,2707,2708,2708,2709,2710,2711,2712,2713,2714,2715,2716,2717,2717,2718,2719,2720,2721,2722,2723,2724,2725,2725,2726,2727,2728,2729,2730,2731,2732,2733,2733,2734,2735,2736,2737,2738,2739,2740,2741,2742,2742,2743,2744,2745,2746,2747,2748,2749,2750,2750,2751,2752,2753,2754,2755,2756,2757,2758,2758,2759,2760,2761,2762,2763,2764,2765,2766,2766,2767,2768,2769,2770,2771,2772,2773,2774,2775,2775,2776,2777,2778,2779,2780,2781,2782,2783,2783,2784,2785,2786,2787,2788,2789,2790,2791,2791,2792,2793,2794,2795,2796,2797,2798,2799,2799,2800,2801,2802,2803,2804,2805,2806,2807,2807,2808,2809,2810,2811,2812,2813,2814,2815,2815,2816,2817,2818,2819,2820,2821,2822,2823,2823,2824,2825,2826,2827,2828,2829,2830,2830,2831,2832,2833,2834,2835,2836,2837,2838,2838,2839,2840,2841,2842,2843,2844,2845,2846,2846,2847,2848,2849,2850,2851,2852,2853,2854,2854,2855,2856,2857,2858,2859,2860,2861,2862,2862,2863,2864,2865,2866,2867,2868,2869,2869,2870,2871,2872,2873,2874,2875,2876,2877,2877,2878,2879,2880,2881,2882,2883,2884,2885,2885,2886,2887,2888,2889,2890,2891,2892,2892,2893,2894,2895,2896,2897,2898,2899,2900,2900,2901,2902,2903,2904,2905,2906,2907,2908,2908,2909,2910,2911,2912,2913,2914,2915,2915,2916,2917,2918,2919,2920,2921,2922,2923,2923,2924,2925,2926,2927,2928,2929,2930,2930,2931,2932,2933,2934,2935,2936,2937,2938,2938,2939,2940,2941,2942,2943,2944,2945,2945,2946,2947,2948,2949,2950,2951,2952,2953,2953,2954,2955,2956,2957,2958,2959,2960,2960,2961,2962,2963,2964,2965,2966,2967,2968,2968,2969,2970,2971,2972,2973,2974,2975,2975,2976,2977,2978,2979,2980,2981,2982,2982,2983,2984,2985,2986,2987,2988,2989,2990,2990,2991,2992,2993,2994,2995,2996,2997,2997,2998,2999,3000,
31
3001,3002,3003,3004,3004,3005,3006,3007,3008,3009,3010,3011,3012,3012,3013,3014,3015,3016,3017,3018,3019,3019,3020,3021,3022,3023,3024,3025,3026,3026,3027,3028,3029,3030,3031,3032,3033,3033,3034,3035,3036,3037,3038,3039,3040,3041,3041,3042,3043,3044,3045,3046,3047,3048,3048,3049,3050,3051,3052,3053,3054,3055,3055,3056,3057,3058,3059,3060,3061,3062,3062,3063,3064,3065,3066,3067,3068,3069,3069,3070,3071,3072,3073,3074,3075,3076,3077,3077,3078,3079,3080,3081,3082,3083,3084,3084,3085,3086,3087,3088,3089,3090,3091,3091,3092,3093,3094,3095,3096,3097,3098,3098,3099,3100,3101,3102,3103,3104,3105,3105,3106,3107,3108,3109,3110,3111,3112,3112,3113,3114,3115,3116,3117,3118,3119,3120,3120,3121,3122,3123,3124,3125,3126,3127,3127,3128,3129,3130,3131,3132,3133,3134,3134,3135,3136,3137,3138,3139,3140,3141,3141,3142,3143,3144,3145,3146,3147,3148,3148,3149,3150,3151,3152,3153,3154,3155,3155,3156,3157,3158,3159,3160,3161,3162,3162,3163,3164,3165,3166,3167,3168,3169,3169,3170,3171,3172,3173,3174,3175,3176,3176,3177,3178,3179,3180,3181,3182,3183,3183,3184,3185,3186,3187,3188,3189,3190,3190,3191,3192,3193,3194,3195,3196,3197,3197,3198,3199,3200,3201,3202,3203,3204,3204,3205,3206,3207,3208,3209,3210,3211,3211,3212,3213,3214,3215,3216,3217,3218,3218,3219,3220,3221,3222,3223,3224,3225,3225,3226,3227,3228,3229,3230,3231,3232,3232,3233,3234,3235,3236,3237,3238,3239,3239,3240,3241,3242,3243,3244,3245,3246,3246,3247,3248,3249,3250,3251,3252,3253,3253,3254,3255,3256,3257,3258,3259,3260,3260,3261,3262,3263,3264,3265,3266,3267,3267,3268,3269,3270,3271,3272,3273,3274,3274,3275,3276,3277,3278,3279,3280,3281,3281,3282,3283,3284,3285,3286,3287,3288,3288,3289,3290,3291,3292,3293,3294,3295,3295,3296,3297,3298,3299,3300,3301,3302,3302,3303,3304,3305,3306,3307,3308,3309,3310,3310,3311,3312,3313,3314,3315,3316,3317,3317,3318,3319,3320,3321,3322,3323,3324,3324,3325,3326,3327,3328,3329,3330,3331,3331,3332,3333,3334,3335,3336,3337,3338,3338,3339,3340,3341,3342,3343,3344,3345,3345,3346,3347,3348,3349,3350,3351,3352,3352,3353,3354,3355,3356,3357,3358,3359,3359,3360,3361,3362,3363,3364,3365,3366,3366,3367,3368,3369,3370,3371,3372,3373,3373,3374,3375,3376,3377,3378,3379,3380,3380,3381,3382,3383,3384,3385,3386,3387,3387,3388,3389,3390,3391,3392,3393,3394,3394,3395,3396,3397,3398,3399,3400,3401,3401,3402,3403,3404,3405,3406,3407,3408,3408,3409,3410,3411,3412,3413,3414,3415,3415,3416,3417,3418,3419,3420,3421,3422,3422,3423,3424,3425,3426,3427,3428,3429,3429,3430,3431,3432,3433,3434,3435,3436,3436,3437,3438,3439,3440,3441,3442,3443,3443,3444,3445,3446,3447,3448,3449,3450,3451,3451,3452,3453,3454,3455,3456,3457,3458,3458,3459,3460,3461,3462,3463,3464,3465,3465,3466,3467,3468,3469,3470,3471,3472,3472,3473,3474,3475,3476,3477,3478,3479,3479,3480,3481,3482,3483,3484,3485,3486,3486,3487,3488,3489,3490,3491,3492,3493,3494,3494,3495,3496,3497,3498,3499,3500,
32
3501,3501,3502,3503,3504,3505,3506,3507,3508,3508,3509,3510,3511,3512,3513,3514,3515,3515,3516,3517,3518,3519,3520,3521,3522,3522,3523,3524,3525,3526,3527,3528,3529,3530,3530,3531,3532,3533,3534,3535,3536,3537,3537,3538,3539,3540,3541,3542,3543,3544,3544,3545,3546,3547,3548,3549,3550,3551,3552,3552,3553,3554,3555,3556,3557,3558,3559,3559,3560,3561,3562,3563,3564,3565,3566,3566,3567,3568,3569,3570,3571,3572,3573,3573,3574,3575,3576,3577,3578,3579,3580,3581,3581,3582,3583,3584,3585,3586,3587,3588,3588,3589,3590,3591,3592,3593,3594,3595,3596,3596,3597,3598,3599,3600,3601,3602,3603,3603,3604,3605,3606,3607,3608,3609,3610,3611,3611,3612,3613,3614,3615,3616,3617,3618,3618,3619,3620,3621,3622,3623,3624,3625,3625,3626,3627,3628,3629,3630,3631,3632,3633,3633,3634,3635,3636,3637,3638,3639,3640,3641,3641,3642,3643,3644,3645,3646,3647,3648,3648,3649,3650,3651,3652,3653,3654,3655,3656,3656,3657,3658,3659,3660,3661,3662,3663,3663,3664,3665,3666,3667,3668,3669,3670,3671,3671,3672,3673,3674,3675,3676,3677,3678,3679,3679,3680,3681,3682,3683,3684,3685,3686,3686,3687,3688,3689,3690,3691,3692,3693,3694,3694,3695,3696,3697,3698,3699,3700,3701,3702,3702,3703,3704,3705,3706,3707,3708,3709,3709,3710,3711,3712,3713,3714,3715,3716,3717,3717,3718,3719,3720,3721,3722,3723,3724,3725,3725,3726,3727,3728,3729,3730,3731,3732,3733,3733,3734,3735,3736,3737,3738,3739,3740,3741,3741,3742,3743,3744,3745,3746,3747,3748,3749,3749,3750,3751,3752,3753,3754,3755,3756,3757,3757,3758,3759,3760,3761,3762,3763,3764,3765,3765,3766,3767,3768,3769,3770,3771,3772,3773,3773,3774,3775,3776,3777,3778,3779,3780,3781,3781,3782,3783,3784,3785,3786,3787,3788,3789,3789,3790,3791,3792,3793,3794,3795,3796,3797,3797,3798,3799,3800,3801,3802,3803,3804,3805,3805,3806,3807,3808,3809,3810,3811,3812,3813,3814,3814,3815,3816,3817,3818,3819,3820,3821,3822,3822,3823,3824,3825,3826,3827,3828,3829,3830,3830,3831,3832,3833,3834,3835,3836,3837,3838,3839,3839,3840,3841,3842,3843,3844,3845,3846,3847,3847,3848,3849,3850,3851,3852,3853,3854,3855,3856,3856,3857,3858,3859,3860,3861,3862,3863,3864,3864,3865,3866,3867,3868,3869,3870,3871,3872,3873,3873,3874,3875,3876,3877,3878,3879,3880,3881,3881,3882,3883,3884,3885,3886,3887,3888,3889,3890,3890,3891,3892,3893,3894,3895,3896,3897,3898,3899,3899,3900,3901,3902,3903,3904,3905,3906,3907,3908,3908,3909,3910,3911,3912,3913,3914,3915,3916,3917,3917,3918,3919,3920,3921,3922,3923,3924,3925,3926,3926,3927,3928,3929,3930,3931,3932,3933,3934,3935,3935,3936,3937,3938,3939,3940,3941,3942,3943,3944,3944,3945,3946,3947,3948,3949,3950,3951,3952,3953,3953,3954,3955,3956,3957,3958,3959,3960,3961,3962,3962,3963,3964,3965,3966,3967,3968,3969,3970,3971,3972,3972,3973,3974,3975,3976,3977,3978,3979,3980,3981,3981,3982,3983,3984,3985,3986,3987,3988,3989,3990,3990,3991,3992,3993,3994,3995,3996,3997,3998,3999,4000,4000,
33
4001,4002,4003,4004,4005,4006,4007,4008,4009,4010,4010,4011,4012,4013,4014,4015,4016,4017,4018,4019,4019,4020,4021,4022,4023,4024,4025,4026,4027,4028,4029,4029,4030,4031,4032,4033,4034,4035,4036,4037,4038,4039,4039,4040,4041,4042,4043,4044,4045,4046,4047,4048,4049,4049,4050,4051,4052,4053,4054,4055,4056,4057,4058,4059,4059,4060,4061,4062,4063,4064,4065,4066,4067,4068,4069,4070,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079,4080,4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4091,4092,4093,4094,4095);
34
35
type saw_unload_array_t is array (0 to 4095) of integer range 0 to 4095;
36
constant saw_unload_array_c : saw_unload_array_t :=
37
(0,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,26,26,27,27,28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,44,44,45,45,46,46,47,47,48,48,49,49,50,50,51,51,52,52,53,53,54,55,55,56,56,57,57,58,58,59,59,60,60,61,61,62,62,63,64,64,65,65,66,66,67,67,68,68,69,69,70,71,71,72,72,73,73,74,74,75,75,76,76,77,78,78,79,79,80,80,81,81,82,82,83,84,84,85,85,86,86,87,87,88,88,89,90,90,91,91,92,92,93,93,94,95,95,96,96,97,97,98,98,99,100,100,101,101,102,102,103,103,104,105,105,106,106,107,107,108,108,109,110,110,111,111,112,112,113,114,114,115,115,116,116,117,118,118,119,119,120,120,121,121,122,123,123,124,124,125,125,126,127,127,128,128,129,129,130,131,131,132,132,133,134,134,135,135,136,136,137,138,138,139,139,140,140,141,142,142,143,143,144,145,145,146,146,147,147,148,149,149,150,150,151,152,152,153,153,154,154,155,156,156,157,157,158,159,159,160,160,161,162,162,163,163,164,164,165,166,166,167,167,168,169,169,170,170,171,172,172,173,173,174,175,175,176,176,177,178,178,179,179,180,181,181,182,182,183,184,184,185,185,186,187,187,188,188,189,190,190,191,192,192,193,193,194,195,195,196,196,197,198,198,199,199,200,201,201,202,203,203,204,204,205,206,206,207,207,208,209,209,210,211,211,212,212,213,214,214,215,215,216,217,217,218,219,219,220,220,221,222,222,223,224,224,225,225,226,227,227,228,229,229,230,230,231,232,232,233,234,234,235,236,236,237,237,238,239,239,240,241,241,242,242,243,244,244,245,246,246,247,248,248,249,249,250,251,251,252,253,253,254,255,255,256,256,257,258,258,259,260,260,261,262,262,263,264,264,265,265,266,267,267,268,269,269,270,271,271,272,273,273,274,275,275,276,277,277,278,278,279,280,280,281,282,282,283,284,284,285,286,286,287,288,288,289,290,290,291,292,292,293,294,294,295,296,296,297,298,298,299,299,300,301,301,302,303,303,304,305,305,306,307,307,308,309,309,310,311,311,312,313,313,314,315,315,316,317,317,318,319,319,320,321,321,322,323,324,324,325,326,326,327,328,328,329,330,330,331,332,332,333,334,334,335,336,336,337,338,338,339,340,340,341,342,342,343,344,345,345,346,347,347,348,349,349,350,351,351,352,353,353,354,355,355,356,357,358,358,359,360,360,361,362,362,363,364,364,365,366,367,367,368,369,369,370,371,371,372,373,373,374,375,376,376,377,378,378,379,380,380,381,382,383,383,384,385,385,386,387,387,388,389,390,390,391,392,392,393,394,394,395,396,397,397,398,399,399,400,401,401,402,403,404,404,405,406,406,407,408,409,409,410,411,411,412,413,414,414,415,416,416,417,418,419,419,420,421,421,422,423,424,424,425,426,426,427,428,429,429,430,431,431,432,433,434,434,435,436,437,437,438,439,439,440,441,442,442,443,444,444,445,446,447,447,448,449,450,450,451,452,452,453,454,455,455,456,457,458,458,459,460,460,461,462,463,463,464,465,466,466,467,468,469,469,470,471,471,472,473,474,474,475,476,477,477,478,479,480,480,481,482,483,483,484,485,486,486,487,488,488,489,490,491,491,492,493,494,494,495,496,497,497,498,499,500,500,
38
501,502,503,503,504,505,506,506,507,508,509,509,510,511,512,512,513,514,515,515,516,517,518,518,519,520,521,521,522,523,524,524,525,526,527,527,528,529,530,531,531,532,533,534,534,535,536,537,537,538,539,540,540,541,542,543,543,544,545,546,547,547,548,549,550,550,551,552,553,553,554,555,556,556,557,558,559,560,560,561,562,563,563,564,565,566,566,567,568,569,570,570,571,572,573,573,574,575,576,577,577,578,579,580,580,581,582,583,584,584,585,586,587,587,588,589,590,591,591,592,593,594,594,595,596,597,598,598,599,600,601,602,602,603,604,605,605,606,607,608,609,609,610,611,612,613,613,614,615,616,616,617,618,619,620,620,621,622,623,624,624,625,626,627,628,628,629,630,631,632,632,633,634,635,636,636,637,638,639,639,640,641,642,643,643,644,645,646,647,647,648,649,650,651,651,652,653,654,655,656,656,657,658,659,660,660,661,662,663,664,664,665,666,667,668,668,669,670,671,672,672,673,674,675,676,676,677,678,679,680,681,681,682,683,684,685,685,686,687,688,689,689,690,691,692,693,694,694,695,696,697,698,698,699,700,701,702,703,703,704,705,706,707,707,708,709,710,711,712,712,713,714,715,716,717,717,718,719,720,721,721,722,723,724,725,726,726,727,728,729,730,731,731,732,733,734,735,736,736,737,738,739,740,741,741,742,743,744,745,746,746,747,748,749,750,751,751,752,753,754,755,756,756,757,758,759,760,761,761,762,763,764,765,766,766,767,768,769,770,771,771,772,773,774,775,776,777,777,778,779,780,781,782,782,783,784,785,786,787,787,788,789,790,791,792,793,793,794,795,796,797,798,799,799,800,801,802,803,804,804,805,806,807,808,809,810,810,811,812,813,814,815,816,816,817,818,819,820,821,822,822,823,824,825,826,827,828,828,829,830,831,832,833,834,834,835,836,837,838,839,840,840,841,842,843,844,845,846,847,847,848,849,850,851,852,853,853,854,855,856,857,858,859,860,860,861,862,863,864,865,866,866,867,868,869,870,871,872,873,873,874,875,876,877,878,879,880,880,881,882,883,884,885,886,887,887,888,889,890,891,892,893,894,894,895,896,897,898,899,900,901,901,902,903,904,905,906,907,908,909,909,910,911,912,913,914,915,916,916,917,918,919,920,921,922,923,924,924,925,926,927,928,929,930,931,932,932,933,934,935,936,937,938,939,940,940,941,942,943,944,945,946,947,948,948,949,950,951,952,953,954,955,956,957,957,958,959,960,961,962,963,964,965,965,966,967,968,969,970,971,972,973,974,974,975,976,977,978,979,980,981,982,983,984,984,985,986,987,988,989,990,991,992,993,993,994,995,996,997,998,999,1000,
39
1001,1002,1003,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1480,1482,1483,1484,1485,1486,1487,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,
40
1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,1515,1516,1517,1518,1519,1520,1521,1522,1523,1525,1526,1527,1528,1529,1530,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540,1541,1542,1543,1544,1545,1546,1547,1548,1549,1550,1551,1552,1553,1554,1555,1557,1558,1559,1560,1561,1562,1563,1564,1565,1566,1567,1568,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,1595,1596,1597,1598,1599,1600,1601,1602,1603,1604,1605,1606,1607,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,1619,1620,1621,1622,1623,1624,1625,1626,1627,1628,1629,1631,1632,1633,1634,1635,1636,1637,1638,1639,1640,1641,1642,1643,1644,1645,1646,1647,1648,1649,1650,1652,1653,1654,1655,1656,1657,1658,1659,1660,1661,1662,1663,1664,1665,1666,1667,1668,1669,1671,1672,1673,1674,1675,1676,1677,1678,1679,1680,1681,1682,1683,1684,1685,1686,1687,1688,1690,1691,1692,1693,1694,1695,1696,1697,1698,1699,1700,1701,1702,1703,1704,1705,1707,1708,1709,1710,1711,1712,1713,1714,1715,1716,1717,1718,1719,1720,1721,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1784,1785,1786,1787,1788,1789,1790,1791,1792,1793,1794,1795,1797,1798,1799,1800,1801,1802,1803,1804,1805,1806,1807,1808,1809,1811,1812,1813,1814,1815,1816,1817,1818,1819,1820,1821,1822,1824,1825,1826,1827,1828,1829,1830,1831,1832,1833,1834,1835,1837,1838,1839,1840,1841,1842,1843,1844,1845,1846,1847,1848,1850,1851,1852,1853,1854,1855,1856,1857,1858,1859,1860,1862,1863,1864,1865,1866,1867,1868,1869,1870,1871,1872,1874,1875,1876,1877,1878,1879,1880,1881,1882,1883,1884,1886,1887,1888,1889,1890,1891,1892,1893,1894,1895,1897,1898,1899,1900,1901,1902,1903,1904,1905,1906,1907,1909,1910,1911,1912,1913,1914,1915,1916,1917,1918,1920,1921,1922,1923,1924,1925,1926,1927,1928,1929,1931,1932,1933,1934,1935,1936,1937,1938,1939,1940,1942,1943,1944,1945,1946,1947,1948,1949,1950,1952,1953,1954,1955,1956,1957,1958,1959,1960,1961,1963,1964,1965,1966,1967,1968,1969,1970,1971,1973,1974,1975,1976,1977,1978,1979,1980,1981,1983,1984,1985,1986,1987,1988,1989,1990,1991,1993,1994,1995,1996,1997,1998,1999,2000,
41
2001,2003,2004,2005,2006,2007,2008,2009,2010,2011,2013,2014,2015,2016,2017,2018,2019,2020,2021,2023,2024,2025,2026,2027,2028,2029,2030,2031,2033,2034,2035,2036,2037,2038,2039,2040,2042,2043,2044,2045,2046,2047,2048,2049,2050,2052,2053,2054,2055,2056,2057,2058,2059,2061,2062,2063,2064,2065,2066,2067,2068,2070,2071,2072,2073,2074,2075,2076,2077,2079,2080,2081,2082,2083,2084,2085,2086,2088,2089,2090,2091,2092,2093,2094,2095,2097,2098,2099,2100,2101,2102,2103,2104,2106,2107,2108,2109,2110,2111,2112,2113,2115,2116,2117,2118,2119,2120,2121,2122,2124,2125,2126,2127,2128,2129,2130,2132,2133,2134,2135,2136,2137,2138,2139,2141,2142,2143,2144,2145,2146,2147,2149,2150,2151,2152,2153,2154,2155,2156,2158,2159,2160,2161,2162,2163,2164,2166,2167,2168,2169,2170,2171,2172,2173,2175,2176,2177,2178,2179,2180,2181,2183,2184,2185,2186,2187,2188,2189,2191,2192,2193,2194,2195,2196,2197,2199,2200,2201,2202,2203,2204,2205,2207,2208,2209,2210,2211,2212,2213,2215,2216,2217,2218,2219,2220,2221,2223,2224,2225,2226,2227,2228,2229,2231,2232,2233,2234,2235,2236,2237,2239,2240,2241,2242,2243,2244,2245,2247,2248,2249,2250,2251,2252,2253,2255,2256,2257,2258,2259,2260,2262,2263,2264,2265,2266,2267,2268,2270,2271,2272,2273,2274,2275,2276,2278,2279,2280,2281,2282,2283,2285,2286,2287,2288,2289,2290,2291,2293,2294,2295,2296,2297,2298,2300,2301,2302,2303,2304,2305,2306,2308,2309,2310,2311,2312,2313,2315,2316,2317,2318,2319,2320,2322,2323,2324,2325,2326,2327,2328,2330,2331,2332,2333,2334,2335,2337,2338,2339,2340,2341,2342,2344,2345,2346,2347,2348,2349,2350,2352,2353,2354,2355,2356,2357,2359,2360,2361,2362,2363,2364,2366,2367,2368,2369,2370,2371,2373,2374,2375,2376,2377,2378,2380,2381,2382,2383,2384,2385,2387,2388,2389,2390,2391,2392,2394,2395,2396,2397,2398,2399,2401,2402,2403,2404,2405,2406,2408,2409,2410,2411,2412,2413,2415,2416,2417,2418,2419,2420,2422,2423,2424,2425,2426,2427,2429,2430,2431,2432,2433,2434,2436,2437,2438,2439,2440,2441,2443,2444,2445,2446,2447,2449,2450,2451,2452,2453,2454,2456,2457,2458,2459,2460,2461,2463,2464,2465,2466,2467,2468,2470,2471,2472,2473,2474,2476,2477,2478,2479,2480,2481,2483,2484,2485,2486,2487,2488,2490,2491,2492,2493,2494,2496,2497,2498,2499,2500,
42
2501,2503,2504,2505,2506,2507,2509,2510,2511,2512,2513,2514,2516,2517,2518,2519,2520,2522,2523,2524,2525,2526,2527,2529,2530,2531,2532,2533,2535,2536,2537,2538,2539,2540,2542,2543,2544,2545,2546,2548,2549,2550,2551,2552,2553,2555,2556,2557,2558,2559,2561,2562,2563,2564,2565,2567,2568,2569,2570,2571,2572,2574,2575,2576,2577,2578,2580,2581,2582,2583,2584,2586,2587,2588,2589,2590,2591,2593,2594,2595,2596,2597,2599,2600,2601,2602,2603,2605,2606,2607,2608,2609,2611,2612,2613,2614,2615,2617,2618,2619,2620,2621,2622,2624,2625,2626,2627,2628,2630,2631,2632,2633,2634,2636,2637,2638,2639,2640,2642,2643,2644,2645,2646,2648,2649,2650,2651,2652,2654,2655,2656,2657,2658,2660,2661,2662,2663,2664,2666,2667,2668,2669,2670,2672,2673,2674,2675,2676,2677,2679,2680,2681,2682,2683,2685,2686,2687,2688,2689,2691,2692,2693,2694,2695,2697,2698,2699,2700,2702,2703,2704,2705,2706,2708,2709,2710,2711,2712,2714,2715,2716,2717,2718,2720,2721,2722,2723,2724,2726,2727,2728,2729,2730,2732,2733,2734,2735,2736,2738,2739,2740,2741,2742,2744,2745,2746,2747,2748,2750,2751,2752,2753,2755,2756,2757,2758,2759,2761,2762,2763,2764,2765,2767,2768,2769,2770,2771,2773,2774,2775,2776,2777,2779,2780,2781,2782,2784,2785,2786,2787,2788,2790,2791,2792,2793,2794,2796,2797,2798,2799,2800,2802,2803,2804,2805,2807,2808,2809,2810,2811,2813,2814,2815,2816,2817,2819,2820,2821,2822,2824,2825,2826,2827,2828,2830,2831,2832,2833,2834,2836,2837,2838,2839,2841,2842,2843,2844,2845,2847,2848,2849,2850,2851,2853,2854,2855,2856,2858,2859,2860,2861,2862,2864,2865,2866,2867,2869,2870,2871,2872,2873,2875,2876,2877,2878,2879,2881,2882,2883,2884,2886,2887,2888,2889,2890,2892,2893,2894,2895,2897,2898,2899,2900,2901,2903,2904,2905,2906,2908,2909,2910,2911,2912,2914,2915,2916,2917,2919,2920,2921,2922,2923,2925,2926,2927,2928,2930,2931,2932,2933,2934,2936,2937,2938,2939,2941,2942,2943,2944,2945,2947,2948,2949,2950,2952,2953,2954,2955,2957,2958,2959,2960,2961,2963,2964,2965,2966,2968,2969,2970,2971,2972,2974,2975,2976,2977,2979,2980,2981,2982,2984,2985,2986,2987,2988,2990,2991,2992,2993,2995,2996,2997,2998,3000,
43
3001,3002,3003,3004,3006,3007,3008,3009,3011,3012,3013,3014,3016,3017,3018,3019,3020,3022,3023,3024,3025,3027,3028,3029,3030,3032,3033,3034,3035,3036,3038,3039,3040,3041,3043,3044,3045,3046,3048,3049,3050,3051,3053,3054,3055,3056,3057,3059,3060,3061,3062,3064,3065,3066,3067,3069,3070,3071,3072,3074,3075,3076,3077,3078,3080,3081,3082,3083,3085,3086,3087,3088,3090,3091,3092,3093,3095,3096,3097,3098,3100,3101,3102,3103,3104,3106,3107,3108,3109,3111,3112,3113,3114,3116,3117,3118,3119,3121,3122,3123,3124,3126,3127,3128,3129,3131,3132,3133,3134,3135,3137,3138,3139,3140,3142,3143,3144,3145,3147,3148,3149,3150,3152,3153,3154,3155,3157,3158,3159,3160,3162,3163,3164,3165,3167,3168,3169,3170,3172,3173,3174,3175,3177,3178,3179,3180,3181,3183,3184,3185,3186,3188,3189,3190,3191,3193,3194,3195,3196,3198,3199,3200,3201,3203,3204,3205,3206,3208,3209,3210,3211,3213,3214,3215,3216,3218,3219,3220,3221,3223,3224,3225,3226,3228,3229,3230,3231,3233,3234,3235,3236,3238,3239,3240,3241,3243,3244,3245,3246,3248,3249,3250,3251,3253,3254,3255,3256,3258,3259,3260,3261,3263,3264,3265,3266,3268,3269,3270,3271,3273,3274,3275,3276,3278,3279,3280,3281,3283,3284,3285,3286,3288,3289,3290,3291,3293,3294,3295,3296,3298,3299,3300,3301,3303,3304,3305,3306,3308,3309,3310,3312,3313,3314,3315,3317,3318,3319,3320,3322,3323,3324,3325,3327,3328,3329,3330,3332,3333,3334,3335,3337,3338,3339,3340,3342,3343,3344,3345,3347,3348,3349,3350,3352,3353,3354,3355,3357,3358,3359,3361,3362,3363,3364,3366,3367,3368,3369,3371,3372,3373,3374,3376,3377,3378,3379,3381,3382,3383,3384,3386,3387,3388,3389,3391,3392,3393,3395,3396,3397,3398,3400,3401,3402,3403,3405,3406,3407,3408,3410,3411,3412,3413,3415,3416,3417,3419,3420,3421,3422,3424,3425,3426,3427,3429,3430,3431,3432,3434,3435,3436,3437,3439,3440,3441,3443,3444,3445,3446,3448,3449,3450,3451,3453,3454,3455,3456,3458,3459,3460,3461,3463,3464,3465,3467,3468,3469,3470,3472,3473,3474,3475,3477,3478,3479,3480,3482,3483,3484,3486,3487,3488,3489,3491,3492,3493,3494,3496,3497,3498,3499,
44
3501,3502,3503,3505,3506,3507,3508,3510,3511,3512,3513,3515,3516,3517,3518,3520,3521,3522,3524,3525,3526,3527,3529,3530,3531,3532,3534,3535,3536,3538,3539,3540,3541,3543,3544,3545,3546,3548,3549,3550,3551,3553,3554,3555,3557,3558,3559,3560,3562,3563,3564,3565,3567,3568,3569,3571,3572,3573,3574,3576,3577,3578,3579,3581,3582,3583,3585,3586,3587,3588,3590,3591,3592,3593,3595,3596,3597,3599,3600,3601,3602,3604,3605,3606,3607,3609,3610,3611,3613,3614,3615,3616,3618,3619,3620,3621,3623,3624,3625,3627,3628,3629,3630,3632,3633,3634,3636,3637,3638,3639,3641,3642,3643,3644,3646,3647,3648,3650,3651,3652,3653,3655,3656,3657,3658,3660,3661,3662,3664,3665,3666,3667,3669,3670,3671,3673,3674,3675,3676,3678,3679,3680,3681,3683,3684,3685,3687,3688,3689,3690,3692,3693,3694,3696,3697,3698,3699,3701,3702,3703,3704,3706,3707,3708,3710,3711,3712,3713,3715,3716,3717,3719,3720,3721,3722,3724,3725,3726,3728,3729,3730,3731,3733,3734,3735,3736,3738,3739,3740,3742,3743,3744,3745,3747,3748,3749,3751,3752,3753,3754,3756,3757,3758,3760,3761,3762,3763,3765,3766,3767,3769,3770,3771,3772,3774,3775,3776,3777,3779,3780,3781,3783,3784,3785,3786,3788,3789,3790,3792,3793,3794,3795,3797,3798,3799,3801,3802,3803,3804,3806,3807,3808,3810,3811,3812,3813,3815,3816,3817,3819,3820,3821,3822,3824,3825,3826,3828,3829,3830,3831,3833,3834,3835,3837,3838,3839,3840,3842,3843,3844,3846,3847,3848,3849,3851,3852,3853,3855,3856,3857,3858,3860,3861,3862,3864,3865,3866,3867,3869,3870,3871,3873,3874,3875,3876,3878,3879,3880,3882,3883,3884,3885,3887,3888,3889,3891,3892,3893,3894,3896,3897,3898,3900,3901,3902,3903,3905,3906,3907,3909,3910,3911,3912,3914,3915,3916,3918,3919,3920,3922,3923,3924,3925,3927,3928,3929,3931,3932,3933,3934,3936,3937,3938,3940,3941,3942,3943,3945,3946,3947,3949,3950,3951,3952,3954,3955,3956,3958,3959,3960,3961,3963,3964,3965,3967,3968,3969,3971,3972,3973,3974,3976,3977,3978,3980,3981,3982,3983,3985,3986,3987,3989,3990,3991,3992,3994,3995,3996,3998,3999,4000,
45
4002,4003,4004,4005,4007,4008,4009,4011,4012,4013,4014,4016,4017,4018,4020,4021,4022,4024,4025,4026,4027,4029,4030,4031,4033,4034,4035,4036,4038,4039,4040,4042,4043,4044,4046,4047,4048,4049,4051,4052,4053,4055,4056,4057,4058,4060,4061,4062,4064,4065,4066,4068,4069,4070,4071,4073,4074,4075,4077,4078,4079,4080,4082,4083,4084,4086,4087,4088,4090,4091,4092,4093,4095);
46
47
type zustaende is (Z00, Z01);
48
signal z           : zustaende := Z00;
49
signal index        : integer range 0 to 4095;
50
signal preindex      : integer range 0 to 4095;
51
signal newindex      : integer range 0 to 4095 := 0;
52
signal phase            : unsigned(31 downto 0) := (others => '0');
53
signal saegezahn_inv_u   : unsigned(11 downto 0) := (others => '0');
54
signal saegezahn_u      : unsigned(11 downto 0) := (others => '0');
55
signal rechteck_u       : unsigned(11 downto 0) := (others => '0');
56
57
begin
58
  process begin
59
    wait until rising_edge(clk);
60
    if control = x"00000000" then
61
      if run = x"00000001" then
62
        z <= Z00;
63
        if newindex = 0 then
64
          phase <= (phase + microsteps);
65
        elsif  newindex  /= 0 then
66
          phase <= to_unsigned(newindex,12) & x"00000";
67
        end if;
68
      elsif run = x"00000002" then
69
        z <= Z01;
70
          if newindex = 0 then
71
            phase <= (phase - microsteps);
72
          elsif  newindex  /= 0 then
73
            phase <= to_unsigned(newindex,12) & x"00000";
74
          end if;
75
      end if;
76
    elsif control = x"00000001" then
77
      if y < x"00000000" then
78
        z <= Z00;
79
        if newindex = 0 then
80
          phase <= (phase + microsteps);
81
        elsif  newindex  /= 0 then
82
          phase <= to_unsigned(newindex,12) & x"00000";
83
        end if;
84
      elsif y > x"00000000" then
85
        z <= Z01;
86
        if newindex = 0 then
87
          phase <= (phase - microsteps);
88
        elsif  newindex  /= 0 then
89
           phase <= to_unsigned(newindex,12) & x"00000";
90
        end if;
91
      end if;
92
    end if;
93
    end process;
94
   
95
96
  index <= to_integer(phase(31 downto 20));
97
   
98
   process
99
   variable dir : std_logic := '0';
100
   begin
101
    wait until rising_edge(clk);
102
  
103
          if (dir = '0') then 
104
            saegezahn_inv_u     <= to_unsigned( saw_load_array_c (index), saegezahn_inv_u'length);
105
            preindex <= saw_load_array_c (index);
106
            newindex <= 0;
107
            dir := '0';
108
          elsif (dir = '1') then
109
            for i in 0 to 4095 loop
110
              if (((saw_load_array_c (i)) = preindex) or ((saw_load_array_c (i)) = preindex+1) or ((saw_load_array_c (i)) = preindex-1))then
111
                newindex <= i;
112
                exit;
113
              end if;
114
            end loop;
115
            dir := '0';
116
          end if;
117
        when Z01 =>
118
          if (dir = '1') then
119
            saegezahn_inv_u     <= to_unsigned( saw_unload_array_c (index), saegezahn_inv_u'length);
120
            preindex <= saw_unload_array_c (index);
121
            newindex <= 0;
122
            dir := '1';
123
          elsif (dir = '0') then
124
            for i in 0 to 4095 loop
125
              if (((saw_unload_array_c (i)) = preindex) or ((saw_unload_array_c (i)) = preindex+1) or ((saw_unload_array_c (i)) = preindex-1))then
126
                newindex <= i;
127
                exit;
128
              end if;
129
            end loop;
130
            dir := '1';
131
          end if;
132
    end case;
133
   end process;
134
   
135
    saegezahn_u <= phase(31 downto 20);
136
137
    process begin
138
        wait until rising_edge(clk);
139
        if (saegezahn_u >= x"555" and saegezahn_u <= x"DDD") then
140
            rechteck_u <= x"FFF";
141
        else
142
            rechteck_u <= x"000";
143
        end if;
144
    end process;
145
   
146
147
  -- convert output values
148
  saegezahn_inv <= "0011" & std_logic_vector(saegezahn_inv_u);
149
  saegezahn <= "0011" & std_logic_vector(saegezahn_u);
150
  rechteck  <= "0011" & std_logic_vector(rechteck_u);
151
152
end bhv;

Gruß

von Markus F. (mfro)


Lesenswert?

Lang schrieb:
> aber in Quartus lässt
> sich es sich nicht Kompilieren...

jetzt wär' halt die Fehlermeldung, die Du beim Versuch bekommst, echt 
nützlich, gell?

von Lang (Gast)


Angehängte Dateien:

Lesenswert?

Ich hab nochmal ein Bild der Simulation angehängt, da kann man sehen was 
ich meine. Unschön ist der kurze Einbruch beim Wechsel (20ns), ich habs 
es aber nicht ohne hinbekommen...

von Lang (Gast)


Lesenswert?

Markus F. schrieb:
> jetzt wär' halt die Fehlermeldung, die Du beim Versuch bekommst, echt
> nützlich, gell?

Würde ich posten, aber: es passiert einfach nichts, bei 46% von Analysis 
& Synthesis bleibt er stehen...keine Fehlermeldung.

Ich seh grad, an einer stelle des Codes hab ich was vergessen. Hier 
nochmal der korrekte:
1
library ieee;
2
use ieee.std_logic_1164.all;
3
use ieee.numeric_std.all;
4
5
6
entity Generator_1 is
7
  port (
8
    clk        : in std_logic; -- Systemclock (50 MHz)
9
      microsteps    : in unsigned(31 downto 0) := (others => '0');
10
      run           : in unsigned(31 downto 0) := (others => '0'); -- 0 = steht, 1 = links, 2 = rechts
11
    y          : in signed(31 downto 0) := (others => '0');
12
    control      : in unsigned(31 downto 0) := (others => '0'); -- Regelung: 0 = nein, 1 = ja
13
14
      rechteck      : out std_logic_vector(15 downto 0) := (others => '0');
15
      saegezahn     : out std_logic_vector(15 downto 0) := (others => '0');
16
    saegezahn_inv   : out std_logic_vector(15 downto 0) := (others => '0')
17
      );
18
    
19
end Generator_1;
20
21
architecture bhv of Generator_1 is
22
23
type saw_load_array_t is array (0 to 4095) of integer range 0 to 4095;
24
constant saw_load_array_c : saw_load_array_t :=
25
(0,6,7,9,10,11,13,14,15,17,18,19,21,22,23,25,26,27,29,30,31,33,34,35,37,38,39,41,42,43,45,46,47,49,50,51,53,54,55,57,58,59,61,62,63,65,66,67,69,70,71,73,74,75,77,78,79,81,82,83,85,86,87,89,90,91,93,94,95,96,98,99,100,102,103,104,106,107,108,110,111,112,114,115,116,118,119,120,122,123,124,125,127,128,129,131,132,133,135,136,137,139,140,141,143,144,145,147,148,149,150,152,153,154,156,157,158,160,161,162,164,165,166,167,169,170,171,173,174,175,177,178,179,181,182,183,184,186,187,188,190,191,192,194,195,196,197,199,200,201,203,204,205,207,208,209,210,212,213,214,216,217,218,220,221,222,223,225,226,227,229,230,231,232,234,235,236,238,239,240,242,243,244,245,247,248,249,251,252,253,254,256,257,258,260,261,262,263,265,266,267,269,270,271,272,274,275,276,278,279,280,281,283,284,285,287,288,289,290,292,293,294,295,297,298,299,301,302,303,304,306,307,308,310,311,312,313,315,316,317,318,320,321,322,324,325,326,327,329,330,331,332,334,335,336,338,339,340,341,343,344,345,346,348,349,350,352,353,354,355,357,358,359,360,362,363,364,365,367,368,369,371,372,373,374,376,377,378,379,381,382,383,384,386,387,388,389,391,392,393,394,396,397,398,399,401,402,403,405,406,407,408,410,411,412,413,415,416,417,418,420,421,422,423,425,426,427,428,430,431,432,433,435,436,437,438,440,441,442,443,445,446,447,448,450,451,452,453,455,456,457,458,460,461,462,463,465,466,467,468,469,471,472,473,474,476,477,478,479,481,482,483,484,486,487,488,489,491,492,493,494,496,497,498,499,500,
26
502,503,504,505,507,508,509,510,512,513,514,515,517,518,519,520,521,523,524,525,526,528,529,530,531,533,534,535,536,537,539,540,541,542,544,545,546,547,548,550,551,552,553,555,556,557,558,560,561,562,563,564,566,567,568,569,571,572,573,574,575,577,578,579,580,582,583,584,585,586,588,589,590,591,592,594,595,596,597,599,600,601,602,603,605,606,607,608,609,611,612,613,614,616,617,618,619,620,622,623,624,625,626,628,629,630,631,632,634,635,636,637,639,640,641,642,643,645,646,647,648,649,651,652,653,654,655,657,658,659,660,661,663,664,665,666,667,669,670,671,672,673,675,676,677,678,679,681,682,683,684,685,687,688,689,690,691,693,694,695,696,697,699,700,701,702,703,705,706,707,708,709,711,712,713,714,715,716,718,719,720,721,722,724,725,726,727,728,730,731,732,733,734,736,737,738,739,740,741,743,744,745,746,747,749,750,751,752,753,754,756,757,758,759,760,762,763,764,765,766,768,769,770,771,772,773,775,776,777,778,779,780,782,783,784,785,786,788,789,790,791,792,793,795,796,797,798,799,800,802,803,804,805,806,808,809,810,811,812,813,815,816,817,818,819,820,822,823,824,825,826,827,829,830,831,832,833,834,836,837,838,839,840,841,843,844,845,846,847,848,850,851,852,853,854,855,857,858,859,860,861,862,864,865,866,867,868,869,871,872,873,874,875,876,878,879,880,881,882,883,884,886,887,888,889,890,891,893,894,895,896,897,898,899,901,902,903,904,905,906,908,909,910,911,912,913,914,916,917,918,919,920,921,923,924,925,926,927,928,929,931,932,933,934,935,936,937,939,940,941,942,943,944,945,947,948,949,950,951,952,954,955,956,957,958,959,960,962,963,964,965,966,967,968,970,971,972,973,974,975,976,977,979,980,981,982,983,984,985,987,988,989,990,991,992,993,995,996,997,998,999,1000,
27
1001,1003,1004,1005,1006,1007,1008,1009,1010,1012,1013,1014,1015,1016,1017,1018,1020,1021,1022,1023,1024,1025,1026,1027,1029,1030,1031,1032,1033,1034,1035,1036,1038,1039,1040,1041,1042,1043,1044,1045,1047,1048,1049,1050,1051,1052,1053,1054,1056,1057,1058,1059,1060,1061,1062,1063,1065,1066,1067,1068,1069,1070,1071,1072,1074,1075,1076,1077,1078,1079,1080,1081,1083,1084,1085,1086,1087,1088,1089,1090,1091,1093,1094,1095,1096,1097,1098,1099,1100,1102,1103,1104,1105,1106,1107,1108,1109,1110,1112,1113,1114,1115,1116,1117,1118,1119,1120,1122,1123,1124,1125,1126,1127,1128,1129,1130,1132,1133,1134,1135,1136,1137,1138,1139,1140,1142,1143,1144,1145,1146,1147,1148,1149,1150,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1163,1164,1165,1166,1167,1168,1169,1170,1171,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1365,1366,1367,1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1396,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1474,1475,1476,1477,1478,1479,1480,1481,1482,1483,1484,1485,1486,1487,1488,1489,1490,1491,1492,1493,1494,1495,1497,1498,1499,1500,
28
1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,1515,1516,1517,1518,1519,1521,1522,1523,1524,1525,1526,1527,1528,1529,1530,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540,1541,1542,1543,1544,1545,1546,1548,1549,1550,1551,1552,1553,1554,1555,1556,1557,1558,1559,1560,1561,1562,1563,1564,1565,1566,1567,1568,1569,1570,1571,1572,1573,1574,1575,1576,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,1595,1596,1597,1598,1599,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1615,1616,1617,1618,1619,1620,1621,1622,1623,1624,1625,1626,1627,1628,1629,1630,1631,1632,1633,1634,1635,1636,1637,1638,1639,1640,1641,1642,1643,1644,1645,1646,1647,1648,1649,1650,1651,1652,1653,1654,1655,1656,1657,1658,1659,1660,1661,1663,1664,1665,1666,1667,1668,1669,1670,1671,1672,1673,1674,1675,1676,1677,1678,1679,1680,1681,1682,1683,1684,1685,1686,1687,1688,1689,1690,1691,1692,1693,1694,1695,1696,1697,1698,1699,1700,1701,1702,1703,1704,1705,1706,1707,1708,1709,1710,1711,1712,1713,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1787,1788,1789,1790,1791,1792,1793,1794,1795,1796,1797,1798,1799,1800,1801,1802,1803,1804,1805,1806,1807,1808,1809,1810,1811,1812,1813,1814,1815,1816,1817,1818,1819,1820,1821,1822,1823,1824,1825,1826,1827,1828,1829,1830,1831,1832,1833,1834,1835,1836,1837,1838,1839,1840,1841,1842,1843,1844,1845,1846,1847,1848,1849,1850,1851,1852,1853,1854,1855,1856,1857,1858,1859,1860,1861,1862,1863,1864,1865,1866,1867,1868,1869,1870,1871,1872,1873,1874,1875,1876,1877,1878,1879,1880,1881,1882,1883,1884,1885,1886,1887,1887,1888,1889,1890,1891,1892,1893,1894,1895,1896,1897,1898,1899,1900,1901,1902,1903,1904,1905,1906,1907,1908,1909,1910,1911,1912,1913,1914,1915,1916,1917,1918,1919,1920,1921,1922,1923,1924,1925,1926,1927,1928,1929,1930,1931,1932,1933,1934,1935,1936,1936,1937,1938,1939,1940,1941,1942,1943,1944,1945,1946,1947,1948,1949,1950,1951,1952,1953,1954,1955,1956,1957,1958,1959,1960,1961,1962,1963,1964,1965,1966,1967,1968,1969,1970,1971,1972,1973,1973,1974,1975,1976,1977,1978,1979,1980,1981,1982,1983,1984,1985,1986,1987,1988,1989,1990,1991,1992,1993,1994,1995,1996,1997,1998,1999,2000,
29
2001,2002,2003,2004,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026,2027,2028,2029,2030,2031,2032,2032,2033,2034,2035,2036,2037,2038,2039,2040,2041,2042,2043,2044,2045,2046,2047,2048,2049,2050,2051,2052,2053,2054,2055,2056,2057,2057,2058,2059,2060,2061,2062,2063,2064,2065,2066,2067,2068,2069,2070,2071,2072,2073,2074,2075,2076,2077,2078,2079,2080,2080,2081,2082,2083,2084,2085,2086,2087,2088,2089,2090,2091,2092,2093,2094,2095,2096,2097,2098,2099,2100,2101,2102,2102,2103,2104,2105,2106,2107,2108,2109,2110,2111,2112,2113,2114,2115,2116,2117,2118,2119,2120,2121,2122,2122,2123,2124,2125,2126,2127,2128,2129,2130,2131,2132,2133,2134,2135,2136,2137,2138,2139,2140,2141,2141,2142,2143,2144,2145,2146,2147,2148,2149,2150,2151,2152,2153,2154,2155,2156,2157,2158,2159,2159,2160,2161,2162,2163,2164,2165,2166,2167,2168,2169,2170,2171,2172,2173,2174,2175,2176,2177,2177,2178,2179,2180,2181,2182,2183,2184,2185,2186,2187,2188,2189,2190,2191,2192,2193,2194,2194,2195,2196,2197,2198,2199,2200,2201,2202,2203,2204,2205,2206,2207,2208,2209,2210,2210,2211,2212,2213,2214,2215,2216,2217,2218,2219,2220,2221,2222,2223,2224,2225,2225,2226,2227,2228,2229,2230,2231,2232,2233,2234,2235,2236,2237,2238,2239,2240,2241,2241,2242,2243,2244,2245,2246,2247,2248,2249,2250,2251,2252,2253,2254,2255,2255,2256,2257,2258,2259,2260,2261,2262,2263,2264,2265,2266,2267,2268,2269,2270,2270,2271,2272,2273,2274,2275,2276,2277,2278,2279,2280,2281,2282,2283,2284,2284,2285,2286,2287,2288,2289,2290,2291,2292,2293,2294,2295,2296,2297,2297,2298,2299,2300,2301,2302,2303,2304,2305,2306,2307,2308,2309,2310,2311,2311,2312,2313,2314,2315,2316,2317,2318,2319,2320,2321,2322,2323,2324,2324,2325,2326,2327,2328,2329,2330,2331,2332,2333,2334,2335,2336,2337,2337,2338,2339,2340,2341,2342,2343,2344,2345,2346,2347,2348,2349,2349,2350,2351,2352,2353,2354,2355,2356,2357,2358,2359,2360,2361,2362,2362,2363,2364,2365,2366,2367,2368,2369,2370,2371,2372,2373,2374,2374,2375,2376,2377,2378,2379,2380,2381,2382,2383,2384,2385,2386,2386,2387,2388,2389,2390,2391,2392,2393,2394,2395,2396,2397,2397,2398,2399,2400,2401,2402,2403,2404,2405,2406,2407,2408,2409,2409,2410,2411,2412,2413,2414,2415,2416,2417,2418,2419,2420,2420,2421,2422,2423,2424,2425,2426,2427,2428,2429,2430,2431,2431,2432,2433,2434,2435,2436,2437,2438,2439,2440,2441,2442,2442,2443,2444,2445,2446,2447,2448,2449,2450,2451,2452,2453,2453,2454,2455,2456,2457,2458,2459,2460,2461,2462,2463,2464,2464,2465,2466,2467,2468,2469,2470,2471,2472,2473,2474,2474,2475,2476,2477,2478,2479,2480,2481,2482,2483,2484,2485,2485,2486,2487,2488,2489,2490,2491,2492,2493,2494,2495,2495,2496,2497,2498,2499,2500,
30
2501,2502,2503,2504,2505,2505,2506,2507,2508,2509,2510,2511,2512,2513,2514,2515,2516,2516,2517,2518,2519,2520,2521,2522,2523,2524,2525,2526,2526,2527,2528,2529,2530,2531,2532,2533,2534,2535,2535,2536,2537,2538,2539,2540,2541,2542,2543,2544,2545,2545,2546,2547,2548,2549,2550,2551,2552,2553,2554,2555,2555,2556,2557,2558,2559,2560,2561,2562,2563,2564,2565,2565,2566,2567,2568,2569,2570,2571,2572,2573,2574,2574,2575,2576,2577,2578,2579,2580,2581,2582,2583,2583,2584,2585,2586,2587,2588,2589,2590,2591,2592,2593,2593,2594,2595,2596,2597,2598,2599,2600,2601,2602,2602,2603,2604,2605,2606,2607,2608,2609,2610,2611,2611,2612,2613,2614,2615,2616,2617,2618,2619,2620,2620,2621,2622,2623,2624,2625,2626,2627,2628,2629,2629,2630,2631,2632,2633,2634,2635,2636,2637,2638,2638,2639,2640,2641,2642,2643,2644,2645,2646,2647,2647,2648,2649,2650,2651,2652,2653,2654,2655,2656,2656,2657,2658,2659,2660,2661,2662,2663,2664,2665,2665,2666,2667,2668,2669,2670,2671,2672,2673,2674,2674,2675,2676,2677,2678,2679,2680,2681,2682,2682,2683,2684,2685,2686,2687,2688,2689,2690,2691,2691,2692,2693,2694,2695,2696,2697,2698,2699,2700,2700,2701,2702,2703,2704,2705,2706,2707,2708,2708,2709,2710,2711,2712,2713,2714,2715,2716,2717,2717,2718,2719,2720,2721,2722,2723,2724,2725,2725,2726,2727,2728,2729,2730,2731,2732,2733,2733,2734,2735,2736,2737,2738,2739,2740,2741,2742,2742,2743,2744,2745,2746,2747,2748,2749,2750,2750,2751,2752,2753,2754,2755,2756,2757,2758,2758,2759,2760,2761,2762,2763,2764,2765,2766,2766,2767,2768,2769,2770,2771,2772,2773,2774,2775,2775,2776,2777,2778,2779,2780,2781,2782,2783,2783,2784,2785,2786,2787,2788,2789,2790,2791,2791,2792,2793,2794,2795,2796,2797,2798,2799,2799,2800,2801,2802,2803,2804,2805,2806,2807,2807,2808,2809,2810,2811,2812,2813,2814,2815,2815,2816,2817,2818,2819,2820,2821,2822,2823,2823,2824,2825,2826,2827,2828,2829,2830,2830,2831,2832,2833,2834,2835,2836,2837,2838,2838,2839,2840,2841,2842,2843,2844,2845,2846,2846,2847,2848,2849,2850,2851,2852,2853,2854,2854,2855,2856,2857,2858,2859,2860,2861,2862,2862,2863,2864,2865,2866,2867,2868,2869,2869,2870,2871,2872,2873,2874,2875,2876,2877,2877,2878,2879,2880,2881,2882,2883,2884,2885,2885,2886,2887,2888,2889,2890,2891,2892,2892,2893,2894,2895,2896,2897,2898,2899,2900,2900,2901,2902,2903,2904,2905,2906,2907,2908,2908,2909,2910,2911,2912,2913,2914,2915,2915,2916,2917,2918,2919,2920,2921,2922,2923,2923,2924,2925,2926,2927,2928,2929,2930,2930,2931,2932,2933,2934,2935,2936,2937,2938,2938,2939,2940,2941,2942,2943,2944,2945,2945,2946,2947,2948,2949,2950,2951,2952,2953,2953,2954,2955,2956,2957,2958,2959,2960,2960,2961,2962,2963,2964,2965,2966,2967,2968,2968,2969,2970,2971,2972,2973,2974,2975,2975,2976,2977,2978,2979,2980,2981,2982,2982,2983,2984,2985,2986,2987,2988,2989,2990,2990,2991,2992,2993,2994,2995,2996,2997,2997,2998,2999,3000,
31
3001,3002,3003,3004,3004,3005,3006,3007,3008,3009,3010,3011,3012,3012,3013,3014,3015,3016,3017,3018,3019,3019,3020,3021,3022,3023,3024,3025,3026,3026,3027,3028,3029,3030,3031,3032,3033,3033,3034,3035,3036,3037,3038,3039,3040,3041,3041,3042,3043,3044,3045,3046,3047,3048,3048,3049,3050,3051,3052,3053,3054,3055,3055,3056,3057,3058,3059,3060,3061,3062,3062,3063,3064,3065,3066,3067,3068,3069,3069,3070,3071,3072,3073,3074,3075,3076,3077,3077,3078,3079,3080,3081,3082,3083,3084,3084,3085,3086,3087,3088,3089,3090,3091,3091,3092,3093,3094,3095,3096,3097,3098,3098,3099,3100,3101,3102,3103,3104,3105,3105,3106,3107,3108,3109,3110,3111,3112,3112,3113,3114,3115,3116,3117,3118,3119,3120,3120,3121,3122,3123,3124,3125,3126,3127,3127,3128,3129,3130,3131,3132,3133,3134,3134,3135,3136,3137,3138,3139,3140,3141,3141,3142,3143,3144,3145,3146,3147,3148,3148,3149,3150,3151,3152,3153,3154,3155,3155,3156,3157,3158,3159,3160,3161,3162,3162,3163,3164,3165,3166,3167,3168,3169,3169,3170,3171,3172,3173,3174,3175,3176,3176,3177,3178,3179,3180,3181,3182,3183,3183,3184,3185,3186,3187,3188,3189,3190,3190,3191,3192,3193,3194,3195,3196,3197,3197,3198,3199,3200,3201,3202,3203,3204,3204,3205,3206,3207,3208,3209,3210,3211,3211,3212,3213,3214,3215,3216,3217,3218,3218,3219,3220,3221,3222,3223,3224,3225,3225,3226,3227,3228,3229,3230,3231,3232,3232,3233,3234,3235,3236,3237,3238,3239,3239,3240,3241,3242,3243,3244,3245,3246,3246,3247,3248,3249,3250,3251,3252,3253,3253,3254,3255,3256,3257,3258,3259,3260,3260,3261,3262,3263,3264,3265,3266,3267,3267,3268,3269,3270,3271,3272,3273,3274,3274,3275,3276,3277,3278,3279,3280,3281,3281,3282,3283,3284,3285,3286,3287,3288,3288,3289,3290,3291,3292,3293,3294,3295,3295,3296,3297,3298,3299,3300,3301,3302,3302,3303,3304,3305,3306,3307,3308,3309,3310,3310,3311,3312,3313,3314,3315,3316,3317,3317,3318,3319,3320,3321,3322,3323,3324,3324,3325,3326,3327,3328,3329,3330,3331,3331,3332,3333,3334,3335,3336,3337,3338,3338,3339,3340,3341,3342,3343,3344,3345,3345,3346,3347,3348,3349,3350,3351,3352,3352,3353,3354,3355,3356,3357,3358,3359,3359,3360,3361,3362,3363,3364,3365,3366,3366,3367,3368,3369,3370,3371,3372,3373,3373,3374,3375,3376,3377,3378,3379,3380,3380,3381,3382,3383,3384,3385,3386,3387,3387,3388,3389,3390,3391,3392,3393,3394,3394,3395,3396,3397,3398,3399,3400,3401,3401,3402,3403,3404,3405,3406,3407,3408,3408,3409,3410,3411,3412,3413,3414,3415,3415,3416,3417,3418,3419,3420,3421,3422,3422,3423,3424,3425,3426,3427,3428,3429,3429,3430,3431,3432,3433,3434,3435,3436,3436,3437,3438,3439,3440,3441,3442,3443,3443,3444,3445,3446,3447,3448,3449,3450,3451,3451,3452,3453,3454,3455,3456,3457,3458,3458,3459,3460,3461,3462,3463,3464,3465,3465,3466,3467,3468,3469,3470,3471,3472,3472,3473,3474,3475,3476,3477,3478,3479,3479,3480,3481,3482,3483,3484,3485,3486,3486,3487,3488,3489,3490,3491,3492,3493,3494,3494,3495,3496,3497,3498,3499,3500,
32
3501,3501,3502,3503,3504,3505,3506,3507,3508,3508,3509,3510,3511,3512,3513,3514,3515,3515,3516,3517,3518,3519,3520,3521,3522,3522,3523,3524,3525,3526,3527,3528,3529,3530,3530,3531,3532,3533,3534,3535,3536,3537,3537,3538,3539,3540,3541,3542,3543,3544,3544,3545,3546,3547,3548,3549,3550,3551,3552,3552,3553,3554,3555,3556,3557,3558,3559,3559,3560,3561,3562,3563,3564,3565,3566,3566,3567,3568,3569,3570,3571,3572,3573,3573,3574,3575,3576,3577,3578,3579,3580,3581,3581,3582,3583,3584,3585,3586,3587,3588,3588,3589,3590,3591,3592,3593,3594,3595,3596,3596,3597,3598,3599,3600,3601,3602,3603,3603,3604,3605,3606,3607,3608,3609,3610,3611,3611,3612,3613,3614,3615,3616,3617,3618,3618,3619,3620,3621,3622,3623,3624,3625,3625,3626,3627,3628,3629,3630,3631,3632,3633,3633,3634,3635,3636,3637,3638,3639,3640,3641,3641,3642,3643,3644,3645,3646,3647,3648,3648,3649,3650,3651,3652,3653,3654,3655,3656,3656,3657,3658,3659,3660,3661,3662,3663,3663,3664,3665,3666,3667,3668,3669,3670,3671,3671,3672,3673,3674,3675,3676,3677,3678,3679,3679,3680,3681,3682,3683,3684,3685,3686,3686,3687,3688,3689,3690,3691,3692,3693,3694,3694,3695,3696,3697,3698,3699,3700,3701,3702,3702,3703,3704,3705,3706,3707,3708,3709,3709,3710,3711,3712,3713,3714,3715,3716,3717,3717,3718,3719,3720,3721,3722,3723,3724,3725,3725,3726,3727,3728,3729,3730,3731,3732,3733,3733,3734,3735,3736,3737,3738,3739,3740,3741,3741,3742,3743,3744,3745,3746,3747,3748,3749,3749,3750,3751,3752,3753,3754,3755,3756,3757,3757,3758,3759,3760,3761,3762,3763,3764,3765,3765,3766,3767,3768,3769,3770,3771,3772,3773,3773,3774,3775,3776,3777,3778,3779,3780,3781,3781,3782,3783,3784,3785,3786,3787,3788,3789,3789,3790,3791,3792,3793,3794,3795,3796,3797,3797,3798,3799,3800,3801,3802,3803,3804,3805,3805,3806,3807,3808,3809,3810,3811,3812,3813,3814,3814,3815,3816,3817,3818,3819,3820,3821,3822,3822,3823,3824,3825,3826,3827,3828,3829,3830,3830,3831,3832,3833,3834,3835,3836,3837,3838,3839,3839,3840,3841,3842,3843,3844,3845,3846,3847,3847,3848,3849,3850,3851,3852,3853,3854,3855,3856,3856,3857,3858,3859,3860,3861,3862,3863,3864,3864,3865,3866,3867,3868,3869,3870,3871,3872,3873,3873,3874,3875,3876,3877,3878,3879,3880,3881,3881,3882,3883,3884,3885,3886,3887,3888,3889,3890,3890,3891,3892,3893,3894,3895,3896,3897,3898,3899,3899,3900,3901,3902,3903,3904,3905,3906,3907,3908,3908,3909,3910,3911,3912,3913,3914,3915,3916,3917,3917,3918,3919,3920,3921,3922,3923,3924,3925,3926,3926,3927,3928,3929,3930,3931,3932,3933,3934,3935,3935,3936,3937,3938,3939,3940,3941,3942,3943,3944,3944,3945,3946,3947,3948,3949,3950,3951,3952,3953,3953,3954,3955,3956,3957,3958,3959,3960,3961,3962,3962,3963,3964,3965,3966,3967,3968,3969,3970,3971,3972,3972,3973,3974,3975,3976,3977,3978,3979,3980,3981,3981,3982,3983,3984,3985,3986,3987,3988,3989,3990,3990,3991,3992,3993,3994,3995,3996,3997,3998,3999,4000,4000,
33
4001,4002,4003,4004,4005,4006,4007,4008,4009,4010,4010,4011,4012,4013,4014,4015,4016,4017,4018,4019,4019,4020,4021,4022,4023,4024,4025,4026,4027,4028,4029,4029,4030,4031,4032,4033,4034,4035,4036,4037,4038,4039,4039,4040,4041,4042,4043,4044,4045,4046,4047,4048,4049,4049,4050,4051,4052,4053,4054,4055,4056,4057,4058,4059,4059,4060,4061,4062,4063,4064,4065,4066,4067,4068,4069,4070,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079,4080,4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4091,4092,4093,4094,4095);
34
35
type saw_unload_array_t is array (0 to 4095) of integer range 0 to 4095;
36
constant saw_unload_array_c : saw_unload_array_t :=
37
(0,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,26,26,27,27,28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,44,44,45,45,46,46,47,47,48,48,49,49,50,50,51,51,52,52,53,53,54,55,55,56,56,57,57,58,58,59,59,60,60,61,61,62,62,63,64,64,65,65,66,66,67,67,68,68,69,69,70,71,71,72,72,73,73,74,74,75,75,76,76,77,78,78,79,79,80,80,81,81,82,82,83,84,84,85,85,86,86,87,87,88,88,89,90,90,91,91,92,92,93,93,94,95,95,96,96,97,97,98,98,99,100,100,101,101,102,102,103,103,104,105,105,106,106,107,107,108,108,109,110,110,111,111,112,112,113,114,114,115,115,116,116,117,118,118,119,119,120,120,121,121,122,123,123,124,124,125,125,126,127,127,128,128,129,129,130,131,131,132,132,133,134,134,135,135,136,136,137,138,138,139,139,140,140,141,142,142,143,143,144,145,145,146,146,147,147,148,149,149,150,150,151,152,152,153,153,154,154,155,156,156,157,157,158,159,159,160,160,161,162,162,163,163,164,164,165,166,166,167,167,168,169,169,170,170,171,172,172,173,173,174,175,175,176,176,177,178,178,179,179,180,181,181,182,182,183,184,184,185,185,186,187,187,188,188,189,190,190,191,192,192,193,193,194,195,195,196,196,197,198,198,199,199,200,201,201,202,203,203,204,204,205,206,206,207,207,208,209,209,210,211,211,212,212,213,214,214,215,215,216,217,217,218,219,219,220,220,221,222,222,223,224,224,225,225,226,227,227,228,229,229,230,230,231,232,232,233,234,234,235,236,236,237,237,238,239,239,240,241,241,242,242,243,244,244,245,246,246,247,248,248,249,249,250,251,251,252,253,253,254,255,255,256,256,257,258,258,259,260,260,261,262,262,263,264,264,265,265,266,267,267,268,269,269,270,271,271,272,273,273,274,275,275,276,277,277,278,278,279,280,280,281,282,282,283,284,284,285,286,286,287,288,288,289,290,290,291,292,292,293,294,294,295,296,296,297,298,298,299,299,300,301,301,302,303,303,304,305,305,306,307,307,308,309,309,310,311,311,312,313,313,314,315,315,316,317,317,318,319,319,320,321,321,322,323,324,324,325,326,326,327,328,328,329,330,330,331,332,332,333,334,334,335,336,336,337,338,338,339,340,340,341,342,342,343,344,345,345,346,347,347,348,349,349,350,351,351,352,353,353,354,355,355,356,357,358,358,359,360,360,361,362,362,363,364,364,365,366,367,367,368,369,369,370,371,371,372,373,373,374,375,376,376,377,378,378,379,380,380,381,382,383,383,384,385,385,386,387,387,388,389,390,390,391,392,392,393,394,394,395,396,397,397,398,399,399,400,401,401,402,403,404,404,405,406,406,407,408,409,409,410,411,411,412,413,414,414,415,416,416,417,418,419,419,420,421,421,422,423,424,424,425,426,426,427,428,429,429,430,431,431,432,433,434,434,435,436,437,437,438,439,439,440,441,442,442,443,444,444,445,446,447,447,448,449,450,450,451,452,452,453,454,455,455,456,457,458,458,459,460,460,461,462,463,463,464,465,466,466,467,468,469,469,470,471,471,472,473,474,474,475,476,477,477,478,479,480,480,481,482,483,483,484,485,486,486,487,488,488,489,490,491,491,492,493,494,494,495,496,497,497,498,499,500,500,
38
501,502,503,503,504,505,506,506,507,508,509,509,510,511,512,512,513,514,515,515,516,517,518,518,519,520,521,521,522,523,524,524,525,526,527,527,528,529,530,531,531,532,533,534,534,535,536,537,537,538,539,540,540,541,542,543,543,544,545,546,547,547,548,549,550,550,551,552,553,553,554,555,556,556,557,558,559,560,560,561,562,563,563,564,565,566,566,567,568,569,570,570,571,572,573,573,574,575,576,577,577,578,579,580,580,581,582,583,584,584,585,586,587,587,588,589,590,591,591,592,593,594,594,595,596,597,598,598,599,600,601,602,602,603,604,605,605,606,607,608,609,609,610,611,612,613,613,614,615,616,616,617,618,619,620,620,621,622,623,624,624,625,626,627,628,628,629,630,631,632,632,633,634,635,636,636,637,638,639,639,640,641,642,643,643,644,645,646,647,647,648,649,650,651,651,652,653,654,655,656,656,657,658,659,660,660,661,662,663,664,664,665,666,667,668,668,669,670,671,672,672,673,674,675,676,676,677,678,679,680,681,681,682,683,684,685,685,686,687,688,689,689,690,691,692,693,694,694,695,696,697,698,698,699,700,701,702,703,703,704,705,706,707,707,708,709,710,711,712,712,713,714,715,716,717,717,718,719,720,721,721,722,723,724,725,726,726,727,728,729,730,731,731,732,733,734,735,736,736,737,738,739,740,741,741,742,743,744,745,746,746,747,748,749,750,751,751,752,753,754,755,756,756,757,758,759,760,761,761,762,763,764,765,766,766,767,768,769,770,771,771,772,773,774,775,776,777,777,778,779,780,781,782,782,783,784,785,786,787,787,788,789,790,791,792,793,793,794,795,796,797,798,799,799,800,801,802,803,804,804,805,806,807,808,809,810,810,811,812,813,814,815,816,816,817,818,819,820,821,822,822,823,824,825,826,827,828,828,829,830,831,832,833,834,834,835,836,837,838,839,840,840,841,842,843,844,845,846,847,847,848,849,850,851,852,853,853,854,855,856,857,858,859,860,860,861,862,863,864,865,866,866,867,868,869,870,871,872,873,873,874,875,876,877,878,879,880,880,881,882,883,884,885,886,887,887,888,889,890,891,892,893,894,894,895,896,897,898,899,900,901,901,902,903,904,905,906,907,908,909,909,910,911,912,913,914,915,916,916,917,918,919,920,921,922,923,924,924,925,926,927,928,929,930,931,932,932,933,934,935,936,937,938,939,940,940,941,942,943,944,945,946,947,948,948,949,950,951,952,953,954,955,956,957,957,958,959,960,961,962,963,964,965,965,966,967,968,969,970,971,972,973,974,974,975,976,977,978,979,980,981,982,983,984,984,985,986,987,988,989,990,991,992,993,993,994,995,996,997,998,999,1000,
39
1001,1002,1003,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1480,1482,1483,1484,1485,1486,1487,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,
40
1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,1515,1516,1517,1518,1519,1520,1521,1522,1523,1525,1526,1527,1528,1529,1530,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540,1541,1542,1543,1544,1545,1546,1547,1548,1549,1550,1551,1552,1553,1554,1555,1557,1558,1559,1560,1561,1562,1563,1564,1565,1566,1567,1568,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,1595,1596,1597,1598,1599,1600,1601,1602,1603,1604,1605,1606,1607,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,1619,1620,1621,1622,1623,1624,1625,1626,1627,1628,1629,1631,1632,1633,1634,1635,1636,1637,1638,1639,1640,1641,1642,1643,1644,1645,1646,1647,1648,1649,1650,1652,1653,1654,1655,1656,1657,1658,1659,1660,1661,1662,1663,1664,1665,1666,1667,1668,1669,1671,1672,1673,1674,1675,1676,1677,1678,1679,1680,1681,1682,1683,1684,1685,1686,1687,1688,1690,1691,1692,1693,1694,1695,1696,1697,1698,1699,1700,1701,1702,1703,1704,1705,1707,1708,1709,1710,1711,1712,1713,1714,1715,1716,1717,1718,1719,1720,1721,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1784,1785,1786,1787,1788,1789,1790,1791,1792,1793,1794,1795,1797,1798,1799,1800,1801,1802,1803,1804,1805,1806,1807,1808,1809,1811,1812,1813,1814,1815,1816,1817,1818,1819,1820,1821,1822,1824,1825,1826,1827,1828,1829,1830,1831,1832,1833,1834,1835,1837,1838,1839,1840,1841,1842,1843,1844,1845,1846,1847,1848,1850,1851,1852,1853,1854,1855,1856,1857,1858,1859,1860,1862,1863,1864,1865,1866,1867,1868,1869,1870,1871,1872,1874,1875,1876,1877,1878,1879,1880,1881,1882,1883,1884,1886,1887,1888,1889,1890,1891,1892,1893,1894,1895,1897,1898,1899,1900,1901,1902,1903,1904,1905,1906,1907,1909,1910,1911,1912,1913,1914,1915,1916,1917,1918,1920,1921,1922,1923,1924,1925,1926,1927,1928,1929,1931,1932,1933,1934,1935,1936,1937,1938,1939,1940,1942,1943,1944,1945,1946,1947,1948,1949,1950,1952,1953,1954,1955,1956,1957,1958,1959,1960,1961,1963,1964,1965,1966,1967,1968,1969,1970,1971,1973,1974,1975,1976,1977,1978,1979,1980,1981,1983,1984,1985,1986,1987,1988,1989,1990,1991,1993,1994,1995,1996,1997,1998,1999,2000,
41
2001,2003,2004,2005,2006,2007,2008,2009,2010,2011,2013,2014,2015,2016,2017,2018,2019,2020,2021,2023,2024,2025,2026,2027,2028,2029,2030,2031,2033,2034,2035,2036,2037,2038,2039,2040,2042,2043,2044,2045,2046,2047,2048,2049,2050,2052,2053,2054,2055,2056,2057,2058,2059,2061,2062,2063,2064,2065,2066,2067,2068,2070,2071,2072,2073,2074,2075,2076,2077,2079,2080,2081,2082,2083,2084,2085,2086,2088,2089,2090,2091,2092,2093,2094,2095,2097,2098,2099,2100,2101,2102,2103,2104,2106,2107,2108,2109,2110,2111,2112,2113,2115,2116,2117,2118,2119,2120,2121,2122,2124,2125,2126,2127,2128,2129,2130,2132,2133,2134,2135,2136,2137,2138,2139,2141,2142,2143,2144,2145,2146,2147,2149,2150,2151,2152,2153,2154,2155,2156,2158,2159,2160,2161,2162,2163,2164,2166,2167,2168,2169,2170,2171,2172,2173,2175,2176,2177,2178,2179,2180,2181,2183,2184,2185,2186,2187,2188,2189,2191,2192,2193,2194,2195,2196,2197,2199,2200,2201,2202,2203,2204,2205,2207,2208,2209,2210,2211,2212,2213,2215,2216,2217,2218,2219,2220,2221,2223,2224,2225,2226,2227,2228,2229,2231,2232,2233,2234,2235,2236,2237,2239,2240,2241,2242,2243,2244,2245,2247,2248,2249,2250,2251,2252,2253,2255,2256,2257,2258,2259,2260,2262,2263,2264,2265,2266,2267,2268,2270,2271,2272,2273,2274,2275,2276,2278,2279,2280,2281,2282,2283,2285,2286,2287,2288,2289,2290,2291,2293,2294,2295,2296,2297,2298,2300,2301,2302,2303,2304,2305,2306,2308,2309,2310,2311,2312,2313,2315,2316,2317,2318,2319,2320,2322,2323,2324,2325,2326,2327,2328,2330,2331,2332,2333,2334,2335,2337,2338,2339,2340,2341,2342,2344,2345,2346,2347,2348,2349,2350,2352,2353,2354,2355,2356,2357,2359,2360,2361,2362,2363,2364,2366,2367,2368,2369,2370,2371,2373,2374,2375,2376,2377,2378,2380,2381,2382,2383,2384,2385,2387,2388,2389,2390,2391,2392,2394,2395,2396,2397,2398,2399,2401,2402,2403,2404,2405,2406,2408,2409,2410,2411,2412,2413,2415,2416,2417,2418,2419,2420,2422,2423,2424,2425,2426,2427,2429,2430,2431,2432,2433,2434,2436,2437,2438,2439,2440,2441,2443,2444,2445,2446,2447,2449,2450,2451,2452,2453,2454,2456,2457,2458,2459,2460,2461,2463,2464,2465,2466,2467,2468,2470,2471,2472,2473,2474,2476,2477,2478,2479,2480,2481,2483,2484,2485,2486,2487,2488,2490,2491,2492,2493,2494,2496,2497,2498,2499,2500,
42
2501,2503,2504,2505,2506,2507,2509,2510,2511,2512,2513,2514,2516,2517,2518,2519,2520,2522,2523,2524,2525,2526,2527,2529,2530,2531,2532,2533,2535,2536,2537,2538,2539,2540,2542,2543,2544,2545,2546,2548,2549,2550,2551,2552,2553,2555,2556,2557,2558,2559,2561,2562,2563,2564,2565,2567,2568,2569,2570,2571,2572,2574,2575,2576,2577,2578,2580,2581,2582,2583,2584,2586,2587,2588,2589,2590,2591,2593,2594,2595,2596,2597,2599,2600,2601,2602,2603,2605,2606,2607,2608,2609,2611,2612,2613,2614,2615,2617,2618,2619,2620,2621,2622,2624,2625,2626,2627,2628,2630,2631,2632,2633,2634,2636,2637,2638,2639,2640,2642,2643,2644,2645,2646,2648,2649,2650,2651,2652,2654,2655,2656,2657,2658,2660,2661,2662,2663,2664,2666,2667,2668,2669,2670,2672,2673,2674,2675,2676,2677,2679,2680,2681,2682,2683,2685,2686,2687,2688,2689,2691,2692,2693,2694,2695,2697,2698,2699,2700,2702,2703,2704,2705,2706,2708,2709,2710,2711,2712,2714,2715,2716,2717,2718,2720,2721,2722,2723,2724,2726,2727,2728,2729,2730,2732,2733,2734,2735,2736,2738,2739,2740,2741,2742,2744,2745,2746,2747,2748,2750,2751,2752,2753,2755,2756,2757,2758,2759,2761,2762,2763,2764,2765,2767,2768,2769,2770,2771,2773,2774,2775,2776,2777,2779,2780,2781,2782,2784,2785,2786,2787,2788,2790,2791,2792,2793,2794,2796,2797,2798,2799,2800,2802,2803,2804,2805,2807,2808,2809,2810,2811,2813,2814,2815,2816,2817,2819,2820,2821,2822,2824,2825,2826,2827,2828,2830,2831,2832,2833,2834,2836,2837,2838,2839,2841,2842,2843,2844,2845,2847,2848,2849,2850,2851,2853,2854,2855,2856,2858,2859,2860,2861,2862,2864,2865,2866,2867,2869,2870,2871,2872,2873,2875,2876,2877,2878,2879,2881,2882,2883,2884,2886,2887,2888,2889,2890,2892,2893,2894,2895,2897,2898,2899,2900,2901,2903,2904,2905,2906,2908,2909,2910,2911,2912,2914,2915,2916,2917,2919,2920,2921,2922,2923,2925,2926,2927,2928,2930,2931,2932,2933,2934,2936,2937,2938,2939,2941,2942,2943,2944,2945,2947,2948,2949,2950,2952,2953,2954,2955,2957,2958,2959,2960,2961,2963,2964,2965,2966,2968,2969,2970,2971,2972,2974,2975,2976,2977,2979,2980,2981,2982,2984,2985,2986,2987,2988,2990,2991,2992,2993,2995,2996,2997,2998,3000,
43
3001,3002,3003,3004,3006,3007,3008,3009,3011,3012,3013,3014,3016,3017,3018,3019,3020,3022,3023,3024,3025,3027,3028,3029,3030,3032,3033,3034,3035,3036,3038,3039,3040,3041,3043,3044,3045,3046,3048,3049,3050,3051,3053,3054,3055,3056,3057,3059,3060,3061,3062,3064,3065,3066,3067,3069,3070,3071,3072,3074,3075,3076,3077,3078,3080,3081,3082,3083,3085,3086,3087,3088,3090,3091,3092,3093,3095,3096,3097,3098,3100,3101,3102,3103,3104,3106,3107,3108,3109,3111,3112,3113,3114,3116,3117,3118,3119,3121,3122,3123,3124,3126,3127,3128,3129,3131,3132,3133,3134,3135,3137,3138,3139,3140,3142,3143,3144,3145,3147,3148,3149,3150,3152,3153,3154,3155,3157,3158,3159,3160,3162,3163,3164,3165,3167,3168,3169,3170,3172,3173,3174,3175,3177,3178,3179,3180,3181,3183,3184,3185,3186,3188,3189,3190,3191,3193,3194,3195,3196,3198,3199,3200,3201,3203,3204,3205,3206,3208,3209,3210,3211,3213,3214,3215,3216,3218,3219,3220,3221,3223,3224,3225,3226,3228,3229,3230,3231,3233,3234,3235,3236,3238,3239,3240,3241,3243,3244,3245,3246,3248,3249,3250,3251,3253,3254,3255,3256,3258,3259,3260,3261,3263,3264,3265,3266,3268,3269,3270,3271,3273,3274,3275,3276,3278,3279,3280,3281,3283,3284,3285,3286,3288,3289,3290,3291,3293,3294,3295,3296,3298,3299,3300,3301,3303,3304,3305,3306,3308,3309,3310,3312,3313,3314,3315,3317,3318,3319,3320,3322,3323,3324,3325,3327,3328,3329,3330,3332,3333,3334,3335,3337,3338,3339,3340,3342,3343,3344,3345,3347,3348,3349,3350,3352,3353,3354,3355,3357,3358,3359,3361,3362,3363,3364,3366,3367,3368,3369,3371,3372,3373,3374,3376,3377,3378,3379,3381,3382,3383,3384,3386,3387,3388,3389,3391,3392,3393,3395,3396,3397,3398,3400,3401,3402,3403,3405,3406,3407,3408,3410,3411,3412,3413,3415,3416,3417,3419,3420,3421,3422,3424,3425,3426,3427,3429,3430,3431,3432,3434,3435,3436,3437,3439,3440,3441,3443,3444,3445,3446,3448,3449,3450,3451,3453,3454,3455,3456,3458,3459,3460,3461,3463,3464,3465,3467,3468,3469,3470,3472,3473,3474,3475,3477,3478,3479,3480,3482,3483,3484,3486,3487,3488,3489,3491,3492,3493,3494,3496,3497,3498,3499,
44
3501,3502,3503,3505,3506,3507,3508,3510,3511,3512,3513,3515,3516,3517,3518,3520,3521,3522,3524,3525,3526,3527,3529,3530,3531,3532,3534,3535,3536,3538,3539,3540,3541,3543,3544,3545,3546,3548,3549,3550,3551,3553,3554,3555,3557,3558,3559,3560,3562,3563,3564,3565,3567,3568,3569,3571,3572,3573,3574,3576,3577,3578,3579,3581,3582,3583,3585,3586,3587,3588,3590,3591,3592,3593,3595,3596,3597,3599,3600,3601,3602,3604,3605,3606,3607,3609,3610,3611,3613,3614,3615,3616,3618,3619,3620,3621,3623,3624,3625,3627,3628,3629,3630,3632,3633,3634,3636,3637,3638,3639,3641,3642,3643,3644,3646,3647,3648,3650,3651,3652,3653,3655,3656,3657,3658,3660,3661,3662,3664,3665,3666,3667,3669,3670,3671,3673,3674,3675,3676,3678,3679,3680,3681,3683,3684,3685,3687,3688,3689,3690,3692,3693,3694,3696,3697,3698,3699,3701,3702,3703,3704,3706,3707,3708,3710,3711,3712,3713,3715,3716,3717,3719,3720,3721,3722,3724,3725,3726,3728,3729,3730,3731,3733,3734,3735,3736,3738,3739,3740,3742,3743,3744,3745,3747,3748,3749,3751,3752,3753,3754,3756,3757,3758,3760,3761,3762,3763,3765,3766,3767,3769,3770,3771,3772,3774,3775,3776,3777,3779,3780,3781,3783,3784,3785,3786,3788,3789,3790,3792,3793,3794,3795,3797,3798,3799,3801,3802,3803,3804,3806,3807,3808,3810,3811,3812,3813,3815,3816,3817,3819,3820,3821,3822,3824,3825,3826,3828,3829,3830,3831,3833,3834,3835,3837,3838,3839,3840,3842,3843,3844,3846,3847,3848,3849,3851,3852,3853,3855,3856,3857,3858,3860,3861,3862,3864,3865,3866,3867,3869,3870,3871,3873,3874,3875,3876,3878,3879,3880,3882,3883,3884,3885,3887,3888,3889,3891,3892,3893,3894,3896,3897,3898,3900,3901,3902,3903,3905,3906,3907,3909,3910,3911,3912,3914,3915,3916,3918,3919,3920,3922,3923,3924,3925,3927,3928,3929,3931,3932,3933,3934,3936,3937,3938,3940,3941,3942,3943,3945,3946,3947,3949,3950,3951,3952,3954,3955,3956,3958,3959,3960,3961,3963,3964,3965,3967,3968,3969,3971,3972,3973,3974,3976,3977,3978,3980,3981,3982,3983,3985,3986,3987,3989,3990,3991,3992,3994,3995,3996,3998,3999,4000,
45
4002,4003,4004,4005,4007,4008,4009,4011,4012,4013,4014,4016,4017,4018,4020,4021,4022,4024,4025,4026,4027,4029,4030,4031,4033,4034,4035,4036,4038,4039,4040,4042,4043,4044,4046,4047,4048,4049,4051,4052,4053,4055,4056,4057,4058,4060,4061,4062,4064,4065,4066,4068,4069,4070,4071,4073,4074,4075,4077,4078,4079,4080,4082,4083,4084,4086,4087,4088,4090,4091,4092,4093,4095);
46
47
type zustaende is (Z00, Z01);
48
signal z           : zustaende := Z00;
49
signal index        : integer range 0 to 4095;
50
signal preindex      : integer range 0 to 4095;
51
signal newindex      : integer range 0 to 4095 := 0;
52
signal phase            : unsigned(31 downto 0) := (others => '0');
53
signal saegezahn_inv_u   : unsigned(11 downto 0) := (others => '0');
54
signal saegezahn_u      : unsigned(11 downto 0) := (others => '0');
55
signal rechteck_u       : unsigned(11 downto 0) := (others => '0');
56
57
begin
58
  process begin
59
    wait until rising_edge(clk);
60
    if control = x"00000000" then
61
      if run = x"00000001" then
62
        z <= Z00;
63
        if newindex = 0 then
64
          phase <= (phase + microsteps);
65
        elsif  newindex  /= 0 then
66
          phase <= to_unsigned(newindex,12) & x"00000";
67
        end if;
68
      elsif run = x"00000002" then
69
        z <= Z01;
70
          if newindex = 0 then
71
            phase <= (phase - microsteps);
72
          elsif  newindex  /= 0 then
73
            phase <= to_unsigned(newindex,12) & x"00000";
74
          end if;
75
      end if;
76
    elsif control = x"00000001" then
77
      if y < x"00000000" then
78
        z <= Z00;
79
        if newindex = 0 then
80
          phase <= (phase + microsteps);
81
        elsif  newindex  /= 0 then
82
          phase <= to_unsigned(newindex,12) & x"00000";
83
        end if;
84
      elsif y > x"00000000" then
85
        z <= Z01;
86
        if newindex = 0 then
87
          phase <= (phase - microsteps);
88
        elsif  newindex  /= 0 then
89
           phase <= to_unsigned(newindex,12) & x"00000";
90
        end if;
91
      end if;
92
    end if;
93
    end process;
94
   
95
96
  index <= to_integer(phase(31 downto 20));
97
   
98
   process
99
   variable dir : std_logic := '0';
100
   begin
101
    wait until rising_edge(clk);
102
    case z is
103
        when Z00 =>
104
          if (dir = '0') then 
105
            saegezahn_inv_u     <= to_unsigned( saw_load_array_c (index), saegezahn_inv_u'length);
106
            preindex <= saw_load_array_c (index);
107
            newindex <= 0;
108
            dir := '0';
109
          elsif (dir = '1') then
110
            for i in 0 to 4095 loop
111
              if (((saw_load_array_c (i)) = preindex) or ((saw_load_array_c (i)) = preindex+1) or ((saw_load_array_c (i)) = preindex-1))then
112
                newindex <= i;
113
                exit;
114
              end if;
115
            end loop;
116
            dir := '0';
117
          end if;
118
        when Z01 =>
119
          if (dir = '1') then
120
            saegezahn_inv_u     <= to_unsigned( saw_unload_array_c (index), saegezahn_inv_u'length);
121
            preindex <= saw_unload_array_c (index);
122
            newindex <= 0;
123
            dir := '1';
124
          elsif (dir = '0') then
125
            for i in 0 to 4095 loop
126
              if (((saw_unload_array_c (i)) = preindex) or ((saw_unload_array_c (i)) = preindex+1) or ((saw_unload_array_c (i)) = preindex-1))then
127
                newindex <= i;
128
                exit;
129
              end if;
130
            end loop;
131
            dir := '1';
132
          end if;
133
    end case;
134
   end process;
135
   
136
    saegezahn_u <= phase(31 downto 20);
137
138
    process begin
139
        wait until rising_edge(clk);
140
        if (saegezahn_u >= x"555" and saegezahn_u <= x"DDD") then
141
            rechteck_u <= x"FFF";
142
        else
143
            rechteck_u <= x"000";
144
        end if;
145
    end process;
146
   
147
148
  -- convert output values
149
  saegezahn_inv <= "0011" & std_logic_vector(saegezahn_inv_u);
150
  saegezahn <= "0011" & std_logic_vector(saegezahn_u);
151
  rechteck  <= "0011" & std_logic_vector(rechteck_u);
152
153
end bhv;

von Michael W. (Gast)


Lesenswert?

Was bewirkt denn die "saw unload" Tabelle?

von Jan Lang (Gast)


Lesenswert?

Die wird durchlaufen, wenn die Richtung wechselt, also bei linkslauf und 
bei rechtslauf die saw_load tabelle

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Lang schrieb:
> Unschön ist der kurze Einbruch beim Wechsel (20ns), ich habs es aber
> nicht ohne hinbekommen...
Hört sich nach einem Latency-Effekt an. Da ist irgendwas einen Takt 
früher umgeschaltet als was anderes. Und beides zusammen ergibt den 
Ausgang. Mit dem Simulator sollte man das herausfinden können...

von Jan Lang (Gast)


Lesenswert?

Ok, ich untersuch das mal. Aber kriegt ihr es kompiliert, oder könnte 
das daher kommen?

von Lang (Gast)


Lesenswert?

Also ich krieg es nicht hin, dass mein Ausgang nicht diesen kurzen 
Sprung macht, denn dafür müsste ich theoretisch eine Variable haben, die 
ich aus zwei Prozessen toggeln könnte, aber sowas geht ja nicht.
Also eigentlich müsste, solange "newindex" ungleich 0 ist, der Ausgang 
den letzten Wert halten und erst wenn phase den neuen Wert von 
"newindex" wirklich zugewiesen bekommen hat, darf der Ausgang mit dem 
neuen index Wert weiterfahren...

Wie gesagt, im Prinzip geht es ja, ich krieg es nur nicht kompiliert, 
obwohl es sich in Modelsim kompilieren lässt.

von Lang (Gast)


Lesenswert?

Ok, liegt wohl an den for loops...

von Michael W. (Gast)


Lesenswert?

Ich verstehe nach wie vor nicht, wozu nur bei einem "dir" eine Tabelle 
zugegriffen wird. Du willst da irgend was dynamisch laden, denke ich.
In Modelsim geht sowas, klar ...

von Daniel (Gast)


Lesenswert?

Lang schrieb:
> Also ich krieg es nicht hin, dass mein Ausgang nicht diesen kurzen
> Sprung macht, denn dafür müsste ich theoretisch eine Variable haben, die
> ich aus zwei Prozessen toggeln könnte, aber sowas geht ja nicht.
In der Realität wird dein DA-Wandler diesen Sprung wegintegrieren, ist 
aber trotzdem nicht schön.
Um die Simulation stimmig zu machen (gleiche Latenz), muß die Zuweisung 
zu saegezahn_u mit in den Prozess, wo saegezahn_inv_u zugewiesen wird.

Wenn dann noch rechteck_u ebenfalls aus phase bestimmt wird, haben 
erstmal alle Ausgänge die gleiche Latenz.

Ich geb den Zuständen immer Namen. Z00 und Z01 ist nicht wirklich 
aussagekräftig.

Vielleicht kannst Du nochmal die Idee hinter z und dir erläutern?
Irgendiwe steige ich da nicht durch...

Daniel

von Michael W. (Gast)


Lesenswert?

Ich glaube, der TO blickt inzwischen selber nicht mehr durch mit seinem 
Code...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.