Skip to content

Commit

Permalink
Finished saving IOB data to JSON
Browse files Browse the repository at this point in the history
azonenberg committed Jun 3, 2017
1 parent 6079494 commit 57950d4
Showing 4 changed files with 84 additions and 3 deletions.
3 changes: 3 additions & 0 deletions src/gp4tchar/measurements.cpp
Original file line number Diff line number Diff line change
@@ -364,6 +364,9 @@ bool MeasurePinToPinDelays(Socket& sock, hdevice hdev)
iob->SetOutputDelay(Greenpak4IOB::DRIVE_1X, corner, CombinatorialDelay(obuf_x1.m_value, -1));
iob->SetOutputDelay(Greenpak4IOB::DRIVE_2X, corner, CombinatorialDelay(obuf_x2.m_value, -1));
}

//DEBUG
return true;
}
}

31 changes: 28 additions & 3 deletions src/greenpak4/Greenpak4BitstreamEntity.cpp
Original file line number Diff line number Diff line change
@@ -307,7 +307,7 @@ void Greenpak4BitstreamEntity::PrintExtraTimingData(PTVCorner /*corner*/) const
}

/**
@brief Writes our parent data
@brief Writes the metadata around our actual timing numbers
*/
void Greenpak4BitstreamEntity::SaveTimingData(FILE* fp, bool last)
{
@@ -326,9 +326,9 @@ void Greenpak4BitstreamEntity::SaveTimingData(FILE* fp, bool last)
fprintf(fp, " \"temp\" : \"%d\",\n", corner.GetTemp());
fprintf(fp, " \"voltage_mv\" : \"%d\",\n", corner.GetVoltage());

fprintf(fp, " \"delays\" :\n {\n");
fprintf(fp, " \"delays\" :\n [\n");
SaveTimingData(fp, corner);
fprintf(fp, " }\n");
fprintf(fp, " ]\n");

//key is last element, we're done
if(it.first == end->first)
@@ -344,6 +344,31 @@ void Greenpak4BitstreamEntity::SaveTimingData(FILE* fp, bool last)
fprintf(fp, " ],\n");
}

/**
@brief Write the timing numbers
*/
void Greenpak4BitstreamEntity::SaveTimingData(FILE* fp, PTVCorner corner)
{
auto& map = m_pinToPinDelays[corner];
if(map.empty())
return;

auto end = map.end();
end--;
for(auto it : map)
{
auto pins = it.first;
auto delay = it.second;
fprintf(fp, " {\n");
fprintf(fp, " \"type\" : \"propagation\",\n");
fprintf(fp, " \"from\" : \"%s\",\n", pins.first.c_str());
fprintf(fp, " \"to\" : \"%s\",\n", pins.second.c_str());
fprintf(fp, " \"rising\" : \"%f\",\n", delay.m_rising);
fprintf(fp, " \"falling\" : \"%f\"\n", delay.m_falling);

if(it.first == end->first)
fprintf(fp, " }\n");
else
fprintf(fp, " },\n");
}
}
51 changes: 51 additions & 0 deletions src/greenpak4/Greenpak4IOB.cpp
Original file line number Diff line number Diff line change
@@ -345,3 +345,54 @@ bool Greenpak4IOB::GetCombinatorialDelay(
//Default: return base class info
return Greenpak4BitstreamEntity::GetCombinatorialDelay(srcport, dstport, corner, delay);
}

void Greenpak4IOB::SaveTimingData(FILE* fp, PTVCorner corner)
{
if(m_schmittTriggerDelays.find(corner) != m_schmittTriggerDelays.end())
{
//Schmitt trigger delays
fprintf(fp, " {\n");
fprintf(fp, " \"type\" : \"schmitt\",\n");
auto sd = m_schmittTriggerDelays[corner];
fprintf(fp, " \"rising\" : \"%f\",\n", sd.m_rising);
fprintf(fp, " \"falling\" : \"%f\"\n", sd.m_falling);
fprintf(fp, " },\n");
}

//Output buffer delays
for(auto it : m_outputDelays)
{
auto cond = it.first;
auto delay = it.second;
if(cond.second != corner)
continue;

auto drive = cond.first;
int d;
switch(drive)
{
case DRIVE_4X:
d = 4;
break;

case DRIVE_2X:
d = 2;
break;

case DRIVE_1X:
default:
d = 1;
break;
}

fprintf(fp, " {\n");
fprintf(fp, " \"type\" : \"obuf\",\n");
fprintf(fp, " \"drive\" : \"%d\",\n", d);
fprintf(fp, " \"rising\" : \"%f\",\n", delay.m_rising);
fprintf(fp, " \"falling\" : \"%f\"\n", delay.m_falling);
fprintf(fp, " },\n");
}

//do base class at end
Greenpak4BitstreamEntity::SaveTimingData(fp, corner);
}
2 changes: 2 additions & 0 deletions src/greenpak4/Greenpak4IOB.h
Original file line number Diff line number Diff line change
@@ -207,6 +207,8 @@ class Greenpak4IOB : public Greenpak4BitstreamEntity

//Output propagation delay depends on drive strength
std::map< DriveCondition, CombinatorialDelay > m_outputDelays;

virtual void SaveTimingData(FILE* fp, PTVCorner corner);
};

#endif

0 comments on commit 57950d4

Please sign in to comment.