From 2f434fd4d31422c637f49c34d93bbe0c992cda5f Mon Sep 17 00:00:00 2001 From: tangxifan Date: Mon, 17 Oct 2022 12:35:06 -0700 Subject: [PATCH] [lib] developing pin dir convention support --- libs/libpcf/src/io/read_csv_io_pin_table.cpp | 24 +++++++++++--------- libs/libpcf/src/io/read_csv_io_pin_table.h | 10 +++++++- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/libs/libpcf/src/io/read_csv_io_pin_table.cpp b/libs/libpcf/src/io/read_csv_io_pin_table.cpp index 0a1e90d9c..8f07e1b7d 100644 --- a/libs/libpcf/src/io/read_csv_io_pin_table.cpp +++ b/libs/libpcf/src/io/read_csv_io_pin_table.cpp @@ -29,7 +29,7 @@ constexpr const char* DIRECTION_OUTPUT = "out"; /******************************************************************** * Parse XML codes about to an object of PinConstraints *******************************************************************/ -IoPinTable read_csv_io_pin_table(const char* fname) { +IoPinTable read_csv_io_pin_table(const char* fname, const e_pin_table_direction_convention& pin_dir_convention) { vtr::ScopedStartFinishTimer timer("Read I/O Pin Table"); IoPinTable io_pin_table; @@ -66,16 +66,18 @@ IoPinTable read_csv_io_pin_table(const char* fname) { /*This is not general purpose: we should have an explicit attribute in the * csv file to decalare direction */ - if (internal_pin_parser.port().get_name().find("A2F") != - std::string::npos) { - io_pin_table.set_pin_direction(pin_id, IoPinTable::INPUT); - } else if (internal_pin_parser.port().get_name().find("F2A") != - std::string::npos) { - io_pin_table.set_pin_direction(pin_id, IoPinTable::OUTPUT); - } else { - VTR_LOG( - "Invalid direction defintion! Expect [A2F|F2A] in the pin name\n"); - exit(1); + if (pin_dir_convention == e_pin_table_direction_convention::QUICKLOGIC) { + if (internal_pin_parser.port().get_name().find("A2F") != + std::string::npos) { + io_pin_table.set_pin_direction(pin_id, IoPinTable::INPUT); + } else if (internal_pin_parser.port().get_name().find("F2A") != + std::string::npos) { + io_pin_table.set_pin_direction(pin_id, IoPinTable::OUTPUT); + } else { + VTR_LOG( + "Invalid direction defintion! Expect [A2F|F2A] in the pin name\n"); + exit(1); + } } /* Parse pin direction from a specific column, this has a higher priority than inferring from pin names */ diff --git a/libs/libpcf/src/io/read_csv_io_pin_table.h b/libs/libpcf/src/io/read_csv_io_pin_table.h index c82b5f9cf..acf3473a5 100644 --- a/libs/libpcf/src/io/read_csv_io_pin_table.h +++ b/libs/libpcf/src/io/read_csv_io_pin_table.h @@ -14,7 +14,15 @@ /* Begin namespace openfpga */ namespace openfpga { -IoPinTable read_csv_io_pin_table(const char* fname); +/* Option to read csv */ +enum class e_pin_table_direction_convention { + EXPLICIT = 0, + QUICKLOGIC, + NUM_PIN_DIRECTION_CONVENTION +}; +constexpr std::array PIN_TABLE_DIRECTION_CONVENTION_STRING = {{"explicit", "quicklogic"}}; //String versions of side orientations + +IoPinTable read_csv_io_pin_table(const char* fname, const e_pin_table_direction_convention& pin_dir_convention); } /* End namespace openfpga*/