diff --git a/.gitignore b/.gitignore index 4772138..fe36af2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ adi_library c/** -ip \ No newline at end of file +ip +.tags \ No newline at end of file diff --git a/coe/DAGC_LUT.coe b/coe/DAGC_LUT.coe new file mode 100644 index 0000000..493fb80 --- /dev/null +++ b/coe/DAGC_LUT.coe @@ -0,0 +1,2029 @@ +memory_initialization_radix=10; +memory_initialization_vector= +15825, +14507, +13391, +12434, +11605, +10880, +10240, +9671, +9162, +8704, +8290, +7913, +7569, +7253, +6963, +6695, +6447, +6217, +6003, +5803, +5615, +5440, +5275, +5120, +4974, +4836, +4705, +4581, +4464, +4352, +4246, +4145, +4048, +3956, +3868, +3784, +3704, +3627, +3553, +3482, +3413, +3348, +3285, +3224, +3165, +3109, +3054, +3001, +2951, +2901, +2854, +2808, +2763, +2720, +2678, +2638, +2598, +2560, +2523, +2487, +2452, +2418, +2385, +2352, +2321, +2291, +2261, +2232, +2204, +2176, +2149, +2123, +2097, +2072, +2048, +2024, +2001, +1978, +1956, +1934, +1913, +1892, +1872, +1852, +1832, +1813, +1795, +1776, +1758, +1741, +1724, +1707, +1690, +1674, +1658, +1642, +1627, +1612, +1597, +1583, +1568, +1554, +1541, +1527, +1514, +1501, +1488, +1475, +1463, +1451, +1439, +1427, +1415, +1404, +1393, +1382, +1371, +1360, +1349, +1339, +1329, +1319, +1309, +1299, +1289, +1280, +1271, +1261, +1252, +1243, +1235, +1226, +1217, +1209, +1201, +1192, +1184, +1176, +1168, +1161, +1153, +1145, +1138, +1130, +1123, +1116, +1109, +1102, +1095, +1088, +1081, +1075, +1068, +1061, +1055, +1049, +1042, +1036, +1030, +1024, +1018, +1012, +1006, +1000, +995, +989, +984, +978, +973, +967, +962, +956, +951, +946, +941, +936, +931, +926, +921, +916, +911, +907, +902, +897, +893, +888, +884, +879, +875, +870, +866, +862, +858, +853, +849, +845, +841, +837, +833, +829, +825, +821, +817, +813, +810, +806, +802, +799, +795, +791, +788, +784, +781, +777, +774, +770, +767, +764, +760, +757, +754, +750, +747, +744, +741, +738, +735, +731, +728, +725, +722, +719, +716, +713, +711, +708, +705, +702, +699, +696, +694, +691, +688, +685, +683, +680, +677, +675, +672, +670, +667, +664, +662, +659, +657, +654, +652, +650, +647, +645, +642, +640, +638, +635, +633, +631, +628, +626, +624, +622, +620, +617, +615, +613, +611, +609, +607, +604, +602, +600, +598, +596, +594, +592, +590, +588, +586, +584, +582, +580, +578, +576, +575, +573, +571, +569, +567, +565, +563, +562, +560, +558, +556, +554, +553, +551, +549, +547, +546, +544, +542, +541, +539, +537, +536, +534, +532, +531, +529, +528, +526, +524, +523, +521, +520, +518, +517, +515, +514, +512, +510, +509, +508, +506, +505, +503, +502, +500, +499, +497, +496, +495, +493, +492, +490, +489, +488, +486, +485, +484, +482, +481, +480, +478, +477, +476, +474, +473, +472, +470, +469, +468, +467, +465, +464, +463, +462, +461, +459, +458, +457, +456, +455, +453, +452, +451, +450, +449, +448, +446, +445, +444, +443, +442, +441, +440, +438, +437, +436, +435, +434, +433, +432, +431, +430, +429, +428, +427, +426, +425, +424, +423, +422, +420, +419, +418, +417, +416, +415, +414, +413, +413, +412, +411, +410, +409, +408, +407, +406, +405, +404, +403, +402, +401, +400, +399, +398, +397, +397, +396, +395, +394, +393, +392, +391, +390, +389, +389, +388, +387, +386, +385, +384, +383, +383, +382, +381, +380, +379, +378, +378, +377, +376, +375, +374, +374, +373, +372, +371, +370, +370, +369, +368, +367, +366, +366, +365, +364, +363, +363, +362, +361, +360, +360, +359, +358, +357, +357, +356, +355, +355, +354, +353, +352, +352, +351, +350, +350, +349, +348, +347, +347, +346, +345, +345, +344, +343, +343, +342, +341, +341, +340, +339, +339, +338, +337, +337, +336, +335, +335, +334, +333, +333, +332, +332, +331, +330, +330, +329, +328, +328, +327, +327, +326, +325, +325, +324, +324, +323, +322, +322, +321, +321, +320, +319, +319, +318, +318, +317, +317, +316, +315, +315, +314, +314, +313, +313, +312, +311, +311, +310, +310, +309, +309, +308, +308, +307, +306, +306, +305, +305, +304, +304, +303, +303, +302, +302, +301, +301, +300, +300, +299, +299, +298, +298, +297, +297, +296, +296, +295, +295, +294, +294, +293, +293, +292, +292, +291, +291, +290, +290, +289, +289, +288, +288, +287, +287, +286, +286, +285, +285, +284, +284, +284, +283, +283, +282, +282, +281, +281, +280, +280, +279, +279, +279, +278, +278, +277, +277, +276, +276, +275, +275, +275, +274, +274, +273, +273, +272, +272, +272, +271, +271, +270, +270, +269, +269, +269, +268, +268, +267, +267, +267, +266, +266, +265, +265, +265, +264, +264, +263, +263, +263, +262, +262, +261, +261, +261, +260, +260, +259, +259, +259, +258, +258, +258, +257, +257, +256, +256, +256, +255, +255, +255, +254, +254, +253, +253, +253, +252, +252, +252, +251, +251, +250, +250, +250, +249, +249, +249, +248, +248, +248, +247, +247, +247, +246, +246, +246, +245, +245, +244, +244, +244, +243, +243, +243, +242, +242, +242, +241, +241, +241, +240, +240, +240, +239, +239, +239, +238, +238, +238, +237, +237, +237, +237, +236, +236, +236, +235, +235, +235, +234, +234, +234, +233, +233, +233, +232, +232, +232, +231, +231, +231, +231, +230, +230, +230, +229, +229, +229, +228, +228, +228, +228, +227, +227, +227, +226, +226, +226, +225, +225, +225, +225, +224, +224, +224, +223, +223, +223, +223, +222, +222, +222, +221, +221, +221, +221, +220, +220, +220, +220, +219, +219, +219, +218, +218, +218, +218, +217, +217, +217, +217, +216, +216, +216, +215, +215, +215, +215, +214, +214, +214, +214, +213, +213, +213, +213, +212, +212, +212, +212, +211, +211, +211, +210, +210, +210, +210, +209, +209, +209, +209, +208, +208, +208, +208, +207, +207, +207, +207, +207, +206, +206, +206, +206, +205, +205, +205, +205, +204, +204, +204, +204, +203, +203, +203, +203, +202, +202, +202, +202, +201, +201, +201, +201, +201, +200, +200, +200, +200, +199, +199, +199, +199, +198, +198, +198, +198, +198, +197, +197, +197, +197, +196, +196, +196, +196, +196, +195, +195, +195, +195, +195, +194, +194, +194, +194, +193, +193, +193, +193, +193, +192, +192, +192, +192, +192, +191, +191, +191, +191, +190, +190, +190, +190, +190, +189, +189, +189, +189, +189, +188, +188, +188, +188, +188, +187, +187, +187, +187, +187, +186, +186, +186, +186, +186, +185, +185, +185, +185, +185, +184, +184, +184, +184, +184, +183, +183, +183, +183, +183, +182, +182, +182, +182, +182, +182, +181, +181, +181, +181, +181, +180, +180, +180, +180, +180, +179, +179, +179, +179, +179, +179, +178, +178, +178, +178, +178, +177, +177, +177, +177, +177, +177, +176, +176, +176, +176, +176, +175, +175, +175, +175, +175, +175, +174, +174, +174, +174, +174, +174, +173, +173, +173, +173, +173, +173, +172, +172, +172, +172, +172, +172, +171, +171, +171, +171, +171, +170, +170, +170, +170, +170, +170, +170, +169, +169, +169, +169, +169, +169, +168, +168, +168, +168, +168, +168, +167, +167, +167, +167, +167, +167, +166, +166, +166, +166, +166, +166, +165, +165, +165, +165, +165, +165, +165, +164, +164, +164, +164, +164, +164, +163, +163, +163, +163, +163, +163, +163, +162, +162, +162, +162, +162, +162, +161, +161, +161, +161, +161, +161, +161, +160, +160, +160, +160, +160, +160, +160, +159, +159, +159, +159, +159, +159, +159, +158, +158, +158, +158, +158, +158, +158, +157, +157, +157, +157, +157, +157, +157, +156, +156, +156, +156, +156, +156, +156, +155, +155, +155, +155, +155, +155, +155, +154, +154, +154, +154, +154, +154, +154, +154, +153, +153, +153, +153, +153, +153, +153, +152, +152, +152, +152, +152, +152, +152, +152, +151, +151, +151, +151, +151, +151, +151, +150, +150, +150, +150, +150, +150, +150, +150, +149, +149, +149, +149, +149, +149, +149, +149, +148, +148, +148, +148, +148, +148, +148, +148, +147, +147, +147, +147, +147, +147, +147, +147, +146, +146, +146, +146, +146, +146, +146, +146, +145, +145, +145, +145, +145, +145, +145, +145, +144, +144, +144, +144, +144, +144, +144, +144, +144, +143, +143, +143, +143, +143, +143, +143, +143, +142, +142, +142, +142, +142, +142, +142, +142, +142, +141, +141, +141, +141, +141, +141, +141, +141, +141, +140, +140, +140, +140, +140, +140, +140, +140, +139, +139, +139, +139, +139, +139, +139, +139, +139, +138, +138, +138, +138, +138, +138, +138, +138, +138, +138, +137, +137, +137, +137, +137, +137, +137, +137, +137, +136, +136, +136, +136, +136, +136, +136, +136, +136, +135, +135, +135, +135, +135, +135, +135, +135, +135, +135, +134, +134, +134, +134, +134, +134, +134, +134, +134, +133, +133, +133, +133, +133, +133, +133, +133, +133, +133, +132, +132, +132, +132, +132, +132, +132, +132, +132, +132, +131, +131, +131, +131, +131, +131, +131, +131, +131, +131, +130, +130, +130, +130, +130, +130, +130, +130, +130, +130, +130, +129, +129, +129, +129, +129, +129, +129, +129, +129, +129, +128, +128, +128, +128, +128, +128, +128, +128, +128, +128, +128, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +127, +126, +126, +126, +126, +126, +126, +126, +126, +126, +126, +126, +125, +125, +125, +125, +125, +125, +125, +125, +125, +125, +125, +124, +124, +124, +124, +124, +124, +124, +124, +124, +124, +124, +123, +123, +123, +123, +123, +123, +123, +123, +123, +123, +123, +123, +122, +122, +122, +122, +122, +122, +122, +122, +122, +122, +122, +121, +121, +121, +121, +121, +121, +121, +121, +121, +121, +121, +121, +120, +120, +120, +120, +120, +120, +120, +120, +120, +120, +120, +120, +119, +119, +119, +119, +119, +119, +119, +119, +119, +119, +119, +119, +119, +118, +118, +118, +118, +118, +118, +118, +118, +118, +118, +118, +118, +117, +117, +117, +117, +117, +117, +117, +117, +117, +117, +117, +117, +117, +116, +116, +116, +116, +116, +116, +116, +116, +116, +116, +116, +116, +116, +115, +115, +115, +115, +115, +115, +115, +115, +115, +115, +115, +115, +115, +114, +114, +114, +114, +114, +114, +114, +114, +114, +114, +114, +114, +114, +113, +113, +113, +113, +113, +113, +113, +113, +113, +113, +113, +113, +113, +113, +112, +112, +112, +112, +112, +112, +112, +112, +112, +112, +112, +112, +112, +112, +111, +111, +111, +111, +111, +111, +111, +111, +111, +111, +111, +111, +111, +111, +110, +110, +110, +110, +110, +110, +110, +110, +110, +110, +110, +110, +110, +110, +109, +109, +109, +109, +109, +109, +109, +109, +109, +109, +109, +109, +109, +109, +109, +108, +108, +108, +108, +108, +108, +108, +108, +108, +108, +108, +108, +108, +108, +108, +107, +107, +107, +107, +107, +107, +107, +107, +107, +107, +107, +107, +107, +107, +107, +106, +106, +106, +106, +106, +106, +106, +106, +106, +106, +106, +106, +106, +106, +106, +106, +105, +105, +105, +105, +105, +105, +105, +105, +105, +105, +105, +105, +105, +105, +105, +104, +104, +104, +104, +104, +104, +104, +104, +104, +104, +104, +104, +104, +104, +104, +104, +103, +103, +103, +103, +103, +103, +103, +103, +103, +103, +103, +103, +103, +103, +103, +103, +103, +102, +102, +102, +102, +102, +102, +102, +102, +102, +102, +102, +102, +102, +102, +102, +102, +102, +101, +101, +101, +101, +101, +101, +101, +101, +101, +101, +101, +101, +101, +101, +101, +101, +101, +100, +100, +100, +100, +100, +100, +100, +100, +100, +100, +100, +100, +100, +100, +100, +100, +100, +99, +99, +99, +99, +99, +99, +99, +99, +99, +99, +99, +99, +99, +99, +99, +99, +99, +99, +98, +98, +98, +98, +98, +98, +98, +98, +98, +98, +98, +98, +98, +98, +98, +98, +98, +98, +97, +97, +97, +97, +97, +97, +97, +97, +97, +97, +97, +97, +97, +97, +97, +97, +97, +97, +96, +96, +96, +96, +96, +96, +96, +96, +96, +96, +96, +96, +96, +96, +96, +96, +96, +96, +96, +95, +95, +95, +95, +95, +95, +95, +95, +95, +95, +95, +95, +95, +95, +95, +95, +95, +95, +95, +95, +94, +94, +94, +94, +94, +94, +94, +94, +94, +94, +94, +94, +94, +94, +94, +94, +94, +94, +94, +93, +93, +93, +93, +93, +93, +93, +93, +93, +93, +93, +93, +93, +93, +93, +93, +93, +93, +93, +93, +92, +92, +92, +92, +92, +92, +92, +92, +92, +92, +92, +92, +92, +92, +92, +92, +92, +92, +92, +92, +92, +91, +91, +91, +91, +91, +91, +91, +91, +91, +91, +91, +91, +91, +91, +91, +91, +91, +91, +91, +91, +91, +90, +90, +90, +90, +90, +90, +90, +90, +90, +90, +90, +90, +90, +90, +90, +90, +90, +90, +90, +90, +90, +90, +89, +89, +89, +89, +89, +89, +89, +89, +89, +89, +89, +89, +89, +89, +89, +89, +89, +89, +89, +89, +89, +89, +88, +88, +88, +88, +88, +88, +88, +88, +88, +88, +88, +88, +88, +88, +88, +88, +88, +88, +88, +88, +88, +88, +87, +87, +87, +87, +87, +87, +87, +87, +87, +87, +87, +87, +87, +87, +87, +87, +87, +87, +87, +87, +87, +87, +87, +86, +86, +86, +86, +86, +86, +86, +86, +86, +86, +86, +86, +86, +86, +86, +86, +86, +86, +86, +86, +86, +86, +86, +86, +85; diff --git a/coe/DDS_12bit_8192.coe b/coe/DDS_12bit_8192.coe new file mode 100644 index 0000000..e2b9b98 --- /dev/null +++ b/coe/DDS_12bit_8192.coe @@ -0,0 +1,8194 @@ +memory_initialization_radix=10; +memory_initialization_vector= +2047, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2045, +2045, +2045, +2045, +2045, +2045, +2045, +2045, +2045, +2045, +2045, +2045, +2045, +2045, +2045, +2045, +2045, +2044, +2044, +2044, +2044, +2044, +2044, +2044, +2044, +2044, +2044, +2044, +2044, +2044, +2043, +2043, +2043, +2043, +2043, +2043, +2043, +2043, +2043, +2043, +2043, +2042, +2042, +2042, +2042, +2042, +2042, +2042, +2042, +2042, +2042, +2041, +2041, +2041, +2041, +2041, +2041, +2041, +2041, +2040, +2040, +2040, +2040, +2040, +2040, +2040, +2040, +2039, +2039, +2039, +2039, +2039, +2039, +2039, +2039, +2038, +2038, +2038, +2038, +2038, +2038, +2038, +2037, +2037, +2037, +2037, +2037, +2037, +2036, +2036, +2036, +2036, +2036, +2036, +2036, +2035, +2035, +2035, +2035, +2035, +2035, +2034, +2034, +2034, +2034, +2034, +2034, +2033, +2033, +2033, +2033, +2033, +2032, +2032, +2032, +2032, +2032, +2031, +2031, +2031, +2031, +2031, +2031, +2030, +2030, +2030, +2030, +2030, +2029, +2029, +2029, +2029, +2029, +2028, +2028, +2028, +2028, +2027, +2027, +2027, +2027, +2027, +2026, +2026, +2026, +2026, +2025, +2025, +2025, +2025, +2025, +2024, +2024, +2024, +2024, +2023, +2023, +2023, +2023, +2022, +2022, +2022, +2022, +2021, +2021, +2021, +2021, +2021, +2020, +2020, +2020, +2019, +2019, +2019, +2019, +2018, +2018, +2018, +2018, +2017, +2017, +2017, +2017, +2016, +2016, +2016, +2016, +2015, +2015, +2015, +2014, +2014, +2014, +2014, +2013, +2013, +2013, +2012, +2012, +2012, +2012, +2011, +2011, +2011, +2010, +2010, +2010, +2010, +2009, +2009, +2009, +2008, +2008, +2008, +2007, +2007, +2007, +2007, +2006, +2006, +2006, +2005, +2005, +2005, +2004, +2004, +2004, +2003, +2003, +2003, +2002, +2002, +2002, +2001, +2001, +2001, +2000, +2000, +2000, +1999, +1999, +1999, +1998, +1998, +1998, +1997, +1997, +1997, +1996, +1996, +1996, +1995, +1995, +1995, +1994, +1994, +1994, +1993, +1993, +1993, +1992, +1992, +1991, +1991, +1991, +1990, +1990, +1990, +1989, +1989, +1989, +1988, +1988, +1987, +1987, +1987, +1986, +1986, +1986, +1985, +1985, +1984, +1984, +1984, +1983, +1983, +1982, +1982, +1982, +1981, +1981, +1980, +1980, +1980, +1979, +1979, +1979, +1978, +1978, +1977, +1977, +1976, +1976, +1976, +1975, +1975, +1974, +1974, +1974, +1973, +1973, +1972, +1972, +1972, +1971, +1971, +1970, +1970, +1969, +1969, +1969, +1968, +1968, +1967, +1967, +1966, +1966, +1966, +1965, +1965, +1964, +1964, +1963, +1963, +1962, +1962, +1962, +1961, +1961, +1960, +1960, +1959, +1959, +1958, +1958, +1957, +1957, +1957, +1956, +1956, +1955, +1955, +1954, +1954, +1953, +1953, +1952, +1952, +1951, +1951, +1950, +1950, +1949, +1949, +1949, +1948, +1948, +1947, +1947, +1946, +1946, +1945, +1945, +1944, +1944, +1943, +1943, +1942, +1942, +1941, +1941, +1940, +1940, +1939, +1939, +1938, +1938, +1937, +1937, +1936, +1936, +1935, +1935, +1934, +1934, +1933, +1933, +1932, +1932, +1931, +1931, +1930, +1929, +1929, +1928, +1928, +1927, +1927, +1926, +1926, +1925, +1925, +1924, +1924, +1923, +1923, +1922, +1921, +1921, +1920, +1920, +1919, +1919, +1918, +1918, +1917, +1917, +1916, +1915, +1915, +1914, +1914, +1913, +1913, +1912, +1912, +1911, +1910, +1910, +1909, +1909, +1908, +1908, +1907, +1906, +1906, +1905, +1905, +1904, +1904, +1903, +1902, +1902, +1901, +1901, +1900, +1900, +1899, +1898, +1898, +1897, +1897, +1896, +1895, +1895, +1894, +1894, +1893, +1892, +1892, +1891, +1891, +1890, +1889, +1889, +1888, +1888, +1887, +1886, +1886, +1885, +1885, +1884, +1883, +1883, +1882, +1882, +1881, +1880, +1880, +1879, +1878, +1878, +1877, +1877, +1876, +1875, +1875, +1874, +1873, +1873, +1872, +1872, +1871, +1870, +1870, +1869, +1868, +1868, +1867, +1866, +1866, +1865, +1864, +1864, +1863, +1863, +1862, +1861, +1861, +1860, +1859, +1859, +1858, +1857, +1857, +1856, +1855, +1855, +1854, +1853, +1853, +1852, +1851, +1851, +1850, +1849, +1849, +1848, +1847, +1847, +1846, +1845, +1845, +1844, +1843, +1843, +1842, +1841, +1840, +1840, +1839, +1838, +1838, +1837, +1836, +1836, +1835, +1834, +1834, +1833, +1832, +1831, +1831, +1830, +1829, +1829, +1828, +1827, +1827, +1826, +1825, +1824, +1824, +1823, +1822, +1822, +1821, +1820, +1819, +1819, +1818, +1817, +1816, +1816, +1815, +1814, +1814, +1813, +1812, +1811, +1811, +1810, +1809, +1808, +1808, +1807, +1806, +1806, +1805, +1804, +1803, +1803, +1802, +1801, +1800, +1800, +1799, +1798, +1797, +1797, +1796, +1795, +1794, +1794, +1793, +1792, +1791, +1791, +1790, +1789, +1788, +1787, +1787, +1786, +1785, +1784, +1784, +1783, +1782, +1781, +1781, +1780, +1779, +1778, +1777, +1777, +1776, +1775, +1774, +1774, +1773, +1772, +1771, +1770, +1770, +1769, +1768, +1767, +1766, +1766, +1765, +1764, +1763, +1762, +1762, +1761, +1760, +1759, +1758, +1758, +1757, +1756, +1755, +1754, +1754, +1753, +1752, +1751, +1750, +1750, +1749, +1748, +1747, +1746, +1746, +1745, +1744, +1743, +1742, +1741, +1741, +1740, +1739, +1738, +1737, +1736, +1736, +1735, +1734, +1733, +1732, +1731, +1731, +1730, +1729, +1728, +1727, +1726, +1726, +1725, +1724, +1723, +1722, +1721, +1720, +1720, +1719, +1718, +1717, +1716, +1715, +1714, +1714, +1713, +1712, +1711, +1710, +1709, +1708, +1708, +1707, +1706, +1705, +1704, +1703, +1702, +1702, +1701, +1700, +1699, +1698, +1697, +1696, +1695, +1695, +1694, +1693, +1692, +1691, +1690, +1689, +1688, +1687, +1687, +1686, +1685, +1684, +1683, +1682, +1681, +1680, +1679, +1679, +1678, +1677, +1676, +1675, +1674, +1673, +1672, +1671, +1670, +1669, +1669, +1668, +1667, +1666, +1665, +1664, +1663, +1662, +1661, +1660, +1659, +1659, +1658, +1657, +1656, +1655, +1654, +1653, +1652, +1651, +1650, +1649, +1648, +1647, +1646, +1646, +1645, +1644, +1643, +1642, +1641, +1640, +1639, +1638, +1637, +1636, +1635, +1634, +1633, +1632, +1631, +1630, +1630, +1629, +1628, +1627, +1626, +1625, +1624, +1623, +1622, +1621, +1620, +1619, +1618, +1617, +1616, +1615, +1614, +1613, +1612, +1611, +1610, +1609, +1608, +1607, +1606, +1605, +1605, +1604, +1603, +1602, +1601, +1600, +1599, +1598, +1597, +1596, +1595, +1594, +1593, +1592, +1591, +1590, +1589, +1588, +1587, +1586, +1585, +1584, +1583, +1582, +1581, +1580, +1579, +1578, +1577, +1576, +1575, +1574, +1573, +1572, +1571, +1570, +1569, +1568, +1567, +1566, +1565, +1564, +1563, +1562, +1561, +1560, +1559, +1558, +1557, +1556, +1555, +1554, +1553, +1552, +1551, +1550, +1548, +1547, +1546, +1545, +1544, +1543, +1542, +1541, +1540, +1539, +1538, +1537, +1536, +1535, +1534, +1533, +1532, +1531, +1530, +1529, +1528, +1527, +1526, +1525, +1524, +1523, +1521, +1520, +1519, +1518, +1517, +1516, +1515, +1514, +1513, +1512, +1511, +1510, +1509, +1508, +1507, +1506, +1505, +1504, +1502, +1501, +1500, +1499, +1498, +1497, +1496, +1495, +1494, +1493, +1492, +1491, +1490, +1489, +1487, +1486, +1485, +1484, +1483, +1482, +1481, +1480, +1479, +1478, +1477, +1476, +1474, +1473, +1472, +1471, +1470, +1469, +1468, +1467, +1466, +1465, +1464, +1462, +1461, +1460, +1459, +1458, +1457, +1456, +1455, +1454, +1452, +1451, +1450, +1449, +1448, +1447, +1446, +1445, +1444, +1443, +1441, +1440, +1439, +1438, +1437, +1436, +1435, +1434, +1432, +1431, +1430, +1429, +1428, +1427, +1426, +1425, +1423, +1422, +1421, +1420, +1419, +1418, +1417, +1416, +1414, +1413, +1412, +1411, +1410, +1409, +1408, +1406, +1405, +1404, +1403, +1402, +1401, +1400, +1398, +1397, +1396, +1395, +1394, +1393, +1392, +1390, +1389, +1388, +1387, +1386, +1385, +1383, +1382, +1381, +1380, +1379, +1378, +1377, +1375, +1374, +1373, +1372, +1371, +1370, +1368, +1367, +1366, +1365, +1364, +1363, +1361, +1360, +1359, +1358, +1357, +1355, +1354, +1353, +1352, +1351, +1350, +1348, +1347, +1346, +1345, +1344, +1342, +1341, +1340, +1339, +1338, +1337, +1335, +1334, +1333, +1332, +1331, +1329, +1328, +1327, +1326, +1325, +1323, +1322, +1321, +1320, +1319, +1317, +1316, +1315, +1314, +1313, +1311, +1310, +1309, +1308, +1307, +1305, +1304, +1303, +1302, +1301, +1299, +1298, +1297, +1296, +1294, +1293, +1292, +1291, +1290, +1288, +1287, +1286, +1285, +1283, +1282, +1281, +1280, +1279, +1277, +1276, +1275, +1274, +1272, +1271, +1270, +1269, +1268, +1266, +1265, +1264, +1263, +1261, +1260, +1259, +1258, +1256, +1255, +1254, +1253, +1251, +1250, +1249, +1248, +1246, +1245, +1244, +1243, +1241, +1240, +1239, +1238, +1236, +1235, +1234, +1233, +1231, +1230, +1229, +1228, +1226, +1225, +1224, +1223, +1221, +1220, +1219, +1218, +1216, +1215, +1214, +1213, +1211, +1210, +1209, +1208, +1206, +1205, +1204, +1202, +1201, +1200, +1199, +1197, +1196, +1195, +1194, +1192, +1191, +1190, +1188, +1187, +1186, +1185, +1183, +1182, +1181, +1179, +1178, +1177, +1176, +1174, +1173, +1172, +1170, +1169, +1168, +1167, +1165, +1164, +1163, +1161, +1160, +1159, +1158, +1156, +1155, +1154, +1152, +1151, +1150, +1148, +1147, +1146, +1145, +1143, +1142, +1141, +1139, +1138, +1137, +1135, +1134, +1133, +1132, +1130, +1129, +1128, +1126, +1125, +1124, +1122, +1121, +1120, +1118, +1117, +1116, +1114, +1113, +1112, +1111, +1109, +1108, +1107, +1105, +1104, +1103, +1101, +1100, +1099, +1097, +1096, +1095, +1093, +1092, +1091, +1089, +1088, +1087, +1085, +1084, +1083, +1081, +1080, +1079, +1077, +1076, +1075, +1073, +1072, +1071, +1069, +1068, +1067, +1065, +1064, +1063, +1061, +1060, +1059, +1057, +1056, +1055, +1053, +1052, +1051, +1049, +1048, +1046, +1045, +1044, +1042, +1041, +1040, +1038, +1037, +1036, +1034, +1033, +1032, +1030, +1029, +1028, +1026, +1025, +1023, +1022, +1021, +1019, +1018, +1017, +1015, +1014, +1013, +1011, +1010, +1008, +1007, +1006, +1004, +1003, +1002, +1000, +999, +998, +996, +995, +993, +992, +991, +989, +988, +987, +985, +984, +982, +981, +980, +978, +977, +976, +974, +973, +971, +970, +969, +967, +966, +964, +963, +962, +960, +959, +958, +956, +955, +953, +952, +951, +949, +948, +946, +945, +944, +942, +941, +939, +938, +937, +935, +934, +932, +931, +930, +928, +927, +925, +924, +923, +921, +920, +918, +917, +916, +914, +913, +911, +910, +909, +907, +906, +904, +903, +902, +900, +899, +897, +896, +895, +893, +892, +890, +889, +887, +886, +885, +883, +882, +880, +879, +878, +876, +875, +873, +872, +870, +869, +868, +866, +865, +863, +862, +860, +859, +858, +856, +855, +853, +852, +851, +849, +848, +846, +845, +843, +842, +840, +839, +838, +836, +835, +833, +832, +830, +829, +828, +826, +825, +823, +822, +820, +819, +818, +816, +815, +813, +812, +810, +809, +807, +806, +805, +803, +802, +800, +799, +797, +796, +794, +793, +792, +790, +789, +787, +786, +784, +783, +781, +780, +778, +777, +776, +774, +773, +771, +770, +768, +767, +765, +764, +763, +761, +760, +758, +757, +755, +754, +752, +751, +749, +748, +746, +745, +744, +742, +741, +739, +738, +736, +735, +733, +732, +730, +729, +727, +726, +724, +723, +722, +720, +719, +717, +716, +714, +713, +711, +710, +708, +707, +705, +704, +702, +701, +699, +698, +696, +695, +694, +692, +691, +689, +688, +686, +685, +683, +682, +680, +679, +677, +676, +674, +673, +671, +670, +668, +667, +665, +664, +662, +661, +659, +658, +656, +655, +654, +652, +651, +649, +648, +646, +645, +643, +642, +640, +639, +637, +636, +634, +633, +631, +630, +628, +627, +625, +624, +622, +621, +619, +618, +616, +615, +613, +612, +610, +609, +607, +606, +604, +603, +601, +600, +598, +597, +595, +594, +592, +591, +589, +588, +586, +585, +583, +582, +580, +579, +577, +576, +574, +573, +571, +570, +568, +567, +565, +564, +562, +561, +559, +558, +556, +555, +553, +552, +550, +548, +547, +545, +544, +542, +541, +539, +538, +536, +535, +533, +532, +530, +529, +527, +526, +524, +523, +521, +520, +518, +517, +515, +514, +512, +511, +509, +508, +506, +504, +503, +501, +500, +498, +497, +495, +494, +492, +491, +489, +488, +486, +485, +483, +482, +480, +479, +477, +476, +474, +472, +471, +469, +468, +466, +465, +463, +462, +460, +459, +457, +456, +454, +453, +451, +450, +448, +446, +445, +443, +442, +440, +439, +437, +436, +434, +433, +431, +430, +428, +427, +425, +423, +422, +420, +419, +417, +416, +414, +413, +411, +410, +408, +407, +405, +403, +402, +400, +399, +397, +396, +394, +393, +391, +390, +388, +387, +385, +383, +382, +380, +379, +377, +376, +374, +373, +371, +370, +368, +366, +365, +363, +362, +360, +359, +357, +356, +354, +353, +351, +349, +348, +346, +345, +343, +342, +340, +339, +337, +336, +334, +332, +331, +329, +328, +326, +325, +323, +322, +320, +318, +317, +315, +314, +312, +311, +309, +308, +306, +305, +303, +301, +300, +298, +297, +295, +294, +292, +291, +289, +287, +286, +284, +283, +281, +280, +278, +277, +275, +273, +272, +270, +269, +267, +266, +264, +263, +261, +259, +258, +256, +255, +253, +252, +250, +249, +247, +245, +244, +242, +241, +239, +238, +236, +234, +233, +231, +230, +228, +227, +225, +224, +222, +220, +219, +217, +216, +214, +213, +211, +210, +208, +206, +205, +203, +202, +200, +199, +197, +195, +194, +192, +191, +189, +188, +186, +185, +183, +181, +180, +178, +177, +175, +174, +172, +170, +169, +167, +166, +164, +163, +161, +159, +158, +156, +155, +153, +152, +150, +149, +147, +145, +144, +142, +141, +139, +138, +136, +134, +133, +131, +130, +128, +127, +125, +123, +122, +120, +119, +117, +116, +114, +112, +111, +109, +108, +106, +105, +103, +102, +100, +98, +97, +95, +94, +92, +91, +89, +87, +86, +84, +83, +81, +80, +78, +76, +75, +73, +72, +70, +69, +67, +65, +64, +62, +61, +59, +58, +56, +54, +53, +51, +50, +48, +47, +45, +43, +42, +40, +39, +37, +36, +34, +32, +31, +29, +28, +26, +25, +23, +21, +20, +18, +17, +15, +14, +12, +10, +9, +7, +6, +4, +3, +1, +0, +-1, +-3, +-4, +-6, +-7, +-9, +-10, +-12, +-14, +-15, +-17, +-18, +-20, +-21, +-23, +-25, +-26, +-28, +-29, +-31, +-32, +-34, +-36, +-37, +-39, +-40, +-42, +-43, +-45, +-47, +-48, +-50, +-51, +-53, +-54, +-56, +-58, +-59, +-61, +-62, +-64, +-65, +-67, +-69, +-70, +-72, +-73, +-75, +-76, +-78, +-80, +-81, +-83, +-84, +-86, +-87, +-89, +-91, +-92, +-94, +-95, +-97, +-98, +-100, +-102, +-103, +-105, +-106, +-108, +-109, +-111, +-112, +-114, +-116, +-117, +-119, +-120, +-122, +-123, +-125, +-127, +-128, +-130, +-131, +-133, +-134, +-136, +-138, +-139, +-141, +-142, +-144, +-145, +-147, +-149, +-150, +-152, +-153, +-155, +-156, +-158, +-159, +-161, +-163, +-164, +-166, +-167, +-169, +-170, +-172, +-174, +-175, +-177, +-178, +-180, +-181, +-183, +-185, +-186, +-188, +-189, +-191, +-192, +-194, +-195, +-197, +-199, +-200, +-202, +-203, +-205, +-206, +-208, +-210, +-211, +-213, +-214, +-216, +-217, +-219, +-220, +-222, +-224, +-225, +-227, +-228, +-230, +-231, +-233, +-234, +-236, +-238, +-239, +-241, +-242, +-244, +-245, +-247, +-249, +-250, +-252, +-253, +-255, +-256, +-258, +-259, +-261, +-263, +-264, +-266, +-267, +-269, +-270, +-272, +-273, +-275, +-277, +-278, +-280, +-281, +-283, +-284, +-286, +-287, +-289, +-291, +-292, +-294, +-295, +-297, +-298, +-300, +-301, +-303, +-305, +-306, +-308, +-309, +-311, +-312, +-314, +-315, +-317, +-318, +-320, +-322, +-323, +-325, +-326, +-328, +-329, +-331, +-332, +-334, +-336, +-337, +-339, +-340, +-342, +-343, +-345, +-346, +-348, +-349, +-351, +-353, +-354, +-356, +-357, +-359, +-360, +-362, +-363, +-365, +-366, +-368, +-370, +-371, +-373, +-374, +-376, +-377, +-379, +-380, +-382, +-383, +-385, +-387, +-388, +-390, +-391, +-393, +-394, +-396, +-397, +-399, +-400, +-402, +-403, +-405, +-407, +-408, +-410, +-411, +-413, +-414, +-416, +-417, +-419, +-420, +-422, +-423, +-425, +-427, +-428, +-430, +-431, +-433, +-434, +-436, +-437, +-439, +-440, +-442, +-443, +-445, +-446, +-448, +-450, +-451, +-453, +-454, +-456, +-457, +-459, +-460, +-462, +-463, +-465, +-466, +-468, +-469, +-471, +-472, +-474, +-476, +-477, +-479, +-480, +-482, +-483, +-485, +-486, +-488, +-489, +-491, +-492, +-494, +-495, +-497, +-498, +-500, +-501, +-503, +-504, +-506, +-508, +-509, +-511, +-512, +-514, +-515, +-517, +-518, +-520, +-521, +-523, +-524, +-526, +-527, +-529, +-530, +-532, +-533, +-535, +-536, +-538, +-539, +-541, +-542, +-544, +-545, +-547, +-548, +-550, +-552, +-553, +-555, +-556, +-558, +-559, +-561, +-562, +-564, +-565, +-567, +-568, +-570, +-571, +-573, +-574, +-576, +-577, +-579, +-580, +-582, +-583, +-585, +-586, +-588, +-589, +-591, +-592, +-594, +-595, +-597, +-598, +-600, +-601, +-603, +-604, +-606, +-607, +-609, +-610, +-612, +-613, +-615, +-616, +-618, +-619, +-621, +-622, +-624, +-625, +-627, +-628, +-630, +-631, +-633, +-634, +-636, +-637, +-639, +-640, +-642, +-643, +-645, +-646, +-648, +-649, +-651, +-652, +-654, +-655, +-656, +-658, +-659, +-661, +-662, +-664, +-665, +-667, +-668, +-670, +-671, +-673, +-674, +-676, +-677, +-679, +-680, +-682, +-683, +-685, +-686, +-688, +-689, +-691, +-692, +-694, +-695, +-696, +-698, +-699, +-701, +-702, +-704, +-705, +-707, +-708, +-710, +-711, +-713, +-714, +-716, +-717, +-719, +-720, +-722, +-723, +-724, +-726, +-727, +-729, +-730, +-732, +-733, +-735, +-736, +-738, +-739, +-741, +-742, +-744, +-745, +-746, +-748, +-749, +-751, +-752, +-754, +-755, +-757, +-758, +-760, +-761, +-763, +-764, +-765, +-767, +-768, +-770, +-771, +-773, +-774, +-776, +-777, +-778, +-780, +-781, +-783, +-784, +-786, +-787, +-789, +-790, +-792, +-793, +-794, +-796, +-797, +-799, +-800, +-802, +-803, +-805, +-806, +-807, +-809, +-810, +-812, +-813, +-815, +-816, +-818, +-819, +-820, +-822, +-823, +-825, +-826, +-828, +-829, +-830, +-832, +-833, +-835, +-836, +-838, +-839, +-840, +-842, +-843, +-845, +-846, +-848, +-849, +-851, +-852, +-853, +-855, +-856, +-858, +-859, +-860, +-862, +-863, +-865, +-866, +-868, +-869, +-870, +-872, +-873, +-875, +-876, +-878, +-879, +-880, +-882, +-883, +-885, +-886, +-887, +-889, +-890, +-892, +-893, +-895, +-896, +-897, +-899, +-900, +-902, +-903, +-904, +-906, +-907, +-909, +-910, +-911, +-913, +-914, +-916, +-917, +-918, +-920, +-921, +-923, +-924, +-925, +-927, +-928, +-930, +-931, +-932, +-934, +-935, +-937, +-938, +-939, +-941, +-942, +-944, +-945, +-946, +-948, +-949, +-951, +-952, +-953, +-955, +-956, +-958, +-959, +-960, +-962, +-963, +-964, +-966, +-967, +-969, +-970, +-971, +-973, +-974, +-976, +-977, +-978, +-980, +-981, +-982, +-984, +-985, +-987, +-988, +-989, +-991, +-992, +-993, +-995, +-996, +-998, +-999, +-1000, +-1002, +-1003, +-1004, +-1006, +-1007, +-1008, +-1010, +-1011, +-1013, +-1014, +-1015, +-1017, +-1018, +-1019, +-1021, +-1022, +-1023, +-1025, +-1026, +-1028, +-1029, +-1030, +-1032, +-1033, +-1034, +-1036, +-1037, +-1038, +-1040, +-1041, +-1042, +-1044, +-1045, +-1046, +-1048, +-1049, +-1051, +-1052, +-1053, +-1055, +-1056, +-1057, +-1059, +-1060, +-1061, +-1063, +-1064, +-1065, +-1067, +-1068, +-1069, +-1071, +-1072, +-1073, +-1075, +-1076, +-1077, +-1079, +-1080, +-1081, +-1083, +-1084, +-1085, +-1087, +-1088, +-1089, +-1091, +-1092, +-1093, +-1095, +-1096, +-1097, +-1099, +-1100, +-1101, +-1103, +-1104, +-1105, +-1107, +-1108, +-1109, +-1111, +-1112, +-1113, +-1114, +-1116, +-1117, +-1118, +-1120, +-1121, +-1122, +-1124, +-1125, +-1126, +-1128, +-1129, +-1130, +-1132, +-1133, +-1134, +-1135, +-1137, +-1138, +-1139, +-1141, +-1142, +-1143, +-1145, +-1146, +-1147, +-1148, +-1150, +-1151, +-1152, +-1154, +-1155, +-1156, +-1158, +-1159, +-1160, +-1161, +-1163, +-1164, +-1165, +-1167, +-1168, +-1169, +-1170, +-1172, +-1173, +-1174, +-1176, +-1177, +-1178, +-1179, +-1181, +-1182, +-1183, +-1185, +-1186, +-1187, +-1188, +-1190, +-1191, +-1192, +-1194, +-1195, +-1196, +-1197, +-1199, +-1200, +-1201, +-1202, +-1204, +-1205, +-1206, +-1208, +-1209, +-1210, +-1211, +-1213, +-1214, +-1215, +-1216, +-1218, +-1219, +-1220, +-1221, +-1223, +-1224, +-1225, +-1226, +-1228, +-1229, +-1230, +-1231, +-1233, +-1234, +-1235, +-1236, +-1238, +-1239, +-1240, +-1241, +-1243, +-1244, +-1245, +-1246, +-1248, +-1249, +-1250, +-1251, +-1253, +-1254, +-1255, +-1256, +-1258, +-1259, +-1260, +-1261, +-1263, +-1264, +-1265, +-1266, +-1268, +-1269, +-1270, +-1271, +-1272, +-1274, +-1275, +-1276, +-1277, +-1279, +-1280, +-1281, +-1282, +-1283, +-1285, +-1286, +-1287, +-1288, +-1290, +-1291, +-1292, +-1293, +-1294, +-1296, +-1297, +-1298, +-1299, +-1301, +-1302, +-1303, +-1304, +-1305, +-1307, +-1308, +-1309, +-1310, +-1311, +-1313, +-1314, +-1315, +-1316, +-1317, +-1319, +-1320, +-1321, +-1322, +-1323, +-1325, +-1326, +-1327, +-1328, +-1329, +-1331, +-1332, +-1333, +-1334, +-1335, +-1337, +-1338, +-1339, +-1340, +-1341, +-1342, +-1344, +-1345, +-1346, +-1347, +-1348, +-1350, +-1351, +-1352, +-1353, +-1354, +-1355, +-1357, +-1358, +-1359, +-1360, +-1361, +-1363, +-1364, +-1365, +-1366, +-1367, +-1368, +-1370, +-1371, +-1372, +-1373, +-1374, +-1375, +-1377, +-1378, +-1379, +-1380, +-1381, +-1382, +-1383, +-1385, +-1386, +-1387, +-1388, +-1389, +-1390, +-1392, +-1393, +-1394, +-1395, +-1396, +-1397, +-1398, +-1400, +-1401, +-1402, +-1403, +-1404, +-1405, +-1406, +-1408, +-1409, +-1410, +-1411, +-1412, +-1413, +-1414, +-1416, +-1417, +-1418, +-1419, +-1420, +-1421, +-1422, +-1423, +-1425, +-1426, +-1427, +-1428, +-1429, +-1430, +-1431, +-1432, +-1434, +-1435, +-1436, +-1437, +-1438, +-1439, +-1440, +-1441, +-1443, +-1444, +-1445, +-1446, +-1447, +-1448, +-1449, +-1450, +-1451, +-1452, +-1454, +-1455, +-1456, +-1457, +-1458, +-1459, +-1460, +-1461, +-1462, +-1464, +-1465, +-1466, +-1467, +-1468, +-1469, +-1470, +-1471, +-1472, +-1473, +-1474, +-1476, +-1477, +-1478, +-1479, +-1480, +-1481, +-1482, +-1483, +-1484, +-1485, +-1486, +-1487, +-1489, +-1490, +-1491, +-1492, +-1493, +-1494, +-1495, +-1496, +-1497, +-1498, +-1499, +-1500, +-1501, +-1502, +-1504, +-1505, +-1506, +-1507, +-1508, +-1509, +-1510, +-1511, +-1512, +-1513, +-1514, +-1515, +-1516, +-1517, +-1518, +-1519, +-1520, +-1521, +-1523, +-1524, +-1525, +-1526, +-1527, +-1528, +-1529, +-1530, +-1531, +-1532, +-1533, +-1534, +-1535, +-1536, +-1537, +-1538, +-1539, +-1540, +-1541, +-1542, +-1543, +-1544, +-1545, +-1546, +-1547, +-1548, +-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, +-1577, +-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, +-1605, +-1606, +-1607, +-1608, +-1609, +-1610, +-1611, +-1612, +-1613, +-1614, +-1615, +-1616, +-1617, +-1618, +-1619, +-1620, +-1621, +-1622, +-1623, +-1624, +-1625, +-1626, +-1627, +-1628, +-1629, +-1630, +-1630, +-1631, +-1632, +-1633, +-1634, +-1635, +-1636, +-1637, +-1638, +-1639, +-1640, +-1641, +-1642, +-1643, +-1644, +-1645, +-1646, +-1646, +-1647, +-1648, +-1649, +-1650, +-1651, +-1652, +-1653, +-1654, +-1655, +-1656, +-1657, +-1658, +-1659, +-1659, +-1660, +-1661, +-1662, +-1663, +-1664, +-1665, +-1666, +-1667, +-1668, +-1669, +-1669, +-1670, +-1671, +-1672, +-1673, +-1674, +-1675, +-1676, +-1677, +-1678, +-1679, +-1679, +-1680, +-1681, +-1682, +-1683, +-1684, +-1685, +-1686, +-1687, +-1687, +-1688, +-1689, +-1690, +-1691, +-1692, +-1693, +-1694, +-1695, +-1695, +-1696, +-1697, +-1698, +-1699, +-1700, +-1701, +-1702, +-1702, +-1703, +-1704, +-1705, +-1706, +-1707, +-1708, +-1708, +-1709, +-1710, +-1711, +-1712, +-1713, +-1714, +-1714, +-1715, +-1716, +-1717, +-1718, +-1719, +-1720, +-1720, +-1721, +-1722, +-1723, +-1724, +-1725, +-1726, +-1726, +-1727, +-1728, +-1729, +-1730, +-1731, +-1731, +-1732, +-1733, +-1734, +-1735, +-1736, +-1736, +-1737, +-1738, +-1739, +-1740, +-1741, +-1741, +-1742, +-1743, +-1744, +-1745, +-1746, +-1746, +-1747, +-1748, +-1749, +-1750, +-1750, +-1751, +-1752, +-1753, +-1754, +-1754, +-1755, +-1756, +-1757, +-1758, +-1758, +-1759, +-1760, +-1761, +-1762, +-1762, +-1763, +-1764, +-1765, +-1766, +-1766, +-1767, +-1768, +-1769, +-1770, +-1770, +-1771, +-1772, +-1773, +-1774, +-1774, +-1775, +-1776, +-1777, +-1777, +-1778, +-1779, +-1780, +-1781, +-1781, +-1782, +-1783, +-1784, +-1784, +-1785, +-1786, +-1787, +-1787, +-1788, +-1789, +-1790, +-1791, +-1791, +-1792, +-1793, +-1794, +-1794, +-1795, +-1796, +-1797, +-1797, +-1798, +-1799, +-1800, +-1800, +-1801, +-1802, +-1803, +-1803, +-1804, +-1805, +-1806, +-1806, +-1807, +-1808, +-1808, +-1809, +-1810, +-1811, +-1811, +-1812, +-1813, +-1814, +-1814, +-1815, +-1816, +-1816, +-1817, +-1818, +-1819, +-1819, +-1820, +-1821, +-1822, +-1822, +-1823, +-1824, +-1824, +-1825, +-1826, +-1827, +-1827, +-1828, +-1829, +-1829, +-1830, +-1831, +-1831, +-1832, +-1833, +-1834, +-1834, +-1835, +-1836, +-1836, +-1837, +-1838, +-1838, +-1839, +-1840, +-1840, +-1841, +-1842, +-1843, +-1843, +-1844, +-1845, +-1845, +-1846, +-1847, +-1847, +-1848, +-1849, +-1849, +-1850, +-1851, +-1851, +-1852, +-1853, +-1853, +-1854, +-1855, +-1855, +-1856, +-1857, +-1857, +-1858, +-1859, +-1859, +-1860, +-1861, +-1861, +-1862, +-1863, +-1863, +-1864, +-1864, +-1865, +-1866, +-1866, +-1867, +-1868, +-1868, +-1869, +-1870, +-1870, +-1871, +-1872, +-1872, +-1873, +-1873, +-1874, +-1875, +-1875, +-1876, +-1877, +-1877, +-1878, +-1878, +-1879, +-1880, +-1880, +-1881, +-1882, +-1882, +-1883, +-1883, +-1884, +-1885, +-1885, +-1886, +-1886, +-1887, +-1888, +-1888, +-1889, +-1889, +-1890, +-1891, +-1891, +-1892, +-1892, +-1893, +-1894, +-1894, +-1895, +-1895, +-1896, +-1897, +-1897, +-1898, +-1898, +-1899, +-1900, +-1900, +-1901, +-1901, +-1902, +-1902, +-1903, +-1904, +-1904, +-1905, +-1905, +-1906, +-1906, +-1907, +-1908, +-1908, +-1909, +-1909, +-1910, +-1910, +-1911, +-1912, +-1912, +-1913, +-1913, +-1914, +-1914, +-1915, +-1915, +-1916, +-1917, +-1917, +-1918, +-1918, +-1919, +-1919, +-1920, +-1920, +-1921, +-1921, +-1922, +-1923, +-1923, +-1924, +-1924, +-1925, +-1925, +-1926, +-1926, +-1927, +-1927, +-1928, +-1928, +-1929, +-1929, +-1930, +-1931, +-1931, +-1932, +-1932, +-1933, +-1933, +-1934, +-1934, +-1935, +-1935, +-1936, +-1936, +-1937, +-1937, +-1938, +-1938, +-1939, +-1939, +-1940, +-1940, +-1941, +-1941, +-1942, +-1942, +-1943, +-1943, +-1944, +-1944, +-1945, +-1945, +-1946, +-1946, +-1947, +-1947, +-1948, +-1948, +-1949, +-1949, +-1949, +-1950, +-1950, +-1951, +-1951, +-1952, +-1952, +-1953, +-1953, +-1954, +-1954, +-1955, +-1955, +-1956, +-1956, +-1957, +-1957, +-1957, +-1958, +-1958, +-1959, +-1959, +-1960, +-1960, +-1961, +-1961, +-1962, +-1962, +-1962, +-1963, +-1963, +-1964, +-1964, +-1965, +-1965, +-1966, +-1966, +-1966, +-1967, +-1967, +-1968, +-1968, +-1969, +-1969, +-1969, +-1970, +-1970, +-1971, +-1971, +-1972, +-1972, +-1972, +-1973, +-1973, +-1974, +-1974, +-1974, +-1975, +-1975, +-1976, +-1976, +-1976, +-1977, +-1977, +-1978, +-1978, +-1979, +-1979, +-1979, +-1980, +-1980, +-1980, +-1981, +-1981, +-1982, +-1982, +-1982, +-1983, +-1983, +-1984, +-1984, +-1984, +-1985, +-1985, +-1986, +-1986, +-1986, +-1987, +-1987, +-1987, +-1988, +-1988, +-1989, +-1989, +-1989, +-1990, +-1990, +-1990, +-1991, +-1991, +-1991, +-1992, +-1992, +-1993, +-1993, +-1993, +-1994, +-1994, +-1994, +-1995, +-1995, +-1995, +-1996, +-1996, +-1996, +-1997, +-1997, +-1997, +-1998, +-1998, +-1998, +-1999, +-1999, +-1999, +-2000, +-2000, +-2000, +-2001, +-2001, +-2001, +-2002, +-2002, +-2002, +-2003, +-2003, +-2003, +-2004, +-2004, +-2004, +-2005, +-2005, +-2005, +-2006, +-2006, +-2006, +-2007, +-2007, +-2007, +-2007, +-2008, +-2008, +-2008, +-2009, +-2009, +-2009, +-2010, +-2010, +-2010, +-2010, +-2011, +-2011, +-2011, +-2012, +-2012, +-2012, +-2012, +-2013, +-2013, +-2013, +-2014, +-2014, +-2014, +-2014, +-2015, +-2015, +-2015, +-2016, +-2016, +-2016, +-2016, +-2017, +-2017, +-2017, +-2017, +-2018, +-2018, +-2018, +-2018, +-2019, +-2019, +-2019, +-2019, +-2020, +-2020, +-2020, +-2021, +-2021, +-2021, +-2021, +-2021, +-2022, +-2022, +-2022, +-2022, +-2023, +-2023, +-2023, +-2023, +-2024, +-2024, +-2024, +-2024, +-2025, +-2025, +-2025, +-2025, +-2025, +-2026, +-2026, +-2026, +-2026, +-2027, +-2027, +-2027, +-2027, +-2027, +-2028, +-2028, +-2028, +-2028, +-2029, +-2029, +-2029, +-2029, +-2029, +-2030, +-2030, +-2030, +-2030, +-2030, +-2031, +-2031, +-2031, +-2031, +-2031, +-2031, +-2032, +-2032, +-2032, +-2032, +-2032, +-2033, +-2033, +-2033, +-2033, +-2033, +-2034, +-2034, +-2034, +-2034, +-2034, +-2034, +-2035, +-2035, +-2035, +-2035, +-2035, +-2035, +-2036, +-2036, +-2036, +-2036, +-2036, +-2036, +-2036, +-2037, +-2037, +-2037, +-2037, +-2037, +-2037, +-2038, +-2038, +-2038, +-2038, +-2038, +-2038, +-2038, +-2039, +-2039, +-2039, +-2039, +-2039, +-2039, +-2039, +-2039, +-2040, +-2040, +-2040, +-2040, +-2040, +-2040, +-2040, +-2040, +-2041, +-2041, +-2041, +-2041, +-2041, +-2041, +-2041, +-2041, +-2042, +-2042, +-2042, +-2042, +-2042, +-2042, +-2042, +-2042, +-2042, +-2042, +-2043, +-2043, +-2043, +-2043, +-2043, +-2043, +-2043, +-2043, +-2043, +-2043, +-2043, +-2044, +-2044, +-2044, +-2044, +-2044, +-2044, +-2044, +-2044, +-2044, +-2044, +-2044, +-2044, +-2044, +-2045, +-2045, +-2045, +-2045, +-2045, +-2045, +-2045, +-2045, +-2045, +-2045, +-2045, +-2045, +-2045, +-2045, +-2045, +-2045, +-2045, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2047, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2046, +-2045, +-2045, +-2045, +-2045, +-2045, +-2045, +-2045, +-2045, +-2045, +-2045, +-2045, +-2045, +-2045, +-2045, +-2045, +-2045, +-2045, +-2044, +-2044, +-2044, +-2044, +-2044, +-2044, +-2044, +-2044, +-2044, +-2044, +-2044, +-2044, +-2044, +-2043, +-2043, +-2043, +-2043, +-2043, +-2043, +-2043, +-2043, +-2043, +-2043, +-2043, +-2042, +-2042, +-2042, +-2042, +-2042, +-2042, +-2042, +-2042, +-2042, +-2042, +-2041, +-2041, +-2041, +-2041, +-2041, +-2041, +-2041, +-2041, +-2040, +-2040, +-2040, +-2040, +-2040, +-2040, +-2040, +-2040, +-2039, +-2039, +-2039, +-2039, +-2039, +-2039, +-2039, +-2039, +-2038, +-2038, +-2038, +-2038, +-2038, +-2038, +-2038, +-2037, +-2037, +-2037, +-2037, +-2037, +-2037, +-2036, +-2036, +-2036, +-2036, +-2036, +-2036, +-2036, +-2035, +-2035, +-2035, +-2035, +-2035, +-2035, +-2034, +-2034, +-2034, +-2034, +-2034, +-2034, +-2033, +-2033, +-2033, +-2033, +-2033, +-2032, +-2032, +-2032, +-2032, +-2032, +-2031, +-2031, +-2031, +-2031, +-2031, +-2031, +-2030, +-2030, +-2030, +-2030, +-2030, +-2029, +-2029, +-2029, +-2029, +-2029, +-2028, +-2028, +-2028, +-2028, +-2027, +-2027, +-2027, +-2027, +-2027, +-2026, +-2026, +-2026, +-2026, +-2025, +-2025, +-2025, +-2025, +-2025, +-2024, +-2024, +-2024, +-2024, +-2023, +-2023, +-2023, +-2023, +-2022, +-2022, +-2022, +-2022, +-2021, +-2021, +-2021, +-2021, +-2021, +-2020, +-2020, +-2020, +-2019, +-2019, +-2019, +-2019, +-2018, +-2018, +-2018, +-2018, +-2017, +-2017, +-2017, +-2017, +-2016, +-2016, +-2016, +-2016, +-2015, +-2015, +-2015, +-2014, +-2014, +-2014, +-2014, +-2013, +-2013, +-2013, +-2012, +-2012, +-2012, +-2012, +-2011, +-2011, +-2011, +-2010, +-2010, +-2010, +-2010, +-2009, +-2009, +-2009, +-2008, +-2008, +-2008, +-2007, +-2007, +-2007, +-2007, +-2006, +-2006, +-2006, +-2005, +-2005, +-2005, +-2004, +-2004, +-2004, +-2003, +-2003, +-2003, +-2002, +-2002, +-2002, +-2001, +-2001, +-2001, +-2000, +-2000, +-2000, +-1999, +-1999, +-1999, +-1998, +-1998, +-1998, +-1997, +-1997, +-1997, +-1996, +-1996, +-1996, +-1995, +-1995, +-1995, +-1994, +-1994, +-1994, +-1993, +-1993, +-1993, +-1992, +-1992, +-1991, +-1991, +-1991, +-1990, +-1990, +-1990, +-1989, +-1989, +-1989, +-1988, +-1988, +-1987, +-1987, +-1987, +-1986, +-1986, +-1986, +-1985, +-1985, +-1984, +-1984, +-1984, +-1983, +-1983, +-1982, +-1982, +-1982, +-1981, +-1981, +-1980, +-1980, +-1980, +-1979, +-1979, +-1979, +-1978, +-1978, +-1977, +-1977, +-1976, +-1976, +-1976, +-1975, +-1975, +-1974, +-1974, +-1974, +-1973, +-1973, +-1972, +-1972, +-1972, +-1971, +-1971, +-1970, +-1970, +-1969, +-1969, +-1969, +-1968, +-1968, +-1967, +-1967, +-1966, +-1966, +-1966, +-1965, +-1965, +-1964, +-1964, +-1963, +-1963, +-1962, +-1962, +-1962, +-1961, +-1961, +-1960, +-1960, +-1959, +-1959, +-1958, +-1958, +-1957, +-1957, +-1957, +-1956, +-1956, +-1955, +-1955, +-1954, +-1954, +-1953, +-1953, +-1952, +-1952, +-1951, +-1951, +-1950, +-1950, +-1949, +-1949, +-1949, +-1948, +-1948, +-1947, +-1947, +-1946, +-1946, +-1945, +-1945, +-1944, +-1944, +-1943, +-1943, +-1942, +-1942, +-1941, +-1941, +-1940, +-1940, +-1939, +-1939, +-1938, +-1938, +-1937, +-1937, +-1936, +-1936, +-1935, +-1935, +-1934, +-1934, +-1933, +-1933, +-1932, +-1932, +-1931, +-1931, +-1930, +-1929, +-1929, +-1928, +-1928, +-1927, +-1927, +-1926, +-1926, +-1925, +-1925, +-1924, +-1924, +-1923, +-1923, +-1922, +-1921, +-1921, +-1920, +-1920, +-1919, +-1919, +-1918, +-1918, +-1917, +-1917, +-1916, +-1915, +-1915, +-1914, +-1914, +-1913, +-1913, +-1912, +-1912, +-1911, +-1910, +-1910, +-1909, +-1909, +-1908, +-1908, +-1907, +-1906, +-1906, +-1905, +-1905, +-1904, +-1904, +-1903, +-1902, +-1902, +-1901, +-1901, +-1900, +-1900, +-1899, +-1898, +-1898, +-1897, +-1897, +-1896, +-1895, +-1895, +-1894, +-1894, +-1893, +-1892, +-1892, +-1891, +-1891, +-1890, +-1889, +-1889, +-1888, +-1888, +-1887, +-1886, +-1886, +-1885, +-1885, +-1884, +-1883, +-1883, +-1882, +-1882, +-1881, +-1880, +-1880, +-1879, +-1878, +-1878, +-1877, +-1877, +-1876, +-1875, +-1875, +-1874, +-1873, +-1873, +-1872, +-1872, +-1871, +-1870, +-1870, +-1869, +-1868, +-1868, +-1867, +-1866, +-1866, +-1865, +-1864, +-1864, +-1863, +-1863, +-1862, +-1861, +-1861, +-1860, +-1859, +-1859, +-1858, +-1857, +-1857, +-1856, +-1855, +-1855, +-1854, +-1853, +-1853, +-1852, +-1851, +-1851, +-1850, +-1849, +-1849, +-1848, +-1847, +-1847, +-1846, +-1845, +-1845, +-1844, +-1843, +-1843, +-1842, +-1841, +-1840, +-1840, +-1839, +-1838, +-1838, +-1837, +-1836, +-1836, +-1835, +-1834, +-1834, +-1833, +-1832, +-1831, +-1831, +-1830, +-1829, +-1829, +-1828, +-1827, +-1827, +-1826, +-1825, +-1824, +-1824, +-1823, +-1822, +-1822, +-1821, +-1820, +-1819, +-1819, +-1818, +-1817, +-1816, +-1816, +-1815, +-1814, +-1814, +-1813, +-1812, +-1811, +-1811, +-1810, +-1809, +-1808, +-1808, +-1807, +-1806, +-1806, +-1805, +-1804, +-1803, +-1803, +-1802, +-1801, +-1800, +-1800, +-1799, +-1798, +-1797, +-1797, +-1796, +-1795, +-1794, +-1794, +-1793, +-1792, +-1791, +-1791, +-1790, +-1789, +-1788, +-1787, +-1787, +-1786, +-1785, +-1784, +-1784, +-1783, +-1782, +-1781, +-1781, +-1780, +-1779, +-1778, +-1777, +-1777, +-1776, +-1775, +-1774, +-1774, +-1773, +-1772, +-1771, +-1770, +-1770, +-1769, +-1768, +-1767, +-1766, +-1766, +-1765, +-1764, +-1763, +-1762, +-1762, +-1761, +-1760, +-1759, +-1758, +-1758, +-1757, +-1756, +-1755, +-1754, +-1754, +-1753, +-1752, +-1751, +-1750, +-1750, +-1749, +-1748, +-1747, +-1746, +-1746, +-1745, +-1744, +-1743, +-1742, +-1741, +-1741, +-1740, +-1739, +-1738, +-1737, +-1736, +-1736, +-1735, +-1734, +-1733, +-1732, +-1731, +-1731, +-1730, +-1729, +-1728, +-1727, +-1726, +-1726, +-1725, +-1724, +-1723, +-1722, +-1721, +-1720, +-1720, +-1719, +-1718, +-1717, +-1716, +-1715, +-1714, +-1714, +-1713, +-1712, +-1711, +-1710, +-1709, +-1708, +-1708, +-1707, +-1706, +-1705, +-1704, +-1703, +-1702, +-1702, +-1701, +-1700, +-1699, +-1698, +-1697, +-1696, +-1695, +-1695, +-1694, +-1693, +-1692, +-1691, +-1690, +-1689, +-1688, +-1687, +-1687, +-1686, +-1685, +-1684, +-1683, +-1682, +-1681, +-1680, +-1679, +-1679, +-1678, +-1677, +-1676, +-1675, +-1674, +-1673, +-1672, +-1671, +-1670, +-1669, +-1669, +-1668, +-1667, +-1666, +-1665, +-1664, +-1663, +-1662, +-1661, +-1660, +-1659, +-1659, +-1658, +-1657, +-1656, +-1655, +-1654, +-1653, +-1652, +-1651, +-1650, +-1649, +-1648, +-1647, +-1646, +-1646, +-1645, +-1644, +-1643, +-1642, +-1641, +-1640, +-1639, +-1638, +-1637, +-1636, +-1635, +-1634, +-1633, +-1632, +-1631, +-1630, +-1630, +-1629, +-1628, +-1627, +-1626, +-1625, +-1624, +-1623, +-1622, +-1621, +-1620, +-1619, +-1618, +-1617, +-1616, +-1615, +-1614, +-1613, +-1612, +-1611, +-1610, +-1609, +-1608, +-1607, +-1606, +-1605, +-1605, +-1604, +-1603, +-1602, +-1601, +-1600, +-1599, +-1598, +-1597, +-1596, +-1595, +-1594, +-1593, +-1592, +-1591, +-1590, +-1589, +-1588, +-1587, +-1586, +-1585, +-1584, +-1583, +-1582, +-1581, +-1580, +-1579, +-1578, +-1577, +-1576, +-1575, +-1574, +-1573, +-1572, +-1571, +-1570, +-1569, +-1568, +-1567, +-1566, +-1565, +-1564, +-1563, +-1562, +-1561, +-1560, +-1559, +-1558, +-1557, +-1556, +-1555, +-1554, +-1553, +-1552, +-1551, +-1550, +-1548, +-1547, +-1546, +-1545, +-1544, +-1543, +-1542, +-1541, +-1540, +-1539, +-1538, +-1537, +-1536, +-1535, +-1534, +-1533, +-1532, +-1531, +-1530, +-1529, +-1528, +-1527, +-1526, +-1525, +-1524, +-1523, +-1521, +-1520, +-1519, +-1518, +-1517, +-1516, +-1515, +-1514, +-1513, +-1512, +-1511, +-1510, +-1509, +-1508, +-1507, +-1506, +-1505, +-1504, +-1502, +-1501, +-1500, +-1499, +-1498, +-1497, +-1496, +-1495, +-1494, +-1493, +-1492, +-1491, +-1490, +-1489, +-1487, +-1486, +-1485, +-1484, +-1483, +-1482, +-1481, +-1480, +-1479, +-1478, +-1477, +-1476, +-1474, +-1473, +-1472, +-1471, +-1470, +-1469, +-1468, +-1467, +-1466, +-1465, +-1464, +-1462, +-1461, +-1460, +-1459, +-1458, +-1457, +-1456, +-1455, +-1454, +-1452, +-1451, +-1450, +-1449, +-1448, +-1447, +-1446, +-1445, +-1444, +-1443, +-1441, +-1440, +-1439, +-1438, +-1437, +-1436, +-1435, +-1434, +-1432, +-1431, +-1430, +-1429, +-1428, +-1427, +-1426, +-1425, +-1423, +-1422, +-1421, +-1420, +-1419, +-1418, +-1417, +-1416, +-1414, +-1413, +-1412, +-1411, +-1410, +-1409, +-1408, +-1406, +-1405, +-1404, +-1403, +-1402, +-1401, +-1400, +-1398, +-1397, +-1396, +-1395, +-1394, +-1393, +-1392, +-1390, +-1389, +-1388, +-1387, +-1386, +-1385, +-1383, +-1382, +-1381, +-1380, +-1379, +-1378, +-1377, +-1375, +-1374, +-1373, +-1372, +-1371, +-1370, +-1368, +-1367, +-1366, +-1365, +-1364, +-1363, +-1361, +-1360, +-1359, +-1358, +-1357, +-1355, +-1354, +-1353, +-1352, +-1351, +-1350, +-1348, +-1347, +-1346, +-1345, +-1344, +-1342, +-1341, +-1340, +-1339, +-1338, +-1337, +-1335, +-1334, +-1333, +-1332, +-1331, +-1329, +-1328, +-1327, +-1326, +-1325, +-1323, +-1322, +-1321, +-1320, +-1319, +-1317, +-1316, +-1315, +-1314, +-1313, +-1311, +-1310, +-1309, +-1308, +-1307, +-1305, +-1304, +-1303, +-1302, +-1301, +-1299, +-1298, +-1297, +-1296, +-1294, +-1293, +-1292, +-1291, +-1290, +-1288, +-1287, +-1286, +-1285, +-1283, +-1282, +-1281, +-1280, +-1279, +-1277, +-1276, +-1275, +-1274, +-1272, +-1271, +-1270, +-1269, +-1268, +-1266, +-1265, +-1264, +-1263, +-1261, +-1260, +-1259, +-1258, +-1256, +-1255, +-1254, +-1253, +-1251, +-1250, +-1249, +-1248, +-1246, +-1245, +-1244, +-1243, +-1241, +-1240, +-1239, +-1238, +-1236, +-1235, +-1234, +-1233, +-1231, +-1230, +-1229, +-1228, +-1226, +-1225, +-1224, +-1223, +-1221, +-1220, +-1219, +-1218, +-1216, +-1215, +-1214, +-1213, +-1211, +-1210, +-1209, +-1208, +-1206, +-1205, +-1204, +-1202, +-1201, +-1200, +-1199, +-1197, +-1196, +-1195, +-1194, +-1192, +-1191, +-1190, +-1188, +-1187, +-1186, +-1185, +-1183, +-1182, +-1181, +-1179, +-1178, +-1177, +-1176, +-1174, +-1173, +-1172, +-1170, +-1169, +-1168, +-1167, +-1165, +-1164, +-1163, +-1161, +-1160, +-1159, +-1158, +-1156, +-1155, +-1154, +-1152, +-1151, +-1150, +-1148, +-1147, +-1146, +-1145, +-1143, +-1142, +-1141, +-1139, +-1138, +-1137, +-1135, +-1134, +-1133, +-1132, +-1130, +-1129, +-1128, +-1126, +-1125, +-1124, +-1122, +-1121, +-1120, +-1118, +-1117, +-1116, +-1114, +-1113, +-1112, +-1111, +-1109, +-1108, +-1107, +-1105, +-1104, +-1103, +-1101, +-1100, +-1099, +-1097, +-1096, +-1095, +-1093, +-1092, +-1091, +-1089, +-1088, +-1087, +-1085, +-1084, +-1083, +-1081, +-1080, +-1079, +-1077, +-1076, +-1075, +-1073, +-1072, +-1071, +-1069, +-1068, +-1067, +-1065, +-1064, +-1063, +-1061, +-1060, +-1059, +-1057, +-1056, +-1055, +-1053, +-1052, +-1051, +-1049, +-1048, +-1046, +-1045, +-1044, +-1042, +-1041, +-1040, +-1038, +-1037, +-1036, +-1034, +-1033, +-1032, +-1030, +-1029, +-1028, +-1026, +-1025, +-1023, +-1022, +-1021, +-1019, +-1018, +-1017, +-1015, +-1014, +-1013, +-1011, +-1010, +-1008, +-1007, +-1006, +-1004, +-1003, +-1002, +-1000, +-999, +-998, +-996, +-995, +-993, +-992, +-991, +-989, +-988, +-987, +-985, +-984, +-982, +-981, +-980, +-978, +-977, +-976, +-974, +-973, +-971, +-970, +-969, +-967, +-966, +-964, +-963, +-962, +-960, +-959, +-958, +-956, +-955, +-953, +-952, +-951, +-949, +-948, +-946, +-945, +-944, +-942, +-941, +-939, +-938, +-937, +-935, +-934, +-932, +-931, +-930, +-928, +-927, +-925, +-924, +-923, +-921, +-920, +-918, +-917, +-916, +-914, +-913, +-911, +-910, +-909, +-907, +-906, +-904, +-903, +-902, +-900, +-899, +-897, +-896, +-895, +-893, +-892, +-890, +-889, +-887, +-886, +-885, +-883, +-882, +-880, +-879, +-878, +-876, +-875, +-873, +-872, +-870, +-869, +-868, +-866, +-865, +-863, +-862, +-860, +-859, +-858, +-856, +-855, +-853, +-852, +-851, +-849, +-848, +-846, +-845, +-843, +-842, +-840, +-839, +-838, +-836, +-835, +-833, +-832, +-830, +-829, +-828, +-826, +-825, +-823, +-822, +-820, +-819, +-818, +-816, +-815, +-813, +-812, +-810, +-809, +-807, +-806, +-805, +-803, +-802, +-800, +-799, +-797, +-796, +-794, +-793, +-792, +-790, +-789, +-787, +-786, +-784, +-783, +-781, +-780, +-778, +-777, +-776, +-774, +-773, +-771, +-770, +-768, +-767, +-765, +-764, +-763, +-761, +-760, +-758, +-757, +-755, +-754, +-752, +-751, +-749, +-748, +-746, +-745, +-744, +-742, +-741, +-739, +-738, +-736, +-735, +-733, +-732, +-730, +-729, +-727, +-726, +-724, +-723, +-722, +-720, +-719, +-717, +-716, +-714, +-713, +-711, +-710, +-708, +-707, +-705, +-704, +-702, +-701, +-699, +-698, +-696, +-695, +-694, +-692, +-691, +-689, +-688, +-686, +-685, +-683, +-682, +-680, +-679, +-677, +-676, +-674, +-673, +-671, +-670, +-668, +-667, +-665, +-664, +-662, +-661, +-659, +-658, +-656, +-655, +-654, +-652, +-651, +-649, +-648, +-646, +-645, +-643, +-642, +-640, +-639, +-637, +-636, +-634, +-633, +-631, +-630, +-628, +-627, +-625, +-624, +-622, +-621, +-619, +-618, +-616, +-615, +-613, +-612, +-610, +-609, +-607, +-606, +-604, +-603, +-601, +-600, +-598, +-597, +-595, +-594, +-592, +-591, +-589, +-588, +-586, +-585, +-583, +-582, +-580, +-579, +-577, +-576, +-574, +-573, +-571, +-570, +-568, +-567, +-565, +-564, +-562, +-561, +-559, +-558, +-556, +-555, +-553, +-552, +-550, +-548, +-547, +-545, +-544, +-542, +-541, +-539, +-538, +-536, +-535, +-533, +-532, +-530, +-529, +-527, +-526, +-524, +-523, +-521, +-520, +-518, +-517, +-515, +-514, +-512, +-511, +-509, +-508, +-506, +-504, +-503, +-501, +-500, +-498, +-497, +-495, +-494, +-492, +-491, +-489, +-488, +-486, +-485, +-483, +-482, +-480, +-479, +-477, +-476, +-474, +-472, +-471, +-469, +-468, +-466, +-465, +-463, +-462, +-460, +-459, +-457, +-456, +-454, +-453, +-451, +-450, +-448, +-446, +-445, +-443, +-442, +-440, +-439, +-437, +-436, +-434, +-433, +-431, +-430, +-428, +-427, +-425, +-423, +-422, +-420, +-419, +-417, +-416, +-414, +-413, +-411, +-410, +-408, +-407, +-405, +-403, +-402, +-400, +-399, +-397, +-396, +-394, +-393, +-391, +-390, +-388, +-387, +-385, +-383, +-382, +-380, +-379, +-377, +-376, +-374, +-373, +-371, +-370, +-368, +-366, +-365, +-363, +-362, +-360, +-359, +-357, +-356, +-354, +-353, +-351, +-349, +-348, +-346, +-345, +-343, +-342, +-340, +-339, +-337, +-336, +-334, +-332, +-331, +-329, +-328, +-326, +-325, +-323, +-322, +-320, +-318, +-317, +-315, +-314, +-312, +-311, +-309, +-308, +-306, +-305, +-303, +-301, +-300, +-298, +-297, +-295, +-294, +-292, +-291, +-289, +-287, +-286, +-284, +-283, +-281, +-280, +-278, +-277, +-275, +-273, +-272, +-270, +-269, +-267, +-266, +-264, +-263, +-261, +-259, +-258, +-256, +-255, +-253, +-252, +-250, +-249, +-247, +-245, +-244, +-242, +-241, +-239, +-238, +-236, +-234, +-233, +-231, +-230, +-228, +-227, +-225, +-224, +-222, +-220, +-219, +-217, +-216, +-214, +-213, +-211, +-210, +-208, +-206, +-205, +-203, +-202, +-200, +-199, +-197, +-195, +-194, +-192, +-191, +-189, +-188, +-186, +-185, +-183, +-181, +-180, +-178, +-177, +-175, +-174, +-172, +-170, +-169, +-167, +-166, +-164, +-163, +-161, +-159, +-158, +-156, +-155, +-153, +-152, +-150, +-149, +-147, +-145, +-144, +-142, +-141, +-139, +-138, +-136, +-134, +-133, +-131, +-130, +-128, +-127, +-125, +-123, +-122, +-120, +-119, +-117, +-116, +-114, +-112, +-111, +-109, +-108, +-106, +-105, +-103, +-102, +-100, +-98, +-97, +-95, +-94, +-92, +-91, +-89, +-87, +-86, +-84, +-83, +-81, +-80, +-78, +-76, +-75, +-73, +-72, +-70, +-69, +-67, +-65, +-64, +-62, +-61, +-59, +-58, +-56, +-54, +-53, +-51, +-50, +-48, +-47, +-45, +-43, +-42, +-40, +-39, +-37, +-36, +-34, +-32, +-31, +-29, +-28, +-26, +-25, +-23, +-21, +-20, +-18, +-17, +-15, +-14, +-12, +-10, +-9, +-7, +-6, +-4, +-3, +-1, +0, +1, +3, +4, +6, +7, +9, +10, +12, +14, +15, +17, +18, +20, +21, +23, +25, +26, +28, +29, +31, +32, +34, +36, +37, +39, +40, +42, +43, +45, +47, +48, +50, +51, +53, +54, +56, +58, +59, +61, +62, +64, +65, +67, +69, +70, +72, +73, +75, +76, +78, +80, +81, +83, +84, +86, +87, +89, +91, +92, +94, +95, +97, +98, +100, +102, +103, +105, +106, +108, +109, +111, +112, +114, +116, +117, +119, +120, +122, +123, +125, +127, +128, +130, +131, +133, +134, +136, +138, +139, +141, +142, +144, +145, +147, +149, +150, +152, +153, +155, +156, +158, +159, +161, +163, +164, +166, +167, +169, +170, +172, +174, +175, +177, +178, +180, +181, +183, +185, +186, +188, +189, +191, +192, +194, +195, +197, +199, +200, +202, +203, +205, +206, +208, +210, +211, +213, +214, +216, +217, +219, +220, +222, +224, +225, +227, +228, +230, +231, +233, +234, +236, +238, +239, +241, +242, +244, +245, +247, +249, +250, +252, +253, +255, +256, +258, +259, +261, +263, +264, +266, +267, +269, +270, +272, +273, +275, +277, +278, +280, +281, +283, +284, +286, +287, +289, +291, +292, +294, +295, +297, +298, +300, +301, +303, +305, +306, +308, +309, +311, +312, +314, +315, +317, +318, +320, +322, +323, +325, +326, +328, +329, +331, +332, +334, +336, +337, +339, +340, +342, +343, +345, +346, +348, +349, +351, +353, +354, +356, +357, +359, +360, +362, +363, +365, +366, +368, +370, +371, +373, +374, +376, +377, +379, +380, +382, +383, +385, +387, +388, +390, +391, +393, +394, +396, +397, +399, +400, +402, +403, +405, +407, +408, +410, +411, +413, +414, +416, +417, +419, +420, +422, +423, +425, +427, +428, +430, +431, +433, +434, +436, +437, +439, +440, +442, +443, +445, +446, +448, +450, +451, +453, +454, +456, +457, +459, +460, +462, +463, +465, +466, +468, +469, +471, +472, +474, +476, +477, +479, +480, +482, +483, +485, +486, +488, +489, +491, +492, +494, +495, +497, +498, +500, +501, +503, +504, +506, +508, +509, +511, +512, +514, +515, +517, +518, +520, +521, +523, +524, +526, +527, +529, +530, +532, +533, +535, +536, +538, +539, +541, +542, +544, +545, +547, +548, +550, +552, +553, +555, +556, +558, +559, +561, +562, +564, +565, +567, +568, +570, +571, +573, +574, +576, +577, +579, +580, +582, +583, +585, +586, +588, +589, +591, +592, +594, +595, +597, +598, +600, +601, +603, +604, +606, +607, +609, +610, +612, +613, +615, +616, +618, +619, +621, +622, +624, +625, +627, +628, +630, +631, +633, +634, +636, +637, +639, +640, +642, +643, +645, +646, +648, +649, +651, +652, +654, +655, +656, +658, +659, +661, +662, +664, +665, +667, +668, +670, +671, +673, +674, +676, +677, +679, +680, +682, +683, +685, +686, +688, +689, +691, +692, +694, +695, +696, +698, +699, +701, +702, +704, +705, +707, +708, +710, +711, +713, +714, +716, +717, +719, +720, +722, +723, +724, +726, +727, +729, +730, +732, +733, +735, +736, +738, +739, +741, +742, +744, +745, +746, +748, +749, +751, +752, +754, +755, +757, +758, +760, +761, +763, +764, +765, +767, +768, +770, +771, +773, +774, +776, +777, +778, +780, +781, +783, +784, +786, +787, +789, +790, +792, +793, +794, +796, +797, +799, +800, +802, +803, +805, +806, +807, +809, +810, +812, +813, +815, +816, +818, +819, +820, +822, +823, +825, +826, +828, +829, +830, +832, +833, +835, +836, +838, +839, +840, +842, +843, +845, +846, +848, +849, +851, +852, +853, +855, +856, +858, +859, +860, +862, +863, +865, +866, +868, +869, +870, +872, +873, +875, +876, +878, +879, +880, +882, +883, +885, +886, +887, +889, +890, +892, +893, +895, +896, +897, +899, +900, +902, +903, +904, +906, +907, +909, +910, +911, +913, +914, +916, +917, +918, +920, +921, +923, +924, +925, +927, +928, +930, +931, +932, +934, +935, +937, +938, +939, +941, +942, +944, +945, +946, +948, +949, +951, +952, +953, +955, +956, +958, +959, +960, +962, +963, +964, +966, +967, +969, +970, +971, +973, +974, +976, +977, +978, +980, +981, +982, +984, +985, +987, +988, +989, +991, +992, +993, +995, +996, +998, +999, +1000, +1002, +1003, +1004, +1006, +1007, +1008, +1010, +1011, +1013, +1014, +1015, +1017, +1018, +1019, +1021, +1022, +1023, +1025, +1026, +1028, +1029, +1030, +1032, +1033, +1034, +1036, +1037, +1038, +1040, +1041, +1042, +1044, +1045, +1046, +1048, +1049, +1051, +1052, +1053, +1055, +1056, +1057, +1059, +1060, +1061, +1063, +1064, +1065, +1067, +1068, +1069, +1071, +1072, +1073, +1075, +1076, +1077, +1079, +1080, +1081, +1083, +1084, +1085, +1087, +1088, +1089, +1091, +1092, +1093, +1095, +1096, +1097, +1099, +1100, +1101, +1103, +1104, +1105, +1107, +1108, +1109, +1111, +1112, +1113, +1114, +1116, +1117, +1118, +1120, +1121, +1122, +1124, +1125, +1126, +1128, +1129, +1130, +1132, +1133, +1134, +1135, +1137, +1138, +1139, +1141, +1142, +1143, +1145, +1146, +1147, +1148, +1150, +1151, +1152, +1154, +1155, +1156, +1158, +1159, +1160, +1161, +1163, +1164, +1165, +1167, +1168, +1169, +1170, +1172, +1173, +1174, +1176, +1177, +1178, +1179, +1181, +1182, +1183, +1185, +1186, +1187, +1188, +1190, +1191, +1192, +1194, +1195, +1196, +1197, +1199, +1200, +1201, +1202, +1204, +1205, +1206, +1208, +1209, +1210, +1211, +1213, +1214, +1215, +1216, +1218, +1219, +1220, +1221, +1223, +1224, +1225, +1226, +1228, +1229, +1230, +1231, +1233, +1234, +1235, +1236, +1238, +1239, +1240, +1241, +1243, +1244, +1245, +1246, +1248, +1249, +1250, +1251, +1253, +1254, +1255, +1256, +1258, +1259, +1260, +1261, +1263, +1264, +1265, +1266, +1268, +1269, +1270, +1271, +1272, +1274, +1275, +1276, +1277, +1279, +1280, +1281, +1282, +1283, +1285, +1286, +1287, +1288, +1290, +1291, +1292, +1293, +1294, +1296, +1297, +1298, +1299, +1301, +1302, +1303, +1304, +1305, +1307, +1308, +1309, +1310, +1311, +1313, +1314, +1315, +1316, +1317, +1319, +1320, +1321, +1322, +1323, +1325, +1326, +1327, +1328, +1329, +1331, +1332, +1333, +1334, +1335, +1337, +1338, +1339, +1340, +1341, +1342, +1344, +1345, +1346, +1347, +1348, +1350, +1351, +1352, +1353, +1354, +1355, +1357, +1358, +1359, +1360, +1361, +1363, +1364, +1365, +1366, +1367, +1368, +1370, +1371, +1372, +1373, +1374, +1375, +1377, +1378, +1379, +1380, +1381, +1382, +1383, +1385, +1386, +1387, +1388, +1389, +1390, +1392, +1393, +1394, +1395, +1396, +1397, +1398, +1400, +1401, +1402, +1403, +1404, +1405, +1406, +1408, +1409, +1410, +1411, +1412, +1413, +1414, +1416, +1417, +1418, +1419, +1420, +1421, +1422, +1423, +1425, +1426, +1427, +1428, +1429, +1430, +1431, +1432, +1434, +1435, +1436, +1437, +1438, +1439, +1440, +1441, +1443, +1444, +1445, +1446, +1447, +1448, +1449, +1450, +1451, +1452, +1454, +1455, +1456, +1457, +1458, +1459, +1460, +1461, +1462, +1464, +1465, +1466, +1467, +1468, +1469, +1470, +1471, +1472, +1473, +1474, +1476, +1477, +1478, +1479, +1480, +1481, +1482, +1483, +1484, +1485, +1486, +1487, +1489, +1490, +1491, +1492, +1493, +1494, +1495, +1496, +1497, +1498, +1499, +1500, +1501, +1502, +1504, +1505, +1506, +1507, +1508, +1509, +1510, +1511, +1512, +1513, +1514, +1515, +1516, +1517, +1518, +1519, +1520, +1521, +1523, +1524, +1525, +1526, +1527, +1528, +1529, +1530, +1531, +1532, +1533, +1534, +1535, +1536, +1537, +1538, +1539, +1540, +1541, +1542, +1543, +1544, +1545, +1546, +1547, +1548, +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, +1577, +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, +1605, +1606, +1607, +1608, +1609, +1610, +1611, +1612, +1613, +1614, +1615, +1616, +1617, +1618, +1619, +1620, +1621, +1622, +1623, +1624, +1625, +1626, +1627, +1628, +1629, +1630, +1630, +1631, +1632, +1633, +1634, +1635, +1636, +1637, +1638, +1639, +1640, +1641, +1642, +1643, +1644, +1645, +1646, +1646, +1647, +1648, +1649, +1650, +1651, +1652, +1653, +1654, +1655, +1656, +1657, +1658, +1659, +1659, +1660, +1661, +1662, +1663, +1664, +1665, +1666, +1667, +1668, +1669, +1669, +1670, +1671, +1672, +1673, +1674, +1675, +1676, +1677, +1678, +1679, +1679, +1680, +1681, +1682, +1683, +1684, +1685, +1686, +1687, +1687, +1688, +1689, +1690, +1691, +1692, +1693, +1694, +1695, +1695, +1696, +1697, +1698, +1699, +1700, +1701, +1702, +1702, +1703, +1704, +1705, +1706, +1707, +1708, +1708, +1709, +1710, +1711, +1712, +1713, +1714, +1714, +1715, +1716, +1717, +1718, +1719, +1720, +1720, +1721, +1722, +1723, +1724, +1725, +1726, +1726, +1727, +1728, +1729, +1730, +1731, +1731, +1732, +1733, +1734, +1735, +1736, +1736, +1737, +1738, +1739, +1740, +1741, +1741, +1742, +1743, +1744, +1745, +1746, +1746, +1747, +1748, +1749, +1750, +1750, +1751, +1752, +1753, +1754, +1754, +1755, +1756, +1757, +1758, +1758, +1759, +1760, +1761, +1762, +1762, +1763, +1764, +1765, +1766, +1766, +1767, +1768, +1769, +1770, +1770, +1771, +1772, +1773, +1774, +1774, +1775, +1776, +1777, +1777, +1778, +1779, +1780, +1781, +1781, +1782, +1783, +1784, +1784, +1785, +1786, +1787, +1787, +1788, +1789, +1790, +1791, +1791, +1792, +1793, +1794, +1794, +1795, +1796, +1797, +1797, +1798, +1799, +1800, +1800, +1801, +1802, +1803, +1803, +1804, +1805, +1806, +1806, +1807, +1808, +1808, +1809, +1810, +1811, +1811, +1812, +1813, +1814, +1814, +1815, +1816, +1816, +1817, +1818, +1819, +1819, +1820, +1821, +1822, +1822, +1823, +1824, +1824, +1825, +1826, +1827, +1827, +1828, +1829, +1829, +1830, +1831, +1831, +1832, +1833, +1834, +1834, +1835, +1836, +1836, +1837, +1838, +1838, +1839, +1840, +1840, +1841, +1842, +1843, +1843, +1844, +1845, +1845, +1846, +1847, +1847, +1848, +1849, +1849, +1850, +1851, +1851, +1852, +1853, +1853, +1854, +1855, +1855, +1856, +1857, +1857, +1858, +1859, +1859, +1860, +1861, +1861, +1862, +1863, +1863, +1864, +1864, +1865, +1866, +1866, +1867, +1868, +1868, +1869, +1870, +1870, +1871, +1872, +1872, +1873, +1873, +1874, +1875, +1875, +1876, +1877, +1877, +1878, +1878, +1879, +1880, +1880, +1881, +1882, +1882, +1883, +1883, +1884, +1885, +1885, +1886, +1886, +1887, +1888, +1888, +1889, +1889, +1890, +1891, +1891, +1892, +1892, +1893, +1894, +1894, +1895, +1895, +1896, +1897, +1897, +1898, +1898, +1899, +1900, +1900, +1901, +1901, +1902, +1902, +1903, +1904, +1904, +1905, +1905, +1906, +1906, +1907, +1908, +1908, +1909, +1909, +1910, +1910, +1911, +1912, +1912, +1913, +1913, +1914, +1914, +1915, +1915, +1916, +1917, +1917, +1918, +1918, +1919, +1919, +1920, +1920, +1921, +1921, +1922, +1923, +1923, +1924, +1924, +1925, +1925, +1926, +1926, +1927, +1927, +1928, +1928, +1929, +1929, +1930, +1931, +1931, +1932, +1932, +1933, +1933, +1934, +1934, +1935, +1935, +1936, +1936, +1937, +1937, +1938, +1938, +1939, +1939, +1940, +1940, +1941, +1941, +1942, +1942, +1943, +1943, +1944, +1944, +1945, +1945, +1946, +1946, +1947, +1947, +1948, +1948, +1949, +1949, +1949, +1950, +1950, +1951, +1951, +1952, +1952, +1953, +1953, +1954, +1954, +1955, +1955, +1956, +1956, +1957, +1957, +1957, +1958, +1958, +1959, +1959, +1960, +1960, +1961, +1961, +1962, +1962, +1962, +1963, +1963, +1964, +1964, +1965, +1965, +1966, +1966, +1966, +1967, +1967, +1968, +1968, +1969, +1969, +1969, +1970, +1970, +1971, +1971, +1972, +1972, +1972, +1973, +1973, +1974, +1974, +1974, +1975, +1975, +1976, +1976, +1976, +1977, +1977, +1978, +1978, +1979, +1979, +1979, +1980, +1980, +1980, +1981, +1981, +1982, +1982, +1982, +1983, +1983, +1984, +1984, +1984, +1985, +1985, +1986, +1986, +1986, +1987, +1987, +1987, +1988, +1988, +1989, +1989, +1989, +1990, +1990, +1990, +1991, +1991, +1991, +1992, +1992, +1993, +1993, +1993, +1994, +1994, +1994, +1995, +1995, +1995, +1996, +1996, +1996, +1997, +1997, +1997, +1998, +1998, +1998, +1999, +1999, +1999, +2000, +2000, +2000, +2001, +2001, +2001, +2002, +2002, +2002, +2003, +2003, +2003, +2004, +2004, +2004, +2005, +2005, +2005, +2006, +2006, +2006, +2007, +2007, +2007, +2007, +2008, +2008, +2008, +2009, +2009, +2009, +2010, +2010, +2010, +2010, +2011, +2011, +2011, +2012, +2012, +2012, +2012, +2013, +2013, +2013, +2014, +2014, +2014, +2014, +2015, +2015, +2015, +2016, +2016, +2016, +2016, +2017, +2017, +2017, +2017, +2018, +2018, +2018, +2018, +2019, +2019, +2019, +2019, +2020, +2020, +2020, +2021, +2021, +2021, +2021, +2021, +2022, +2022, +2022, +2022, +2023, +2023, +2023, +2023, +2024, +2024, +2024, +2024, +2025, +2025, +2025, +2025, +2025, +2026, +2026, +2026, +2026, +2027, +2027, +2027, +2027, +2027, +2028, +2028, +2028, +2028, +2029, +2029, +2029, +2029, +2029, +2030, +2030, +2030, +2030, +2030, +2031, +2031, +2031, +2031, +2031, +2031, +2032, +2032, +2032, +2032, +2032, +2033, +2033, +2033, +2033, +2033, +2034, +2034, +2034, +2034, +2034, +2034, +2035, +2035, +2035, +2035, +2035, +2035, +2036, +2036, +2036, +2036, +2036, +2036, +2036, +2037, +2037, +2037, +2037, +2037, +2037, +2038, +2038, +2038, +2038, +2038, +2038, +2038, +2039, +2039, +2039, +2039, +2039, +2039, +2039, +2039, +2040, +2040, +2040, +2040, +2040, +2040, +2040, +2040, +2041, +2041, +2041, +2041, +2041, +2041, +2041, +2041, +2042, +2042, +2042, +2042, +2042, +2042, +2042, +2042, +2042, +2042, +2043, +2043, +2043, +2043, +2043, +2043, +2043, +2043, +2043, +2043, +2043, +2044, +2044, +2044, +2044, +2044, +2044, +2044, +2044, +2044, +2044, +2044, +2044, +2044, +2045, +2045, +2045, +2045, +2045, +2045, +2045, +2045, +2045, +2045, +2045, +2045, +2045, +2045, +2045, +2045, +2045, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, +2046, diff --git a/coe/fft_pilot_i.coe b/coe/fft_pilot_i.coe new file mode 100644 index 0000000..11a3229 --- /dev/null +++ b/coe/fft_pilot_i.coe @@ -0,0 +1,258 @@ +memory_initialization_radix=10; +memory_initialization_vector= +80, +96, +79, +88, +97, +95, +103, +113, +112, +101, +103, +80, +58, +34, +-1, +-45, +-80, +-104, +-112, +-94, +-58, +-17, +56, +97, +112, +90, +32, +-36, +-97, +-111, +-79, +-3, +80, +109, +79, +-7, +-97, +-103, +-32, +61, +112, +56, +-56, +-112, +-58, +59, +112, +45, +-80, +-101, +1, +109, +58, +-75, +-103, +22, +112, +21, +-103, +-52, +97, +72, +-79, +-78, +80, +78, +-79, +-72, +97, +52, +-103, +-21, +112, +-22, +-103, +75, +58, +-109, +1, +101, +-80, +-45, +112, +-59, +-58, +112, +-56, +-56, +112, +-61, +-32, +103, +-97, +7, +79, +-109, +80, +3, +-79, +111, +-97, +36, +32, +-90, +112, +-97, +56, +17, +-58, +94, +-112, +104, +-80, +45, +-1, +-34, +58, +-80, +103, +-101, +112, +-113, +103, +-95, +97, +-88, +79, +-96, +80, +-96, +79, +-88, +97, +-95, +103, +-113, +112, +-101, +103, +-80, +58, +-34, +-1, +45, +-80, +104, +-112, +94, +-58, +17, +56, +-97, +112, +-90, +32, +36, +-97, +111, +-79, +3, +80, +-109, +79, +7, +-97, +103, +-32, +-61, +112, +-56, +-56, +112, +-58, +-59, +112, +-45, +-80, +101, +1, +-109, +58, +75, +-103, +-22, +112, +-21, +-103, +52, +97, +-72, +-79, +78, +80, +-78, +-79, +72, +97, +-52, +-103, +21, +112, +22, +-103, +-75, +58, +109, +1, +-101, +-80, +45, +112, +59, +-58, +-112, +-56, +56, +112, +61, +-32, +-103, +-97, +-7, +79, +109, +80, +-3, +-79, +-111, +-97, +-36, +32, +90, +112, +97, +56, +-17, +-58, +-94, +-112, +-104, +-80, +-45, +-1, +34, +58, +80, +103, +101, +112, +113, +103, +95, +97, +88, +79, +96; diff --git a/coe/fft_pilot_q.coe b/coe/fft_pilot_q.coe new file mode 100644 index 0000000..7e6ea78 --- /dev/null +++ b/coe/fft_pilot_q.coe @@ -0,0 +1,258 @@ +memory_initialization_radix=10; +memory_initialization_vector= +80, +78, +79, +72, +58, +52, +32, +21, +0, +-22, +-56, +-75, +-97, +-109, +-112, +-101, +-80, +-45, +1, +59, +97, +112, +103, +56, +0, +-61, +-103, +-103, +-58, +7, +79, +109, +80, +3, +-79, +-111, +-58, +36, +103, +90, +0, +-97, +-103, +-17, +97, +94, +-1, +-104, +-80, +45, +112, +34, +-97, +-80, +56, +101, +0, +-113, +-32, +95, +58, +-88, +-79, +96, +80, +-96, +-79, +88, +58, +-95, +-32, +113, +0, +-101, +56, +80, +-97, +-34, +112, +-45, +-80, +104, +-1, +-94, +97, +17, +-103, +97, +0, +-90, +103, +-36, +-58, +111, +-79, +-3, +80, +-109, +79, +-7, +-58, +103, +-103, +61, +0, +-56, +103, +-112, +97, +-59, +1, +45, +-80, +101, +-112, +109, +-97, +75, +-56, +22, +0, +-21, +32, +-52, +58, +-72, +79, +-78, +80, +-78, +79, +-72, +58, +-52, +32, +-21, +0, +22, +-56, +75, +-97, +109, +-112, +101, +-80, +45, +1, +-59, +97, +-112, +103, +-56, +0, +61, +-103, +103, +-58, +-7, +79, +-109, +80, +-3, +-79, +111, +-58, +-36, +103, +-90, +0, +97, +-103, +17, +97, +-94, +-1, +104, +-80, +-45, +112, +-34, +-97, +80, +56, +-101, +0, +113, +-32, +-95, +58, +88, +-79, +-96, +80, +96, +-79, +-88, +58, +95, +-32, +-113, +0, +101, +56, +-80, +-97, +34, +112, +45, +-80, +-104, +-1, +94, +97, +-17, +-103, +-97, +0, +90, +103, +36, +-58, +-111, +-79, +3, +80, +109, +79, +7, +-58, +-103, +-103, +-61, +0, +56, +103, +112, +97, +59, +1, +-45, +-80, +-101, +-112, +-109, +-97, +-75, +-56, +-22, +0, +21, +32, +52, +58, +72, +79, +78; diff --git a/hdl/CCSDS_LDPC_DEC_K1024_R12_TOPP.v b/hdl/CCSDS_LDPC_DEC_K1024_R12_TOPP.v new file mode 100644 index 0000000..26bb2ec --- /dev/null +++ b/hdl/CCSDS_LDPC_DEC_K1024_R12_TOPP.v @@ -0,0 +1,149 @@ +`timescale 1ns / 1ps +////////////////////////////////////////////////////////////////////////////////// +// Company: +// Engineer: +// +// Create Date: 2019/11/14 17:44:48 +// Design Name: +// Module Name: CCSDS_LDPC_DEC_K1024_R12_TOPP +// Project Name: +// Target Devices: +// Tool Versions: +// Description: +// +// Dependencies: +// +// Revision: +// Revision 0.01 - File Created +// Additional Comments: +// +////////////////////////////////////////////////////////////////////////////////// + + +module CCSDS_LDPC_DEC_K1024_R12_TOPP + #( + parameter MAX_ITER_NUM = 6'd14, //最大迭代次数常量 + parameter WIDTH = 4'd8, //量化比特 + parameter OUT_ONLY_INFORMATION = 1'b0 //译码输出格式选择标志,1:只输出信息位;0:输出整个码字 + ) + ( + input clk, //工作时钟,100MHz + input Rst, //同步复位信号,高有效 + input FrameSync, //帧同步标志,高脉冲 + input Nd, //译码输入数据有效标志,高有效 + input [WIDTH-1:0] Din, //译码输入数据,软信息 + + + output LDPC_SyncOut, //LDPC 模块帧同步输出信号,高脉冲,指示帧起点 + output Rdy, //译码输出信号有效标志,高有效 + output [0:0] LDPC_Dout, //译码输出信号,MSB输出 + + output [8:0] good_frames, //译码好帧计数 + output [8:0] bad_frames, //译码坏帧计数 + output [8:0] total_frames //译码总帧数计数 + ); + + wire FrameSync_A_TM; + wire Nd_A_TM; + wire [WIDTH-1:0] Din_A_TM; + + wire FrameSync_B_TM; + wire Nd_B_TM; + wire [WIDTH-1:0] Din_B_TM; + + wire LDPC_SyncOut_A; + wire Rdy_A; + wire [0:0] LDPC_Dout_A; + wire [8:0] good_frames_A; + wire [8:0] bad_frames_A; + wire [8:0] total_frames_A; + + wire LDPC_SyncOut_B; + wire Rdy_B; + wire [0:0] LDPC_Dout_B; + wire [8:0] good_frames_B; + wire [8:0] bad_frames_B; + wire [8:0] total_frames_B; + + + LDPC_TopManage_2 + #( + .WIDTH(WIDTH) + ) + TM ( + .clk(clk), + .Rst(Rst), + .FrameSync_TM(FrameSync), + .Nd_TM(Nd), + .Din_TM(Din), + .FrameSync_A_TM(FrameSync_A_TM), + .Nd_A_TM(Nd_A_TM), + .Din_A_TM(Din_A_TM), + .FrameSync_B_TM(FrameSync_B_TM), + .Nd_B_TM(Nd_B_TM), + .Din_B_TM(Din_B_TM), + .LDPC_SyncOut_A_TM(LDPC_SyncOut_A), + .Rdy_A_TM(Rdy_A), + .LDPC_Dout_A_TM(LDPC_Dout_A), + .good_frames_A_TM(good_frames_A), + .bad_frames_A_TM(bad_frames_A), + .total_frames_A_TM(total_frames_A), + .LDPC_SyncOut_B_TM(LDPC_SyncOut_B), + .Rdy_B_TM(Rdy_B), + .LDPC_Dout_B_TM(LDPC_Dout_B), + .good_frames_B_TM(good_frames_B), + .bad_frames_B_TM(bad_frames_B), + .total_frames_B_TM(total_frames_B), + .LDPC_SyncOut_TM(LDPC_SyncOut), + .Rdy_TM(Rdy), + .LDPC_Dout_TM(LDPC_Dout), + .good_frames_TM(good_frames), + .bad_frames_TM(bad_frames), + .total_frames_TM(total_frames) + ); + + CCSDS_LDPC_DEC_K1024_R12 + #( + .MAX_ITER_NUM(MAX_ITER_NUM), + .WIDTH(WIDTH), + .OUT_ONLY_INFORMATION(OUT_ONLY_INFORMATION) + ) + inst_DEC_A ( + .clk(clk), + .Rst(Rst), + .FrameSync(FrameSync_A_TM), + .Nd(Nd_A_TM), + .Din(Din_A_TM), + .LDPC_SyncOut(LDPC_SyncOut_A), + .Rdy(Rdy_A), + .LDPC_Dout(LDPC_Dout_A), + .good_frames(good_frames_A), + .bad_frames(bad_frames_A), + .total_frames(total_frames_A) + ); + + CCSDS_LDPC_DEC_K1024_R12 + #( + .MAX_ITER_NUM(MAX_ITER_NUM), + .WIDTH(WIDTH), + .OUT_ONLY_INFORMATION(OUT_ONLY_INFORMATION) + ) + inst_DEC_B ( + .clk(clk), + .Rst(Rst), + .FrameSync(FrameSync_B_TM), + .Nd(Nd_B_TM), + .Din(Din_B_TM), + .LDPC_SyncOut(LDPC_SyncOut_B), + .Rdy(Rdy_B), + .LDPC_Dout(LDPC_Dout_B), + .good_frames(good_frames_B), + .bad_frames(bad_frames_B), + .total_frames(total_frames_B) + ); + + + + +endmodule + diff --git a/hdl/FrameMerge.v b/hdl/FrameMerge.v new file mode 100644 index 0000000..180ccde --- /dev/null +++ b/hdl/FrameMerge.v @@ -0,0 +1,973 @@ +`timescale 1ns / 1ps +////////////////////////////////////////////////////////////////////////////////// +// Company: +// Engineer: +// +// Create Date: 2019/11/14 17:44:48 +// Design Name: +// Module Name: FrameMerge +// Project Name: +// Target Devices: +// Tool Versions: +// Description: +// +// Dependencies: +// +// Revision: +// Revision 0.01 - File Created +// Additional Comments: +// +////////////////////////////////////////////////////////////////////////////////// + + +module FrameMerge( + input clk, + input rst, + input rst2, + input sync, + input nd, + input din, + + input [6:0] vio_stopbit, + + input frameIDnd, + input clk2, + output reg framerdy = 1'b0, + // output reg flag_recvram = 1'b0, + // input [12:0] recv_addr1, + // input [12:0] recv_addr2, + // output [7:0] recv_data1, + // output [7:0] recv_data2, + input [13:0] recv_addr_new_0, + input [13:0] recv_addr_new_1, + input [13:0] recv_addr_new_2, + input [13:0] recv_addr_new_3, + output [7:0] recv_data_new_0, + output [7:0] recv_data_new_1, + output [7:0] recv_data_new_2, + output [7:0] recv_data_new_3, + output reg [16:0] RAMaddra_write_0 = 17'd0, + output reg [16:0] RAMaddra_write_1 = 17'd0, + output reg [16:0] RAMaddra_write_2 = 17'd0, + output reg [16:0] RAMaddra_write_3 = 17'd0, + output reg [16:0] RAMaddra_new_0 = 17'd0, + output reg [16:0] RAMaddra_new_1 = 17'd0, + output reg [16:0] RAMaddra_new_2 = 17'd0, + output reg [16:0] RAMaddra_new_3 = 17'd0, + output reg flag_notbyte = 1'd0, + output reg [1:0] state_ram = 2'd0, + + output reg flag_stop = 1'd0, //给shx,拉高一个clk表示当前时帧有效数据接收完毕 + output reg [16:0] addr_stop = 17'd0, //给shx,拉高一个clk,与flag_stop对齐,指示位置与最后1bit有效数据的位置对齐 + + //debug + output reg berstart_1d = 1'b0, + output reg bercompare = 1'b0, + output reg [16:0] bercount = 17'd0, + output reg [16:0] bercount_max = 17'd0, + output reg [16:0] ROMaddra_d2 = 17'd0, + output reg RAMdout_d1 = 1'd0, + + // output reg validnd_1_1d = 1'b0, + // output reg validnd_2_1d = 1'b0, + output reg validnd_new_new = 1'b0, + // output reg [63:0] stop_temp_1 = 64'd0, + // output reg [63:0] stop_temp_2 = 64'd0, + output reg [63:0] stop_temp_new = 64'd0, + + output flag_stop_0, //给shx,拉高1个clk表示当前时帧有效数据接收完毕 + output [16:0] addr_stop_0, + output reg [2:0] cnt_8 = 3'b0, + output reg state_8 = 1'd0, + + output rdy_scramble, + output dout_scramble, + + output reg [16:0] RAMaddra = 17'd0, //比较误码率 + output reg [16:0] ROMaddra = 17'd0, //比较误码率 + output reg [0:0] nd_ber = 1'd0, //比较误码率 + output reg [63:0] recvNetData, + output reg recvNetDataNd + // input [7:0] video_id01, + // input [7:0] video_id02, + // input [7:0] video_id03, + // input [7:0] MAC_idNum + ); + + reg frameIDnd_d1 = 1'd0; + reg frameIDnd_d2 = 1'd0; + always @(posedge clk)begin + frameIDnd_d1 <= frameIDnd; + frameIDnd_d2 <= frameIDnd_d1; + end + + // always @(posedge clk)begin + // if(frameIDnd && !frameIDnd_d1) flag_recvram <= ~flag_recvram; + // else flag_recvram <= flag_recvram; + // end + + //-------------------------------------------------------------------------------------------------------------// + + // reg validnd_1 = 1'b0; + // reg validnd_2 = 1'b0; + reg validnd_new = 1'b0; + reg [9:0] validlength = 10'd0; + reg [6:0] cnt_net; + reg [1:0] state_recv; + reg nd_recvnet_dout; + always @(posedge clk)begin + if(rst)begin + // validnd_1 <= 1'b0; + // validnd_2 <= 1'b0; + state_recv <= 2'd0; + validnd_new <= 1'b0; + validlength <= 10'd0; + cnt_net <= 6'd0; + nd_recvnet_dout <= 1'd0; + end + else begin + case(state_recv) + 2'd0:begin + if(!validnd_new)begin + if(sync)begin + validnd_new <= 1'b1; + nd_recvnet_dout <= 1'b1; + end + else begin + validnd_new <= 1'b0; + end + end + else begin + if(cnt_net == 6'd63) begin + validlength <= validlength + 10'd1; + if(validlength == 10'd1023)begin + validnd_new <= 1'b0; + state_recv <= 2'd1; + end else begin + validnd_new <= 1'b1; + state_recv <= state_recv; + end + nd_recvnet_dout <= 1'b0; + cnt_net <= 6'd63; + end + else begin + state_recv <= state_recv; + nd_recvnet_dout <= 1'b1; + cnt_net <= cnt_net +6'd1; + validlength <= validlength + 10'd1; + if(validlength == 10'd1023)begin + validnd_new <= 1'b0; + end else begin + validnd_new <= 1'b1; + end + end + + end + end + 2'd1:begin + if(!validnd_new)begin + if(sync)begin + validnd_new <= 1'b1; + end + else begin + validnd_new <= 1'b0; + end + state_recv <= state_recv; + end + else begin + state_recv <= state_recv; + nd_recvnet_dout <= 1'b0; + cnt_net <= 6'd0; + validlength <= validlength + 10'd1; + if(validlength == 10'd1023)begin + validnd_new <= 1'b0; + end else begin + validnd_new <= 1'b1; + end + end + end + default:begin + + if(!validnd_new)begin + if(sync)begin + + validnd_new <= 1'b1; + + nd_recvnet_dout <= 1'b1; + end + else begin + validnd_new <= 1'b0; + end + end + else begin + if(cnt_net == 6'd63) begin + validlength <= validlength + 10'd1; + if(validlength == 10'd1023)begin + validnd_new <= 1'b0; + state_recv <= 2'd1; + end else begin + validnd_new <= 1'b1; + state_recv <= state_recv; + end + nd_recvnet_dout <= 1'b0; + cnt_net <= 6'd63; + end + else begin + state_recv <= state_recv; + nd_recvnet_dout <= 1'b1; + cnt_net <= cnt_net +6'd1; + validlength <= validlength + 10'd1; + if(validlength == 10'd1023)begin + validnd_new <= 1'b0; + end else begin + validnd_new <= 1'b1; + end + end + + end + end + endcase + end + end + + // reg [15:0] RAMaddra_1 = 16'd0; + // reg [15:0] RAMaddra_2 = 16'd0; + // reg [16:0] RAMaddra_new = 17'd0; + // reg [15:0] RAMaddra = 16'd0; //比较误码率 + reg [0:0] dout_scramble_d1 = 1'd0; //比较误码率 + // reg [0:0] nd_ber = 1'd0; //比较误码率 + // reg validnd_1_1d = 1'b0; + // reg validnd_2_1d = 1'b0; + reg validnd_new_1d = 1'b0; + always @(posedge clk)begin + if(rst)begin + // RAMaddra_1 <= 16'd0; + // RAMaddra_2 <= 16'd0; + // RAMaddra_new <= RAMaddra_new; + RAMaddra <= 17'd0; //比较误码率 + ROMaddra <= 17'd0; //比较误码率 + dout_scramble_d1 <= 1'd0; //比较误码率 + nd_ber <= 1'd0; //比较误码率 + // validnd_1_1d <= 1'b0; + // validnd_2_1d <= 1'b0; + validnd_new_1d <= 1'b0; + end else begin + // validnd_1_1d <= validnd_1; + // if(validnd_1_1d) begin + // RAMaddra_1 <= RAMaddra_1 + 16'd1; + // end else begin + // RAMaddra_1 <= RAMaddra_1; + // end + + // validnd_2_1d <= validnd_2; + // if(validnd_2_1d) begin + // RAMaddra_2 <= RAMaddra_2 + 16'd1; + // end else begin + // RAMaddra_2 <= RAMaddra_2; + // end + + validnd_new_1d <= validnd_new; + // if(validnd_new_1d) begin + // RAMaddra_new <= RAMaddra_new + 16'd1; + // end else begin + // RAMaddra_new <= RAMaddra_new; + // end + + //比较误码率 + // if(validnd_1_1d||validnd_2_1d) begin + if(validnd_new_1d) begin + RAMaddra <= RAMaddra + 17'd1; + ROMaddra <= ROMaddra + 17'd1; + dout_scramble_d1 <= dout_scramble; + nd_ber <= 1'd1; + end + else begin + RAMaddra <= RAMaddra; + ROMaddra <= ROMaddra; + dout_scramble_d1 <= dout_scramble_d1; + nd_ber <= 1'd0; + end + //比较误码率 + end + end + + reg nd_recvnet_dout_d1; + reg nd_recvnet_dout_d2; + reg nd_recvnet_dout_d3; + reg nd_recvnet_dout_d4; + + reg wr_en_232; + reg rs232_send; + reg [4:0] cnt_422_wait; + wire validnd_new_delay; + reg validnd_new_delay_d1; + wire framedata; + reg framedata_d1; + reg [7:0] data_net_byte [87:0]; + reg [7:0] clk_net_byte; + reg [9:0] clk_net_bit; + //shiftram_scramble shiftram_scramble(.CLK(clk),.D({dout_scramble,validnd_new}),.Q({framedata,validnd_new_delay})); + reg [7:0] cnt_422_net; + always @(posedge clk)begin + if(rst2)begin + state_ram <= 2'd0; + RAMaddra_new_0 <= 17'd0; + RAMaddra_new_1 <= 17'd0; + RAMaddra_new_2 <= 17'd0; + RAMaddra_new_3 <= 17'd0; + flag_notbyte <= 1'd0; + nd_recvnet_dout_d1 <= 1'd0; + nd_recvnet_dout_d2 <= 1'd0; + nd_recvnet_dout_d3 <= 1'd0; + nd_recvnet_dout_d4 <= 1'd0; + recvNetDataNd <= 1'd0; + recvNetData <= 64'd0; + wr_en_232 <= 1'b0; + rs232_send <= 1'b0; + cnt_422_wait <= 5'd0; + cnt_422_net <= 8'd0; + clk_net_bit <= 10'd0; + clk_net_byte <= 8'd0; + validnd_new_delay_d1 <= 1'b0; + framedata_d1 <= 1'b0; + end + else begin + framedata_d1 <= framedata; + validnd_new_delay_d1 <= validnd_new_delay; + nd_recvnet_dout_d1 <= nd_recvnet_dout; + nd_recvnet_dout_d2 <= nd_recvnet_dout_d1; + nd_recvnet_dout_d3 <= nd_recvnet_dout_d2; + nd_recvnet_dout_d4 <= nd_recvnet_dout_d3; + if(!nd_recvnet_dout_d1 && nd_recvnet_dout_d2) begin//检测到网络层数据传输完毕拉高2个clk recvNetDataNd + recvNetDataNd <= 1'b1; + end + else begin + if(!nd_recvnet_dout_d3 && nd_recvnet_dout_d4) begin//延迟2个clk确保50MHz采到recvNetDataNd再拉低 + recvNetDataNd <= 1'b0; + end + else begin + recvNetDataNd <= recvNetDataNd; + end + end + case(state_ram) + //有了新的一帧,准备开始存储 + 2'd0:begin + if(frameIDnd_d2) begin + state_ram <= 2'd1; + RAMaddra_new_0<= RAMaddra_new_0; + RAMaddra_new_1<= RAMaddra_new_1; + RAMaddra_new_2 <= RAMaddra_new_2; + RAMaddra_new_3 <= RAMaddra_new_3; + end + else begin + state_ram <= state_ram; + RAMaddra_new_0<= RAMaddra_new_0; + RAMaddra_new_1<= RAMaddra_new_1; + RAMaddra_new_2 <= RAMaddra_new_2; + RAMaddra_new_3 <= RAMaddra_new_3; + end + validnd_new_new <= 1'd0; + flag_notbyte <= 1'd0; + end + 2'd1:begin + if(flag_stop_0) begin + if(recvNetData[63:56] == 8'd2 && recvNetData[23:0]==24'h7E5A33) begin + RAMaddra_new_0 <= addr_stop_0 +17'd1; + end + else if(recvNetData[63:56] == 8'd3 && recvNetData[23:0]==24'h7E5A33) begin + RAMaddra_new_1 <= addr_stop_0 +17'd1; + end + else if(recvNetData[63:56] == 8'd4 && recvNetData[23:0]==24'h7E5A33) begin + RAMaddra_new_2 <= addr_stop_0 +17'd1; + end + else if(recvNetData[63:56] == 8'hff && recvNetData[23:0]==24'h7E5A33) begin + RAMaddra_new_3 <= addr_stop_0 +17'd1; + end + else begin + RAMaddra_new_0 <= RAMaddra_new_0; + RAMaddra_new_1 <= RAMaddra_new_1; + RAMaddra_new_2 <= RAMaddra_new_2; + RAMaddra_new_3 <= RAMaddra_new_3; + end + validnd_new_new <= 1'd0; + state_ram <= 2'd2; + end + else begin + state_ram <= state_ram; + validnd_new_new <= validnd_new; + if(validnd_new_new) begin + if(nd_recvnet_dout_d1) begin + recvNetData[63:0] <= {dout_scramble,recvNetData[63:1]}; + end + else begin + if(recvNetData[63:56] == 8'd2 && recvNetData[23:0]==24'h7E5A33) begin + RAMaddra_new_0 <= RAMaddra_new_0 + 17'd1; + RAMaddra_new_1 <= RAMaddra_new_1; + RAMaddra_new_2 <= RAMaddra_new_2; + RAMaddra_new_3 <= RAMaddra_new_3; + end + else if(recvNetData[63:56] == 8'd3 && recvNetData[23:0]==24'h7E5A33) begin + RAMaddra_new_0 <= RAMaddra_new_0; + RAMaddra_new_1 <= RAMaddra_new_1 + 17'd1; + RAMaddra_new_2 <= RAMaddra_new_2; + RAMaddra_new_3 <= RAMaddra_new_3; + end + else if(recvNetData[63:56] == 8'd4 && recvNetData[23:0]==24'h7E5A33) begin + RAMaddra_new_0 <= RAMaddra_new_0; + RAMaddra_new_1 <= RAMaddra_new_1; + RAMaddra_new_2 <= RAMaddra_new_2 + 17'd1; + RAMaddra_new_3 <= RAMaddra_new_3; + end + else if(recvNetData[63:56] == 8'hff && recvNetData[23:0]==24'h7E5A33) begin + RAMaddra_new_0 <= RAMaddra_new_0; + RAMaddra_new_1 <= RAMaddra_new_1; + RAMaddra_new_2 <= RAMaddra_new_2; + RAMaddra_new_3 <= RAMaddra_new_3 + 17'd1; + end + else begin + RAMaddra_new_0 <= RAMaddra_new_0; + RAMaddra_new_1 <= RAMaddra_new_1; + RAMaddra_new_2 <= RAMaddra_new_2; + RAMaddra_new_3 <= RAMaddra_new_3; + end + end + end + else begin + RAMaddra_new_0 <= RAMaddra_new_0; + RAMaddra_new_1 <= RAMaddra_new_1; + RAMaddra_new_2 <= RAMaddra_new_2; + RAMaddra_new_3 <= RAMaddra_new_3; + end + end + flag_notbyte <= 1'd0; + end + 2'd2:begin + // rs232_send <= 1'b0; + state_ram <= 2'd0; + if(recvNetData[63:56] == 8'd2 && recvNetData[23:0]==24'h7E5A33) begin + case(RAMaddra_new_0[2:0]) + 3'b000:begin + flag_notbyte <= 1'd0; + RAMaddra_new_0 <= RAMaddra_new_0; + end + 3'b001:begin + flag_notbyte <= 1'd1; + RAMaddra_new_0 <= RAMaddra_new_0+17'd7; + end + 3'b010:begin + flag_notbyte <= 1'd1; + RAMaddra_new_0 <= RAMaddra_new_0+17'd6; + end + 3'b011:begin + flag_notbyte <= 1'd1; + RAMaddra_new_0 <= RAMaddra_new_0+17'd5; + end + 3'b100:begin + flag_notbyte <= 1'd1; + RAMaddra_new_0 <= RAMaddra_new_0+17'd4; + end + 3'b101:begin + flag_notbyte <= 1'd1; + RAMaddra_new_0 <= RAMaddra_new_0+17'd3; + end + 3'b110:begin + flag_notbyte <= 1'd1; + RAMaddra_new_0 <= RAMaddra_new_0+17'd2; + end + 3'b111:begin + flag_notbyte <= 1'd1; + RAMaddra_new_0 <= RAMaddra_new_0+17'd1; + end + endcase + end + else if(recvNetData[63:56] == 8'd3 && recvNetData[23:0]==24'h7E5A33) begin + case(RAMaddra_new_1[2:0]) + 3'b000:begin + flag_notbyte <= 1'd0; + RAMaddra_new_1 <= RAMaddra_new_1; + end + 3'b001:begin + flag_notbyte <= 1'd1; + RAMaddra_new_1 <= RAMaddra_new_1+17'd7; + end + 3'b010:begin + flag_notbyte <= 1'd1; + RAMaddra_new_1 <= RAMaddra_new_1+17'd6; + end + 3'b011:begin + flag_notbyte <= 1'd1; + RAMaddra_new_1 <= RAMaddra_new_1+17'd5; + end + 3'b100:begin + flag_notbyte <= 1'd1; + RAMaddra_new_1 <= RAMaddra_new_1+17'd4; + end + 3'b101:begin + flag_notbyte <= 1'd1; + RAMaddra_new_1 <= RAMaddra_new_1+17'd3; + end + 3'b110:begin + flag_notbyte <= 1'd1; + RAMaddra_new_1 <= RAMaddra_new_1+17'd2; + end + 3'b111:begin + flag_notbyte <= 1'd1; + RAMaddra_new_1 <= RAMaddra_new_1+17'd1; + end + endcase + end + else if(recvNetData[63:56] == 8'd4 && recvNetData[23:0]==24'h7E5A33) begin + case(RAMaddra_new_2[2:0]) + 3'b000:begin + flag_notbyte <= 1'd0; + RAMaddra_new_2 <= RAMaddra_new_2; + end + 3'b001:begin + flag_notbyte <= 1'd1; + RAMaddra_new_2 <= RAMaddra_new_2+17'd7; + end + 3'b010:begin + flag_notbyte <= 1'd1; + RAMaddra_new_2 <= RAMaddra_new_2+17'd6; + end + 3'b011:begin + flag_notbyte <= 1'd1; + RAMaddra_new_2 <= RAMaddra_new_2+17'd5; + end + 3'b100:begin + flag_notbyte <= 1'd1; + RAMaddra_new_2 <= RAMaddra_new_2+17'd4; + end + 3'b101:begin + flag_notbyte <= 1'd1; + RAMaddra_new_2 <= RAMaddra_new_2+17'd3; + end + 3'b110:begin + flag_notbyte <= 1'd1; + RAMaddra_new_2 <= RAMaddra_new_2+17'd2; + end + 3'b111:begin + flag_notbyte <= 1'd1; + RAMaddra_new_2 <= RAMaddra_new_2+17'd1; + end + endcase + end + else if(recvNetData[63:56] == 8'hff&& recvNetData[23:0]==24'h7E5A33) begin + case(RAMaddra_new_3[2:0]) + 3'b000:begin + flag_notbyte <= 1'd0; + RAMaddra_new_3 <= RAMaddra_new_3; + end + 3'b001:begin + flag_notbyte <= 1'd1; + RAMaddra_new_3 <= RAMaddra_new_3+17'd7; + end + 3'b010:begin + flag_notbyte <= 1'd1; + RAMaddra_new_3 <= RAMaddra_new_3+17'd6; + end + 3'b011:begin + flag_notbyte <= 1'd1; + RAMaddra_new_3 <= RAMaddra_new_3+17'd5; + end + 3'b100:begin + flag_notbyte <= 1'd1; + RAMaddra_new_3 <= RAMaddra_new_3+17'd4; + end + 3'b101:begin + flag_notbyte <= 1'd1; + RAMaddra_new_3 <= RAMaddra_new_3+17'd3; + end + 3'b110:begin + flag_notbyte <= 1'd1; + RAMaddra_new_3 <= RAMaddra_new_3+17'd2; + end + 3'b111:begin + flag_notbyte <= 1'd1; + RAMaddra_new_3 <= RAMaddra_new_3+17'd1; + end + endcase + end + else begin + flag_notbyte <= 1'b0; + RAMaddra_new_0 <= RAMaddra_new_0; + RAMaddra_new_1 <= RAMaddra_new_1; + RAMaddra_new_2 <= RAMaddra_new_2; + RAMaddra_new_3 <= RAMaddra_new_3; + end + + end + default:begin + if(frameIDnd_d2) begin + state_ram <= 2'd1; + RAMaddra_new_0 <= RAMaddra_new_0; + RAMaddra_new_1 <= RAMaddra_new_1; + RAMaddra_new_2 <= RAMaddra_new_2; + RAMaddra_new_3 <= RAMaddra_new_3; + end + else begin + state_ram <= state_ram; + RAMaddra_new_0 <= RAMaddra_new_0; + RAMaddra_new_1 <= RAMaddra_new_1; + RAMaddra_new_2 <= RAMaddra_new_2; + RAMaddra_new_3 <= RAMaddra_new_3; + end + validnd_new_new <= 1'd0; + flag_notbyte <= 1'd0; + end + endcase + end + end + + + reg [8:0] bagcnt = 9'd0; + always @(posedge clk)begin + if(rst)begin + bagcnt <= 9'd0; + end else begin + if(sync)begin + bagcnt <= bagcnt + 9'd1; + end else begin + bagcnt <= bagcnt; + end + end + end + + wire scramblestart; + assign scramblestart = (bagcnt == 9'd0)? sync : 1'b0; + + // wire rdy_scramble; + // wire dout_scramble; + Scramble Scramble ( + .clk(clk), + .rst(rst2 || framerdy), + .start(scramblestart), + // .nd(validnd_1||validnd_2), + .nd(validnd_new), + .din(din), + .rdy(rdy_scramble), + .dout(dout_scramble) + ); + + + + //------------------------------------------比较误码率---------------------------// + reg [16:0] RAMaddrb = 17'd0; + wire RAMdout; + RAM_merge RAM_merge_0 ( + .clka(clk), // input clka + // .wea(validnd_1_1d||validnd_2_1d), // input [0 : 0] wea + .wea(validnd_new_1d), // input [0 : 0] wea + .addra(RAMaddra), // input [16 : 0] addra + .dina(dout_scramble), // input [0 : 0] dina + .clkb(clk), // input clkb + .addrb(RAMaddrb), // input [16 : 0] addrb + .doutb(RAMdout) // output [0 : 0] doutb + ); + + // reg [15:0] ROMaddra = 16'd0; + wire ROMdout; + ROM_ber ROM_ber ( + .clka(clk), // input clka + .addra(ROMaddra), // input [16 : 0] addra + .douta(ROMdout) // output [0 : 0] douta + ); + + reg berstart = 1'b0; + always @(posedge clk)begin + if(rst2)begin + RAMaddrb <= 17'd0; + berstart <= 1'b0; + end else begin + if(!berstart)begin + RAMaddrb <= 17'd0; + if(bagcnt == 9'd105 && validlength == 10'd1023)begin + berstart <= 1'b1; + end else begin + berstart <= 1'b0; + end + end else begin + if(RAMaddrb == 17'd107519)begin + berstart <= 1'b0; + RAMaddrb <= 17'd0; + end else begin + berstart <= 1'b1; + RAMaddrb <= RAMaddrb + 17'd1; + end + end + end + end + + + + + reg [16:0] ROMaddra_d1 = 17'd0; + always @(posedge clk)begin + berstart_1d <= berstart; + if(rst)begin + bercompare <= 1'b0; + bercount <= 17'd0; + ROMaddra_d1 <= 17'd0; + ROMaddra_d2 <= 17'd0; + RAMdout_d1 <= 1'd0; + bercount_max <= bercount; + end else begin + if(nd_ber) begin + bercompare <= dout_scramble_d1^ROMdout; + bercount <= bercount + bercompare; + + ROMaddra_d1 <= ROMaddra; + ROMaddra_d2 <= ROMaddra_d1; + RAMdout_d1 <= dout_scramble_d1; + bercount_max <= bercount_max; + end + else begin + bercompare <= 1'd0; + bercount <= bercount; + + ROMaddra_d1 <= ROMaddra_d1; + ROMaddra_d2 <= ROMaddra_d2; + RAMdout_d1 <= RAMdout_d1; + bercount_max <= bercount_max; + end + end + end + //------------------------------------------比较误码率---------------------------// + + + + // RAM_recv RAM_recv_1 ( + // .clka(clk), // input clka + // .wea(validnd_1_1d), // input [0 : 0] wea + // .addra(RAMaddra_1), // input [15 : 0] addra + // .dina(dout_scramble), // input [0 : 0] dina + // .clkb(clk2), // input clkb + // .addrb(recv_addr1), // input [12 : 0] addrb + // .doutb(recv_data1) // output [7 : 0] doutb + // ); + + // RAM_recv RAM_recv_2 ( + // .clka(clk), // input clka + // .wea(validnd_2_1d), // input [0 : 0] wea + // .addra(RAMaddra_2), // input [15 : 0] addra + // .dina(dout_scramble), // input [0 : 0] dina + // .clkb(clk2), // input clkb + // .addrb(recv_addr2), // input [12 : 0] addrb + // .doutb(recv_data2) // output [7 : 0] doutb + // ); + + RAM_recvnew RAM_recvnew_0 ( + .clka(clk), // input clka + .wea(validnd_new_new), // input [0 : 0] wea + .addra(RAMaddra_new_0), // input [16 : 0] addra + .dina(dout_scramble), // input [0 : 0] dina + .clkb(clk2), // input clkb + .addrb(recv_addr_new_0), // input [13 : 0] addrb + .doutb(recv_data_new_0) // output [7 : 0] doutb + ); + + RAM_recvnew RAM_recvnew_1 ( + .clka(clk), // input clka + .wea(validnd_new_new), // input [0 : 0] wea + .addra(RAMaddra_new_1), // input [16 : 0] addra + .dina(dout_scramble), // input [0 : 0] dina + .clkb(clk2), // input clkb + .addrb(recv_addr_new_1), // input [13 : 0] addrb + .doutb(recv_data_new_1) // output [7 : 0] doutb + ); + RAM_recvnew RAM_recvnew_2 ( + .clka(clk), // input clka + .wea(validnd_new_new), // input [0 : 0] wea + .addra(RAMaddra_new_2), // input [16 : 0] addra + .dina(dout_scramble), // input [0 : 0] dina + .clkb(clk2), // input clkb + .addrb(recv_addr_new_2), // input [13 : 0] addrb + .doutb(recv_data_new_2) // output [7 : 0] doutb + ); + /*RAM_recvnew RAM_recvnew_3 ( + .clka(clk), // input clka + .wea(validnd_new_new), // input [0 : 0] wea + .addra(RAMaddra_new_3), // input [16 : 0] addra + .dina(dout_scramble), // input [0 : 0] dina + .clkb(clk2), // input clkb + .addrb(recv_addr_new_3), // input [13 : 0] addrb + .doutb(recv_data_new_3) // output [7 : 0] doutb + );*/ + + //-------------------------------------------------------------------------------------------------------------// + + //-------------------------------------找停止位---------------------------// + + + // reg nd_stop_1 = 1'd0; + // reg nd_stop_2 = 1'd0; + reg nd_stop_new = 1'd0; + + // reg [15:0] RAMaddra_1_temp = 16'd0; + // reg [15:0] RAMaddra_2_temp = 16'd0; + reg [16:0] RAMaddra_new_temp = 17'd0; + find_stop find_stop ( + .clk(clk), + // .nd_stop_1(nd_stop_1), + // .nd_stop_2(nd_stop_2), + .nd_stop_new(nd_stop_new), + // .RAMaddra_1_temp(RAMaddra_1_temp), + // .RAMaddra_2_temp(RAMaddra_2_temp), + .RAMaddra_new_temp(RAMaddra_new_temp), + // .stop_temp_1(stop_temp_1), + // .stop_temp_2(stop_temp_2), + .stop_temp_new(stop_temp_new), + + .vio_stopbit(vio_stopbit), + + .flag_stop_0(flag_stop_0), + .addr_stop_0(addr_stop_0) + ); + + // reg [63:0] stop_temp_1 = 64'd0; + // reg [63:0] stop_temp_2 = 64'd0; + // reg flag_stop_0 = 1'd0; //给shx,拉高1个clk表示当前时帧有效数据接收完毕 + // reg [15:0] addr_stop_0 = 16'd0; //给shx,拉高1个clk,与flag_stop对齐,指示位置与最后1bit有效数据的位置对齐 + always @(posedge clk)begin + // nd_stop_1 <= validnd_1_1d; + // nd_stop_2 <= validnd_2_1d; + nd_stop_new <= validnd_new_1d; + // if(validnd_1_1d) begin + // stop_temp_1[0] <= dout_scramble; + // stop_temp_1[63:1] <= stop_temp_1[62:0]; + // RAMaddra_1_temp <= RAMaddra_1; + // RAMaddra_2_temp <= 16'd0; + // end + // else begin + // if(validnd_2_1d) begin + // stop_temp_2[0] <= dout_scramble; + // stop_temp_2[63:1] <= stop_temp_2[62:0]; + // RAMaddra_1_temp <= 16'd0; + // RAMaddra_2_temp <= RAMaddra_2; + // end + // else begin + // stop_temp_1 <= stop_temp_1; + // stop_temp_2 <= stop_temp_2; + + // RAMaddra_1_temp <= RAMaddra_1_temp; + // RAMaddra_2_temp <= RAMaddra_2_temp; + // end + // end + if(validnd_new_1d) begin + stop_temp_new[0] <= dout_scramble; + stop_temp_new[63:1] <= stop_temp_new[62:0]; + if(recvNetData[63:56] == 8'd2 && recvNetData[23:0]==24'h7E5A33) begin + RAMaddra_new_temp <= RAMaddra_new_0; + end + else if(recvNetData[63:56] == 8'd3 && recvNetData[23:0]==24'h7E5A33) begin + RAMaddra_new_temp <= RAMaddra_new_1; + end + else if(recvNetData[63:56] == 8'd4 && recvNetData[23:0]==24'h7E5A33) begin + RAMaddra_new_temp <= RAMaddra_new_2; + end + else if(recvNetData[63:56] == 8'hff && recvNetData[23:0]==24'h7E5A33) begin + RAMaddra_new_temp <= RAMaddra_new_3; + end + else begin + RAMaddra_new_temp <= RAMaddra_new_temp; + end + end + else begin + stop_temp_new <= stop_temp_new; + + RAMaddra_new_temp <= RAMaddra_new_temp; + end + end + + + // reg [2:0] cnt_8 = 3'b0; + // reg state_8 = 1'd0; + always @(posedge clk)begin + case(state_8) + 1'd0:begin + if(flag_stop_0)begin + cnt_8 <= 3'b0; + flag_stop <= 1'b1; + addr_stop <= addr_stop_0; + state_8 <= 1'd1; + end + else begin + cnt_8 <= 3'b0; + flag_stop <= 1'b0; + addr_stop <= addr_stop; + state_8 <= state_8; + end + end + 1'd1:begin + if(cnt_8==3'd7) begin + cnt_8 <= 3'b0; + flag_stop <= 1'b0; + addr_stop <= addr_stop; + state_8 <= 1'd0; + end + else begin + cnt_8 <= 3'b1+cnt_8; + flag_stop <= 1'b1; + addr_stop <= addr_stop; + state_8 <= state_8; + end + end + endcase + end + + + reg [16:0] RAMaddra_new_0_d1 = 17'd0; + reg [16:0] RAMaddra_new_1_d1 = 17'd0; + reg [16:0] RAMaddra_new_2_d1 = 17'd0; + reg [16:0] RAMaddra_new_3_d1 = 17'd0; + always@(posedge clk2)begin + RAMaddra_new_0_d1 <= RAMaddra_new_0; + RAMaddra_new_1_d1 <= RAMaddra_new_1; + RAMaddra_new_2_d1 <= RAMaddra_new_2; + RAMaddra_new_3_d1 <= RAMaddra_new_3; + RAMaddra_write_0 <= RAMaddra_new_0_d1; + RAMaddra_write_1 <= RAMaddra_new_1_d1; + RAMaddra_write_2 <= RAMaddra_new_2_d1; + RAMaddra_write_3 <= RAMaddra_new_3_d1; + end + + //-------------------------------------找停止位---------------------------// + + + + always @(posedge clk)begin + if(rst2)begin + framerdy <= 1'b0; + end else begin + if(bagcnt == 9'd105 && validlength == 10'd1023)begin + framerdy <= 1'b1; + end else begin + framerdy <= 1'b0; + end + end + end + + ila_ber ila_ber( + .clk(clk), + .probe0(rst), + .probe1(ROMdout), + .probe2(validnd_new_delay), + .probe3(bercount), + .probe4(flag_stop_0), + .probe5(framedata_d1), + .probe6(recvNetDataNd), + .probe7(addr_stop_0), + .probe8(nd_recvnet_dout_d1), + .probe9(recvNetData), + .probe10(dout_scramble), + .probe11(wr_en_232), + .probe12(framedata), + .probe13(data_net_byte[87]), + .probe14(RAMaddra_new_0), + .probe15(RAMaddra_new_1) + + ); + + +endmodule + diff --git a/hdl/MF_Top.v b/hdl/MF_Top.v new file mode 100644 index 0000000..6686c24 --- /dev/null +++ b/hdl/MF_Top.v @@ -0,0 +1,121 @@ +`timescale 1ns / 1ps +////////////////////////////////////////////////////////////////////////////////// +// Company: +// Engineer: +// +// Create Date: 17:44 11/14/2019 +// Design Name: +// Module Name: MF_Top +// Project Name: +// Target Devices: +// Tool versions: +// Description: +// +// Dependencies: +// +// Revision: +// Revision 0.01 - File Created +// Additional Comments: +// +////////////////////////////////////////////////////////////////////////////////// +module MF_Top ( + input clk, + input rst, + + input [11:0] dini, + input [11:0] dinq, + input start, + + output reg [9:0] matchfilterout_i = 10'd0, + output reg [9:0] matchfilterout_q = 10'd0, + output reg MF_rdy, + output reg MF_rst +); + + wire s_axis_data_tvalid_i; + wire s_axis_data_tready_i; + wire m_axis_data_tvalid_i; + wire [31:0] MF_m_axis_data_tdata_i; + + assign s_axis_data_tvalid_i = start; + MF12p5_12bit MF12p5_12bit_i ( + .aclk (clk), // input wire aclk + .s_axis_data_tvalid(s_axis_data_tvalid_i), // input wire s_axis_data_tvalid + .s_axis_data_tready(s_axis_data_tready_i), // output wire s_axis_data_tready + .s_axis_data_tdata ({4'd0, dini}), // input wire [15 : 0] s_axis_data_tdata + .m_axis_data_tvalid(m_axis_data_tvalid_i), // output wire m_axis_data_tvalid + .m_axis_data_tdata (MF_m_axis_data_tdata_i) // output wire [31 : 0] m_axis_data_tdata + ); + + wire s_axis_data_tvalid_q; + wire s_axis_data_tready_q; + wire m_axis_data_tvalid_q; + wire [31:0] MF_m_axis_data_tdata_q; + + assign s_axis_data_tvalid_q = start; + MF12p5_12bit MF12p5_12bit_q ( + .aclk (clk), // input wire aclk + .s_axis_data_tvalid(s_axis_data_tvalid_q), // input wire s_axis_data_tvalid + .s_axis_data_tready(s_axis_data_tready_q), // output wire s_axis_data_tready + .s_axis_data_tdata ({4'd0, dinq}), // input wire [15 : 0] s_axis_data_tdata + .m_axis_data_tvalid(m_axis_data_tvalid_q), // output wire m_axis_data_tvalid + .m_axis_data_tdata (MF_m_axis_data_tdata_q) // output wire [31 : 0] m_axis_data_tdata + ); + + //截位:结果为MF_m_axis_data_tdata_i/q[25:0] + //低位截位15bit,高位截位1bit,得10bit宽结果 + always @(posedge clk) begin + if (MF_m_axis_data_tdata_i[25:24] == 2'b00 || MF_m_axis_data_tdata_i[25:24] == 2'b11) begin + matchfilterout_i <= MF_m_axis_data_tdata_i[24:15]; + end + else begin + matchfilterout_i <= (MF_m_axis_data_tdata_i[25] == 1'b1) ? 10'b10_0000_0000 : 10'b01_1111_1111; + end + + if (MF_m_axis_data_tdata_q[25:24] == 2'b00 || MF_m_axis_data_tdata_q[25:24] == 2'b11) begin + matchfilterout_q <= MF_m_axis_data_tdata_q[24:15]; + end + else begin + matchfilterout_q <= (MF_m_axis_data_tdata_q[25] == 1'b1) ? 10'b10_0000_0000 : 10'b01_1111_1111; + end + end + + reg MF_rdy_d1; + always @(posedge clk) begin + MF_rdy_d1 <= MF_rdy; + if (rst) begin + MF_rdy <= 1'b0; + MF_rst <= 1'b0; + end + else begin + MF_rdy <= start; + if ((MF_rdy == 1'b1) && (MF_rdy_d1 == 1'b0)) begin + MF_rst <= 1'b1; + end + else begin + MF_rst <= 1'b0; + end + end + end + + //------DEBUG模块------// +`ifdef MF_debug + + //ILA + /*ila_16x8 ila_MF_inst( + .clk(clk), + .probe0(dini), + .probe1(dinq), + .probe2(start), + .probe3(matchfilterout_i), + .probe4(matchfilterout_q), + .probe5(MF_rdy), + .probe6(8'b0), + .probe7(8'b0) + );*/ + + + +`endif + +endmodule diff --git a/hdl/Receiver.v b/hdl/Receiver.v index a320485..b92a99c 100644 --- a/hdl/Receiver.v +++ b/hdl/Receiver.v @@ -74,6 +74,7 @@ module Receiver ( dmf_s_valid <= 1'd0; end else if (startup_4x && fifo_out_valid && cnt_fifo_out_valid == cnt_fifo_out_valid_sel) begin + // fifo_out_valid may be not trustable at the rst state dmf_s_valid <= 1'd1; end else begin diff --git a/hdl/RecvTop.v b/hdl/RecvTop.v index 8738364..3bc78da 100644 --- a/hdl/RecvTop.v +++ b/hdl/RecvTop.v @@ -28,44 +28,12 @@ module RecvTop ( input [11:0] dini, input [11:0] dinq, - //视频数据存储,shx - input [13:0] recv_addr_new_0, - input [13:0] recv_addr_new_1, - input [13:0] recv_addr_new_2, - input [13:0] recv_addr_new_3, - output [ 7:0] recv_data_new_0, - output [ 7:0] recv_data_new_1, - output [ 7:0] recv_data_new_2, - output [ 7:0] recv_data_new_3, - output [16:0] RAMaddra_write_0, - output [16:0] RAMaddra_write_1, - output [16:0] RAMaddra_write_2, - output [16:0] RAMaddra_write_3, - output [16:0] RAMaddra_new_0, - output [16:0] RAMaddra_new_1, - output [16:0] RAMaddra_new_2, - output [16:0] RAMaddra_new_3, - output flag_stop, //给shx,拉高8个clk表示当前时帧有效数据接收完毕 - output [16:0] addr_stop, //给shx,拉高8个clk,与flag_stop对齐,指示位置与最后1bit有效数据的位置对齐 + output [3:0] ad9361_ctrl_in, - //vio - // input DC_move_able, //为1的时候启用去直流,为0的时候不启用 - // input [1:0] vio_powertest_h, //DAGC - // input [1:0] vio_powertest_l, //DAGC - // input DAGC_enab, //为1的时候启用DAGC,为0的时候不启用DAGC - // input vio_tsync_inter16, //为1的时候启用内插,从16倍过采样中挑一路 - // input EQUenable_vio, //为1时启用均衡 - // input [7:0] Zerozone_vio, //零域估计,默认值为8'd29 - input [6:0] vio_stopbit, //寻找停止位,默认值为7'd60 + output flag_stop, //给shx,拉高8个clk表示当前时帧有效数据接收完毕 + output [16:0] addr_stop, //给shx,拉高8个clk,与flag_stop对齐,指示位置与最后1bit有效数据的位置对齐 - //9361、射频增益控制 - output [7:0] data_9361, - output [9:0] addr_9361, - output enab_9361, - output D1_12dB, - output D2_6dB, - output D3_18dB, - output D4_12dB, + input [6:0] vio_stopbit, //寻找停止位,默认值为7'd60 //debug //trigger @@ -139,74 +107,212 @@ module RecvTop ( output reg flagoverflow = 1'd0, //总溢出标志 output Pilot_rdy_hide1_d1, - - - - output [63:0] recvNetData, output recvNetDataNd, input debug_loss - // input [ 7:0] MAC_idNum - // input [ 7:0] video_id01, - // input [ 7:0] video_id02, - // input [ 7:0] video_id03 - ); + reg [7:0] cnt_mgc_delay; + wire mgc_start; + wire flag_mgc_done; // level flag + wire flag_mgc_done_4x; // level flag + always @(posedge clk) begin + if (rst) begin + cnt_mgc_delay <= 0; + end + else if (cnt_mgc_delay < 8'hff) begin + cnt_mgc_delay <= cnt_mgc_delay + 1; + end + else begin + cnt_mgc_delay <= cnt_mgc_delay; + end + end + assign mgc_start = (nt_mgc_delay == 8'hff); - MGC_adaptation MGC_adaptation ( - .clk (clk), - .rst (rst), - .dini(dini), - .dinq(dinq), - - .data_9361(data_9361), - .addr_9361(addr_9361), - .enab_9361(enab_9361), - .D1_12dB (D1_12dB), - .D2_6dB (D2_6dB), - .D3_18dB (D3_18dB), - .D4_12dB (D4_12dB), - - .mgc1_rdy(mgc1_rdy) + ad9361_mgc_pin_ctrl u_ad9361_mgc_pin_ctrl ( + .clk (clk), + .rst (rst), + .start (mgc_start), + .rx_data_i (dini), + .rx_data_q (dinq), + .ad9361_ctrl_in(ad9361_ctrl_in), + .flag_mgc_done (flag_mgc_done) ); + wire MF_rdy; // flag_mgc_done_d1 + wire MF_rst; // flag_mgc_done_pulse_d2 - wire MF_rdy; - wire MF_rst; + wire fifo_out_valid; + reg [ 2:0] cnt_fifo_out_valid; + reg [ 2:0] cnt_fifo_out_valid_sel = 1; // 根据speed mode对应的计数器边界值 + + wire [31:0] fifo_out; + reg dmf_s_valid; + wire dmf_tvalid_interp4_i; + wire dmf_tvalid_interp4_q; + wire [31:0] mf_data_interp4_i; + wire [31:0] mf_data_interp4_q; + wire [23:0] dmf_tdata_interp4_i; + wire [23:0] dmf_tdata_interp4_q; + + // valid signal for dmf + always @(posedge clk_4x) begin + if (rst) begin + dmf_s_valid <= 1'd0; + end + else if (flag_mgc_done_4x && fifo_out_valid && cnt_fifo_out_valid == cnt_fifo_out_valid_sel) begin + // fifo_out_valid may be not trustable at the rst state + dmf_s_valid <= 1'd1; + end + else begin + dmf_s_valid <= 1'd0; + end + end + + always @(posedge clk_4x) begin + if (rst) begin + cnt_fifo_out_valid <= 3'd0; + end + else if (fifo_out_valid) begin + if (cnt_fifo_out_valid == cnt_fifo_out_valid_sel) begin // refer to Receiver.v + cnt_fifo_out_valid <= 3'd0; + end + else begin + cnt_fifo_out_valid <= cnt_fifo_out_valid + 3'd1; + end + end + else begin + cnt_fifo_out_valid <= cnt_fifo_out_valid; + end + end - MF_Top MF_Top ( - .clk(clk), - .rst(rst), - // .rst (rst), - .dini (dini), - .dinq (dinq), - .start(mgc1_rdy), - - .matchfilterout_i(matchfilterout_i), - .matchfilterout_q(matchfilterout_q), - .MF_rdy (MF_rdy), - .MF_rst (MF_rst) + // Match filter + fir_match_interp4 u_fir_match_filter_interp4_i ( + .aclk (clk), // input wire aclk + .s_axis_data_tvalid(flag_mgc_done), // input wire s_axis_data_tvalid + .s_axis_data_tready(), // output wire s_axis_data_tready + .s_axis_data_tdata ({4'd0, dini}), // input wire [15 : 0] s_axis_data_tdata + .m_axis_data_tvalid(), // output wire m_axis_data_tvalid + .m_axis_data_tdata (mf_data_interp4_i) // output wire [31 : 0] m_axis_data_tdata + ); + fir_match_interp4 u_fir_match_filter_interp4_q ( + .aclk (clk), // input wire aclk + .s_axis_data_tvalid(flag_mgc_done), // input wire s_axis_data_tvalid + .s_axis_data_tready(), // output wire s_axis_data_tready + .s_axis_data_tdata ({4'd0, dinq}), // input wire [15 : 0] s_axis_data_tdata + .m_axis_data_tvalid(), // output wire m_axis_data_tvalid + .m_axis_data_tdata (mf_data_interp4_q) // output wire [31 : 0] m_axis_data_tdata ); + // CDC into clk_4x + fifo_shift u_fifo_shift ( + // input + .s_aclk (clk), // input wire s_aclk + .s_aresetn (flag_mgc_done), // input wire s_aresetn + .s_axis_tvalid(flag_mgc_done), // input wire s_axis_tvalid + .s_axis_tready(), // output wire s_axis_tready + .s_axis_tdata ({8'd0, mf_data_interp4_q[29-:12], mf_data_interp4_i[29-:12]}), // input wire [31 : 0] s_axis_tdata + // output + .m_aclk (clk_4x), // input wire m_aclk + .m_axis_tvalid(fifo_out_valid), // output wire m_axis_tvalid + .m_axis_tready(1'b1), // input wire m_axis_tready + .m_axis_tdata (fifo_out), // output wire [31 : 0] m_axis_tdata + .wr_rst_busy (), + .rd_rst_busy () + ); + fir_dmf_interp4 u_fir_dmf_interp4_i ( + .aclk (clk_4x), + .s_axis_data_tvalid(dmf_s_valid), + .s_axis_data_tready(), + .s_axis_data_tdata ({4'd0, fifo_out[11:0]}), + .m_axis_data_tvalid(dmf_tvalid_interp4_i), + .m_axis_data_tdata (dmf_tdata_interp4_i) + ); + + fir_dmf_interp4 u_fir_dmf_interp4_q ( + .aclk (clk_4x), + .s_axis_data_tvalid(dmf_s_valid), + .s_axis_data_tready(), + .s_axis_data_tdata ({4'd0, fifo_out[23:12]}), + .m_axis_data_tvalid(dmf_tvalid_interp4_q), + .m_axis_data_tdata (dmf_tdata_interp4_q) + ); + + wire [21:0] mag; + wire mag_valid; + wire frame_sync_4x; + wire frame_sync_pulse; // in domain clk + MagnitudeEstimator #( + .VEC_WIDTH(21) + ) u_MagnitudeEstimator ( + .clk (clk_4x), + .rst (rst), + .vec_valid(dmf_tvalid_interp4_i), + .I (dmf_tdata_interp4_i), + .Q (dmf_tdata_interp4_q), + .mag (mag), + .mag_valid(mag_valid) + ); + + PAPR #( + .MAG_WIDTH (22), + .WINDOW_DEPTH(1023) + ) u_PAPR ( + .clk (clk_4x), + .rst (rst), + .vec_mag (mag), + .mag_valid (mag_valid), + .frame_sync (frame_sync_4x), + .frame_sync_pulse() + ); + + // wire [9:0] DAGC_out_i; + // wire [9:0] DAGC_out_q; + + wire [9:0] FrameSync_douti; + wire [9:0] FrameSync_doutq; + wire dagc_rdy; + wire mgc_rdy; + wire rst_dagc; + + DAGC_v2 DAGC_v2 ( + .clk (clk), + .rst (~mgc1_rdy), + .mgc1_rdy (MF_rdy), + .framesync_d0 (framesync), + .vio_powertest_h (2'b00), + .vio_powertest_l (2'b00), + .matchfilterout_i(FrameSync_douti), + .matchfilterout_q(FrameSync_doutq), + // output + .DAGC_out_i (DAGC_out_i), + .DAGC_out_q (DAGC_out_q), + //flag + .flag_agch (flag_agch), + .flag_agcl (flag_agcl), + .flag_agc_power (flag_agc_power), + .agc_ref (agc_ref), + .agc_check (agc_check), + .dagc_rdy (dagc_rdy), + .mgc_rdy (mgc_rdy), + .rst_dagc (rst_dagc) + ); //帧同步模块 - assign FrameSync_dini = (DAGC_enab) ? DAGC_out_i : matchfilterout_i; - assign FrameSync_dinq = (DAGC_enab) ? DAGC_out_q : matchfilterout_q; + assign FrameSync_dini = DAGC_out_i; + assign FrameSync_dinq = DAGC_out_q; // wire framesync; - wire Sync_rdy; - wire Pilot_rdy; + wire Sync_rdy; + wire Pilot_rdy; - wire [9:0] FrameSync_douti; - wire [9:0] FrameSync_doutq; SCFDE_recv_FrameSync SCFDE_recv_FrameSync_inst ( @@ -217,10 +323,10 @@ module RecvTop ( .datain_q (matchfilterout_q), .Sync_i (FrameSync_douti), .Sync_q (FrameSync_doutq), - .Sync_rdy (Sync_rdy), // 帧同步找到了过门限峰值 - .Pilot_rdy (Pilot_rdy),// 开始取导频的标志位 not used - .flag_sync (framesync), // high level flag - .Pilot_rdy_hide1_d1(Pilot_rdy_hide1_d1) // not used + .Sync_rdy (Sync_rdy), // 帧同步找到了过门限峰值 + .Pilot_rdy (Pilot_rdy), // 开始取导频的标志位 not used + .flag_sync (framesync), // high level flag not used + .Pilot_rdy_hide1_d1(Pilot_rdy_hide1_d1) // not used ); // @@ -230,12 +336,13 @@ module RecvTop ( if (Pilot_rdy_hide1_d1) begin cnt_lost <= 21'd0; framelost <= 1'b0; - end else begin + end + else begin if (cnt_lost >= 21'd750000) begin - ; cnt_lost <= 21'd0; framelost <= 1'b1; - end else begin + end + else begin cnt_lost <= 21'd1 + cnt_lost; framelost <= 1'b0; end @@ -490,61 +597,47 @@ module RecvTop ( .nd_ber (nd_ber), .recvNetData (recvNetData), .recvNetDataNd(recvNetDataNd) - // .MAC_idNum (MAC_idNum) - // .video_id01 (8'd0), - // .video_id02 (8'd0), - // .video_id03 (8'd0) ); - - - /*ila_recvtop ila_recvtop( - .clk(clk), - .probe0(framesync), - .probe1(framesync_delay), - .probe2(phase_adjust_rdy), - .probe3(nd_SC_FDE_dout), - .probe4(IQmergerdy), - .probe5(IQmergedout), - .probe6(LDPC_Rdy), - .probe7(LDPC_Dout), - .probe8(SC_FDE_douti), - .probe9(SC_FDE_doutq), - .probe10(total_frames), - .probe11(good_frames), - .probe12(dini), - .probe13(dinq), - .probe14(phase_adjust_douti), - .probe15(phase_adjust_doutq), - .probe16(D1_12dB), - .probe17(D2_6dB), - .probe18(D3_18dB), - .probe19(D4_12dB) - -);*/ - ila_recvtest ila_recvtest ( - .clk (clk), - .probe0(framesync), - .probe1(framesync_delay), - .probe2(D1_12dB), - .probe3(D2_6dB), - .probe4(D3_18dB), - .probe5(D4_12dB), - .probe6(mgc1_rdy), - .probe7(rst), - .probe8(dini), - .probe9(dinq) + // **** cdc **** + xpm_cdc_single #( + .DEST_SYNC_FF (2), // DECIMAL; range: 2-10 + .INIT_SYNC_FF (1), // DECIMAL; 0=disable simulation init values, 1=enable simulation init values + .SIM_ASSERT_CHK(1), // DECIMAL; 0=disable simulation messages, 1=enable simulation messages + .SRC_INPUT_REG (1) // DECIMAL; 0=do not register input, 1=register input + ) xpm_cdc_startup_inst ( + .dest_out(flag_mgc_done_4x), // 1-bit output: src_in synchronized to the destination clock domain. This output is + // registered. + .dest_clk(clk_4x), // 1-bit input: Clock signal for the destination clock domain. + .src_clk (clk), // 1-bit input: optional; required when SRC_INPUT_REG = 1 + .src_in (flag_mgc_done) // 1-bit input: Input signal to be synchronized to dest_clk domain. ); - /*ila_decode ila_decode( - .clk(clk2), - .probe0(IQmergerdy), - .probe1(IQmergedout), - .probe2(LDPC_Dout), - .probe3(LDPC_Rdy), - .probe4(framerdy), - .probe5(total_frames), - .probe6(good_frames) -);*/ + + xpm_cdc_pulse #( + .DEST_SYNC_FF (4), // DECIMAL; range: 2-10 + .INIT_SYNC_FF (0), // DECIMAL; 0=disable simulation init values, 1=enable simulation init values + .REG_OUTPUT (0), // DECIMAL; 0=disable registered output, 1=enable registered output + .RST_USED (0), // DECIMAL; 0=no reset, 1=implement reset + .SIM_ASSERT_CHK(1) // DECIMAL; 0=disable simulation messages, 1=enable simulation messages + ) xpm_cdc_frame_sync_pulse_inst ( + .dest_pulse(frame_sync_pulse), // 1-bit output: Outputs a pulse the size of one dest_clk period when a pulse + // transfer is correctly initiated on src_pulse input. This output is + // combinatorial unless REG_OUTPUT is set to 1. + .dest_clk (clk), // 1-bit input: Destination clock. + .dest_rst (), // 1-bit input: optional; required when RST_USED = 1 + .src_clk (clk_4x), // 1-bit input: Source clock. + .src_pulse (frame_sync_4x), // 1-bit input: Rising edge of this signal initiates a pulse transfer to the + // destination clock domain. The minimum gap between each pulse transfer must be + // at the minimum 2*(larger(src_clk period, dest_clk period)). This is measured + // between the falling edge of a src_pulse to the rising edge of the next + // src_pulse. This minimum gap will guarantee that each rising edge of src_pulse + // will generate a pulse the size of one dest_clk period in the destination + // clock domain. When RST_USED = 1, pulse transfers will not be guaranteed while + // src_rst and/or dest_rst are asserted. + .src_rst () // 1-bit input: optional; required when RST_USED = 1 + ); + + endmodule diff --git a/hdl/SCFDE_recv_FrameSync.v b/hdl/SCFDE_recv_FrameSync.v new file mode 100644 index 0000000..d2cc648 --- /dev/null +++ b/hdl/SCFDE_recv_FrameSync.v @@ -0,0 +1,409 @@ +`timescale 1ns / 1ps +////////////////////////////////////////////////////////////////////////////////// +// Company: +// Engineer: +// +// Create Date: 2019/12/20 21:52:37 +// Design Name: +// Module Name: SCFDE_recv_FrameSync +// Project Name: +// Target Devices: +// Tool Versions: +// Description: +// +// Dependencies: +// +// Revision: +// Revision 0.01 - File Created +// Additional Comments: +// +////////////////////////////////////////////////////////////////////////////////// + + +module SCFDE_recv_FrameSync ( + + input clk, + input rst, + input rst_ready, + input [9:0] datain_i, + input [9:0] datain_q, + input debug_loss, + output reg [9:0] Sync_i = 10'd0, + output reg [9:0] Sync_q = 10'd0, + output reg Sync_rdy = 1'b0, //判断出峰的标志位,出峰后拉高1clk + output reg Pilot_rdy = 1'b0, //出峰后88个clk后拉高1clk,对齐导频头 + output reg flag_sync = 1'b0, + output reg Pilot_rdy_hide1_d1 = 1'b0 + + //debug + +); + + //----------卷积与流水累加替代模块----------// + + //wire [19:0] add_regi_2048; + //wire [19:0] add_regq_2048; + wire [18:0] add_regi_19bit; + wire [18:0] add_regq_19bit; + /*conv_add conv_add( + .clk(clk), + .rst(rst), + .data_i(datain_i), + .data_q(datain_q), + .add_regi_2048(add_regi_2048), + .add_regq_2048(add_regq_2048) + );*/ + wire [ 9:0] dataout_i; + wire dout_valid_i; + DMF DMF_i ( + .clk (clk), + .rst (rst), + .din_data (datain_i), + .din_valid (1'b1), + .dout_dmf (add_regi_19bit), + .dout_data (dataout_i), + .dout_valid(dout_valid_i) + ); + + wire [9:0] dataout_q; + wire dout_valid_q; + DMF DMF_q ( + .clk (clk), + .rst (rst), + .din_data (datain_q), + .din_valid (1'b1), + .dout_dmf (add_regq_19bit), + .dout_data (dataout_q), + .dout_valid(dout_valid_q) + ); + + + + //----------将实部和虚部的相关结果求近似模值----------// + //----------6 delay----------// + wire [19:0] reg_add11; + wire [18:0] add_regi; + wire [18:0] add_regq; + wire ApproxAbs_rdy; + + assign add_regi = (add_regi_19bit[18] == 1'd1) ? -add_regi_19bit : add_regi_19bit; + assign add_regq = (add_regq_19bit[18] == 1'd1) ? -add_regq_19bit : add_regq_19bit; + + ApproxAbs_v2_20bit ApproxAbs_v2_tsync4 ( + .clk (clk), + .ND (dout_valid_i), + .Din_I(add_regi), + .Din_Q(add_regq), + .Dout (reg_add11), + .Rdy (ApproxAbs_rdy) + ); + + + //----------将1024个相关结果流水累加----------// + reg rst_1 = 1'b0; + reg [7:0] rst_1_cnt = 8'b0; + always @(posedge clk) begin + if (!ApproxAbs_rdy) begin + rst_1_cnt = 8'b0; + end + else begin + rst_1_cnt <= rst_1_cnt > 8'd128 ? 8'd129 : rst_1_cnt + 8'd1; + end + rst_1 <= (rst_1_cnt < 8'd128); + end + wire [19:0] average_add10; + + average_1024 average_1024 ( + .clk (clk), + .rst (rst_1), + .nd (ApproxAbs_rdy), + .din (reg_add11), + .average(average_add10) + ); + + + //----------将和求平均值,从而得到门限----------// + reg [19:0] reg_save1024 = 20'd0; + reg [19:0] reg_save1024_d1 = 20'd0; + reg [19:0] reg_save1024_d2 = 20'd0; + reg [19:0] reg_save1024_d2_x2 = 20'd0; + reg [19:0] reg_save_pilot; + reg [19:0] Threshold; + reg [ 3:0] th_control = 4'd8; + + always @(posedge clk) begin + if (rst) begin + reg_save1024 <= 20'd0; + reg_save1024_d1 <= 20'd0; + reg_save1024_d2 <= 20'd0; + reg_save1024_d2_x2 <= 20'd0; + Threshold <= 20'd0; + end + else begin + reg_save1024 <= reg_add11; + reg_save1024_d1 <= reg_save1024; + reg_save1024_d2 <= reg_save1024_d1; + case (th_control) + 4'd1: begin + Threshold <= average_add10; + reg_save1024_d2_x2 <= reg_save1024_d1; + end + 4'd2: begin + Threshold <= {average_add10[18:0], 1'b0}; + reg_save1024_d2_x2 <= reg_save1024_d1; + end + 4'd3: begin + Threshold <= average_add10 + {average_add10[18:0], 1'b0}; + reg_save1024_d2_x2 <= reg_save1024_d1; + end + 4'd4: begin + Threshold <= {average_add10[17:0], 2'b00}; + reg_save1024_d2_x2 <= {reg_save1024_d1[18:0], 1'b0}; + end + 4'd5: begin + Threshold <= average_add10 + {average_add10[17:0], 2'b00}; + reg_save1024_d2_x2 <= {reg_save1024_d1[18:0], 1'b0}; + end + 4'd6: begin + Threshold <= {average_add10[18:0], 1'b0} + {average_add10[17:0], 2'b00}; + reg_save1024_d2_x2 <= reg_save1024_d1 + {reg_save1024_d1[18:0], 1'b0}; + end + 4'd7: begin + Threshold <= average_add10 + {average_add10[18:0], 1'b0} + {average_add10[17:0], 2'b0}; + reg_save1024_d2_x2 <= reg_save1024_d1 + {reg_save1024_d1[18:0], 1'b0}; + end + 4'd8: begin + Threshold <= {average_add10[16:0], 3'b000}; + reg_save1024_d2_x2 <= {reg_save1024_d1[17:0], 2'b00}; + end + 4'd9: begin + Threshold <= average_add10 + {average_add10[16:0], 3'b000}; + reg_save1024_d2_x2 <= {reg_save1024_d1[17:0], 2'b00}; + end + default: begin + Threshold <= {average_add10[17:0], 2'b00}; + reg_save1024_d2_x2 <= {reg_save1024_d1[18:0], 1'b0}; + end + endcase + end + end + + //----------将相关求和后的近似模值与门限比较;若高于门限,再与相邻近似模值比较----------// + + reg [ 6:0] counter88 = 7'd0; + //rst之后500个clk之内不允许拉高Pilot_rdy_hide1 + reg [11:0] count_rst500 = 12'd0; + reg [ 3:0] state_framesync; + always @(posedge clk) begin + if (rst) begin + count_rst500 <= 15'd0; + state_framesync <= 4'd0; + counter88 <= 7'd0; + reg_save_pilot <= 20'd0; + Pilot_rdy_hide1_d1 <= 1'b0; + flag_sync <= 1'b0; + Sync_rdy <= 1'b0; + end + else begin + case (state_framesync) + 4'd0: begin + if (count_rst500 == 12'd32) begin //等待32个clk的rst + count_rst500 <= 12'd0; + state_framesync <= 4'd1; + end + else begin + count_rst500 <= count_rst500 + 12'd1; + state_framesync <= state_framesync; + end + end + 4'd1: begin + if (Threshold != 20'd0) begin + state_framesync <= 4'd2; + end + else begin + state_framesync <= state_framesync; + end + end + 4'd2: begin + if (count_rst500 == 12'd2048) begin //等待计数过2048个clk + count_rst500 <= 12'd0; + state_framesync <= 4'd3; + end + else begin + count_rst500 <= count_rst500 + 12'd1; + state_framesync <= state_framesync; + end + end + 4'd3: begin + if ((reg_save1024_d1 > Threshold)) begin //检测到过门限值 + if ((reg_save1024_d1 >= reg_save1024) && (reg_save1024_d1 >= reg_save1024_d2)) begin + if (reg_save1024_d1 >= 20'd128) begin + Sync_rdy <= 1'b1; + state_framesync <= 4'd4; + reg_save_pilot <= reg_save1024_d1; + end + else begin + Sync_rdy <= 1'b0; + state_framesync <= state_framesync; + end + end + + else begin + Sync_rdy <= 1'b0; + end + end + + else begin + Sync_rdy <= 1'b0; + end + end + 4'd4: begin + if (counter88 == 7'd86) begin + Sync_rdy <= 1'b0; + flag_sync <= 1'b1; + Pilot_rdy_hide1_d1 <= 1'b1; + state_framesync <= 4'd5; + end + else if (counter88 >= 7'd32) begin + if (reg_save_pilot >= reg_save1024_d2_x2) begin // ? reg_save_pilot是DMF滤波器输出峰值 + counter88 <= counter88 + 7'd1; + end + else begin + counter88 <= 7'd0; + state_framesync <= 4'd3; + Sync_rdy <= 1'b0; + end + flag_sync <= 1'b0; + end + else begin + counter88 <= counter88 + 7'd1; + flag_sync <= 1'b0; + end + end + 4'd5: begin + flag_sync <= 1'b1; + Pilot_rdy_hide1_d1 <= 1'b0; + state_framesync <= state_framesync; + end + default: begin + if (count_rst500 == 12'd32) begin + count_rst500 <= 12'd0; + state_framesync <= 4'd1; + end + else begin + count_rst500 <= count_rst500 + 12'd1; + state_framesync <= state_framesync; + end + end + endcase + end + end + + //----------将输入数据打延迟,与Sync_rdy拉高的时刻同步输出----------// + reg [9:0] datain_i_d1; + reg [9:0] datain_q_d1; + reg [9:0] datain_i_d2; + reg [9:0] datain_q_d2; + reg [9:0] datain_i_d3; + reg [9:0] datain_q_d3; + reg [9:0] datain_i_d4; + reg [9:0] datain_q_d4; + reg [9:0] datain_i_d5; + reg [9:0] datain_q_d5; + reg [9:0] datain_i_d6; + reg [9:0] datain_q_d6; + reg [9:0] datain_i_d7; + reg [9:0] datain_q_d7; + reg [9:0] datain_i_d8; + reg [9:0] datain_q_d8; + reg [9:0] datain_i_d9; + reg [9:0] datain_q_d9; + /*shift_ram_x shift_ram_i1 ( + .D(datain_i), + .CLK(clk), + .Q(datain_i_d3) + ); + wire [9:0] datain_q_d3; + shift_ram_x shift_ram_q1 ( + .D(datain_q), + .CLK(clk), + .Q(datain_q_d3) + );*/ + always @(posedge clk) begin + if (rst) begin + Sync_i <= 10'd0; + Sync_q <= 10'd0; + datain_i_d1 <= 10'd0; + datain_q_d1 <= 10'd0; + datain_i_d2 <= 10'd0; + datain_q_d2 <= 10'd0; + datain_i_d3 <= 10'd0; + datain_q_d3 <= 10'd0; + datain_i_d4 <= 10'd0; + datain_q_d4 <= 10'd0; + datain_i_d5 <= 10'd0; + datain_q_d5 <= 10'd0; + datain_i_d6 <= 10'd0; + datain_q_d6 <= 10'd0; + datain_i_d7 <= 10'd0; + datain_q_d7 <= 10'd0; + datain_i_d8 <= 10'd0; + datain_q_d8 <= 10'd0; + datain_i_d9 <= 10'd0; + datain_q_d9 <= 10'd0; + end + else begin + datain_i_d1 <= datain_i; + datain_q_d1 <= datain_q; + datain_i_d2 <= datain_i_d1; + datain_q_d2 <= datain_q_d1; + datain_i_d3 <= datain_i_d2; + datain_q_d3 <= datain_q_d2; + datain_i_d4 <= datain_i_d3; + datain_q_d4 <= datain_q_d3; + datain_i_d5 <= datain_i_d4; + datain_q_d5 <= datain_q_d4; + datain_i_d6 <= datain_i_d5; + datain_q_d6 <= datain_q_d5; + datain_i_d7 <= datain_i_d6; + datain_q_d7 <= datain_q_d6; + datain_i_d8 <= datain_i_d7; + datain_q_d8 <= datain_q_d7; + datain_i_d9 <= datain_i_d8; + datain_q_d9 <= datain_q_d8; + Sync_i <= datain_i_d9; + Sync_q <= datain_q_d9; + end + end + + // `ifdef FrameSync_debug + + /* ila_FS_inst ila_FS_inst( + .clk(clk), + .probe0(datain_i),//10 + .probe1(datain_q),//10 + .probe2(rst),//1 + .probe3(Pilot_rdy_hide1_d1),//1 + .probe4(reg_save1024_d2_x2),//20 + .probe5(average_add10),//20 + .probe6(Threshold),//20 + .probe7(reg_save1024_d1),//20 + .probe8(debug_loss),//1 + .probe9(flag_sync),//1 + .probe10(state_framesync),//4 + .probe11(counter88),//7 + .probe12(Sync_rdy),//1 + .probe13(th_control)//4 + + );*/ + + // ILA LARGE + /*ila_large ila_MF_large_inst( + .clk(clk), + .probe0(datain_i[9:0]), + .probe1({rst_ready,rst,Pilot_rdy_hide1}) + );*/ + + // `endif + +endmodule diff --git a/hdl/ad9361_mgc_pin_ctrl.v b/hdl/ad9361_mgc_pin_ctrl.v index a5aba34..eb0355a 100644 --- a/hdl/ad9361_mgc_pin_ctrl.v +++ b/hdl/ad9361_mgc_pin_ctrl.v @@ -14,13 +14,14 @@ module ad9361_mgc_pin_ctrl ( - input clk, + input clk, input rst, - // input start, + input start, input [11:0] rx_data_i, input [11:0] rx_data_q, // this port is from zynq to ad9361 - output wire [ 3:0] ad9361_ctrl_in + output wire [ 3:0] ad9361_ctrl_in, + output reg flag_mgc_done ); @@ -41,6 +42,9 @@ module ad9361_mgc_pin_ctrl ( wire flag_too_low; // low amplitude wire flag_adjust; reg [3:0] cnt_pulse_width; + // indicating the mgc done ready + wire power_measure_done_pulse; + // adjust fsm localparam S_IDLE = 0; @@ -76,6 +80,15 @@ module ad9361_mgc_pin_ctrl ( start_d1 <= start; end + // single pulse to level signal + always @(posedge clk) begin + if (rst) begin + flag_mgc_done <= 0; + end + else if (power_measure_done_pulse) begin + flag_mgc_done <= 1; + end + end // FSM always @(posedge clk) begin @@ -122,21 +135,22 @@ module ad9361_mgc_pin_ctrl ( // measuring the signal power // two cases, amplitute too high or amplitude too low power_measure u_power_measure ( - .clk (clk), - .rst (rst), - .start (start_posedge), - .data_i (rx_data_i), - .data_q (rx_data_q), - .flag_too_high(flag_too_high), - .flag_too_low (flag_too_low) + .clk (clk), + .rst (rst), + .start (start_posedge), + .data_i (rx_data_i), + .data_q (rx_data_q), + .flag_too_high (flag_too_high), + .flag_too_low (flag_too_low), + .power_measure_done_pulse(power_measure_done_pulse) ); // ******** Debug ******** - vio_mgc_control_in u_vio_mgc_control_in ( - .clk (clk), // input wire clk - .probe_out0(start) // output wire [0 : 0] probe_out0 - ); + // vio_mgc_control_in u_vio_mgc_control_in ( + // .clk (clk), // input wire clk + // .probe_out0(start) // output wire [0 : 0] probe_out0 + // ); ila_ad9361_mgc u_ila_ad9361_mgc ( .clk (clk), // input wire clk @@ -148,7 +162,7 @@ module ad9361_mgc_pin_ctrl ( .probe5(flag_too_high), // input wire [0:0] probe5 .probe6(flag_too_low), // input wire [0:0] probe6 .probe7(u_power_measure.cnt_amp_too_high), // input wire [0:0] probe6 - .probe8(u_power_measure.cnt_startup) // input wire [11:0] probe6 + .probe8(u_power_measure.cnt_startup) // input wire [11:0] probe6 ); diff --git a/hdl/power_measure.v b/hdl/power_measure.v index 5a4e286..ebdf975 100644 --- a/hdl/power_measure.v +++ b/hdl/power_measure.v @@ -25,7 +25,8 @@ module power_measure ( input wire [11:0] data_i, input wire [11:0] data_q, output reg flag_too_high, - output reg flag_too_low + output reg flag_too_low, + output reg power_measure_done_pulse ); localparam CNT_WAIT_9361_MAX = 80; //* 等待周期数 @@ -56,11 +57,11 @@ module power_measure ( reg [ 3:0] sign_bit_num_min_i; reg [ 3:0] sign_bit_num_q; reg [ 3:0] sign_bit_num_min_q; - + // startup reg [ 7:0] cnt_startup; // set rx gain to max each time start posedge comes reg [ 3:0] cnt_amp_too_high; // for short cuirt - + // abs reg [11:0] data_i_abs; reg [11:0] data_q_abs; @@ -200,6 +201,15 @@ module power_measure ( end end + always @(posedge clk) begin + if (cs == S_MEASURE_ADJ && ns == S_MEASURE_IDLE) begin + power_measure_done_pulse <= 1; + end + else begin + power_measure_done_pulse <= 0; + end + end + // get the abs value always @(posedge clk) begin