library IEEE; use IEEE.std_logic_1164.all; entity rotary_encoder is generic ( variant: integer := 0 -- 0 or 1 ); port ( enc: out std_logic_vector(1 downto 0) ); end rotary_encoder; architecture sim of rotary_encoder is begin process is begin if variant = 0 then enc <= "11"; enc(0) <= '0'; wait for 0.5 us; -- time: 0.5 us enc(0) <= '1'; wait for 0.3 us; -- time: 0.8 us enc(0) <= '0'; wait for 1373.6 us; -- time: 1374.4 us enc(1) <= '0'; wait for 29945.4 us; -- time: 31319.8 us enc(0) <= '1'; wait for 1958.7 us; -- time: 33278.5 us enc(1) <= '1'; wait for 88308.7 us; -- time: 121587.2 us enc(0) <= '0'; wait for 2.8 us; -- time: 121590.0 us enc(0) <= '1'; wait for 0.1 us; -- time: 121590.1 us enc(0) <= '0'; wait for 1.1 us; -- time: 121591.2 us enc(0) <= '1'; wait for 0.1 us; -- time: 121591.3 us enc(0) <= '0'; wait for 0.9 us; -- time: 121592.2 us enc(0) <= '1'; wait for 0.2 us; -- time: 121592.4 us enc(0) <= '0'; wait for 1606.0 us; -- time: 123198.4 us enc(1) <= '0'; wait for 1.2 us; -- time: 123199.6 us enc(1) <= '1'; wait for 0.1 us; -- time: 123199.7 us enc(1) <= '0'; wait for 1.8 us; -- time: 123201.5 us enc(1) <= '1'; wait for 0.9 us; -- time: 123202.4 us enc(1) <= '0'; wait for 37142.3 us; -- time: 160344.7 us enc(0) <= '1'; wait for 2032.6 us; -- time: 162377.3 us enc(1) <= '1'; wait for 49003.7 us; -- time: 211381.0 us enc(0) <= '0'; wait for 2091.3 us; -- time: 213472.3 us enc(1) <= '0'; wait for 35422.4 us; -- time: 248894.7 us enc(0) <= '1'; wait for 2433.2 us; -- time: 251327.9 us enc(1) <= '1'; wait for 25711.1 us; -- time: 277039.0 us enc(0) <= '0'; wait for 1761.5 us; -- time: 278800.5 us enc(1) <= '0'; wait for 21685.7 us; -- time: 300486.2 us enc(0) <= '1'; wait for 2287.9 us; -- time: 302774.1 us enc(1) <= '1'; wait for 21119.6 us; -- time: 323893.7 us enc(0) <= '0'; wait for 1984.5 us; -- time: 325878.2 us enc(1) <= '0'; wait for 22039.3 us; -- time: 347917.5 us enc(0) <= '1'; wait for 2413.6 us; -- time: 350331.1 us enc(1) <= '1'; wait for 22181.9 us; -- time: 372513.0 us enc(0) <= '0'; wait for 1873.4 us; -- time: 374386.4 us enc(1) <= '0'; wait for 3.8 us; -- time: 374390.2 us enc(1) <= '1'; wait for 0.1 us; -- time: 374390.3 us enc(1) <= '0'; wait for 2.3 us; -- time: 374392.6 us enc(1) <= '1'; wait for 0.3 us; -- time: 374392.9 us enc(1) <= '0'; wait for 1.1 us; -- time: 374394.0 us enc(1) <= '1'; wait for 0.4 us; -- time: 374394.4 us enc(1) <= '0'; wait for 24295.0 us; -- time: 398689.4 us enc(0) <= '1'; wait for 2399.9 us; -- time: 401089.3 us enc(1) <= '1'; wait for 44243.4 us; -- time: 445332.7 us enc(0) <= '0'; wait for 1917.8 us; -- time: 447250.5 us enc(1) <= '0'; wait for 675339.2 us; -- time: 1122589.7 us enc(1) <= '1'; wait for 19573.7 us; -- time: 1142163.4 us enc(0) <= '1'; wait for 27881.8 us; -- time: 1170045.2 us enc(1) <= '0'; wait for 3.1 us; -- time: 1170048.3 us enc(1) <= '1'; wait for 6.1 us; -- time: 1170054.4 us enc(1) <= '0'; wait for 9200.3 us; -- time: 1179254.7 us enc(0) <= '0'; wait for 1.3 us; -- time: 1179256.0 us enc(0) <= '1'; wait for 2.4 us; -- time: 1179258.4 us enc(0) <= '0'; wait for 0.7 us; -- time: 1179259.1 us enc(0) <= '1'; wait for 0.1 us; -- time: 1179259.2 us enc(0) <= '0'; wait for 1.5 us; -- time: 1179260.7 us enc(0) <= '1'; wait for 0.1 us; -- time: 1179260.8 us enc(0) <= '0'; wait for 1605.1 us; -- time: 1180865.9 us enc(1) <= '1'; wait for 68884.7 us; -- time: 1249750.6 us enc(0) <= '1'; wait for 23813.9 us; -- time: 1273564.5 us enc(1) <= '0'; wait for 7363.2 us; -- time: 1280927.7 us enc(0) <= '0'; wait for 1510.5 us; -- time: 1282438.2 us enc(1) <= '1'; wait for 17412.6 us; -- time: 1299850.8 us enc(0) <= '1'; wait for 15852.6 us; -- time: 1315703.4 us enc(1) <= '0'; wait for 2.4 us; -- time: 1315705.8 us enc(1) <= '1'; wait for 0.1 us; -- time: 1315705.9 us enc(1) <= '0'; wait for 7645.8 us; -- time: 1323351.7 us enc(0) <= '0'; wait for 1601.0 us; -- time: 1324952.7 us enc(1) <= '1'; wait for 18660.2 us; -- time: 1343612.9 us enc(0) <= '1'; wait for 14153.2 us; -- time: 1357766.1 us enc(1) <= '0'; wait for 6004.3 us; -- time: 1363770.4 us enc(0) <= '0'; wait for 1346.8 us; -- time: 1365117.2 us enc(1) <= '1'; wait for 16057.0 us; -- time: 1381174.2 us enc(0) <= '1'; wait for 16221.3 us; -- time: 1397395.5 us enc(1) <= '0'; wait for 2.3 us; -- time: 1397397.8 us enc(1) <= '1'; wait for 0.1 us; -- time: 1397397.9 us enc(1) <= '0'; wait for 8.5 us; -- time: 1397406.4 us enc(1) <= '1'; wait for 0.5 us; -- time: 1397406.9 us enc(1) <= '0'; wait for 4494.0 us; -- time: 1401900.9 us enc(0) <= '0'; wait for 1775.8 us; -- time: 1403676.7 us enc(1) <= '1'; wait for 0.1 us; -- time: 1403676.8 us enc(1) <= '0'; wait for 0.4 us; -- time: 1403677.2 us enc(1) <= '1'; wait for 14660.4 us; -- time: 1418337.6 us enc(0) <= '1'; wait for 15016.7 us; -- time: 1433354.3 us enc(1) <= '0'; wait for 1.2 us; -- time: 1433355.5 us enc(1) <= '1'; wait for 0.2 us; -- time: 1433355.7 us enc(1) <= '0'; wait for 0.7 us; -- time: 1433356.4 us enc(1) <= '1'; wait for 0.1 us; -- time: 1433356.5 us enc(1) <= '0'; wait for 0.7 us; -- time: 1433357.2 us enc(1) <= '1'; wait for 4.1 us; -- time: 1433361.3 us enc(1) <= '0'; wait for 1.3 us; -- time: 1433362.6 us enc(1) <= '1'; wait for 0.4 us; -- time: 1433363.0 us enc(1) <= '0'; wait for 1.9 us; -- time: 1433364.9 us enc(1) <= '1'; wait for 16.6 us; -- time: 1433381.5 us enc(1) <= '0'; wait for 2.0 us; -- time: 1433383.5 us enc(1) <= '1'; wait for 0.7 us; -- time: 1433384.2 us enc(1) <= '0'; wait for 4433.3 us; -- time: 1437817.5 us enc(0) <= '0'; wait for 1776.5 us; -- time: 1439594.0 us enc(1) <= '1'; wait for 18673.7 us; -- time: 1458267.7 us enc(0) <= '1'; wait for 23613.1 us; -- time: 1481880.8 us enc(1) <= '0'; wait for 4735.9 us; -- time: 1486616.7 us enc(0) <= '0'; wait for 1878.0 us; -- time: 1488494.7 us enc(1) <= '1'; wait for 1274.8 us; -- time: 1489769.5 us enc(1) <= '0'; wait for 15734.8 us; -- time: 1505504.3 us enc(1) <= '1'; wait for 16537.4 us; -- time: 1522041.7 us enc(0) <= '1'; elsif variant = 1 then enc <= "00"; enc(1) <= '1'; wait for 3180.4 us; -- time: 3180.4 us enc(1) <= '0'; wait for 600425.1 us; -- time: 603605.5 us enc(0) <= '1'; wait for 4089.3 us; -- time: 607694.8 us enc(1) <= '1'; wait for 42453.5 us; -- time: 650148.3 us enc(0) <= '0'; wait for 2.8 us; -- time: 650151.1 us enc(0) <= '1'; wait for 0.8 us; -- time: 650151.9 us enc(0) <= '0'; wait for 10.5 us; -- time: 650162.4 us enc(0) <= '1'; wait for 8.5 us; -- time: 650170.9 us enc(0) <= '0'; wait for 0.1 us; -- time: 650171.0 us enc(0) <= '1'; wait for 1.0 us; -- time: 650172.0 us enc(0) <= '0'; wait for 0.3 us; -- time: 650172.3 us enc(0) <= '1'; wait for 0.4 us; -- time: 650172.7 us enc(0) <= '0'; wait for 9.2 us; -- time: 650181.9 us enc(0) <= '1'; wait for 0.3 us; -- time: 650182.2 us enc(0) <= '0'; wait for 7.7 us; -- time: 650189.9 us enc(0) <= '1'; wait for 0.2 us; -- time: 650190.1 us enc(0) <= '0'; wait for 1.1 us; -- time: 650191.2 us enc(0) <= '1'; wait for 0.1 us; -- time: 650191.3 us enc(0) <= '0'; wait for 2.1 us; -- time: 650193.4 us enc(0) <= '1'; wait for 0.5 us; -- time: 650193.9 us enc(0) <= '0'; wait for 0.2 us; -- time: 650194.1 us enc(0) <= '1'; wait for 23.0 us; -- time: 650217.1 us enc(0) <= '0'; wait for 3.6 us; -- time: 650220.7 us enc(0) <= '1'; wait for 0.2 us; -- time: 650220.9 us enc(0) <= '0'; wait for 2934.9 us; -- time: 653155.8 us enc(1) <= '0'; wait for 66426.3 us; -- time: 719582.1 us enc(0) <= '1'; wait for 4259.7 us; -- time: 723841.8 us enc(1) <= '1'; wait for 46480.2 us; -- time: 770322.0 us enc(0) <= '0'; wait for 1885.4 us; -- time: 772207.4 us enc(1) <= '0'; wait for 46578.5 us; -- time: 818785.9 us enc(0) <= '1'; wait for 3086.9 us; -- time: 821872.8 us enc(1) <= '1'; wait for 38289.7 us; -- time: 860162.5 us enc(0) <= '0'; wait for 1731.4 us; -- time: 861893.9 us enc(1) <= '0'; wait for 34900.7 us; -- time: 896794.6 us enc(0) <= '1'; wait for 2772.5 us; -- time: 899567.1 us enc(1) <= '1'; wait for 30581.8 us; -- time: 930148.9 us enc(0) <= '0'; wait for 1728.1 us; -- time: 931877.0 us enc(1) <= '0'; wait for 26758.7 us; -- time: 958635.7 us enc(0) <= '1'; wait for 2566.0 us; -- time: 961201.7 us enc(1) <= '1'; wait for 25438.5 us; -- time: 986640.2 us enc(0) <= '0'; wait for 1712.1 us; -- time: 988352.3 us enc(1) <= '0'; wait for 22858.7 us; -- time: 1011211.0 us enc(0) <= '1'; wait for 2449.1 us; -- time: 1013660.1 us enc(1) <= '1'; wait for 27043.9 us; -- time: 1040704.0 us enc(0) <= '0'; wait for 2491.4 us; -- time: 1043195.4 us enc(1) <= '0'; wait for 1.9 us; -- time: 1043197.3 us enc(1) <= '1'; wait for 0.8 us; -- time: 1043198.1 us enc(1) <= '0'; wait for 31600.7 us; -- time: 1074798.8 us enc(0) <= '1'; wait for 3500.6 us; -- time: 1078299.4 us enc(1) <= '1'; wait for 49536.9 us; -- time: 1127836.3 us enc(0) <= '0'; wait for 2080.8 us; -- time: 1129917.1 us enc(1) <= '0'; wait for 20638.9 us; -- time: 1150556.0 us enc(0) <= '1'; wait for 2973.9 us; -- time: 1153529.9 us enc(1) <= '1'; wait for 22250.6 us; -- time: 1175780.5 us enc(0) <= '0'; wait for 2254.1 us; -- time: 1178034.6 us enc(1) <= '0'; wait for 15117.1 us; -- time: 1193151.7 us enc(0) <= '1'; wait for 3253.0 us; -- time: 1196404.7 us enc(1) <= '1'; wait for 20454.1 us; -- time: 1216858.8 us enc(0) <= '0'; wait for 2828.8 us; -- time: 1219687.6 us enc(1) <= '0'; wait for 22222.6 us; -- time: 1241910.2 us enc(0) <= '1'; wait for 3593.4 us; -- time: 1245503.6 us enc(1) <= '1'; wait for 549106.7 us; -- time: 1794610.3 us enc(1) <= '0'; wait for 8236.8 us; -- time: 1802847.1 us enc(0) <= '0'; wait for 0.5 us; -- time: 1802847.6 us enc(0) <= '1'; wait for 0.6 us; -- time: 1802848.2 us enc(0) <= '0'; wait for 1602.1 us; -- time: 1804450.3 us enc(1) <= '1'; wait for 95.3 us; -- time: 1804545.6 us enc(1) <= '0'; wait for 32.5 us; -- time: 1804578.1 us enc(1) <= '1'; wait for 33508.3 us; -- time: 1838086.4 us enc(0) <= '1'; wait for 0.2 us; -- time: 1838086.6 us enc(0) <= '0'; wait for 1.6 us; -- time: 1838088.2 us enc(0) <= '1'; wait for 28631.9 us; -- time: 1866720.1 us enc(1) <= '0'; wait for 9249.0 us; -- time: 1875969.1 us enc(0) <= '0'; wait for 1.4 us; -- time: 1875970.5 us enc(0) <= '1'; wait for 1.3 us; -- time: 1875971.8 us enc(0) <= '0'; wait for 0.5 us; -- time: 1875972.3 us enc(0) <= '1'; wait for 0.2 us; -- time: 1875972.5 us enc(0) <= '0'; wait for 19668.7 us; -- time: 1895641.2 us enc(1) <= '1'; wait for 12286.4 us; -- time: 1907927.6 us enc(0) <= '1'; wait for 0.1 us; -- time: 1907927.7 us enc(0) <= '0'; wait for 0.9 us; -- time: 1907928.6 us enc(0) <= '1'; wait for 19607.7 us; -- time: 1927536.3 us enc(1) <= '0'; wait for 5841.8 us; -- time: 1933378.1 us enc(0) <= '0'; wait for 13851.3 us; -- time: 1947229.4 us enc(1) <= '1'; wait for 10931.6 us; -- time: 1958161.0 us enc(0) <= '1'; wait for 19540.7 us; -- time: 1977701.7 us enc(1) <= '0'; wait for 4.3 us; -- time: 1977706.0 us enc(1) <= '1'; wait for 0.3 us; -- time: 1977706.3 us enc(1) <= '0'; wait for 9.5 us; -- time: 1977715.8 us enc(1) <= '1'; wait for 0.6 us; -- time: 1977716.4 us enc(1) <= '0'; wait for 7.4 us; -- time: 1977723.8 us enc(1) <= '1'; wait for 0.8 us; -- time: 1977724.6 us enc(1) <= '0'; wait for 3.3 us; -- time: 1977727.9 us enc(1) <= '1'; wait for 2.5 us; -- time: 1977730.4 us enc(1) <= '0'; wait for 4.5 us; -- time: 1977734.9 us enc(1) <= '1'; wait for 10.8 us; -- time: 1977745.7 us enc(1) <= '0'; wait for 6.4 us; -- time: 1977752.1 us enc(1) <= '1'; wait for 19.8 us; -- time: 1977771.9 us enc(1) <= '0'; wait for 15.2 us; -- time: 1977787.1 us enc(1) <= '1'; wait for 6.2 us; -- time: 1977793.3 us enc(1) <= '0'; wait for 56.4 us; -- time: 1977849.7 us enc(1) <= '1'; wait for 2.2 us; -- time: 1977851.9 us enc(1) <= '0'; wait for 11.4 us; -- time: 1977863.3 us enc(1) <= '1'; wait for 0.2 us; -- time: 1977863.5 us enc(1) <= '0'; wait for 2.4 us; -- time: 1977865.9 us enc(1) <= '1'; wait for 0.1 us; -- time: 1977866.0 us enc(1) <= '0'; wait for 3.1 us; -- time: 1977869.1 us enc(1) <= '1'; wait for 269.5 us; -- time: 1978138.6 us enc(1) <= '0'; wait for 5344.6 us; -- time: 1983483.2 us enc(0) <= '0'; wait for 10910.0 us; -- time: 1994393.2 us enc(1) <= '1'; wait for 11436.6 us; -- time: 2005829.8 us enc(0) <= '1'; wait for 21511.9 us; -- time: 2027341.7 us enc(1) <= '0'; wait for 4920.2 us; -- time: 2032261.9 us enc(0) <= '0'; wait for 0.6 us; -- time: 2032262.5 us enc(0) <= '1'; wait for 2.2 us; -- time: 2032264.7 us enc(0) <= '0'; wait for 17746.2 us; -- time: 2050010.9 us enc(1) <= '1'; wait for 8528.1 us; -- time: 2058539.0 us enc(0) <= '1'; wait for 21964.4 us; -- time: 2080503.4 us enc(1) <= '0'; wait for 4574.5 us; -- time: 2085077.9 us enc(0) <= '0'; wait for 17445.4 us; -- time: 2102523.3 us enc(1) <= '1'; wait for 7355.1 us; -- time: 2109878.4 us enc(0) <= '1'; wait for 22074.0 us; -- time: 2131952.4 us enc(1) <= '0'; wait for 4480.9 us; -- time: 2136433.3 us enc(0) <= '0'; wait for 17423.6 us; -- time: 2153856.9 us enc(1) <= '1'; wait for 6455.2 us; -- time: 2160312.1 us enc(0) <= '1'; wait for 20601.2 us; -- time: 2180913.3 us enc(1) <= '0'; wait for 3799.0 us; -- time: 2184712.3 us enc(0) <= '0'; wait for 15129.6 us; -- time: 2199841.9 us enc(1) <= '1'; wait for 5410.8 us; -- time: 2205252.7 us enc(0) <= '1'; wait for 15874.8 us; -- time: 2221127.5 us enc(1) <= '0'; wait for 5758.8 us; -- time: 2226886.3 us enc(0) <= '0'; wait for 1144.9 us; -- time: 2228031.2 us enc(1) <= '1'; wait for 18823.0 us; -- time: 2246854.2 us enc(0) <= '1'; wait for 0.2 us; -- time: 2246854.4 us enc(0) <= '0'; wait for 29.4 us; -- time: 2246883.8 us enc(0) <= '1'; wait for 6.6 us; -- time: 2246890.4 us enc(0) <= '0'; wait for 1.8 us; -- time: 2246892.2 us enc(0) <= '1'; wait for 15849.8 us; -- time: 2262742.0 us enc(1) <= '0'; wait for 5161.9 us; -- time: 2267903.9 us enc(0) <= '0'; wait for 2.3 us; -- time: 2267906.2 us enc(0) <= '1'; wait for 1.2 us; -- time: 2267907.4 us enc(0) <= '0'; wait for 1394.4 us; -- time: 2269301.8 us enc(1) <= '1'; wait for 16851.8 us; -- time: 2286153.6 us enc(0) <= '1'; wait for 17656.5 us; -- time: 2303810.1 us enc(1) <= '0'; wait for 6479.6 us; -- time: 2310289.7 us enc(0) <= '0'; wait for 14396.3 us; -- time: 2324686.0 us enc(1) <= '1'; wait for 13136.8 us; -- time: 2337822.8 us enc(0) <= '1'; wait for 23.9 us; -- time: 2337846.7 us enc(0) <= '0'; wait for 10.7 us; -- time: 2337857.4 us enc(0) <= '1'; wait for 25531.4 us; -- time: 2363388.8 us enc(1) <= '0'; wait for 7646.2 us; -- time: 2371035.0 us enc(0) <= '0'; end if; wait; end process; end sim;