From 344394de293edcedb16288ad50a057c802aab87d Mon Sep 17 00:00:00 2001 From: James Cherry Date: Wed, 26 Jun 2019 16:01:58 -0700 Subject: [PATCH] link_design use verilog library to lookup top --- CMakeLists.txt | 2 +- network/ConcreteNetwork.cc | 11 ++--------- network/Network.hh | 2 +- verilog/VerilogLex.ll | 2 +- verilog/VerilogParse.yy | 2 +- verilog/VerilogReader.cc | 15 +++++++++------ verilog/{Verilog.hh => VerilogReaderPvt.hh} | 2 +- 7 files changed, 16 insertions(+), 20 deletions(-) rename verilog/{Verilog.hh => VerilogReaderPvt.hh} (99%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 40c152a4..7172a3f6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -384,7 +384,7 @@ set(STA_HEADERS util/Vector.hh util/Zlib.hh - verilog/Verilog.hh + verilog/VerilogReaderPvt.hh verilog/VerilogReader.hh verilog/VerilogWriter.hh ) diff --git a/network/ConcreteNetwork.cc b/network/ConcreteNetwork.cc index 0e7fece6..428f2a01 100644 --- a/network/ConcreteNetwork.cc +++ b/network/ConcreteNetwork.cc @@ -1841,15 +1841,8 @@ ConcreteNetwork::linkNetwork(const char *top_cell_name, if (link_func_) { clearConstantNets(); deleteTopInstance(); - Cell *top_cell = findAnyCell(top_cell_name); - if (top_cell) { - top_instance_ = link_func_(top_cell, make_black_boxes, report, this); - return top_instance_ != nullptr; - } - else { - report->error("cell %s not found.\n", top_cell_name); - return false; - } + top_instance_ = link_func_(top_cell_name, make_black_boxes, report, this); + return top_instance_ != nullptr; } else { report->error("cell type %s can not be linked.\n", top_cell_name); diff --git a/network/Network.hh b/network/Network.hh index f7ccbade..a7b1a00a 100644 --- a/network/Network.hh +++ b/network/Network.hh @@ -35,7 +35,7 @@ typedef Set ConstNetSet; typedef Map LibertyLibraryMap; // Link network function returns top level instance. // Return nullptr if link fails. -typedef Instance *(LinkNetworkFunc)(Cell *top_cell, +typedef Instance *(LinkNetworkFunc)(const char *top_cell_name, bool make_black_boxes, Report *report, NetworkReader *network); diff --git a/verilog/VerilogLex.ll b/verilog/VerilogLex.ll index 4ab6881c..9b27fbc5 100644 --- a/verilog/VerilogLex.ll +++ b/verilog/VerilogLex.ll @@ -19,7 +19,7 @@ #include "Machine.hh" #include "Debug.hh" #include "VerilogNamespace.hh" -#include "Verilog.hh" +#include "VerilogReaderPvt.hh" #include "VerilogParse.hh" #define YY_NO_INPUT diff --git a/verilog/VerilogParse.yy b/verilog/VerilogParse.yy index 4c9afc50..f42f5a62 100644 --- a/verilog/VerilogParse.yy +++ b/verilog/VerilogParse.yy @@ -19,7 +19,7 @@ #include #include "Machine.hh" #include "PortDirection.hh" -#include "Verilog.hh" +#include "VerilogReaderPvt.hh" #include "VerilogReader.hh" int VerilogLex_lex(); diff --git a/verilog/VerilogReader.cc b/verilog/VerilogReader.cc index 22a1eaf0..4dbf89f6 100644 --- a/verilog/VerilogReader.cc +++ b/verilog/VerilogReader.cc @@ -25,7 +25,7 @@ #include "Liberty.hh" #include "Network.hh" #include "VerilogNamespace.hh" -#include "Verilog.hh" +#include "VerilogReaderPvt.hh" #include "VerilogReader.hh" extern int @@ -47,7 +47,7 @@ hierarchyLevel(Net *net, Network *network); // Return top level instance. Instance * -linkVerilogNetwork(Cell *top_cell, +linkVerilogNetwork(const char *top_cell_name, bool make_black_boxes, Report *report, NetworkReader *network); @@ -1684,10 +1684,12 @@ VerilogNetPortRefPart::name() //////////////////////////////////////////////////////////////// Instance * -linkVerilogNetwork(Cell *top_cell, bool make_black_boxes, - Report *report, NetworkReader *) +linkVerilogNetwork(const char *top_cell_name, + bool make_black_boxes, + Report *report, + NetworkReader *) { - return verilog_reader->linkNetwork(top_cell, make_black_boxes, report); + return verilog_reader->linkNetwork(top_cell_name, make_black_boxes, report); } // Verilog net name to network net map. @@ -1715,10 +1717,11 @@ private: }; Instance * -VerilogReader::linkNetwork(Cell *top_cell, +VerilogReader::linkNetwork(const char *top_cell_name, bool make_black_boxes, Report *report) { + Cell *top_cell = network_->findCell(library_, top_cell_name); VerilogModule *module = verilog_reader->module(top_cell); if (module) { // Seed the recursion for expansion with the top level instance. diff --git a/verilog/Verilog.hh b/verilog/VerilogReaderPvt.hh similarity index 99% rename from verilog/Verilog.hh rename to verilog/VerilogReaderPvt.hh index ad7b2bfd..81b5823e 100644 --- a/verilog/Verilog.hh +++ b/verilog/VerilogReaderPvt.hh @@ -141,7 +141,7 @@ public: int from_index, int to_index); VerilogModule *module(Cell *cell); - Instance *linkNetwork(Cell *top_cell, + Instance *linkNetwork(const char *top_cell_name, bool make_black_boxes, Report *report); int line() const { return line_; }