Exemplo n.º 1
0
// copied from IO::writeHotSpotFiles; adapter for getter on FloorPlanner
//
void writeHotSpotPtrace(FloorPlanner& fp) {
	std::ofstream file;
	int cur_layer;

	/// generate power-trace file
	//
	// build up file name
	std::stringstream power_file;
	power_file << fp.getBenchmark() << "_HotSpot.ptrace";

	// init file stream
	file.open(power_file.str().c_str());

	// block sequence in trace file has to follow layer files, thus build up file
	// according to layer structure
	//
	// output block labels in first line
	for (cur_layer = 0; cur_layer < fp.getLayers(); cur_layer++) {

		// output dummy blocks representing wires first, since they are placed in
		// the BEOL layer, coming before the active Si layer
		for (Block const& cur_wire : fp.getWires()) {

			if (cur_wire.layer != cur_layer) {
				continue;
			}

			file << cur_wire.id << " ";
		}

		// dummy BEOL outline block
		file << "BEOL_" << cur_layer + 1 << " ";

		// actual blocks
		for (Block const& cur_block : fp.getBlocks()) {

			if (cur_block.layer != cur_layer) {
				continue;
			}

			file << cur_block.id << " ";
		}

		// dummy outline block
		file << "outline_" << cur_layer + 1 << " ";
	}
	file << std::endl;

	// output block power in second line
	for (cur_layer = 0; cur_layer < fp.getLayers(); cur_layer++) {

		// dummy blocks representing wires along with their power consumption
		for (Block const& cur_wire : fp.getWires()) {

			if (cur_wire.layer != cur_layer) {
				continue;
			}

			// actual power encoded in power_density_unscaled, see
			// ThermalAnalyzer::adaptPowerMapsWires
			file << cur_wire.power_density_unscaled << " ";
		}

		// dummy BEOL outline block
		file << "0.0 ";

		for (Block const& cur_block : fp.getBlocks()) {

			if (cur_block.layer != cur_layer) {
				continue;
			}

			file << cur_block.power() << " ";
		}

		// dummy outline block
		file << "0.0 ";
	}
	file << std::endl;

	// close file stream
	file.close();
}