From 1af0963fd4d0539e86a478ba60aae61f2bd13e21 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Thu, 21 Feb 2019 08:00:06 -0800 Subject: [PATCH] 2019/02/21 write_path_spice include side load pins --- .gitignore | 2 + doc/BugLog | 1 + doc/OpenSTA.odt | Bin 74224 -> 74217 bytes search/WritePathSpice.cc | 320 ++++++++++++++++++++++++++++----------- 4 files changed, 238 insertions(+), 85 deletions(-) diff --git a/.gitignore b/.gitignore index 92e4f53c..16d9c302 100644 --- a/.gitignore +++ b/.gitignore @@ -68,6 +68,8 @@ Makefile # /test/ /test/gmon.out /test/results +# ngspice turd +/test/b3v3_1check.log /test_native diff --git a/doc/BugLog b/doc/BugLog index 8f05d735..8aed0965 100644 --- a/doc/BugLog +++ b/doc/BugLog @@ -16,3 +16,4 @@ Release 2.0 Patches 2019/01/31 generated clk -divide_by 16384 cycle accting fallout 2019/02/17 report_power internal power accuracy 2019/02/18 write_path_spice first line is comment +2019/02/21 write_path_spice include side load pins diff --git a/doc/OpenSTA.odt b/doc/OpenSTA.odt index c8a6cde76e887fd7fa81fdc002d9687a4aa2d296..f3924f37ed1eac229d09f249be0517f5df786256 100644 GIT binary patch delta 35106 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

EsSFK0QSkZ~)^_twp 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 delta 35047 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 AlmGw# diff --git a/search/WritePathSpice.cc b/search/WritePathSpice.cc index 6cc7bbd8..2f25d252 100644 --- a/search/WritePathSpice.cc +++ b/search/WritePathSpice.cc @@ -29,6 +29,7 @@ #include "TableModel.hh" #include "Liberty.hh" #include "TimingArc.hh" +#include "PortDirection.hh" #include "Network.hh" #include "Graph.hh" #include "Sdc.hh" @@ -95,8 +96,13 @@ private: void writeMeasureStmts(); void writeMeasureStmt(const Pin *pin); void writeGateStage(Stage stage); - void writeStageVoltageSources(Stage stage, - StringVector *spice_port_names); + void writeSubcktInst(const Pin *input_pin); + void writeSubcktInstVoltSrcs(Stage stage, + const Pin *input_pin, + int &volt_index, + LibertyPortLogicValues &port_values, + const Clock *clk, + DcalcAPIndex dcalc_ap_index); void writeStageParasitics(Stage stage); void writeSubckts(); void findPathCellnames(// Return values. @@ -115,15 +121,25 @@ private: Path *to_path); void writeMeasureSlewStmt(Stage stage, Path *path); - void sensitizationValues(const Instance *inst, - FuncExpr *expr, - LibertyPort *input_port, - // Return values. - LibertyPortLogicValues &port_values); - void seqSensitizationValues(Sequential *seq, - const TransRiseFall *tr, - // Return values. - LibertyPortLogicValues &port_values); + void gatePortValues(Stage stage, + // Return values. + LibertyPortLogicValues &port_values, + const Clock *&clk, + DcalcAPIndex &dcalc_ap_index); + void regPortValues(Stage stage, + // Return values. + LibertyPortLogicValues &port_values, + const Clock *&clk, + DcalcAPIndex &dcalc_ap_index); + void gatePortValues(const Instance *inst, + FuncExpr *expr, + LibertyPort *input_port, + // Return values. + LibertyPortLogicValues &port_values); + void seqPortValues(Sequential *seq, + const TransRiseFall *tr, + // Return values. + LibertyPortLogicValues &port_values); void writeInputWaveform(); void writeClkWaveform(); void writeWaveformEdge(const TransRiseFall *tr, @@ -160,7 +176,7 @@ private: // gate |/ drvr load|/ // input // - // A path from an input port has no GateInputPath. + // A path from an input port has no GateInputPath (the input port is the drvr). // Internally a stage index from stageFirst() to stageLast() // is turned into an index into path_expanded_. // @@ -179,10 +195,14 @@ private: Edge *stageWireEdge(Stage stage); Pin *stageGateInputPin(Stage stage); Pin *stageDrvrPin(Stage stage); + LibertyPort *stageGateInputPort(Stage stage); + LibertyPort *stageDrvrPort(Stage stage); Pin *stageLoadPin(Stage stage); const char *stageGateInputPinName(Stage stage); const char *stageDrvrPinName(Stage stage); const char *stageLoadPinName(Stage stage); + LibertyCell *stageLibertyCell(Stage stage); + Instance *stageInstance(Stage stage); Path *path_; const char *spice_filename_; @@ -721,20 +741,62 @@ WritePathSpice::writeGateStage(Stage stage) { auto input_pin = stageGateInputPin(stage); auto input_pin_name = stageGateInputPinName(stage); + auto drvr_pin = stageDrvrPin(stage); auto drvr_pin_name = stageDrvrPinName(stage); + auto load_pin = stageLoadPin(stage); auto load_pin_name = stageLoadPinName(stage); streamPrint(spice_stream_, ".subckt stage%d %s %s %s\n", stage, input_pin_name, drvr_pin_name, load_pin_name); + // Driver subckt call. + auto inst = stageInstance(stage); + auto input_port = stageGateInputPort(stage); + auto drvr_port = stageDrvrPort(stage); + streamPrint(spice_stream_, "* Gate %s %s -> %s\n", + network_->pathName(inst), + input_port->name(), + drvr_port->name()); + writeSubcktInst(input_pin); + LibertyPortLogicValues port_values; + DcalcAPIndex dcalc_ap_index; + const Clock *clk; + int volt_index = 1; + gatePortValues(stage, port_values, clk, dcalc_ap_index); + writeSubcktInstVoltSrcs(stage, input_pin, volt_index, + port_values, clk, dcalc_ap_index); + streamPrint(spice_stream_, "\n"); + + port_values.clear(); + auto pin_iter = network_->connectedPinIterator(drvr_pin); + while (pin_iter->hasNext()) { + auto pin = pin_iter->next(); + if (pin != drvr_pin + && pin != load_pin + && network_->direction(pin)->isAnyInput() + && !network_->isHierarchical(pin) + && !network_->isTopLevelPort(pin)) { + streamPrint(spice_stream_, "* Side load %s\n", network_->pathName(pin)); + writeSubcktInst(pin); + writeSubcktInstVoltSrcs(stage, pin, volt_index, port_values, NULL, 0); + streamPrint(spice_stream_, "\n"); + } + } + delete pin_iter; + + writeStageParasitics(stage); + streamPrint(spice_stream_, ".ends\n\n"); +} + +void +WritePathSpice::writeSubcktInst(const Pin *input_pin) +{ auto inst = network_->instance(input_pin); auto inst_name = network_->pathName(inst); auto cell = network_->libertyCell(inst); auto cell_name = cell->name(); auto spice_port_names = cell_spice_port_names_[cell_name]; - - // Instance subckt call. streamPrint(spice_stream_, "x%s", inst_name); StringVector::Iterator port_iter(spice_port_names); while (port_iter.hasNext()) { @@ -750,55 +812,30 @@ WritePathSpice::writeGateStage(Stage stage) streamPrint(spice_stream_, " %s/%s", inst_name, subckt_port_name); } streamPrint(spice_stream_, " %s\n", cell_name); - - writeStageVoltageSources(stage, spice_port_names); - writeStageParasitics(stage); - streamPrint(spice_stream_, ".ends\n\n"); } // Power/ground and input voltage sources. void -WritePathSpice::writeStageVoltageSources(Stage stage, - StringVector *spice_port_names) +WritePathSpice::writeSubcktInstVoltSrcs(Stage stage, + const Pin *input_pin, + int &volt_index, + LibertyPortLogicValues &port_values, + const Clock *clk, + DcalcAPIndex dcalc_ap_index) + { - auto input_pin = stageGateInputPin(stage); + auto inst = network_->instance(input_pin); + auto cell = network_->libertyCell(inst); + auto cell_name = cell->name(); + auto spice_port_names = cell_spice_port_names_[cell_name]; + auto drvr_pin = stageDrvrPin(stage); auto input_port = network_->libertyPort(input_pin); auto drvr_port = network_->libertyPort(drvr_pin); auto input_port_name = input_port->name(); auto drvr_port_name = drvr_port->name(); - auto inst = network_->instance(input_pin); auto inst_name = network_->pathName(inst); - auto cell = network_->libertyCell(inst); - auto gate_edge = stageGateEdge(stage); - LibertyPortLogicValues port_values; - const Clock *clk = NULL; - DcalcAPIndex dcalc_ap_index = 0; - if (gate_edge->role()->genericRole() == TimingRole::regClkToQ()) { - auto drvr_expr = drvr_port->function(); - if (drvr_expr) { - auto q_port = drvr_expr->port(); - if (q_port) { - // Drvr (register/latch output) function should be a reference - // to an internal port like IQ or IQN. - auto seq = cell->outputPortSequential(q_port); - if (seq) { - auto drvr_path = stageDrvrPath(stage); - auto drvr_tr = drvr_path->transition(this); - seqSensitizationValues(seq, drvr_tr, port_values); - clk = drvr_path->clock(this); - dcalc_ap_index = drvr_path->dcalcAnalysisPt(this)->index(); - } - else - report_->error("no register/latch found for path from %s to %s,\n", - input_port_name, drvr_port_name); - } - } - } - else if (drvr_port->function()) - sensitizationValues(inst, drvr_port->function(), input_port, port_values); - int volt_index = 1; debugPrint1(debug_, "write_spice", 2, "subckt %s\n", cell->name()); StringVector::Iterator port_iter(spice_port_names); while (port_iter.hasNext()) { @@ -818,7 +855,8 @@ WritePathSpice::writeStageVoltageSources(Stage stage, || stringEq(subckt_port_name, drvr_port_name))) { // Input voltage to sensitize path from gate input to output. auto port = cell->findLibertyPort(subckt_port_name); - if (port) { + if (port + && port->direction()->isAnyInput()) { const Pin *pin = network_->findPin(inst, port); // Look for tie high/low or propagated constant values. LogicValue port_value = sim_->logicValue(pin); @@ -831,6 +869,7 @@ WritePathSpice::writeStageVoltageSources(Stage stage, } switch (port_value) { case logic_zero: + case logic_unknown: writeVoltageSource(cell, inst_name, subckt_port_name, port->relatedGroundPin(), volt_index); @@ -848,8 +887,6 @@ WritePathSpice::writeStageVoltageSources(Stage stage, writeClkedStepSource(pin, TransRiseFall::fall(), clk, dcalc_ap_index, volt_index); break; - case logic_unknown: - break; } } } @@ -900,13 +937,66 @@ WritePathSpice::writeVoltageSource(LibertyCell *cell, pg_port_name); } +void +WritePathSpice::gatePortValues(Stage stage, + // Return values. + LibertyPortLogicValues &port_values, + const Clock *&clk, + DcalcAPIndex &dcalc_ap_index) +{ + clk = NULL; + dcalc_ap_index = 0; + + auto gate_edge = stageGateEdge(stage); + auto drvr_port = stageDrvrPort(stage); + if (gate_edge->role()->genericRole() == TimingRole::regClkToQ()) + regPortValues(stage, port_values, clk, dcalc_ap_index); + else if (drvr_port->function()) { + auto input_pin = stageGateInputPin(stage); + auto input_port = network_->libertyPort(input_pin); + auto inst = network_->instance(input_pin); + gatePortValues(inst, drvr_port->function(), input_port, port_values); + } +} + +void +WritePathSpice::regPortValues(Stage stage, + // Return values. + LibertyPortLogicValues &port_values, + const Clock *&clk, + DcalcAPIndex &dcalc_ap_index) +{ + auto drvr_port = stageDrvrPort(stage); + auto drvr_expr = drvr_port->function(); + if (drvr_expr) { + auto q_port = drvr_expr->port(); + if (q_port) { + // Drvr (register/latch output) function should be a reference + // to an internal port like IQ or IQN. + auto cell = stageLibertyCell(stage); + auto seq = cell->outputPortSequential(q_port); + if (seq) { + auto drvr_path = stageDrvrPath(stage); + auto drvr_tr = drvr_path->transition(this); + seqPortValues(seq, drvr_tr, port_values); + clk = drvr_path->clock(this); + dcalc_ap_index = drvr_path->dcalcAnalysisPt(this)->index(); + } + else + report_->error("no register/latch found for path from %s to %s,\n", + stageGateInputPort(stage)->name(), + stageDrvrPort(stage)->name()); + } + } +} + // Find the logic values for expression inputs to enable paths input_port. void -WritePathSpice::sensitizationValues(const Instance *inst, - FuncExpr *expr, - LibertyPort *input_port, - // Return values. - LibertyPortLogicValues &port_values) +WritePathSpice::gatePortValues(const Instance *inst, + FuncExpr *expr, + LibertyPort *input_port, + // Return values. + LibertyPortLogicValues &port_values) { auto left = expr->left(); auto right = expr->right(); @@ -914,7 +1004,7 @@ WritePathSpice::sensitizationValues(const Instance *inst, case FuncExpr::op_port: break; case FuncExpr::op_not: - sensitizationValues(inst, left, input_port, port_values); + gatePortValues(inst, left, input_port, port_values); break; case FuncExpr::op_or: if (left->hasPort(input_port) @@ -934,8 +1024,8 @@ WritePathSpice::sensitizationValues(const Instance *inst, // input_port + !left_port port_values[left->left()->port()] = logic_one; else { - sensitizationValues(inst, left, input_port, port_values); - sensitizationValues(inst, right, input_port, port_values); + gatePortValues(inst, left, input_port, port_values); + gatePortValues(inst, right, input_port, port_values); } break; case FuncExpr::op_and: @@ -956,8 +1046,8 @@ WritePathSpice::sensitizationValues(const Instance *inst, // input_port * !left_port port_values[left->left()->port()] = logic_zero; else { - sensitizationValues(inst, left, input_port, port_values); - sensitizationValues(inst, right, input_port, port_values); + gatePortValues(inst, left, input_port, port_values); + gatePortValues(inst, right, input_port, port_values); } break; case FuncExpr::op_xor: @@ -969,8 +1059,8 @@ WritePathSpice::sensitizationValues(const Instance *inst, && left->op() == FuncExpr::op_port) port_values[left->port()] = logic_zero; else { - sensitizationValues(inst, left, input_port, port_values); - sensitizationValues(inst, right, input_port, port_values); + gatePortValues(inst, left, input_port, port_values); + gatePortValues(inst, right, input_port, port_values); } break; case FuncExpr::op_one: @@ -980,10 +1070,10 @@ WritePathSpice::sensitizationValues(const Instance *inst, } void -WritePathSpice::seqSensitizationValues(Sequential *seq, - const TransRiseFall *tr, - // Return values. - LibertyPortLogicValues &port_values) +WritePathSpice::seqPortValues(Sequential *seq, + const TransRiseFall *tr, + // Return values. + LibertyPortLogicValues &port_values) { auto data = seq->data(); auto port = onePort(data); @@ -1041,16 +1131,15 @@ WritePathSpice::writeStageParasitics(Stage stage) { auto drvr_path = stageDrvrPath(stage); auto drvr_pin = stageDrvrPin(stage); - auto load_pin = stageLoadPin(stage); auto dcalc_ap = drvr_path->dcalcAnalysisPt(this); auto parasitic_ap = dcalc_ap->parasiticAnalysisPt(); auto parasitic = parasitics_->findParasiticNetwork(drvr_pin, parasitic_ap); - int resistor_index = 1; + Set reachable_pins; + int res_index = 1; int cap_index = 1; if (parasitic) { auto net = network_->net(drvr_pin); - auto net_name = - net ? network_->pathName(net) : network_->pathName(drvr_pin); + auto net_name = net ? network_->pathName(net) : network_->pathName(drvr_pin); initNodeMap(net_name); streamPrint(spice_stream_, "* Net %s\n", net_name); ParasiticDeviceIterator *device_iter = parasitics_->deviceIterator(parasitic); @@ -1058,14 +1147,19 @@ WritePathSpice::writeStageParasitics(Stage stage) auto device = device_iter->next(); auto resistance = parasitics_->value(device, parasitic_ap); if (parasitics_->isResistor(device)) { - ParasiticNode *node1 = parasitics_->node1(device); - ParasiticNode *node2 = parasitics_->node2(device); + auto node1 = parasitics_->node1(device); + auto node2 = parasitics_->node2(device); streamPrint(spice_stream_, "R%d %s %s %.3e\n", - resistor_index, + res_index, nodeName(node1), nodeName(node2), resistance); - resistor_index++; + res_index++; + + auto pin1 = parasitics_->connectionPin(node1); + reachable_pins.insert(pin1); + auto pin2 = parasitics_->connectionPin(node2); + reachable_pins.insert(pin2); } else if (parasitics_->isCouplingCap(device)) { // Ground coupling caps for now. @@ -1079,6 +1173,29 @@ WritePathSpice::writeStageParasitics(Stage stage) } } delete device_iter; + } + else + streamPrint(spice_stream_, "* No parasitics found for this net.\n"); + + // Add resistors from drvr to load for missing parasitic connections. + auto pin_iter = network_->connectedPinIterator(drvr_pin); + while (pin_iter->hasNext()) { + auto pin = pin_iter->next(); + if (pin != drvr_pin + && network_->isLoad(pin) + && !network_->isHierarchical(pin) + && !reachable_pins.hasKey(pin)) { + streamPrint(spice_stream_, "R%d %s %s %.3e\n", + res_index, + network_->pathName(drvr_pin), + network_->pathName(pin), + short_ckt_resistance_); + res_index++; + } + } + delete pin_iter; + + if (parasitic) { ParasiticNodeIterator *node_iter = parasitics_->nodeIterator(parasitic); while (node_iter->hasNext()) { auto node = node_iter->next(); @@ -1094,13 +1211,6 @@ WritePathSpice::writeStageParasitics(Stage stage) } delete node_iter; } - else { - streamPrint(spice_stream_, "* No parasitics found for this net.\n"); - streamPrint(spice_stream_, "R1 %s %s %.3e\n", - network_->pathName(drvr_pin), - network_->pathName(load_pin), - short_ckt_resistance_); - } } void @@ -1204,6 +1314,18 @@ WritePathSpice::findPathCellnames(// Return values. debugPrint1(debug_, "write_spice", 2, "cell %s\n", cell->name()); path_cell_names.insert(cell->name()); } + // Include side receivers. + auto drvr_pin = stageDrvrPin(stage); + auto pin_iter = network_->connectedPinIterator(drvr_pin); + while (pin_iter->hasNext()) { + auto pin = pin_iter->next(); + auto port = network_->libertyPort(pin); + if (port) { + auto cell = port->libertyCell(); + path_cell_names.insert(cell->name()); + } + } + delete pin_iter; } } } @@ -1329,6 +1451,13 @@ WritePathSpice::stageGateInputPin(Stage stage) return path->pin(this); } +LibertyPort * +WritePathSpice::stageGateInputPort(Stage stage) +{ + auto pin = stageGateInputPin(stage); + return network_->libertyPort(pin); +} + Pin * WritePathSpice::stageDrvrPin(Stage stage) { @@ -1336,6 +1465,13 @@ WritePathSpice::stageDrvrPin(Stage stage) return path->pin(this); } +LibertyPort * +WritePathSpice::stageDrvrPort(Stage stage) +{ + auto pin = stageDrvrPin(stage); + return network_->libertyPort(pin); +} + Pin * WritePathSpice::stageLoadPin(Stage stage) { @@ -1364,6 +1500,20 @@ WritePathSpice::stageLoadPinName(Stage stage) return network_->pathName(pin); } +Instance * +WritePathSpice::stageInstance(Stage stage) +{ + auto pin = stageDrvrPin(stage); + return network_->instance(pin); +} + +LibertyCell * +WritePathSpice::stageLibertyCell(Stage stage) +{ + auto pin = stageDrvrPin(stage); + return network_->libertyPort(pin)->libertyCell(); +} + //////////////////////////////////////////////////////////////// // fprintf for c++ streams.