diff options
-rw-r--r-- | machxo2/arch.h | 3 | ||||
-rw-r--r-- | machxo2/bitstream.cc | 51 | ||||
-rw-r--r-- | machxo2/main.cc | 2 | ||||
-rw-r--r-- | machxo2/pack.cc | 7 |
4 files changed, 34 insertions, 29 deletions
diff --git a/machxo2/arch.h b/machxo2/arch.h index 5da12a24..439d54a5 100644 --- a/machxo2/arch.h +++ b/machxo2/arch.h @@ -629,7 +629,8 @@ struct Arch : BaseCtx { NPNR_ASSERT(wire != WireId()); std::stringstream name; - name << "X" << wire.location.x << "/Y" << wire.location.y << "/" << tileInfo(wire)->wire_data[wire.index].name.get(); + name << "X" << wire.location.x << "/Y" << wire.location.y << "/" + << tileInfo(wire)->wire_data[wire.index].name.get(); return id(name.str()); } diff --git a/machxo2/bitstream.cc b/machxo2/bitstream.cc index 23cc1b8c..6f37e66b 100644 --- a/machxo2/bitstream.cc +++ b/machxo2/bitstream.cc @@ -29,24 +29,24 @@ NEXTPNR_NAMESPACE_BEGIN // These seem simple enough to do inline for now. namespace BaseConfigs { - void config_empty_lcmxo2_1200hc(ChipConfig &cc) - { - cc.chip_name = "LCMXO2-1200HC"; - - cc.tiles["EBR_R6C11:EBR1"].add_unknown(0, 12); - cc.tiles["EBR_R6C15:EBR1"].add_unknown(0, 12); - cc.tiles["EBR_R6C18:EBR1"].add_unknown(0, 12); - cc.tiles["EBR_R6C21:EBR1"].add_unknown(0, 12); - cc.tiles["EBR_R6C2:EBR1"].add_unknown(0, 12); - cc.tiles["EBR_R6C5:EBR1"].add_unknown(0, 12); - cc.tiles["EBR_R6C8:EBR1"].add_unknown(0, 12); - - cc.tiles["PT4:CFG0"].add_unknown(5, 30); - cc.tiles["PT4:CFG0"].add_unknown(5, 32); - cc.tiles["PT4:CFG0"].add_unknown(5, 36); - - cc.tiles["PT7:CFG3"].add_unknown(5, 18); - } +void config_empty_lcmxo2_1200hc(ChipConfig &cc) +{ + cc.chip_name = "LCMXO2-1200HC"; + + cc.tiles["EBR_R6C11:EBR1"].add_unknown(0, 12); + cc.tiles["EBR_R6C15:EBR1"].add_unknown(0, 12); + cc.tiles["EBR_R6C18:EBR1"].add_unknown(0, 12); + cc.tiles["EBR_R6C21:EBR1"].add_unknown(0, 12); + cc.tiles["EBR_R6C2:EBR1"].add_unknown(0, 12); + cc.tiles["EBR_R6C5:EBR1"].add_unknown(0, 12); + cc.tiles["EBR_R6C8:EBR1"].add_unknown(0, 12); + + cc.tiles["PT4:CFG0"].add_unknown(5, 30); + cc.tiles["PT4:CFG0"].add_unknown(5, 32); + cc.tiles["PT4:CFG0"].add_unknown(5, 36); + + cc.tiles["PT7:CFG3"].add_unknown(5, 18); +} } // namespace BaseConfigs // Convert an absolute wire name to a relative Trellis one @@ -55,7 +55,8 @@ static std::string get_trellis_wirename(Context *ctx, Location loc, WireId wire) std::string basename = ctx->tileInfo(wire)->wire_data[wire.index].name.get(); std::string prefix2 = basename.substr(0, 2); std::string prefix7 = basename.substr(0, 7); - if (prefix2 == "G_" || prefix2 == "L_" || prefix2 == "R_" || prefix2 == "U_" || prefix2 == "D_" || prefix7 == "BRANCH_") + if (prefix2 == "G_" || prefix2 == "L_" || prefix2 == "R_" || prefix2 == "U_" || prefix2 == "D_" || + prefix7 == "BRANCH_") return basename; if (loc == wire.location) return basename; @@ -182,11 +183,15 @@ void write_bitstream(Context *ctx, std::string text_config_file) cc.tiles[tname].add_word(slice + ".K1.INIT", int_to_bitvector(lut1_init, 16)); cc.tiles[tname].add_enum(slice + ".MODE", str_or_default(ci->params, ctx->id("MODE"), "LOGIC")); cc.tiles[tname].add_enum(slice + ".GSR", str_or_default(ci->params, ctx->id("GSR"), "ENABLED")); - cc.tiles[tname].add_enum("LSR" + std::to_string(int_index) + ".SRMODE", str_or_default(ci->params, ctx->id("SRMODE"), "LSR_OVER_CE")); + cc.tiles[tname].add_enum("LSR" + std::to_string(int_index) + ".SRMODE", + str_or_default(ci->params, ctx->id("SRMODE"), "LSR_OVER_CE")); cc.tiles[tname].add_enum(slice + ".CEMUX", intstr_or_default(ci->params, ctx->id("CEMUX"), "1")); - cc.tiles[tname].add_enum("CLK" + std::to_string(int_index) + ".CLKMUX", intstr_or_default(ci->params, ctx->id("CLKMUX"), "0")); - cc.tiles[tname].add_enum("LSR" + std::to_string(int_index) + ".LSRMUX", str_or_default(ci->params, ctx->id("LSRMUX"), "LSR")); - cc.tiles[tname].add_enum("LSR" + std::to_string(int_index) + ".LSRONMUX", intstr_or_default(ci->params, ctx->id("LSRONMUX"), "LSRMUX")); + cc.tiles[tname].add_enum("CLK" + std::to_string(int_index) + ".CLKMUX", + intstr_or_default(ci->params, ctx->id("CLKMUX"), "0")); + cc.tiles[tname].add_enum("LSR" + std::to_string(int_index) + ".LSRMUX", + str_or_default(ci->params, ctx->id("LSRMUX"), "LSR")); + cc.tiles[tname].add_enum("LSR" + std::to_string(int_index) + ".LSRONMUX", + intstr_or_default(ci->params, ctx->id("LSRONMUX"), "LSRMUX")); cc.tiles[tname].add_enum(slice + ".REGMODE", str_or_default(ci->params, ctx->id("REGMODE"), "FF")); cc.tiles[tname].add_enum(slice + ".REG0.SD", intstr_or_default(ci->params, ctx->id("REG0_SD"), "0")); cc.tiles[tname].add_enum(slice + ".REG1.SD", intstr_or_default(ci->params, ctx->id("REG1_SD"), "0")); diff --git a/machxo2/main.cc b/machxo2/main.cc index 8dadca94..3d0884bf 100644 --- a/machxo2/main.cc +++ b/machxo2/main.cc @@ -67,7 +67,7 @@ po::options_description MachXO2CommandHandler::getArchOptions() "base chip configuration in Trellis text format"); specific.add_options()("textcfg", po::value<std::string>(), "textual configuration in Trellis format to write"); - //specific.add_options()("lpf", po::value<std::vector<std::string>>(), "LPF pin constraint file(s)"); + // specific.add_options()("lpf", po::value<std::vector<std::string>>(), "LPF pin constraint file(s)"); specific.add_options()("no-iobs", "disable automatic IO buffer insertion (unimplemented- always enabled)"); return specific; diff --git a/machxo2/pack.cc b/machxo2/pack.cc index b18bde1f..d7d40d5d 100644 --- a/machxo2/pack.cc +++ b/machxo2/pack.cc @@ -176,7 +176,7 @@ static void pack_io(Context *ctx) for (auto &p : ci->ports) disconnect_port(ctx, ci, p.first); packed_cells.insert(ci->name); - } else if(is_facade_iob(ctx, ci)) { + } else if (is_facade_iob(ctx, ci)) { // If FACADE_IO has LOC attribute, convert the LOC (pin) to a BEL // attribute and place FACADE_IO at resulting BEL location. A BEL // attribute already on a FACADE_IO is an error. Attributes on @@ -185,10 +185,9 @@ static void pack_io(Context *ctx) auto loc_attr_cell = ci->attrs.find(ctx->id("LOC")); auto bel_attr_cell = ci->attrs.find(ctx->id("BEL")); - if(loc_attr_cell != ci->attrs.end()) { + if (loc_attr_cell != ci->attrs.end()) { if (bel_attr_cell != ci->attrs.end()) { - log_error("IO buffer %s has both a BEL attribute and LOC attribute.\n", - ci->name.c_str(ctx)); + log_error("IO buffer %s has both a BEL attribute and LOC attribute.\n", ci->name.c_str(ctx)); } log_info("found LOC attribute on IO buffer %s.\n", ci->name.c_str(ctx)); |