diff options
author | David Shah <dave@ds0.me> | 2019-10-13 11:17:23 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-10-13 11:17:23 +0100 |
commit | ee769420e3594c45a5f531a71b136125e5cb883c (patch) | |
tree | 29df0263625cf4dcc06bbd81d8b68db15705f2ba /ecp5/bitstream.cc | |
parent | 58db38c746ad081563379d04beed1a080e080c19 (diff) | |
parent | 8f86ccc412e9e094f785d60269bd3d9c3fa8809a (diff) | |
download | nextpnr-ee769420e3594c45a5f531a71b136125e5cb883c.tar.gz nextpnr-ee769420e3594c45a5f531a71b136125e5cb883c.tar.bz2 nextpnr-ee769420e3594c45a5f531a71b136125e5cb883c.zip |
Merge pull request #340 from YosysHQ/dave/ecp5_io
ecp5: IOLOGIC improvements
Diffstat (limited to 'ecp5/bitstream.cc')
-rw-r--r-- | ecp5/bitstream.cc | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/ecp5/bitstream.cc b/ecp5/bitstream.cc index d2a90b86..acab95dd 100644 --- a/ecp5/bitstream.cc +++ b/ecp5/bitstream.cc @@ -888,9 +888,15 @@ void write_bitstream(Context *ctx, std::string base_config_file, std::string tex 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); + std::string datamux_oreg = str_or_default(ci->params, ctx->id("DATAMUX_OREG"), "PADDO"); + if (datamux_oreg != "PADDO") + cc.tiles[pic_tile].add_enum(pio + ".DATAMUX_OREG", datamux_oreg); std::string datamux_mddr = str_or_default(ci->params, ctx->id("DATAMUX_MDDR"), "PADDO"); if (datamux_mddr != "PADDO") cc.tiles[pic_tile].add_enum(pio + ".DATAMUX_MDDR", datamux_mddr); + std::string trimux_tsreg = str_or_default(ci->params, ctx->id("TRIMUX_TSREG"), "PADDT"); + if (trimux_tsreg != "PADDT") + cc.tiles[pic_tile].add_enum(pio + ".TRIMUX_TSREG", trimux_tsreg); } else if (ci->type == ctx->id("DCCA")) { const NetInfo *cen = get_net_or_empty(ci, ctx->id("CE")); if (cen != nullptr) { @@ -1367,6 +1373,13 @@ void write_bitstream(Context *ctx, std::string base_config_file, std::string tex std::string tile = ctx->getTileByType(std::string("ECLK_") + (r ? "R" : "L")); if (get_net_or_empty(ci, id_STOP) != nullptr) cc.tiles[tile].add_enum(eclksync + ".MODE", "ECLKSYNCB"); + } else if (ci->type == id_ECLKBRIDGECS) { + Loc loc = ctx->getBelLocation(ci->bel); + bool r = loc.x > 5; + std::string eclkb = ctx->locInfo(bel)->bel_data[bel.index].name.get(); + std::string tile = ctx->getTileByType(std::string("ECLK_") + (r ? "R" : "L")); + if (get_net_or_empty(ci, id_STOP) != nullptr) + cc.tiles[tile].add_enum(eclkb + ".MODE", "ECLKBRIDGECS"); } else if (ci->type == id_DDRDLL) { Loc loc = ctx->getBelLocation(ci->bel); bool u = loc.y<15, r = loc.x> 15; |