Skip to content

Commit c014b81

Browse files
committedJun 4, 2017
IOB now loads timing data from JSON correctly. gp4tchar now operates in "append" mode, adding timing data to existing file if present
1 parent 9c33a81 commit c014b81

File tree

2 files changed

+41
-23
lines changed

2 files changed

+41
-23
lines changed
 

Diff for: ‎src/gp4tchar/main.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -137,10 +137,10 @@ int main(int argc, char* argv[])
137137
// return 1;
138138

139139
//Save to disk
140-
/*
140+
141141
LogNotice("Saving timing data to file %s\n", tfname.c_str());
142142
g_calDevice.SaveTimingData(tfname.c_str());
143-
*/
143+
144144
//Print output
145145
LogNotice("Dumping timing data...\n");
146146
{

Diff for: ‎src/greenpak4/Greenpak4IOB.cpp

+39-21
Original file line numberDiff line numberDiff line change
@@ -399,24 +399,7 @@ void Greenpak4IOB::SaveTimingData(FILE* fp, PTVCorner corner)
399399

400400
bool Greenpak4IOB::LoadExtraTimingData(PTVCorner corner, string delaytype, json_object* object)
401401
{
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
420403
json_object* rising;
421404
if(!json_object_object_get_ex(object, "rising", &rising))
422405
{
@@ -432,11 +415,46 @@ bool Greenpak4IOB::LoadExtraTimingData(PTVCorner corner, string delaytype, json_
432415
return false;
433416
}
434417
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;
435423

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);
439434

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);
440458
//no need to call base class, it's an empty stub
441459
return true;
442460
}

0 commit comments

Comments
 (0)
Please sign in to comment.