blob: e9413d41ea06782f6236f99f41efc1d4a236e434 [file] [log] [blame] [edit]
#include "vtr_assert.h"
#include "vtr_util.h"
#include "endpoint_timing.h"
#include "path_delay.h"
#include "globals.h"
void print_tnode_info(FILE* fp, int inode, const char* identifier);
void print_endpoint_timing(char* filename) {
FILE* fp = vtr::fopen(filename, "w");
auto& cluster_ctx = g_vpr_ctx.clustering();
auto& timing_ctx = g_vpr_ctx.timing();
vtr::vector_map<ClusterBlockId, std::vector<int>> tnode_lookup_from_pin_id = alloc_and_load_tnode_lookup_from_pin_id();
fprintf(fp, "{\n");
fprintf(fp, " \"endpoint_timing\": [\n");
std::vector<int> outpad_sink_tnodes;
for(int inode = 0; inode < timing_ctx.num_tnodes; inode++) {
if(timing_ctx.tnodes[inode].type == TN_OUTPAD_SINK) {
outpad_sink_tnodes.push_back(inode);
}
}
for(size_t i = 0; i < outpad_sink_tnodes.size(); ++i) {
int inode = outpad_sink_tnodes[i];
const char* identifier = cluster_ctx.clb_nlist.block_name(timing_ctx.tnodes[inode].block).c_str() + 4; //Trim out:
print_tnode_info(fp, inode, identifier);
if(i != outpad_sink_tnodes.size() - 1) {
fprintf(fp, ",");
}
fprintf(fp, "\n");
}
fprintf(fp, " ]\n");
fprintf(fp, "}\n");
free_tnode_lookup_from_pin_id(tnode_lookup_from_pin_id);
fclose(fp);
}
void print_tnode_info(FILE* fp, int inode, const char* identifier) {
auto& timing_ctx = g_vpr_ctx.timing();
fprintf(fp, " {\n");
fprintf(fp, " \"node_identifier\": \"%s\",\n", identifier);
fprintf(fp, " \"tnode_id\": \"%d\",\n", inode);
if(timing_ctx.tnodes[inode].type == TN_OUTPAD_SINK) {
fprintf(fp, " \"tnode_type\": \"TN_OUTPAD_SINK\",\n");
} else {
VTR_ASSERT(timing_ctx.tnodes[inode].type == TN_FF_SINK);
fprintf(fp, " \"tnode_type\": \"TN_FF_SINK\",\n");
}
double T_arr = timing_ctx.tnodes[inode].T_arr;
double T_req = timing_ctx.tnodes[inode].T_req;
if(T_arr <= HUGE_NEGATIVE_FLOAT) {
//Un-specified (e.g. driven by constant generator
T_arr = 0.;
}
if(T_req >= HUGE_POSITIVE_FLOAT) {
//Un-specified (e.g. driven by constant generator
T_req = 0.;
}
fprintf(fp, " \"T_arr\": \"%g\",\n", T_arr);
fprintf(fp, " \"T_req\": \"%g\"\n", T_req);
fprintf(fp, " }");
}