From 284bd055b55aa1e2479f1330a62d937b9b51bfba Mon Sep 17 00:00:00 2001 From: Sergey Dolgov Date: Mon, 15 Jul 2024 16:19:11 -0700 Subject: [PATCH] pin_c: check and report --clk_map argument --- planning/src/RS/rsOpts.cpp | 22 +++++++++++++++++++++- planning/src/RS/rsOpts.h | 2 ++ planning/src/main.cpp | 2 +- planning/src/pin_loc/map_clocks.cpp | 9 ++++++--- planning/src/pin_loc/pcf_place.cpp | 3 +++ planning/src/pin_loc/pin_placer.cpp | 1 + planning/src/pin_loc/pin_placer.h | 1 + 7 files changed, 35 insertions(+), 5 deletions(-) diff --git a/planning/src/RS/rsOpts.cpp b/planning/src/RS/rsOpts.cpp index 1415fdaa..fcbde7fa 100644 --- a/planning/src/RS/rsOpts.cpp +++ b/planning/src/RS/rsOpts.cpp @@ -30,6 +30,7 @@ static CStr _xml_[] = {"XM", "xm", "xml", "XML", nullptr}; static CStr _pcf_[] = {"PCF", "pcf", nullptr}; static CStr _edtf_[] = {"EDT", "edit", "edits", nullptr}; +static CStr _cmap_[] = {"MAPC", "clkmap", "clk_map", nullptr}; static CStr _blif_[] = {"BL", "blif", nullptr}; @@ -288,7 +289,7 @@ void rsOpts::parse(int argc, const char** argv) noexcept { assert(argc_ > 0 and argv_); CStr inp = 0, out = 0, csv = 0, xml = 0, pcf = 0, blif = 0, jsnf = 0, - fun = 0, assignOrd = 0, edtf = 0; + fun = 0, assignOrd = 0, edtf = 0, cmapf = 0; for (int i = 1; i < argc_; i++) { CStr arg = argv_[i]; @@ -354,6 +355,14 @@ void rsOpts::parse(int argc, const char** argv) noexcept { edtf = nullptr; continue; } + if (op_match(arg, _cmap_)) { + i++; + if (i < argc_) + cmapf = argv_[i]; + else + cmapf = nullptr; + continue; + } if (op_match(arg, _blif_)) { i++; if (i < argc_) @@ -433,6 +442,7 @@ void rsOpts::parse(int argc, const char** argv) noexcept { blifFile_ = p_strdup(blif); jsonFile_ = p_strdup(jsnf); editsFile_ = p_strdup(edtf); + cmapFile_ = p_strdup(cmapf); if (fun) setFunction(fun); @@ -606,6 +616,16 @@ bool rsOpts::validate_pinc_args(int argc, const char** argv) noexcept { } } + CStr cmap = tmpO.cmapFile_; + if (cmap) { + if (not Fio::regularFileExists(cmap)) { + flush_out(true); err_puts(); + lprintf2("[Error] specified --clk_map file does not exist: %s\n", cmap); + err_puts(); flush_out(true); + return false; + } + } + flush_out(false); return true; } diff --git a/planning/src/RS/rsOpts.h b/planning/src/RS/rsOpts.h index 84cde89e..a9d601a9 100644 --- a/planning/src/RS/rsOpts.h +++ b/planning/src/RS/rsOpts.h @@ -54,7 +54,9 @@ struct rsOpts { char* pcfFile_ = nullptr; char* blifFile_ = nullptr; char* jsonFile_ = nullptr; + char* editsFile_ = nullptr; + char* cmapFile_ = nullptr; char* input_ = nullptr; char* output_ = nullptr; diff --git a/planning/src/main.cpp b/planning/src/main.cpp index 20a017d9..ea74e6ce 100644 --- a/planning/src/main.cpp +++ b/planning/src/main.cpp @@ -1,4 +1,4 @@ -static const char* _pln_VERSION_STR = "pln0258"; +static const char* _pln_VERSION_STR = "pln0259"; #include "RS/rsEnv.h" #include "util/pln_log.h" diff --git a/planning/src/pin_loc/map_clocks.cpp b/planning/src/pin_loc/map_clocks.cpp index 919faee0..98635e21 100644 --- a/planning/src/pin_loc/map_clocks.cpp +++ b/planning/src/pin_loc/map_clocks.cpp @@ -25,6 +25,7 @@ using fio::Fio; #define CERROR std::cerr << "[Error] " int PinPlacer::map_clocks() { + clk_map_file_.clear(); uint16_t tr = ltrace(); if (tr >= 4) { flush_out(true); @@ -33,9 +34,9 @@ int PinPlacer::map_clocks() { string fpga_repack = cl_.get_param("--read_repack"); string user_constrained_repack = cl_.get_param("--write_repack"); - string clk_map_file = cl_.get_param("--clk_map"); + clk_map_file_ = cl_.get_param("--clk_map"); - bool constraint_xml_requested = fpga_repack.size() or clk_map_file.size(); + bool constraint_xml_requested = fpga_repack.size() or clk_map_file_.size(); if (not constraint_xml_requested) { if (tr >= 4) lputs("PinPlacer::map_clocks() returns NOP"); @@ -65,7 +66,9 @@ int PinPlacer::write_clocks_logical_to_physical() { } bool rd_ok = false, wr_ok = false; - string clkmap_fn = cl_.get_param("--clk_map"); + + clk_map_file_ = cl_.get_param("--clk_map"); + const string& clkmap_fn = clk_map_file_; if (not Fio::regularFileExists(clkmap_fn)) { flush_out(true); diff --git a/planning/src/pin_loc/pcf_place.cpp b/planning/src/pin_loc/pcf_place.cpp index 23de24a1..a1b00ce8 100644 --- a/planning/src/pin_loc/pcf_place.cpp +++ b/planning/src/pin_loc/pcf_place.cpp @@ -354,6 +354,9 @@ void PinPlacer::print_summary(const string& csv_name) const { CStr editsVal = has_edits_.empty() ? "FALSE" : has_edits_.c_str(); lprintf(" has edits (config.json) : %s\n", editsVal); + CStr cmapVal = clk_map_file_.empty() ? "(NONE)" : clk_map_file_.c_str(); + lprintf(" clk_map_file : %s\n", cmapVal); + lprintf(" pinc_trace verbosity= %u\n", tr); if (num_critical_warnings_) { diff --git a/planning/src/pin_loc/pin_placer.cpp b/planning/src/pin_loc/pin_placer.cpp index a3e97233..8a78a4af 100644 --- a/planning/src/pin_loc/pin_placer.cpp +++ b/planning/src/pin_loc/pin_placer.cpp @@ -166,6 +166,7 @@ void PinPlacer::resetState() noexcept { num_critical_warnings_ = 0; user_pcf_.clear(); has_edits_.clear(); + clk_map_file_.clear(); clear_err_code(); } diff --git a/planning/src/pin_loc/pin_placer.h b/planning/src/pin_loc/pin_placer.h index b58d1a9f..7c3bb536 100644 --- a/planning/src/pin_loc/pin_placer.h +++ b/planning/src/pin_loc/pin_placer.h @@ -115,6 +115,7 @@ struct PinPlacer { bool auto_pcf_created_ = false; string user_pcf_; string has_edits_; + string clk_map_file_; public: enum class PortDir : uint8_t {