Skip to content

Commit 371b85c

Browse files
committed
latest STA plus changes to fix prima dcalc and read_spef issues, TCL regression added
Signed-off-by: dsengupta0628 <dsengupta@precisioninno.com>
2 parents 3eec04f + c887b2e commit 371b85c

19 files changed

Lines changed: 340 additions & 182 deletions

dcalc/PrimaDelayCalc.cc

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -931,17 +931,20 @@ std::string
931931
PrimaDelayCalc::reportGateDelay(const Pin *drvr_pin,
932932
const TimingArc *arc,
933933
const Slew &in_slew,
934-
float,
935-
const Parasitic *,
936-
const LoadPinIndexMap &,
934+
float load_cap,
935+
const Parasitic *parasitic,
936+
const LoadPinIndexMap &load_pin_index_map,
937937
const Scene *scene,
938938
const MinMax *min_max,
939939
int digits)
940940
{
941941
GateTimingModel *model = arc->gateModel(scene, min_max);
942942
if (model) {
943+
// Delay calc to find ceff.
944+
gateDelay(drvr_pin, arc, in_slew, load_cap, parasitic,
945+
load_pin_index_map, scene, min_max);
943946
float in_slew1 = delayAsFloat(in_slew);
944-
float ceff = ceff_vth_[0];
947+
float ceff = ceff_vth_.empty() ? load_cap : ceff_vth_[0];
945948
return model->reportGateDelay(pinPvt(drvr_pin, scene, min_max),
946949
in_slew1, ceff, min_max,
947950
PocvMode::scalar, digits);

dcalc/test/CMakeLists.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,6 @@
1+
sta_module_tests("dcalc"
2+
TESTS
3+
prima_report
4+
)
5+
16
add_subdirectory(cpp)

dcalc/test/cpp/TestDcalc.cc

Lines changed: 28 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -166,9 +166,8 @@ TEST_F(FindRootAdditionalTest, RootAtX1) {
166166
y = x - 5.0;
167167
dy = 1.0;
168168
};
169-
bool fail = false;
170169
// y1 = 5-5 = 0, y2 = 10-5 = 5
171-
double root = findRoot(func, 5.0, 0.0, 10.0, 5.0, 1e-10, 100, fail);
170+
auto [root, fail] = findRoot(func, 5.0, 0.0, 10.0, 5.0, 1e-10, 100);
172171
EXPECT_FALSE(fail);
173172
EXPECT_NEAR(root, 5.0, 1e-8);
174173
}
@@ -179,9 +178,8 @@ TEST_F(FindRootAdditionalTest, RootAtX2) {
179178
y = x - 5.0;
180179
dy = 1.0;
181180
};
182-
bool fail = false;
183181
// y1 = 0-5 = -5, y2 = 5-5 = 0
184-
double root = findRoot(func, 0.0, -5.0, 5.0, 0.0, 1e-10, 100, fail);
182+
auto [root, fail] = findRoot(func, 0.0, -5.0, 5.0, 0.0, 1e-10, 100);
185183
EXPECT_FALSE(fail);
186184
EXPECT_NEAR(root, 5.0, 1e-8);
187185
}
@@ -192,9 +190,8 @@ TEST_F(FindRootAdditionalTest, BothPositiveFails) {
192190
y = x * x + 1.0;
193191
dy = 2.0 * x;
194192
};
195-
bool fail = false;
196193
// y1 = 2, y2 = 5 -- both positive
197-
findRoot(func, 1.0, 2.0, 2.0, 5.0, 1e-10, 100, fail);
194+
auto [root_, fail] = findRoot(func, 1.0, 2.0, 2.0, 5.0, 1e-10, 100);
198195
EXPECT_TRUE(fail);
199196
}
200197

@@ -204,8 +201,7 @@ TEST_F(FindRootAdditionalTest, BothNegativeFails) {
204201
y = -x * x - 1.0;
205202
dy = -2.0 * x;
206203
};
207-
bool fail = false;
208-
findRoot(func, 1.0, -2.0, 2.0, -5.0, 1e-10, 100, fail);
204+
auto [root_, fail] = findRoot(func, 1.0, -2.0, 2.0, -5.0, 1e-10, 100);
209205
EXPECT_TRUE(fail);
210206
}
211207

@@ -215,9 +211,8 @@ TEST_F(FindRootAdditionalTest, MaxIterationsExceeded) {
215211
y = x * x - 2.0;
216212
dy = 2.0 * x;
217213
};
218-
bool fail = false;
219214
// Very tight tolerance with only 1 iteration
220-
findRoot(func, 0.0, 3.0, 1e-15, 1, fail);
215+
auto [root_, fail] = findRoot(func, 0.0, 3.0, 1e-15, 1);
221216
EXPECT_TRUE(fail);
222217
}
223218

@@ -227,9 +222,8 @@ TEST_F(FindRootAdditionalTest, SwapWhenY1Positive) {
227222
y = x - 3.0;
228223
dy = 1.0;
229224
};
230-
bool fail = false;
231225
// y1 = 2.0 > 0, y2 = -2.0 < 0 => swap internally
232-
double root = findRoot(func, 5.0, 2.0, 1.0, -2.0, 1e-10, 100, fail);
226+
auto [root, fail] = findRoot(func, 5.0, 2.0, 1.0, -2.0, 1e-10, 100);
233227
EXPECT_FALSE(fail);
234228
EXPECT_NEAR(root, 3.0, 1e-8);
235229
}
@@ -240,8 +234,7 @@ TEST_F(FindRootAdditionalTest, CubicRoot) {
240234
y = x * x * x - 8.0;
241235
dy = 3.0 * x * x;
242236
};
243-
bool fail = false;
244-
double root = findRoot(func, 1.0, 3.0, 1e-10, 100, fail);
237+
auto [root, fail] = findRoot(func, 1.0, 3.0, 1e-10, 100);
245238
EXPECT_FALSE(fail);
246239
EXPECT_NEAR(root, 2.0, 1e-8);
247240
}
@@ -252,8 +245,7 @@ TEST_F(FindRootAdditionalTest, TwoArgOverloadCubic) {
252245
y = x * x * x - 27.0;
253246
dy = 3.0 * x * x;
254247
};
255-
bool fail = false;
256-
double root = findRoot(func, 2.0, 4.0, 1e-10, 100, fail);
248+
auto [root, fail] = findRoot(func, 2.0, 4.0, 1e-10, 100);
257249
EXPECT_FALSE(fail);
258250
EXPECT_NEAR(root, 3.0, 1e-8);
259251
}
@@ -1503,9 +1495,8 @@ TEST_F(FindRootAdditionalTest, FlatDerivative) {
15031495
y = (x - 2.0) * (x - 2.0) * (x - 2.0);
15041496
dy = 3.0 * (x - 2.0) * (x - 2.0);
15051497
};
1506-
bool fail = false;
15071498
// y at x=1 = -1, y at x=3 = 1
1508-
double root = findRoot(func, 1.0, 3.0, 1e-8, 100, fail);
1499+
auto [root, fail] = findRoot(func, 1.0, 3.0, 1e-8, 100);
15091500
if (!fail) {
15101501
EXPECT_NEAR(root, 2.0, 1e-4);
15111502
}
@@ -1517,8 +1508,7 @@ TEST_F(FindRootAdditionalTest, LinearFunction) {
15171508
y = 2.0 * x - 6.0;
15181509
dy = 2.0;
15191510
};
1520-
bool fail = false;
1521-
double root = findRoot(func, 0.0, 10.0, 1e-12, 100, fail);
1511+
auto [root, fail] = findRoot(func, 0.0, 10.0, 1e-12, 100);
15221512
EXPECT_FALSE(fail);
15231513
EXPECT_NEAR(root, 3.0, 1e-8);
15241514
}
@@ -1529,9 +1519,8 @@ TEST_F(FindRootAdditionalTest, FourArgNormalBracket) {
15291519
y = x * x - 4.0;
15301520
dy = 2.0 * x;
15311521
};
1532-
bool fail = false;
15331522
// y1 = 1-4 = -3, y2 = 9-4 = 5
1534-
double root = findRoot(func, 1.0, -3.0, 3.0, 5.0, 1e-10, 100, fail);
1523+
auto [root, fail] = findRoot(func, 1.0, -3.0, 3.0, 5.0, 1e-10, 100);
15351524
EXPECT_FALSE(fail);
15361525
EXPECT_NEAR(root, 2.0, 1e-8);
15371526
}
@@ -2092,9 +2081,8 @@ TEST_F(FindRootAdditionalTest, TightBoundsLinear) {
20922081
y = 2.0 * x - 6.0;
20932082
dy = 2.0;
20942083
};
2095-
bool fail = false;
20962084
// y1 = 2*2.9-6 = -0.2, y2 = 2*3.1-6 = 0.2
2097-
double root = findRoot(func, 2.9, -0.2, 3.1, 0.2, 1e-10, 100, fail);
2085+
auto [root, fail] = findRoot(func, 2.9, -0.2, 3.1, 0.2, 1e-10, 100);
20982086
EXPECT_FALSE(fail);
20992087
EXPECT_NEAR(root, 3.0, 1e-8);
21002088
}
@@ -2106,8 +2094,7 @@ TEST_F(FindRootAdditionalTest, NewtonOutOfBracket) {
21062094
y = x * x * x - x - 2.0;
21072095
dy = 3.0 * x * x - 1.0;
21082096
};
2109-
bool fail = false;
2110-
double root = findRoot(func, 1.0, 2.0, 1e-10, 100, fail);
2097+
auto [root, fail] = findRoot(func, 1.0, 2.0, 1e-10, 100);
21112098
EXPECT_FALSE(fail);
21122099
// Root is near 1.52138
21132100
EXPECT_NEAR(root, 1.52138, 1e-4);
@@ -2119,9 +2106,8 @@ TEST_F(FindRootAdditionalTest, SinRoot) {
21192106
y = sin(x);
21202107
dy = cos(x);
21212108
};
2122-
bool fail = false;
21232109
// Root near pi
2124-
double root = findRoot(func, 3.0, 3.3, 1e-10, 100, fail);
2110+
auto [root, fail] = findRoot(func, 3.0, 3.3, 1e-10, 100);
21252111
EXPECT_FALSE(fail);
21262112
EXPECT_NEAR(root, M_PI, 1e-8);
21272113
}
@@ -2132,8 +2118,7 @@ TEST_F(FindRootAdditionalTest, ExpMinusConst) {
21322118
y = exp(x) - 3.0;
21332119
dy = exp(x);
21342120
};
2135-
bool fail = false;
2136-
double root = findRoot(func, 0.0, 2.0, 1e-10, 100, fail);
2121+
auto [root, fail] = findRoot(func, 0.0, 2.0, 1e-10, 100);
21372122
EXPECT_FALSE(fail);
21382123
EXPECT_NEAR(root, log(3.0), 1e-8);
21392124
}
@@ -2395,8 +2380,7 @@ TEST_F(FindRootAdditionalTest, QuadraticExact) {
23952380
y = x * x - 4.0;
23962381
dy = 2.0 * x;
23972382
};
2398-
bool fail = false;
2399-
double root = findRoot(func, 1.0, 3.0, 1e-10, 100, fail);
2383+
auto [root, fail] = findRoot(func, 1.0, 3.0, 1e-10, 100);
24002384
EXPECT_FALSE(fail);
24012385
EXPECT_NEAR(root, 2.0, 1e-8);
24022386
}
@@ -2407,9 +2391,8 @@ TEST_F(FindRootAdditionalTest, QuadraticFourArg) {
24072391
y = x * x - 9.0;
24082392
dy = 2.0 * x;
24092393
};
2410-
bool fail = false;
24112394
// y(2.5) = 6.25-9 = -2.75, y(3.5) = 12.25-9 = 3.25
2412-
double root = findRoot(func, 2.5, -2.75, 3.5, 3.25, 1e-10, 100, fail);
2395+
auto [root, fail] = findRoot(func, 2.5, -2.75, 3.5, 3.25, 1e-10, 100);
24132396
EXPECT_FALSE(fail);
24142397
EXPECT_NEAR(root, 3.0, 1e-8);
24152398
}
@@ -2590,8 +2573,7 @@ TEST_F(FindRootAdditionalTest, LinearFunction2) {
25902573
y = 2.0 * x - 10.0;
25912574
dy = 2.0;
25922575
};
2593-
bool fail = false;
2594-
double root = findRoot(func, 0.0, 10.0, 1e-10, 100, fail);
2576+
auto [root, fail] = findRoot(func, 0.0, 10.0, 1e-10, 100);
25952577
EXPECT_FALSE(fail);
25962578
EXPECT_NEAR(root, 5.0, 1e-8);
25972579
}
@@ -2601,9 +2583,8 @@ TEST_F(FindRootAdditionalTest, FourArgLinear) {
26012583
y = 3.0 * x - 6.0;
26022584
dy = 3.0;
26032585
};
2604-
bool fail = false;
26052586
// y(1.0) = -3, y(3.0) = 3
2606-
double root = findRoot(func, 1.0, -3.0, 3.0, 3.0, 1e-10, 100, fail);
2587+
auto [root, fail] = findRoot(func, 1.0, -3.0, 3.0, 3.0, 1e-10, 100);
26072588
EXPECT_FALSE(fail);
26082589
EXPECT_NEAR(root, 2.0, 1e-8);
26092590
}
@@ -2613,8 +2594,7 @@ TEST_F(FindRootAdditionalTest, HighOrderPoly) {
26132594
y = x * x * x * x - 16.0;
26142595
dy = 4.0 * x * x * x;
26152596
};
2616-
bool fail = false;
2617-
double root = findRoot(func, 1.0, 3.0, 1e-10, 100, fail);
2597+
auto [root, fail] = findRoot(func, 1.0, 3.0, 1e-10, 100);
26182598
EXPECT_FALSE(fail);
26192599
EXPECT_NEAR(root, 2.0, 1e-6);
26202600
}
@@ -2624,8 +2604,7 @@ TEST_F(FindRootAdditionalTest, NegativeRoot) {
26242604
y = x + 3.0;
26252605
dy = 1.0;
26262606
};
2627-
bool fail = false;
2628-
double root = findRoot(func, -5.0, -1.0, 1e-10, 100, fail);
2607+
auto [root, fail] = findRoot(func, -5.0, -1.0, 1e-10, 100);
26292608
EXPECT_FALSE(fail);
26302609
EXPECT_NEAR(root, -3.0, 1e-8);
26312610
}
@@ -2635,9 +2614,8 @@ TEST_F(FindRootAdditionalTest, TrigFunction) {
26352614
y = std::cos(x);
26362615
dy = -std::sin(x);
26372616
};
2638-
bool fail = false;
26392617
// Root at pi/2
2640-
double root = findRoot(func, 1.0, 2.0, 1e-10, 100, fail);
2618+
auto [root, fail] = findRoot(func, 1.0, 2.0, 1e-10, 100);
26412619
EXPECT_FALSE(fail);
26422620
EXPECT_NEAR(root, M_PI / 2.0, 1e-8);
26432621
}
@@ -2647,8 +2625,7 @@ TEST_F(FindRootAdditionalTest, VeryTightBounds) {
26472625
y = x - 5.0;
26482626
dy = 1.0;
26492627
};
2650-
bool fail = false;
2651-
double root = findRoot(func, 4.999, 5.001, 1e-10, 100, fail);
2628+
auto [root, fail] = findRoot(func, 4.999, 5.001, 1e-10, 100);
26522629
EXPECT_FALSE(fail);
26532630
EXPECT_NEAR(root, 5.0, 1e-8);
26542631
}
@@ -2658,8 +2635,7 @@ TEST_F(FindRootAdditionalTest, ExpFunction) {
26582635
y = std::exp(x) - 10.0;
26592636
dy = std::exp(x);
26602637
};
2661-
bool fail = false;
2662-
double root = findRoot(func, 1.0, 3.0, 1e-10, 100, fail);
2638+
auto [root, fail] = findRoot(func, 1.0, 3.0, 1e-10, 100);
26632639
EXPECT_FALSE(fail);
26642640
EXPECT_NEAR(root, std::log(10.0), 1e-8);
26652641
}
@@ -2669,9 +2645,8 @@ TEST_F(FindRootAdditionalTest, FourArgSwap) {
26692645
y = x - 7.0;
26702646
dy = 1.0;
26712647
};
2672-
bool fail = false;
26732648
// y1 = 3.0 > 0, y2 = -7.0 < 0 => internal swap
2674-
double root = findRoot(func, 10.0, 3.0, 0.0, -7.0, 1e-10, 100, fail);
2649+
auto [root, fail] = findRoot(func, 10.0, 3.0, 0.0, -7.0, 1e-10, 100);
26752650
EXPECT_FALSE(fail);
26762651
EXPECT_NEAR(root, 7.0, 1e-8);
26772652
}
@@ -3369,8 +3344,7 @@ TEST_F(FindRootAdditionalTest, SteepDerivative) {
33693344
y = 1000.0 * x - 500.0;
33703345
dy = 1000.0;
33713346
};
3372-
bool fail = false;
3373-
double root = findRoot(func, 0.0, 1.0, 1e-10, 100, fail);
3347+
auto [root, fail] = findRoot(func, 0.0, 1.0, 1e-10, 100);
33743348
EXPECT_FALSE(fail);
33753349
EXPECT_NEAR(root, 0.5, 1e-8);
33763350
}
@@ -3381,8 +3355,7 @@ TEST_F(FindRootAdditionalTest, QuarticRoot) {
33813355
y = x*x*x*x - 81.0;
33823356
dy = 4.0*x*x*x;
33833357
};
3384-
bool fail = false;
3385-
double root = findRoot(func, 2.0, 4.0, 1e-10, 100, fail);
3358+
auto [root, fail] = findRoot(func, 2.0, 4.0, 1e-10, 100);
33863359
EXPECT_FALSE(fail);
33873360
EXPECT_NEAR(root, 3.0, 1e-6);
33883361
}
@@ -3393,8 +3366,7 @@ TEST_F(FindRootAdditionalTest, FourArgNegBracket) {
33933366
y = x + 5.0;
33943367
dy = 1.0;
33953368
};
3396-
bool fail = false;
3397-
double root = findRoot(func, -8.0, -3.0, -2.0, 3.0, 1e-10, 100, fail);
3369+
auto [root, fail] = findRoot(func, -8.0, -3.0, -2.0, 3.0, 1e-10, 100);
33983370
EXPECT_FALSE(fail);
33993371
EXPECT_NEAR(root, -5.0, 1e-8);
34003372
}

0 commit comments

Comments
 (0)