@@ -399,24 +399,7 @@ void Greenpak4IOB::SaveTimingData(FILE* fp, PTVCorner corner)
399
399
400
400
bool Greenpak4IOB::LoadExtraTimingData (PTVCorner corner, string delaytype, json_object* object)
401
401
{
402
- /*
403
- //Pull out all of the json stuff
404
- json_object* from;
405
- if(!json_object_object_get_ex(object, "from", &from))
406
- {
407
- LogError("No source for this delay\n");
408
- return false;
409
- }
410
- string sfrom = json_object_get_string(from);
411
-
412
- json_object* to;
413
- if(!json_object_object_get_ex(object, "to", &to))
414
- {
415
- LogError("No dest for this delay\n");
416
- return false;
417
- }
418
- string sto = json_object_get_string(to);
419
-
402
+ // always need rising/falling data no matter what it is
420
403
json_object* rising;
421
404
if (!json_object_object_get_ex (object, " rising" , &rising))
422
405
{
@@ -432,11 +415,46 @@ bool Greenpak4IOB::LoadExtraTimingData(PTVCorner corner, string delaytype, json_
432
415
return false ;
433
416
}
434
417
float nfalling = json_object_get_double (falling);
418
+ auto delay = CombinatorialDelay (nrising, nfalling);
419
+
420
+ // Schmitt trigger has no further parameters
421
+ if (delaytype == " schmitt" )
422
+ m_schmittTriggerDelays[corner] = delay;
435
423
436
- //Finally, we can actually save the delay!
437
- m_pinToPinDelays[corner][PinPair(sfrom, sto)] = CombinatorialDelay(nrising, nfalling);
438
- */
424
+ // Output buffers need drive strength
425
+ else if (delaytype == " obuf" )
426
+ {
427
+ json_object* drive;
428
+ if (!json_object_object_get_ex (object, " drive" , &drive))
429
+ {
430
+ LogError (" No drive info for this corner\n " );
431
+ return false ;
432
+ }
433
+ int ndrive = json_object_get_int (drive);
439
434
435
+ DriveStrength st;
436
+ switch (ndrive)
437
+ {
438
+ case 4 :
439
+ st = DRIVE_4X;
440
+ break ;
441
+
442
+ case 2 :
443
+ st = DRIVE_2X;
444
+ break ;
445
+
446
+ case 1 :
447
+ default :
448
+ st = DRIVE_1X;
449
+ break ;
450
+ }
451
+
452
+ m_outputDelays[DriveCondition (st, corner)] = delay;
453
+ }
454
+
455
+ // Call base class and make it warn if we don't know what the signal does
456
+ else
457
+ return Greenpak4IOB::LoadExtraTimingData (corner, delaytype, object);
440
458
// no need to call base class, it's an empty stub
441
459
return true ;
442
460
}
0 commit comments