diff --git a/ecp5/cells.cc b/ecp5/cells.cc index 63916acf..13025da9 100644 --- a/ecp5/cells.cc +++ b/ecp5/cells.cc @@ -18,9 +18,9 @@ */ #include "cells.h" +#include "design_utils.h" #include "log.h" #include "util.h" -#include "design_utils.h" NEXTPNR_NAMESPACE_BEGIN @@ -30,8 +30,8 @@ void add_port(const Context *ctx, CellInfo *cell, std::string name, PortType dir cell->ports[id] = PortInfo{id, nullptr, dir}; } - -std::unique_ptr create_ecp5_cell(Context *ctx, IdString type, std::string name) { +std::unique_ptr create_ecp5_cell(Context *ctx, IdString type, std::string name) +{ static int auto_idx = 0; std::unique_ptr new_cell = std::unique_ptr(new CellInfo()); if (name.empty()) { diff --git a/ecp5/cells.h b/ecp5/cells.h index e2bda4e9..8c8e98a1 100644 --- a/ecp5/cells.h +++ b/ecp5/cells.h @@ -24,35 +24,25 @@ NEXTPNR_NAMESPACE_BEGIN - // Create a standard ECP5 cell and return it // Name will be automatically assigned if not specified std::unique_ptr create_ecp5_cell(Context *ctx, IdString type, std::string name = ""); // Return true if a cell is a LUT -inline bool is_lut(const BaseCtx *ctx, const CellInfo *cell) -{ return cell->type == ctx->id("LUT4"); } +inline bool is_lut(const BaseCtx *ctx, const CellInfo *cell) { return cell->type == ctx->id("LUT4"); } // Return true if a cell is a flipflop -inline bool is_ff(const BaseCtx *ctx, const CellInfo *cell) -{ - return cell->type == ctx->id("TRELLIS_FF"); -} +inline bool is_ff(const BaseCtx *ctx, const CellInfo *cell) { return cell->type == ctx->id("TRELLIS_FF"); } -inline bool is_carry(const BaseCtx *ctx, const CellInfo *cell) -{ return cell->type == ctx->id("CCU2C"); } +inline bool is_carry(const BaseCtx *ctx, const CellInfo *cell) { return cell->type == ctx->id("CCU2C"); } -inline bool is_lc(const BaseCtx *ctx, const CellInfo *cell) -{ return cell->type == ctx->id("TRELLIS_LC"); } +inline bool is_lc(const BaseCtx *ctx, const CellInfo *cell) { return cell->type == ctx->id("TRELLIS_LC"); } -inline bool is_dpram(const BaseCtx *ctx, const CellInfo *cell) -{ return cell->type == ctx->id("TRELLIS_DPR16X4"); } +inline bool is_dpram(const BaseCtx *ctx, const CellInfo *cell) { return cell->type == ctx->id("TRELLIS_DPR16X4"); } -inline bool is_pfumx(const BaseCtx *ctx, const CellInfo *cell) -{ return cell->type == ctx->id("PFUMX"); } +inline bool is_pfumx(const BaseCtx *ctx, const CellInfo *cell) { return cell->type == ctx->id("PFUMX"); } -inline bool is_l6mux(const BaseCtx *ctx, const CellInfo *cell) -{ return cell->type == ctx->id("L6MUX21"); } +inline bool is_l6mux(const BaseCtx *ctx, const CellInfo *cell) { return cell->type == ctx->id("L6MUX21"); } NEXTPNR_NAMESPACE_END diff --git a/ecp5/main.cc b/ecp5/main.cc index 4cb2f10d..7521b88c 100644 --- a/ecp5/main.cc +++ b/ecp5/main.cc @@ -63,6 +63,11 @@ int main(int argc, char *argv[]) #ifndef NO_GUI options.add_options()("gui", "start gui"); #endif + + options.add_options()("25k", "set device type to LFE5U-25F"); + options.add_options()("45k", "set device type to LFE5U-45F"); + options.add_options()("85k", "set device type to LFE5U-85F"); + options.add_options()("json", po::value(), "JSON design file to ingest"); options.add_options()("seed", po::value(), "seed value for random number generator"); @@ -111,6 +116,14 @@ int main(int argc, char *argv[]) ArchArgs args; args.type = ArchArgs::LFE5U_45F; + + if (vm.count("25k")) + args.type = ArchArgs::LFE5U_25F; + if (vm.count("45k")) + args.type = ArchArgs::LFE5U_45F; + if (vm.count("85k")) + args.type = ArchArgs::LFE5U_85F; + args.package = "CABGA381"; args.speed = 6; std::unique_ptr ctx = std::unique_ptr(new Context(args));