blob: 2b3345a412931916c07a9e1f0eed5ba106ce12a1 [file] [log] [blame]
#include "Tile.hpp"
#include "Chip.hpp"
#include "Database.hpp"
#include "BitDatabase.hpp"
#include "TileConfig.hpp"
#include "Util.hpp"
namespace Trellis {
// Regex to extract row/column from a tile name
static const regex tile_rxcx_re(R"(R(\d+)C(\d+))");
// Universal function to get a zero-indexed row/column pair.
pair<int, int> get_row_col_pair_from_chipsize(string name, pair<int, int> chip_size, int bias) {
smatch m;
bool match;
match = regex_search(name, m, tile_rxcx_re);
if(match) {
return make_pair(stoi(m.str(1)), stoi(m.str(2)));
} else {
throw runtime_error(fmt("Could not extract position from " << name));
}
}
Tile::Tile(Trellis::TileInfo info, Trellis::Chip &parent) : info(info), cram(parent.cram.make_view(info.frame_offset,
info.bit_offset,
info.num_frames,
info.bits_per_frame)) {}
string Tile::dump_config() const {
shared_ptr<TileBitDatabase> bitdb = get_tile_bitdata(TileLocator(info.family, info.device, info.type));
TileConfig cfg = bitdb->tile_cram_to_config(cram);
known_bits = cfg.total_known_bits;
unknown_bits = int(cfg.cunknowns.size());
stringstream ss;
ss << cfg;
return ss.str();
}
void Tile::read_config(string config) {
shared_ptr<TileBitDatabase> bitdb = get_tile_bitdata(TileLocator(info.family, info.device, info.type));
stringstream ss(config);
TileConfig tcfg;
ss >> tcfg;
bitdb->config_to_tile_cram(tcfg, cram);
}
}