aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Shah <davey1576@gmail.com>2018-07-17 12:50:22 +0200
committerDavid Shah <davey1576@gmail.com>2018-07-17 12:50:22 +0200
commit0e31a8e26646b86ffbeb409e95a13c0516a0e970 (patch)
treea28b9305454789967a30e1e514c3a4d65ec73dea
parente6725dcde4184d72b184a898ba63efe9188f518d (diff)
downloadnextpnr-0e31a8e26646b86ffbeb409e95a13c0516a0e970.tar.gz
nextpnr-0e31a8e26646b86ffbeb409e95a13c0516a0e970.tar.bz2
nextpnr-0e31a8e26646b86ffbeb409e95a13c0516a0e970.zip
ecp5: Adding command line options for device type
Signed-off-by: David Shah <davey1576@gmail.com>
-rw-r--r--ecp5/cells.cc6
-rw-r--r--ecp5/cells.h24
-rw-r--r--ecp5/main.cc13
3 files changed, 23 insertions, 20 deletions
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<CellInfo> create_ecp5_cell(Context *ctx, IdString type, std::string name) {
+std::unique_ptr<CellInfo> create_ecp5_cell(Context *ctx, IdString type, std::string name)
+{
static int auto_idx = 0;
std::unique_ptr<CellInfo> new_cell = std::unique_ptr<CellInfo>(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<CellInfo> 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<std::string>(), "JSON design file to ingest");
options.add_options()("seed", po::value<int>(), "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<Context> ctx = std::unique_ptr<Context>(new Context(args));