From a9b6543361ba35202cbe6c6c16860c3e8a388bc4 Mon Sep 17 00:00:00 2001 From: Clifford Wolf Date: Wed, 8 Aug 2018 00:06:03 +0200 Subject: Add Region struct Signed-off-by: Clifford Wolf --- common/nextpnr.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'common') diff --git a/common/nextpnr.h b/common/nextpnr.h index e588f47b..28c144ac 100644 --- a/common/nextpnr.h +++ b/common/nextpnr.h @@ -216,6 +216,13 @@ struct BelPin struct CellInfo; +struct Region +{ + IdString name; + std::unordered_set bels; + std::unordered_set wires; +}; + enum PlaceStrength { STRENGTH_NONE = 0, @@ -250,6 +257,8 @@ struct NetInfo : ArchNetInfo // wire -> uphill_pip std::unordered_map wires; + + Region *region = nullptr; }; enum PortType @@ -289,6 +298,8 @@ struct CellInfo : ArchCellInfo int constr_z = UNCONSTR; // this.z - parent.z bool constr_abs_z = false; // parent.z := 0 // parent.[xyz] := 0 when (constr_parent == nullptr) + + Region *region = nullptr; }; enum TimingPortClass @@ -391,6 +402,9 @@ struct BaseCtx std::unordered_map> nets; std::unordered_map> cells; + // Floorplanning regions + std::unordered_map> region; + BaseCtx() { idstring_str_to_idx = new std::unordered_map; -- cgit v1.2.3 From 5ddde5c49ffaf6c2f827e9805caac0b7dd43f4a0 Mon Sep 17 00:00:00 2001 From: Clifford Wolf Date: Wed, 8 Aug 2018 10:27:08 +0200 Subject: Add pip locations Signed-off-by: Clifford Wolf --- common/archcheck.cc | 4 ++-- common/nextpnr.h | 6 ++++++ common/place_common.cc | 4 ++-- 3 files changed, 10 insertions(+), 4 deletions(-) (limited to 'common') diff --git a/common/archcheck.cc b/common/archcheck.cc index 5059066d..3d9e4e76 100644 --- a/common/archcheck.cc +++ b/common/archcheck.cc @@ -75,7 +75,7 @@ void archcheck_locs(const Context *ctx) log_assert(0 <= loc.z); log_assert(loc.x < ctx->getGridDimX()); log_assert(loc.y < ctx->getGridDimY()); - log_assert(loc.z < ctx->getTileDimZ(loc.x, loc.y)); + log_assert(loc.z < ctx->getTileBelDimZ(loc.x, loc.y)); BelId bel2 = ctx->getBelByLocation(loc); dbg(" ... %s\n", ctx->getBelName(bel2).c_str(ctx)); @@ -88,7 +88,7 @@ void archcheck_locs(const Context *ctx) dbg("> %d %d\n", x, y); std::unordered_set usedz; - for (int z = 0; z < ctx->getTileDimZ(x, y); z++) { + for (int z = 0; z < ctx->getTileBelDimZ(x, y); z++) { BelId bel = ctx->getBelByLocation(Loc(x, y, z)); if (bel == BelId()) continue; diff --git a/common/nextpnr.h b/common/nextpnr.h index 28c144ac..29a85a10 100644 --- a/common/nextpnr.h +++ b/common/nextpnr.h @@ -219,8 +219,14 @@ struct CellInfo; struct Region { IdString name; + + bool constr_bels = false; + bool constr_wires = false; + bool constr_pips = false; + std::unordered_set bels; std::unordered_set wires; + std::unordered_set piplocs; }; enum PlaceStrength diff --git a/common/place_common.cc b/common/place_common.cc index f9867057..5cdb96ef 100644 --- a/common/place_common.cc +++ b/common/place_common.cc @@ -251,7 +251,7 @@ class ConstraintLegaliseWorker ySearch = IncreasingDiameterSearch(loc.y + child->constr_y); } if (child->constr_z == child->UNCONSTR) { - zSearch = IncreasingDiameterSearch(loc.z, 0, ctx->getTileDimZ(loc.x, loc.y)); + zSearch = IncreasingDiameterSearch(loc.z, 0, ctx->getTileBelDimZ(loc.x, loc.y)); } else { if (child->constr_abs_z) { zSearch = IncreasingDiameterSearch(child->constr_z); @@ -329,7 +329,7 @@ class ConstraintLegaliseWorker yRootSearch = IncreasingDiameterSearch(cell->constr_y); if (cell->constr_z == cell->UNCONSTR) - zRootSearch = IncreasingDiameterSearch(currentLoc.z, 0, ctx->getTileDimZ(currentLoc.x, currentLoc.y)); + zRootSearch = IncreasingDiameterSearch(currentLoc.z, 0, ctx->getTileBelDimZ(currentLoc.x, currentLoc.y)); else zRootSearch = IncreasingDiameterSearch(cell->constr_z); while (!xRootSearch.done()) { -- cgit v1.2.3 From 8420cb4c80521d100d5f92155b6295f342dae3e3 Mon Sep 17 00:00:00 2001 From: Miodrag Milanovic Date: Thu, 9 Aug 2018 11:00:24 +0200 Subject: Fix MSVC compile --- common/timing.cc | 1 + 1 file changed, 1 insertion(+) (limited to 'common') diff --git a/common/timing.cc b/common/timing.cc index aadd8381..5e45f8a2 100644 --- a/common/timing.cc +++ b/common/timing.cc @@ -21,6 +21,7 @@ #include "timing.h" #include #include +#include #include #include #include "log.h" -- cgit v1.2.3 From 6b6a0c6d3c0d39afecd3c0c6bd0e0a4c006adc5f Mon Sep 17 00:00:00 2001 From: Miodrag Milanovic Date: Thu, 9 Aug 2018 13:28:21 +0200 Subject: Added quiet mode for logging --- common/command.cc | 5 +++++ common/log.cc | 32 +++++++++++++++++++++++--------- common/log.h | 6 ------ 3 files changed, 28 insertions(+), 15 deletions(-) (limited to 'common') diff --git a/common/command.cc b/common/command.cc index 54111130..d5639e9a 100644 --- a/common/command.cc +++ b/common/command.cc @@ -84,6 +84,7 @@ po::options_description CommandHandler::getGeneralOptions() po::options_description general("General options"); general.add_options()("help,h", "show help"); general.add_options()("verbose,v", "verbose output"); + general.add_options()("quiet,q", "quiet mode, only errors displayed"); general.add_options()("debug", "debug output"); general.add_options()("force,f", "keep running after errors"); #ifndef NO_GUI @@ -119,6 +120,10 @@ void CommandHandler::setupContext(Context *ctx) ctx->debug = true; } + if (vm.count("quiet")) { + log_quiet_warnings = true; + } + if (vm.count("force")) { ctx->force = true; } diff --git a/common/log.cc b/common/log.cc index 2625be05..c3e798b6 100644 --- a/common/log.cc +++ b/common/log.cc @@ -30,6 +30,8 @@ NEXTPNR_NAMESPACE_BEGIN +void log_internal(const char *format, ...) NPNR_ATTRIBUTE(format(printf, 1, 2)); + std::vector log_files; std::vector log_streams; FILE *log_errfile = NULL; @@ -38,7 +40,6 @@ log_write_type log_write_function = nullptr; bool log_error_stderr = false; bool log_cmd_error_throw = false; bool log_quiet_warnings = false; -int log_verbose_level; std::string log_last_error; void (*log_error_atexit)() = NULL; @@ -80,7 +81,7 @@ void logv(const char *format, va_list ap) // // Trim newlines from the beginning while (format[0] == '\n' && format[1] != 0) { - log("\n"); + log_internal("\n"); format++; } @@ -108,7 +109,7 @@ void logv_info(const char *format, va_list ap) { std::string message = vstringf(format, ap); - log("Info: %s", message.c_str()); + log_internal("Info: %s", message.c_str()); log_flush(); } @@ -116,7 +117,7 @@ void logv_warning(const char *format, va_list ap) { std::string message = vstringf(format, ap); - log("Warning: %s", message.c_str()); + log_internal("Warning: %s", message.c_str()); log_flush(); } @@ -124,7 +125,7 @@ void logv_warning_noprefix(const char *format, va_list ap) { std::string message = vstringf(format, ap); - log("%s", message.c_str()); + log_internal("%s", message.c_str()); } void logv_error(const char *format, va_list ap) @@ -142,7 +143,7 @@ void logv_error(const char *format, va_list ap) f = stderr; log_last_error = vstringf(format, ap); - log("ERROR: %s", log_last_error.c_str()); + log_internal("ERROR: %s", log_last_error.c_str()); log_flush(); if (log_error_atexit) @@ -154,8 +155,17 @@ void logv_error(const char *format, va_list ap) throw log_execution_error_exception(); } +void log_internal(const char *format, ...) +{ + va_list ap; + va_start(ap, format); + logv(format, ap); + va_end(ap); +} + void log(const char *format, ...) { + if (log_quiet_warnings) return; va_list ap; va_start(ap, format); logv(format, ap); @@ -164,6 +174,7 @@ void log(const char *format, ...) void log_info(const char *format, ...) { + if (log_quiet_warnings) return; va_list ap; va_start(ap, format); logv_info(format, ap); @@ -172,6 +183,7 @@ void log_info(const char *format, ...) void log_warning(const char *format, ...) { + if (log_quiet_warnings) return; va_list ap; va_start(ap, format); logv_warning(format, ap); @@ -180,6 +192,7 @@ void log_warning(const char *format, ...) void log_warning_noprefix(const char *format, ...) { + if (log_quiet_warnings) return; va_list ap; va_start(ap, format); logv_warning_noprefix(format, ap); @@ -200,7 +213,7 @@ void log_cmd_error(const char *format, ...) if (log_cmd_error_throw) { log_last_error = vstringf(format, ap); - log("ERROR: %s", log_last_error.c_str()); + log_internal("ERROR: %s", log_last_error.c_str()); log_flush(); throw log_cmd_error_exception(); } @@ -210,10 +223,11 @@ void log_cmd_error(const char *format, ...) void log_break() { + if (log_quiet_warnings) return; if (log_newline_count < 2) - log("\n"); + log_internal("\n"); if (log_newline_count < 2) - log("\n"); + log_internal("\n"); } void log_flush() diff --git a/common/log.h b/common/log.h index 35450311..10de3c7c 100644 --- a/common/log.h +++ b/common/log.h @@ -48,15 +48,9 @@ extern FILE *log_errfile; extern log_write_type log_write_function; extern bool log_quiet_warnings; -extern int log_verbose_level; extern std::string log_last_error; extern void (*log_error_atexit)(); -void logv(const char *format, va_list ap); -void logv_warning(const char *format, va_list ap); -void logv_warning_noprefix(const char *format, va_list ap); -NPNR_NORETURN void logv_error(const char *format, va_list ap) NPNR_ATTRIBUTE(noreturn); - extern std::ostream clog; void log(const char *format, ...) NPNR_ATTRIBUTE(format(printf, 1, 2)); void log_header(const char *format, ...) NPNR_ATTRIBUTE(format(printf, 1, 2)); -- cgit v1.2.3 From 0696d623588a82a94966e04a61529b6b86be5f1f Mon Sep 17 00:00:00 2001 From: Miodrag Milanovic Date: Thu, 9 Aug 2018 13:35:18 +0200 Subject: Expose log_always that will be displayed disregarding quite flag --- common/log.cc | 20 +++++++++----------- common/log.h | 2 +- 2 files changed, 10 insertions(+), 12 deletions(-) (limited to 'common') diff --git a/common/log.cc b/common/log.cc index c3e798b6..9f1c5748 100644 --- a/common/log.cc +++ b/common/log.cc @@ -30,8 +30,6 @@ NEXTPNR_NAMESPACE_BEGIN -void log_internal(const char *format, ...) NPNR_ATTRIBUTE(format(printf, 1, 2)); - std::vector log_files; std::vector log_streams; FILE *log_errfile = NULL; @@ -81,7 +79,7 @@ void logv(const char *format, va_list ap) // // Trim newlines from the beginning while (format[0] == '\n' && format[1] != 0) { - log_internal("\n"); + log_always("\n"); format++; } @@ -109,7 +107,7 @@ void logv_info(const char *format, va_list ap) { std::string message = vstringf(format, ap); - log_internal("Info: %s", message.c_str()); + log_always("Info: %s", message.c_str()); log_flush(); } @@ -117,7 +115,7 @@ void logv_warning(const char *format, va_list ap) { std::string message = vstringf(format, ap); - log_internal("Warning: %s", message.c_str()); + log_always("Warning: %s", message.c_str()); log_flush(); } @@ -125,7 +123,7 @@ void logv_warning_noprefix(const char *format, va_list ap) { std::string message = vstringf(format, ap); - log_internal("%s", message.c_str()); + log_always("%s", message.c_str()); } void logv_error(const char *format, va_list ap) @@ -143,7 +141,7 @@ void logv_error(const char *format, va_list ap) f = stderr; log_last_error = vstringf(format, ap); - log_internal("ERROR: %s", log_last_error.c_str()); + log_always("ERROR: %s", log_last_error.c_str()); log_flush(); if (log_error_atexit) @@ -155,7 +153,7 @@ void logv_error(const char *format, va_list ap) throw log_execution_error_exception(); } -void log_internal(const char *format, ...) +void log_always(const char *format, ...) { va_list ap; va_start(ap, format); @@ -213,7 +211,7 @@ void log_cmd_error(const char *format, ...) if (log_cmd_error_throw) { log_last_error = vstringf(format, ap); - log_internal("ERROR: %s", log_last_error.c_str()); + log_always("ERROR: %s", log_last_error.c_str()); log_flush(); throw log_cmd_error_exception(); } @@ -225,9 +223,9 @@ void log_break() { if (log_quiet_warnings) return; if (log_newline_count < 2) - log_internal("\n"); + log_always("\n"); if (log_newline_count < 2) - log_internal("\n"); + log_always("\n"); } void log_flush() diff --git a/common/log.h b/common/log.h index 10de3c7c..74b9f0f5 100644 --- a/common/log.h +++ b/common/log.h @@ -53,7 +53,7 @@ extern void (*log_error_atexit)(); extern std::ostream clog; void log(const char *format, ...) NPNR_ATTRIBUTE(format(printf, 1, 2)); -void log_header(const char *format, ...) NPNR_ATTRIBUTE(format(printf, 1, 2)); +void log_always(const char *format, ...) NPNR_ATTRIBUTE(format(printf, 1, 2)); void log_info(const char *format, ...) NPNR_ATTRIBUTE(format(printf, 1, 2)); void log_warning(const char *format, ...) NPNR_ATTRIBUTE(format(printf, 1, 2)); void log_warning_noprefix(const char *format, ...) NPNR_ATTRIBUTE(format(printf, 1, 2)); -- cgit v1.2.3 From 8b04a646291bec7fb65b3580a08c266268acf010 Mon Sep 17 00:00:00 2001 From: Miodrag Milanovic Date: Thu, 9 Aug 2018 17:34:57 +0200 Subject: Fix compile warning --- common/log.cc | 2 ++ 1 file changed, 2 insertions(+) (limited to 'common') diff --git a/common/log.cc b/common/log.cc index 9f1c5748..df5430bb 100644 --- a/common/log.cc +++ b/common/log.cc @@ -30,6 +30,8 @@ NEXTPNR_NAMESPACE_BEGIN +NPNR_NORETURN void logv_error(const char *format, va_list ap) NPNR_ATTRIBUTE(noreturn); + std::vector log_files; std::vector log_streams; FILE *log_errfile = NULL; -- cgit v1.2.3