aboutsummaryrefslogtreecommitdiffstats
path: root/ecp5
diff options
context:
space:
mode:
authorGreg Davill <greg.davill@gmail.com>2021-08-14 19:26:58 +0930
committerGreg Davill <greg.davill@gmail.com>2021-08-14 19:26:58 +0930
commit200c57f475f549774184608580b4d80290aac21c (patch)
treef15460b659d8c03e57619b9ecec9da553545c662 /ecp5
parentdd6376433154e008045695f5420469670b0c3a88 (diff)
downloadnextpnr-200c57f475f549774184608580b4d80290aac21c.tar.gz
nextpnr-200c57f475f549774184608580b4d80290aac21c.tar.bz2
nextpnr-200c57f475f549774184608580b4d80290aac21c.zip
ecp5: Enable OPENDRAIN on differential outputs
Diffstat (limited to 'ecp5')
-rw-r--r--ecp5/bitstream.cc14
1 files changed, 13 insertions, 1 deletions
diff --git a/ecp5/bitstream.cc b/ecp5/bitstream.cc
index a544f2b7..a86f4678 100644
--- a/ecp5/bitstream.cc
+++ b/ecp5/bitstream.cc
@@ -975,8 +975,20 @@ void write_bitstream(Context *ctx, std::string base_config_file, std::string tex
iovoltage_to_str(vccio).c_str(), ci->name.c_str(ctx));
}
}
- if (ci->attrs.count(ctx->id("OPENDRAIN")))
+ if (ci->attrs.count(ctx->id("OPENDRAIN"))) {
cc.tiles[pio_tile].add_enum(pio + ".OPENDRAIN", str_or_default(ci->attrs, ctx->id("OPENDRAIN"), "OFF"));
+ if (is_differential(ioType_from_str(iotype))) {
+ std::string other;
+ if (pio == "PIOA")
+ other = "PIOB";
+ else if (pio == "PIOC")
+ other = "PIOD";
+ else
+ log_error("cannot set OPENDRAIN on differential IO at location %s\n", pio.c_str());
+ cc.tiles[pio_tile].add_enum(other + ".OPENDRAIN", str_or_default(ci->attrs, ctx->id("OPENDRAIN"), "OFF"));
+ }
+ }
+
std::string datamux_oddr = str_or_default(ci->params, ctx->id("DATAMUX_ODDR"), "PADDO");
if (datamux_oddr != "PADDO")
cc.tiles[pic_tile].add_enum(pio + ".DATAMUX_ODDR", datamux_oddr);