예제 #1
0
int Data_Service::Put_Timing_Data (Timing_File &file, Signal_Data &data)
{
	Int_Map_Itr map_itr;
	Timing_Itr timing_itr;
	Timing_Phase_Itr phase_itr;

	int i, num, count;
	Timing_Phase *phase_sort [20];

	file.Signal (data.Signal ());
	count = 0;

	for (timing_itr = data.timing_plan.begin (); timing_itr != data.timing_plan.end (); timing_itr++) {
		Show_Progress ();

		file.Timing (timing_itr->Timing ());
		file.Type (timing_itr->Type ());
		file.Cycle (timing_itr->Cycle ());
		file.Offset (timing_itr->Offset ());
		file.Phases ((int) timing_itr->size ());
		file.Notes (timing_itr->Notes ());

		if (!file.Write (false)) {
			Error (String ("Writing %s") % file.File_Type ());
		}
		count++;
		num = 0;
		memset (phase_sort, '\0', sizeof (phase_sort));

		for (phase_itr = timing_itr->begin (); phase_itr != timing_itr->end (); phase_itr++) {
			i = phase_itr->Phase ();
			if (i >= 20) continue;
			if (i > num) num = i;

			phase_sort [i] = &(*phase_itr);
		}

		for (i=1; i <= num; i++) {
			if (phase_sort [i] == 0) continue;

			file.Phase (phase_sort [i]->Phase ());
			file.Barrier (phase_sort [i]->Barrier ());
			file.Ring (phase_sort [i]->Ring ());
			file.Position (phase_sort [i]->Position ());
			file.Min_Green (phase_sort [i]->Min_Green ());
			file.Max_Green (phase_sort [i]->Max_Green ());
			file.Extension (phase_sort [i]->Extension ());
			file.Yellow (phase_sort [i]->Yellow ());
			file.All_Red (phase_sort [i]->All_Red ());

			if (!file.Write (true)) {
				Error (String ("Writing %s") % file.File_Type ());
			}
			count++;
		}
	}
	return (count);
}
예제 #2
0
bool Data_Service::Get_Timing_Data (Timing_File &file, Timing_Record &timing_rec)
{
	int signal;
	Int_Map_Itr map_itr;

	Timing_Data *timing_ptr = &(timing_rec.timing_data);

	//---- process the header record ----
	
	if (!file.Nested ()) {
		timing_ptr->Timing (file.Timing ());
		if (timing_ptr->Timing () == 0) return (false);

		timing_ptr->Type (file.Type ());
		timing_ptr->Cycle (file.Cycle ());
		timing_ptr->Offset (file.Offset ());
		timing_ptr->Notes (file.Notes ());

		if (file.Version () > 40) {
			signal = file.Signal ();
			if (signal == 0) return (false);

			map_itr = signal_map.find (signal);
			if (map_itr == signal_map.end ()) {
				Warning (String ("Timing Signal %d was Not Found") % signal);
				return (false);
			}
			timing_rec.Signal (map_itr->second);
			return (true);
		}
	}
	Timing_Phase phase_rec;

	phase_rec.Phase (file.Phase ());
	phase_rec.Barrier (file.Barrier ());
	phase_rec.Ring (file.Ring ());
	phase_rec.Position (file.Position ());
	phase_rec.Min_Green (file.Min_Green ());
	phase_rec.Max_Green (file.Max_Green ());
	phase_rec.Extension (file.Extension ());
	phase_rec.Yellow (file.Yellow ());
	phase_rec.All_Red (file.All_Red ());

	if (phase_rec.Max_Green () == 0) phase_rec.Max_Green (phase_rec.Min_Green () + phase_rec.Extension ());

	timing_ptr->push_back (phase_rec);
	return (timing_rec.Signal () >= 0 || file.Version () <= 40);
}