Skip to content

Commit 1d6e79a

Browse files
committed
Merge remote-tracking branch 'upstream/master'
2 parents 7b4cea5 + c4b94c3 commit 1d6e79a

File tree

15 files changed

+159
-17
lines changed

15 files changed

+159
-17
lines changed

dcalc/ArcDelayCalc.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424

2525
#include "ArcDelayCalc.hh"
2626

27+
#include <cstdlib>
28+
2729
#include "Units.hh"
2830
#include "Liberty.hh"
2931
#include "TimingArc.hh"

include/sta/ExceptionPath.hh

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -355,8 +355,8 @@ public:
355355
const Network *network) = 0;
356356
virtual void connectPinAfter(PinSet *,
357357
Network *network) = 0;
358-
virtual void disconnectPinBefore(const Pin *pin,
359-
Network *network) = 0;
358+
virtual void deletePinBefore(const Pin *pin,
359+
Network *network) = 0;
360360

361361
protected:
362362
const RiseFallBoth *rf_;
@@ -415,8 +415,8 @@ public:
415415
const Network *) {}
416416
virtual void connectPinAfter(PinSet *,
417417
Network *) {}
418-
virtual void disconnectPinBefore(const Pin *,
419-
Network *);
418+
virtual void deletePinBefore(const Pin *,
419+
Network *);
420420
void deleteInstance(const Instance *inst,
421421
const Network *network);
422422

@@ -537,8 +537,8 @@ public:
537537
virtual size_t objectCount() const;
538538
virtual void connectPinAfter(PinSet *drvrs,
539539
Network *network);
540-
virtual void disconnectPinBefore(const Pin *pin,
541-
Network *network);
540+
virtual void deletePinBefore(const Pin *pin,
541+
Network *network);
542542
void deleteInstance(const Instance *inst,
543543
const Network *network);
544544

include/sta/Sdc.hh

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1027,7 +1027,7 @@ public:
10271027
void removeGraphAnnotations();
10281028

10291029
// Network edit before/after methods.
1030-
void disconnectPinBefore(const Pin *pin);
1030+
void deletePinBefore(const Pin *pin);
10311031
void connectPinAfter(const Pin *pin);
10321032
void clkHpinDisablesChanged(const Pin *pin);
10331033
void makeClkHpinDisable(const Clock *clk,
@@ -1115,6 +1115,7 @@ protected:
11151115
void recordMergeHash(ExceptionPath *exception, ExceptionPt *missing_pt);
11161116
void recordMergeHashes(ExceptionPath *exception);
11171117
void unrecordExceptionFirstPts(ExceptionPath *exception);
1118+
void unrecordExceptionPins(ExceptionPath *exception);
11181119
void unrecordExceptionClks(ExceptionPath *exception,
11191120
ClockSet *clks,
11201121
ClockExceptionsMap &exception_map);

liberty/Liberty.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1226,7 +1226,8 @@ LibertyCell::bufferPorts(// Return values.
12261226
}
12271227
output = port;
12281228
}
1229-
else if (!dir->isPowerGround()) {
1229+
else if (!port->isPwrGnd()) {
1230+
// Invalid direction.
12301231
input = nullptr;
12311232
output = nullptr;
12321233
break;

liberty/TableModel.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
#include "TableModel.hh"
2626

27+
#include <cmath>
2728
#include <string>
2829

2930
#include "Error.hh"

sdc/ExceptionPath.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1166,8 +1166,8 @@ ExceptionFromTo::deleteInstance(const Instance *inst,
11661166
}
11671167

11681168
void
1169-
ExceptionFromTo::disconnectPinBefore(const Pin *pin,
1170-
Network *network)
1169+
ExceptionFromTo::deletePinBefore(const Pin *pin,
1170+
Network *network)
11711171
{
11721172
deletePin(pin, network);
11731173
}
@@ -2080,8 +2080,8 @@ ExceptionThru::makePinEdges(const Pin *pin,
20802080
}
20812081

20822082
void
2083-
ExceptionThru::disconnectPinBefore(const Pin *pin,
2084-
Network *network)
2083+
ExceptionThru::deletePinBefore(const Pin *pin,
2084+
Network *network)
20852085
{
20862086
deletePin(pin, network);
20872087
// Remove edges from/to leaf pin and through hier pin.

sdc/Sdc.cc

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4880,6 +4880,8 @@ Sdc::findMergeMatch(ExceptionPath *exception)
48804880
void
48814881
Sdc::deleteExceptions()
48824882
{
4883+
for (ExceptionPath *exception : exceptions_)
4884+
delete exception;
48834885
exceptions_.clear();
48844886
exception_id_ = 0;
48854887

@@ -4964,6 +4966,7 @@ Sdc::unrecordException(ExceptionPath *exception)
49644966
{
49654967
unrecordMergeHashes(exception);
49664968
unrecordExceptionFirstPts(exception);
4969+
unrecordExceptionPins(exception);
49674970
exceptions_.erase(exception);
49684971
}
49694972

@@ -5022,6 +5025,22 @@ Sdc::unrecordExceptionFirstPts(ExceptionPath *exception)
50225025
}
50235026
}
50245027

5028+
void
5029+
Sdc::unrecordExceptionPins(ExceptionPath *exception)
5030+
{
5031+
ExceptionFrom *from = exception->from();
5032+
if (from)
5033+
unrecordExceptionPins(exception, from->pins(), pin_exceptions_);
5034+
ExceptionThruSeq *thrus = exception->thrus();
5035+
if (thrus) {
5036+
for (ExceptionThru *thru : *thrus)
5037+
unrecordExceptionPins(exception, thru->pins(), pin_exceptions_);
5038+
}
5039+
ExceptionTo *to = exception->to();
5040+
if (to)
5041+
unrecordExceptionPins(exception, to->pins(), pin_exceptions_);
5042+
}
5043+
50255044
void
50265045
Sdc::unrecordExceptionClks(ExceptionPath *exception,
50275046
ClockSet *clks,
@@ -5666,22 +5685,22 @@ Sdc::connectPinAfter(const Pin *pin)
56665685
}
56675686

56685687
void
5669-
Sdc::disconnectPinBefore(const Pin *pin)
5688+
Sdc::deletePinBefore(const Pin *pin)
56705689
{
56715690
auto itr = pin_exceptions_.find(pin);
56725691
if (itr != pin_exceptions_.end()) {
56735692
for (ExceptionPath *exception : itr->second) {
56745693
ExceptionFrom *from = exception->from();
56755694
if (from)
5676-
from->disconnectPinBefore(pin, network_);
5695+
from->deletePinBefore(pin, network_);
56775696
ExceptionTo *to = exception->to();
56785697
if (to)
5679-
to->disconnectPinBefore(pin, network_);
5698+
to->deletePinBefore(pin, network_);
56805699
ExceptionPt *first_pt = exception->firstPt();
56815700
ExceptionThruSeq *thrus = exception->thrus();
56825701
if (thrus) {
56835702
for (ExceptionThru *thru : *exception->thrus()) {
5684-
thru->disconnectPinBefore(pin, network_);
5703+
thru->deletePinBefore(pin, network_);
56855704
if (thru == first_pt)
56865705
recordExceptionEdges(exception, thru->edges(),
56875706
first_thru_edge_exceptions_);

search/Sta.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4477,7 +4477,6 @@ Sta::disconnectPinBefore(const Pin *pin)
44774477
sdc_network_->pathName(pin),
44784478
sdc_network_->pathName(network_->net(pin)));
44794479
parasitics_->disconnectPinBefore(pin, network_);
4480-
sdc_->disconnectPinBefore(pin);
44814480
sim_->disconnectPinBefore(pin);
44824481
if (graph_) {
44834482
if (network_->isDriver(pin)) {
@@ -4663,6 +4662,7 @@ Sta::deletePinBefore(const Pin *pin)
46634662
}
46644663
}
46654664
}
4665+
sdc_->deletePinBefore(pin);
46664666
sim_->deletePinBefore(pin);
46674667
clk_network_->deletePinBefore(pin);
46684668
power_->deletePinBefore(pin);

test/disconnect_mcp_pin.ok

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
Warning: disconnect_mcp_pin.tcl line 15, 'u0/A' is not a valid endpoint.
2+
Warning: disconnect_mcp_pin.tcl line 16, 'u1/A' is not a valid endpoint.
3+
Warning: disconnect_mcp_pin.tcl line 17, 'u0/A' is not a valid endpoint.
4+
Warning: disconnect_mcp_pin.tcl line 18, 'u1/A' is not a valid endpoint.
5+
Startpoint: data_in[1] (input port clocked by clk)
6+
Endpoint: u1 (falling edge-triggered data to data check clocked by clk)
7+
Path Group: clk
8+
Path Type: max
9+
10+
Delay Time Description
11+
---------------------------------------------------------
12+
500.00 500.00 clock clk (rise edge)
13+
0.00 500.00 clock network delay (ideal)
14+
10.00 510.00 ^ input external delay
15+
0.00 510.00 ^ data_in[1] (in)
16+
0.00 510.00 ^ u1/A (BUFx2_ASAP7_75t_R)
17+
510.00 data arrival time
18+
19+
750.00 750.00 clock clk (fall edge)
20+
0.00 750.00 clock network delay (propagated)
21+
0.00 750.00 clock reconvergence pessimism
22+
750.00 v clk (in)
23+
-10.00 740.00 data check setup time
24+
740.00 data required time
25+
---------------------------------------------------------
26+
740.00 data required time
27+
-510.00 data arrival time
28+
---------------------------------------------------------
29+
230.00 slack (MET)
30+
31+
32+
No paths found.
33+
Startpoint: data_in[1] (input port clocked by clk)
34+
Endpoint: u1 (falling edge-triggered data to data check clocked by clk)
35+
Path Group: clk
36+
Path Type: max
37+
38+
Delay Time Description
39+
---------------------------------------------------------
40+
500.00 500.00 clock clk (rise edge)
41+
0.00 500.00 clock network delay (ideal)
42+
10.00 510.00 ^ input external delay
43+
0.00 510.00 ^ data_in[1] (in)
44+
0.00 510.00 ^ u1/A (BUFx2_ASAP7_75t_R)
45+
510.00 data arrival time
46+
47+
750.00 750.00 clock clk (fall edge)
48+
0.00 750.00 clock network delay (propagated)
49+
0.00 750.00 clock reconvergence pessimism
50+
750.00 v clk (in)
51+
-10.00 740.00 data check setup time
52+
740.00 data required time
53+
---------------------------------------------------------
54+
740.00 data required time
55+
-510.00 data arrival time
56+
---------------------------------------------------------
57+
230.00 slack (MET)
58+
59+

test/disconnect_mcp_pin.tcl

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# disconnect/disconnect pin set_multicycle_path
2+
read_liberty asap7_small.lib.gz
3+
read_verilog disconnect_mcp_pin.v
4+
link_design top
5+
6+
create_clock -name clk -period 500 clk
7+
set_input_delay -clock clk 10 data_in[*]
8+
9+
# This SDC defines setup and hold time requirements for data pins
10+
# relative to a clock, typical for a source-synchronous interface.
11+
set_data_check -from clk -to [get_pins u0/A] -setup 10
12+
set_data_check -from clk -to [get_pins u0/A] -hold 10
13+
set_data_check -from clk -to [get_pins u1/A] -setup 10
14+
set_data_check -from clk -to [get_pins u1/A] -hold 10
15+
set_multicycle_path -end -setup 1 -to [get_pins u0/A]
16+
set_multicycle_path -end -setup 1 -to [get_pins u1/A]
17+
set_multicycle_path -start -hold 0 -to [get_pins u0/A]
18+
set_multicycle_path -start -hold 0 -to [get_pins u1/A]
19+
20+
report_checks -to u1/A
21+
22+
disconnect_pin data_in[1] u1/A
23+
24+
report_checks -to u1/A
25+
26+
connect_pin data_in[1] u1/A
27+
28+
report_checks -to u1/A
29+

0 commit comments

Comments
 (0)