diff --git a/devices.json b/devices.json index eeda8ae7..d782e17d 100644 --- a/devices.json +++ b/devices.json @@ -2,22 +2,8 @@ "families": { "ECP5": { "devices": { - "LFE5U-12F": { - "packages": ["csfBGA285", "caBGA256", "caBGA381", "caBGA554", "caBGA756"], - "idcode": "0x21111043", - "frames": 7562, - "bits_per_frame": 592, - "pad_bits_after_frame": 0, - "pad_bits_before_frame": 0, - "max_row" : 50, - "max_col" : 72, - "row_bias" : 0, - "col_bias" : 0, - "fuzz": 1 - }, "LFE5U-25F": { "packages": ["csfBGA285", "caBGA256", "caBGA381", "caBGA554", "caBGA756"], - "idcode": "0x41111043", "frames": 7562, "bits_per_frame": 592, "pad_bits_after_frame": 0, @@ -26,11 +12,30 @@ "max_col" : 72, "row_bias" : 0, "col_bias" : 0, - "fuzz": 1 + "fuzz": 1, + "variants": { + "LFE5U-25F": { + "idcode": "0x41111043", + "packages": ["csfBGA285", "caBGA256", "caBGA381", "caBGA554", "caBGA756"], + "speeds": [ 6, 7, 8 ], + "suffixes": [ "C", "I" ] + }, + "LFE5U-12F": { + "idcode": "0x21111043", + "packages": ["csfBGA285", "caBGA256", "caBGA381", "caBGA554", "caBGA756"], + "speeds": [ 6, 7, 8 ], + "suffixes": [ "C", "I" ] + }, + "LAE5U-12F": { + "idcode": "0x21111043", + "packages": ["caBGA381"], + "speeds": [ 6, 7 ], + "suffixes": [ "E" ] + } + } }, "LFE5U-45F": { "packages": ["csfBGA285", "caBGA256", "caBGA381", "caBGA554", "caBGA756"], - "idcode": "0x41112043", "frames": 9470, "bits_per_frame": 846, "pad_bits_after_frame": 0, @@ -39,11 +44,18 @@ "max_col" : 90, "row_bias" : 0, "col_bias" : 0, - "fuzz": 1 + "fuzz": 1, + "variants": { + "LFE5U-45F": { + "idcode": "0x41112043", + "packages": ["csfBGA285", "caBGA256", "caBGA381", "caBGA554", "caBGA756"], + "speeds": [ 6, 7, 8 ], + "suffixes": [ "C", "I" ] + } + } }, "LFE5U-85F": { "packages": ["csfBGA285", "caBGA381", "caBGA554", "caBGA756"], - "idcode": "0x41113043", "frames": 13294, "bits_per_frame": 1136, "pad_bits_after_frame": 0, @@ -52,11 +64,18 @@ "max_col" : 126, "row_bias" : 0, "col_bias" : 0, - "fuzz": 1 + "fuzz": 1, + "variants": { + "LFE5U-85F": { + "idcode": "0x41113043", + "packages": ["csfBGA285", "caBGA381", "caBGA554", "caBGA756"], + "speeds": [ 6, 7, 8 ], + "suffixes": [ "C", "I" ] + } + } }, "LFE5UM-25F": { "packages": ["csfBGA285", "caBGA256", "caBGA381", "caBGA554", "caBGA756"], - "idcode": "0x01111043", "frames": 7562, "bits_per_frame": 592, "pad_bits_after_frame": 0, @@ -65,11 +84,30 @@ "max_col" : 72, "row_bias" : 0, "col_bias" : 0, - "fuzz": 1 + "fuzz": 1, + "variants": { + "LFE5UM-25F": { + "idcode": "0x01111043", + "packages": ["csfBGA285", "caBGA256", "caBGA381", "caBGA554", "caBGA756"], + "speeds": [ 6, 7, 8 ], + "suffixes": [ "C", "I" ] + }, + "LAE5UM-25F": { + "idcode": "0x01111043", + "packages": ["csfBGA285", "caBGA381"], + "speeds": [ 6, 7 ], + "suffixes": [ "E" ] + }, + "LFE5UM5G-25F": { + "idcode": "0x81111043", + "packages": ["csfBGA285", "caBGA256", "caBGA381", "caBGA554", "caBGA756"], + "speeds": [ 8 ], + "suffixes": [ "C", "I" ] + } + } }, "LFE5UM-45F": { "packages": ["csfBGA285", "caBGA256", "caBGA381", "caBGA554", "caBGA756"], - "idcode": "0x01112043", "frames": 9470, "bits_per_frame": 846, "pad_bits_after_frame": 0, @@ -78,50 +116,30 @@ "max_col" : 90, "row_bias" : 0, "col_bias" : 0, - "fuzz": 1 + "fuzz": 1, + "variants": { + "LFE5UM-45F": { + "idcode": "0x01112043", + "packages": ["csfBGA285", "caBGA256", "caBGA381", "caBGA554", "caBGA756"], + "speeds": [ 6, 7, 8 ], + "suffixes": [ "C", "I" ] + }, + "LAE5UM-45F": { + "idcode": "0x01112043", + "packages": ["csfBGA285", "caBGA381"], + "speeds": [ 6, 7 ], + "suffixes": [ "E" ] + }, + "LFE5UM5G-45F": { + "idcode": "0x81112043", + "packages": ["csfBGA285", "caBGA256", "caBGA381", "caBGA554", "caBGA756"], + "speeds": [ 8 ], + "suffixes": [ "C", "I" ] + } + } }, "LFE5UM-85F": { "packages": ["csfBGA285", "caBGA381", "caBGA554", "caBGA756"], - "idcode": "0x01113043", - "frames": 13294, - "bits_per_frame": 1136, - "pad_bits_after_frame": 0, - "pad_bits_before_frame": 0, - "max_row" : 95, - "max_col" : 126, - "row_bias" : 0, - "col_bias" : 0, - "fuzz": 1 - }, - "LFE5UM5G-25F": { - "packages": ["csfBGA285", "caBGA256", "caBGA381", "caBGA554", "caBGA756"], - "idcode": "0x81111043", - "frames": 7562, - "bits_per_frame": 592, - "pad_bits_after_frame": 0, - "pad_bits_before_frame": 0, - "max_row" : 50, - "max_col" : 72, - "row_bias" : 0, - "col_bias" : 0, - "fuzz": 1 - }, - "LFE5UM5G-45F": { - "packages": ["csfBGA285", "caBGA256", "caBGA381", "caBGA554", "caBGA756"], - "idcode": "0x81112043", - "frames": 9470, - "bits_per_frame": 846, - "pad_bits_after_frame": 0, - "pad_bits_before_frame": 2, - "max_row" : 71, - "max_col" : 90, - "row_bias" : 0, - "col_bias" : 0, - "fuzz": 1 - }, - "LFE5UM5G-85F": { - "packages": ["csfBGA285", "caBGA381", "caBGA554", "caBGA756"], - "idcode": "0x81113043", "frames": 13294, "bits_per_frame": 1136, "pad_bits_after_frame": 0, @@ -130,7 +148,27 @@ "max_col" : 126, "row_bias" : 0, "col_bias" : 0, - "fuzz": 1 + "fuzz": 1, + "variants": { + "LFE5UM-85F": { + "idcode": "0x01113043", + "packages": ["csfBGA285", "caBGA381", "caBGA554", "caBGA756"], + "speeds": [ 6, 7, 8 ], + "suffixes": [ "C", "I"] + }, + "LAE5UM-85F": { + "idcode": "0x01113043", + "packages": ["caBGA756"], + "speeds": [ 6, 7 ], + "suffixes": [ "E" ] + }, + "LFE5UM5G-85F": { + "idcode": "0x81113043", + "packages": ["csfBGA285", "caBGA381", "caBGA554", "caBGA756"], + "speeds": [ 8 ], + "suffixes": [ "C", "I" ] + } + } } } }, diff --git a/libtrellis/src/ChipConfig.cpp b/libtrellis/src/ChipConfig.cpp index e0604527..38b1d8e8 100644 --- a/libtrellis/src/ChipConfig.cpp +++ b/libtrellis/src/ChipConfig.cpp @@ -12,8 +12,7 @@ string ChipConfig::to_string() const { stringstream ss; ss << ".device " << chip_name << endl << endl; - if (!chip_variant.empty()) - ss << ".variant " << chip_variant << endl << endl; + ss << ".variant " << chip_variant << endl << endl; for (const auto &meta : metadata) ss << ".comment " << meta << endl; for (const auto &sc : sysconfig) diff --git a/libtrellis/src/Database.cpp b/libtrellis/src/Database.cpp index 2581433c..dabbc906 100644 --- a/libtrellis/src/Database.cpp +++ b/libtrellis/src/Database.cpp @@ -63,9 +63,21 @@ DeviceLocator find_device_by_name(string name) { return *found; } +static string device_legacy_mapping(string variant) +{ + if (variant == "LFE5U-12F") return "LFE5U-25F"; + if (variant == "LFE5UM5G-25F") return "LFE5UM-25F"; + if (variant == "LFE5UM5G-45F") return "LFE5UM-45F"; + if (variant == "LFE5UM5G-85F") return "LFE5UM-85F"; + return variant; +} + DeviceLocator find_device_by_name_and_variant(string name, string variant) { - if (variant.empty()) - return find_device_by_name(name); + if (variant.empty()) { + fprintf(stderr, "warning: using old nexpnr with new trellis tools.\n"); + variant = name; + name = device_legacy_mapping(variant); + } auto found = find_device_generic([variant](const string &n, const pt::ptree &p) -> bool { UNUSED(p); return n == variant; diff --git a/libtrellis/src/PyTrellis.cpp b/libtrellis/src/PyTrellis.cpp index 02a14120..16b8f954 100644 --- a/libtrellis/src/PyTrellis.cpp +++ b/libtrellis/src/PyTrellis.cpp @@ -156,6 +156,7 @@ PYBIND11_MODULE (pytrellis, m) class_(m, "Chip") .def(init()) + .def(init()) .def(init()) .def(init()) .def("get_tile_by_name", &Chip::get_tile_by_name) diff --git a/metadata/ECP5/LFE5U-12F/globals.json b/metadata/ECP5/LFE5U-12F/globals.json deleted file mode 100644 index cda63f5a..00000000 --- a/metadata/ECP5/LFE5U-12F/globals.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "quadrants": { - "UL": { - "x0": 0, - "y0": 0, - "x1": 31, - "y1": 25 - }, - "UR": { - "x0": 32, - "y0": 0, - "x1": 72, - "y1": 25 - }, - "LL": { - "x0": 0, - "y0": 26, - "x1": 31, - "y1": 50 - }, - "LR": { - "x0": 32, - "y0": 26, - "x1": 72, - "y1": 50 - } - }, - "taps": { - "C4": { - "lx0": 0, - "lx1": 3, - "rx0": 4, - "rx1": 12 - }, - "C22": { - "lx0": 13, - "lx1": 21, - "rx0": 22, - "rx1": 31 - }, - "C42": { - "lx0": 32, - "lx1": 41, - "rx0": 42, - "rx1": 50 - }, - "C60": { - "lx0": 51, - "lx1": 59, - "rx0": 60, - "rx1": 72 - } - }, - "spines": { - "UL4": { - "x": 3, - "y": 13 - }, - "LL4": { - "x": 3, - "y": 37 - }, - "UL22": { - "x": 21, - "y": 13 - }, - "LL22": { - "x": 21, - "y": 37 - }, - "UR42": { - "x": 41, - "y": 13 - }, - "LR42": { - "x": 41, - "y": 37 - }, - "UR60": { - "x": 59, - "y": 13 - }, - "LR60": { - "x": 59, - "y": 37 - } - } -} diff --git a/metadata/ECP5/LFE5UM5G-25F/globals.json b/metadata/ECP5/LFE5UM5G-25F/globals.json deleted file mode 100644 index cda63f5a..00000000 --- a/metadata/ECP5/LFE5UM5G-25F/globals.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "quadrants": { - "UL": { - "x0": 0, - "y0": 0, - "x1": 31, - "y1": 25 - }, - "UR": { - "x0": 32, - "y0": 0, - "x1": 72, - "y1": 25 - }, - "LL": { - "x0": 0, - "y0": 26, - "x1": 31, - "y1": 50 - }, - "LR": { - "x0": 32, - "y0": 26, - "x1": 72, - "y1": 50 - } - }, - "taps": { - "C4": { - "lx0": 0, - "lx1": 3, - "rx0": 4, - "rx1": 12 - }, - "C22": { - "lx0": 13, - "lx1": 21, - "rx0": 22, - "rx1": 31 - }, - "C42": { - "lx0": 32, - "lx1": 41, - "rx0": 42, - "rx1": 50 - }, - "C60": { - "lx0": 51, - "lx1": 59, - "rx0": 60, - "rx1": 72 - } - }, - "spines": { - "UL4": { - "x": 3, - "y": 13 - }, - "LL4": { - "x": 3, - "y": 37 - }, - "UL22": { - "x": 21, - "y": 13 - }, - "LL22": { - "x": 21, - "y": 37 - }, - "UR42": { - "x": 41, - "y": 13 - }, - "LR42": { - "x": 41, - "y": 37 - }, - "UR60": { - "x": 59, - "y": 13 - }, - "LR60": { - "x": 59, - "y": 37 - } - } -} diff --git a/metadata/ECP5/LFE5UM5G-45F/globals.json b/metadata/ECP5/LFE5UM5G-45F/globals.json deleted file mode 100644 index 07bd5235..00000000 --- a/metadata/ECP5/LFE5UM5G-45F/globals.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "quadrants": { - "UL": { - "x0": 0, - "y0": 0, - "x1": 40, - "y1": 34 - }, - "UR": { - "x0": 41, - "y0": 0, - "x1": 90, - "y1": 34 - }, - "LL": { - "x0": 0, - "y0": 35, - "x1": 40, - "y1": 71 - }, - "LR": { - "x0": 41, - "y0": 35, - "x1": 90, - "y1": 71 - } - }, - "taps": { - "C13": { - "lx0": 0, - "lx1": 12, - "rx0": 13, - "rx1": 21 - }, - "C31": { - "lx0": 22, - "lx1": 30, - "rx0": 31, - "rx1": 40 - }, - "C51": { - "lx0": 41, - "lx1": 50, - "rx0": 51, - "rx1": 63 - }, - "C78": { - "lx0": 64, - "lx1": 77, - "rx0": 78, - "rx1": 90 - } - }, - "spines": { - "UL13": { - "x": 12, - "y": 10 - }, - "LL13": { - "x": 12, - "y": 58 - }, - "UL31": { - "x": 30, - "y": 10 - }, - "LL31": { - "x": 30, - "y": 58 - }, - "UR51": { - "x": 50, - "y": 10 - }, - "LR51": { - "x": 50, - "y": 58 - }, - "UR78": { - "x": 77, - "y": 10 - }, - "LR78": { - "x": 77, - "y": 58 - } - } -} diff --git a/metadata/ECP5/LFE5UM5G-85F/globals.json b/metadata/ECP5/LFE5UM5G-85F/globals.json deleted file mode 100644 index 3bf74b30..00000000 --- a/metadata/ECP5/LFE5UM5G-85F/globals.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "quadrants": { - "UL": { - "x0": 0, - "y0": 0, - "x1": 67, - "y1": 46 - }, - "UR": { - "x0": 68, - "y0": 0, - "x1": 126, - "y1": 46 - }, - "LL": { - "x0": 0, - "y0": 47, - "x1": 67, - "y1": 95 - }, - "LR": { - "x0": 68, - "y0": 47, - "x1": 126, - "y1": 95 - } - }, - "taps": { - "C13": { - "lx0": 0, - "lx1": 12, - "rx0": 13, - "rx1": 21 - }, - "C31": { - "lx0": 22, - "lx1": 30, - "rx0": 31, - "rx1": 43 - }, - "C58": { - "lx0": 44, - "lx1": 57, - "rx0": 58, - "rx1": 67 - }, - "C78": { - "lx0": 68, - "lx1": 77, - "rx0": 78, - "rx1": 86 - }, - "C96": { - "lx0": 87, - "lx1": 95, - "rx0": 96, - "rx1": 104 - }, - "C114": { - "lx0": 105, - "lx1": 113, - "rx0": 114, - "rx1": 126 - } - }, - "spines": { - "UL13": { - "x": 12, - "y": 22 - }, - "LL13": { - "x": 12, - "y": 70 - }, - "UL31": { - "x": 30, - "y": 22 - }, - "LL31": { - "x": 30, - "y": 70 - }, - "UL58": { - "x": 57, - "y": 22 - }, - "LL58": { - "x": 57, - "y": 70 - }, - "UR78": { - "x": 77, - "y": 22 - }, - "LR78": { - "x": 77, - "y": 70 - }, - "UR96": { - "x": 95, - "y": 22 - }, - "LR96": { - "x": 95, - "y": 70 - }, - "UR114": { - "x": 113, - "y": 22 - }, - "LR114": { - "x": 113, - "y": 70 - } - } -}