From d6dfc29508b7bfa9c7edf504394da4e3f105e608 Mon Sep 17 00:00:00 2001 From: tangxifan Date: Tue, 16 Jul 2019 17:00:09 -0600 Subject: [PATCH] Now we use the ace from VTR --- ace2/SRC/ace.c | 37 ++++++++++++++++++++----------------- ace2/SRC/bdd.c | 46 ++++++++++++++++++++++++---------------------- ace2/SRC/cube.c | 9 +++++---- ace2/SRC/cycle.c | 3 ++- ace2/SRC/io_ace.c | 18 +++++++++--------- ace2/SRC/sim.c | 29 +++++++++++++++-------------- 6 files changed, 75 insertions(+), 67 deletions(-) diff --git a/ace2/SRC/ace.c b/ace2/SRC/ace.c index 89ce99689..048c39465 100644 --- a/ace2/SRC/ace.c +++ b/ace2/SRC/ace.c @@ -1,3 +1,6 @@ +#include "vtr_assert.h" +#include "vtr_time.h" //For some reason this causes compilation errors if included below the std headers on with g++-5 +#include "vtr_assert.h" #include #include @@ -50,8 +53,7 @@ void print_status(Abc_Ntk_t * ntk) { printf("%d: OLD\n", i); break; default: - printf("Invalid ABC object info status"); - exit(1); + VTR_ASSERT_MSG(false, "Invalid ABC object info status"); } } } @@ -169,11 +171,11 @@ int ace_calc_activity(Abc_Ntk_t * ntk, int num_vectors, char * clk_name) { { info = Ace_ObjInfo(obj); if (strcmp(Abc_ObjName(obj), clk_name) != 0) { - assert(info->static_prob >= 0 && info->static_prob <= 1.0); - assert(info->switch_prob >= 0 && info->switch_prob <= 1.0); - assert(info->switch_act >= 0 && info->switch_act <= 1.0); - assert(info->switch_prob <= 2.0 * (1.0 - info->static_prob)); - assert(info->switch_prob <= 2.0 * info->static_prob); + VTR_ASSERT(info->static_prob >= 0 && info->static_prob <= 1.0); + VTR_ASSERT(info->switch_prob >= 0 && info->switch_prob <= 1.0); + VTR_ASSERT(info->switch_act >= 0 && info->switch_act <= 1.0); + VTR_ASSERT(info->switch_prob <= 2.0 * (1.0 - info->static_prob)); + VTR_ASSERT(info->switch_prob <= 2.0 * info->static_prob); } info->status = ACE_DEF; } @@ -233,11 +235,11 @@ int ace_calc_activity(Abc_Ntk_t * ntk, int num_vectors, char * clk_name) { Ace_Obj_Info_t * info2 = Ace_ObjInfo(obj); info2->switch_act = info2->switch_prob; - assert(info2->switch_act >= 0.0); + VTR_ASSERT(info2->switch_act >= 0.0); } Abc_NtkForEachPi(ntk, obj, i) { - assert(Ace_ObjInfo(obj)->switch_act >= 0.0); + VTR_ASSERT(Ace_ObjInfo(obj)->switch_act >= 0.0); } /*------------- Calculate switching activities. ---------------------*/ @@ -275,7 +277,7 @@ int ace_calc_activity(Abc_Ntk_t * ntk, int num_vectors, char * clk_name) { Ace_Obj_Info_t * info2 = Ace_ObjInfo(obj); //Ace_Obj_Info_t * fanin_info2; - assert(Abc_ObjType(obj) == ABC_OBJ_NODE); + VTR_ASSERT(Abc_ObjType(obj) == ABC_OBJ_NODE); if (Abc_ObjFaninNum(obj) < 1) { info2->switch_act = 0.0; @@ -284,7 +286,7 @@ int ace_calc_activity(Abc_Ntk_t * ntk, int num_vectors, char * clk_name) { Vec_Ptr_t * literals = Vec_PtrAlloc(0); Abc_Obj_t * fanin; - assert(obj->Type == ABC_OBJ_NODE); + VTR_ASSERT(obj->Type == ABC_OBJ_NODE); Abc_ObjForEachFanin(obj, fanin, j) { @@ -294,7 +296,7 @@ int ace_calc_activity(Abc_Ntk_t * ntk, int num_vectors, char * clk_name) { literals); Vec_PtrFree(literals); } - assert(info2->switch_act >= 0); + VTR_ASSERT(info2->switch_act >= 0); } Vec_PtrFree(nodes_logic); Vec_PtrFree(latches_in_cycles_vec); @@ -308,21 +310,22 @@ Ace_Obj_Info_t * Ace_ObjInfo(Abc_Obj_t * obj) { if (st__lookup(ace_info_hash_table, (char *) obj, (char **) &info)) { return info; } - assert(0); + VTR_ASSERT(0); return NULL; } void prob_epsilon_fix(double * d) { if (*d < 0) { - assert(*d > 0 - EPSILON); + VTR_ASSERT(*d > 0 - EPSILON); *d = 0; } else if (*d > 1) { - assert(*d < 1 + EPSILON); + VTR_ASSERT(*d < 1 + EPSILON); *d = 1.; } } int main(int argc, char * argv[]) { + vtr::ScopedFinishTimer t("Ace"); FILE * BLIF = NULL; FILE * IN_ACT = NULL; FILE * OUT_ACT = stdout; @@ -351,7 +354,7 @@ int main(int argc, char * argv[]) { ntk = Io_Read(blif_file_name, IO_FILE_BLIF, 1, 0); - assert(ntk); + VTR_ASSERT(ntk); printf("Objects in network: %d\n", Abc_NtkObjNum(ntk)); printf("PIs in network: %d\n", Abc_NtkPiNum(ntk)); @@ -383,7 +386,7 @@ int main(int argc, char * argv[]) { // Check Depth depth = ace_calc_network_depth(ntk); printf("Max Depth: %d\n", depth); - assert(depth > 0); + VTR_ASSERT(depth > 0); alloc_and_init_activity_info(ntk); diff --git a/ace2/SRC/bdd.c b/ace2/SRC/bdd.c index ce7c367df..2e70218ae 100644 --- a/ace2/SRC/bdd.c +++ b/ace2/SRC/bdd.c @@ -1,5 +1,7 @@ #include +#include "vtr_assert.h" + #include "ace.h" #include "misc/vec/vecPtr.h" #include "bdd.h" @@ -86,7 +88,7 @@ int ace_bdd_build_network_bdds( int i; Vec_Ptr_t * nodes; - assert(Vec_PtrSize(inputs) > 0); + VTR_ASSERT(Vec_PtrSize(inputs) > 0); nodes = Abc_NtkDfsSeq(ntk); @@ -111,8 +113,8 @@ int ace_bdd_build_network_bdds( switch (info->status) { case ACE_SIM: - assert (info->static_prob >= 0.0 && info->static_prob <= 1.0); - assert (info->switch_prob >= 0.0 && info->switch_prob <= 1.0); + VTR_ASSERT (info->static_prob >= 0.0 && info->static_prob <= 1.0); + VTR_ASSERT (info->switch_prob >= 0.0 && info->switch_prob <= 1.0); if (!st_lookup(leaves, (char*) obj, NULL)) { @@ -128,7 +130,7 @@ int ace_bdd_build_network_bdds( break; case ACE_UNDEF: - assert(0); + VTR_ASSERT(0); if (check_pi_status(obj)) { while(1) @@ -149,14 +151,14 @@ int ace_bdd_build_network_bdds( break; case ACE_DEF: - assert(info->static_prob >= 0 && info->static_prob <= 1.0); - assert(info->switch_prob >= 0 && info->switch_prob <= 1.0); + VTR_ASSERT(info->static_prob >= 0 && info->static_prob <= 1.0); + VTR_ASSERT(info->switch_prob >= 0 && info->switch_prob <= 1.0); break; case ACE_NEW: case ACE_OLD: default: - assert(0); + VTR_ASSERT(0); } } @@ -192,7 +194,7 @@ double calc_cube_switch_prob_recur(DdManager * mgr, DdNode * bdd, } /* Get literal index for this bdd node. */ - //assert(0); + //VTR_ASSERT(0); i = Cudd_Regular(bdd)->index; pi = (Abc_Obj_t*) Vec_PtrEntry((Vec_Ptr_t*) inputs, i); @@ -210,11 +212,11 @@ double calc_cube_switch_prob_recur(DdManager * mgr, DdNode * bdd, then_prob = calc_cube_switch_prob_recur(mgr, bdd_if1, cube, inputs, visited, phase); - assert(then_prob + EPSILON >= 0 && then_prob - EPSILON <= 1); + VTR_ASSERT(then_prob + EPSILON >= 0 && then_prob - EPSILON <= 1); else_prob = calc_cube_switch_prob_recur(mgr, bdd_if0, cube, inputs, visited, phase); - assert(else_prob + EPSILON >= 0 && else_prob - EPSILON <= 1); + VTR_ASSERT(else_prob + EPSILON >= 0 && else_prob - EPSILON <= 1); switch (node_get_literal (cube->cube, i)) { case ZERO: @@ -235,7 +237,7 @@ double calc_cube_switch_prob_recur(DdManager * mgr, DdNode * bdd, st__insert(visited, (char *) bdd, (char *) current_prob); - assert(*current_prob + EPSILON >= 0 && *current_prob - EPSILON < 1.0); + VTR_ASSERT(*current_prob + EPSILON >= 0 && *current_prob - EPSILON < 1.0); return (*current_prob); } @@ -250,7 +252,7 @@ double calc_cube_switch_prob(DdManager * mgr, DdNode * bdd, ace_cube_t * cube, st__free_table(visited); - assert(sp + EPSILON >= 0. && sp - EPSILON <= 1.0); + VTR_ASSERT(sp + EPSILON >= 0. && sp - EPSILON <= 1.0); return (sp); } @@ -264,9 +266,9 @@ double calc_switch_prob_recur(DdManager * mgr, DdNode * bdd_next, DdNode * bdd, ace_cube_t * cube0, *cube1; Ace_Obj_Info_t * info; - assert(inputs != NULL); - assert(Vec_PtrSize(inputs) > 0); - assert(P1 >= 0); + VTR_ASSERT(inputs != NULL); + VTR_ASSERT(Vec_PtrSize(inputs) > 0); + VTR_ASSERT(P1 >= 0); if (bdd == Cudd_ReadLogicZero(mgr)) { if (phase != 1) @@ -274,7 +276,7 @@ double calc_switch_prob_recur(DdManager * mgr, DdNode * bdd_next, DdNode * bdd, prob = calc_cube_switch_prob(mgr, bdd_next, cube, inputs, phase); prob *= P1; - assert(prob + EPSILON >= 0. && prob - EPSILON <= 1.); + VTR_ASSERT(prob + EPSILON >= 0. && prob - EPSILON <= 1.); return (prob * P1); } else if (bdd == Cudd_ReadOne(mgr)) { if (phase != 0) @@ -282,7 +284,7 @@ double calc_switch_prob_recur(DdManager * mgr, DdNode * bdd_next, DdNode * bdd, prob = calc_cube_switch_prob(mgr, bdd_next, cube, inputs, phase); prob *= P1; - assert(prob + EPSILON >= 0. && prob - EPSILON <= 1.); + VTR_ASSERT(prob + EPSILON >= 0. && prob - EPSILON <= 1.); return (prob * P1); } @@ -315,8 +317,8 @@ double calc_switch_prob_recur(DdManager * mgr, DdNode * bdd_next, DdNode * bdd, inputs, P1 * (1.0 - info->static_prob), phase); ace_cube_free(cube0); - assert(switch_prob_t + EPSILON >= 0. && switch_prob_t - EPSILON <= 1.); - assert(switch_prob_e + EPSILON >= 0. && switch_prob_e - EPSILON <= 1.); + VTR_ASSERT(switch_prob_t + EPSILON >= 0. && switch_prob_t - EPSILON <= 1.); + VTR_ASSERT(switch_prob_e + EPSILON >= 0. && switch_prob_e - EPSILON <= 1.); return (switch_prob_t + switch_prob_e); } @@ -333,7 +335,7 @@ double ace_bdd_calc_switch_act(DdManager * mgr, Abc_Obj_t * obj, DdNode * bdd; d = info->depth; - assert(d > 0); + VTR_ASSERT(d > 0); d = (int) d * 0.4; if (d < 1) { d = 1; @@ -361,10 +363,10 @@ double ace_bdd_calc_switch_act(DdManager * mgr, Abc_Obj_t * obj, prob_epsilon_fix(&fanin_info->prob0to1); prob_epsilon_fix(&fanin_info->prob1to0); - assert( + VTR_ASSERT( fanin_info->prob0to1 + EPSILON >= 0. && fanin_info->prob0to1 - EPSILON <= 1.0); - assert( + VTR_ASSERT( fanin_info->prob1to0 + EPSILON >= 0. && fanin_info->prob1to0 - EPSILON <= 1.0); } diff --git a/ace2/SRC/cube.c b/ace2/SRC/cube.c index 28c316219..da45cba26 100644 --- a/ace2/SRC/cube.c +++ b/ace2/SRC/cube.c @@ -1,3 +1,4 @@ +#include "vtr_assert.h" #include "cube.h" #include "bdd.h" @@ -16,8 +17,8 @@ ace_cube_t * ace_cube_dup(ace_cube_t * cube) { int i; ace_cube_t * cube_copy; - assert(cube != NULL); - assert(cube->num_literals > 0); + VTR_ASSERT(cube != NULL); + VTR_ASSERT(cube->num_literals > 0); cube_copy = (ace_cube_t*) malloc(sizeof(ace_cube_t)); cube_copy->static_prob = cube->static_prob; @@ -63,8 +64,8 @@ ace_cube_t * ace_cube_new_dc(int num_literals) { } void ace_cube_free(ace_cube_t * cube) { - assert(cube != NULL); - assert(cube->cube != NULL); + VTR_ASSERT(cube != NULL); + VTR_ASSERT(cube->cube != NULL); free(cube->cube); free(cube); } diff --git a/ace2/SRC/cycle.c b/ace2/SRC/cycle.c index c60b2048b..b324377a5 100644 --- a/ace2/SRC/cycle.c +++ b/ace2/SRC/cycle.c @@ -1,3 +1,4 @@ +#include "vtr_assert.h" #include "cycle.h" #include "ace.h" @@ -28,7 +29,7 @@ bool in_cycle(Abc_Ntk_t * ntk, int obj_id_to_find, Abc_Obj_t * starting_obj_ptr, { // Get BI of latch fanin_ptr = Abc_ObjFanin0(Abc_ObjFanin0(starting_obj_ptr)); - assert(fanin_ptr); + VTR_ASSERT(fanin_ptr); return (in_cycle(ntk, obj_id_to_find, fanin_ptr, flag)); } diff --git a/ace2/SRC/io_ace.c b/ace2/SRC/io_ace.c index 627f41070..947e31644 100644 --- a/ace2/SRC/io_ace.c +++ b/ace2/SRC/io_ace.c @@ -71,7 +71,7 @@ void ace_io_print_activity(Abc_Ntk_t * ntk, FILE * fp) { default: //printf("Unkown Type: %d\n", Abc_ObjType(obj)); - //assert(0); + //VTR_ASSERT(0); break; } @@ -237,10 +237,10 @@ int ace_io_read_activity(Abc_Ntk_t * ntk, FILE * in_file_desc, printf("Cannot open input file\n"); error = ACE_ERROR; } else { - assert(p >= 0.0 && p <= 1.0); - assert(d >= 0.0 && d <= 1.0); - assert(d <= 2.0 * p); - assert(d <= 2.0 * (1.0 - p)); + VTR_ASSERT(p >= 0.0 && p <= 1.0); + VTR_ASSERT(d >= 0.0 && d <= 1.0); + VTR_ASSERT(d <= 2.0 * p); + VTR_ASSERT(d <= 2.0 * (1.0 - p)); Abc_NtkForEachPi(ntk, obj_ptr, i) { @@ -285,8 +285,8 @@ int ace_io_read_activity(Abc_Ntk_t * ntk, FILE * in_file_desc, } pi_obj_ptr = Abc_NtkObj(ntk, pi_obj_id); - assert(static_prob >= 0.0 && static_prob <= 1.0); - assert(switch_prob >= 0.0 && switch_prob <= 1.0); + VTR_ASSERT(static_prob >= 0.0 && static_prob <= 1.0); + VTR_ASSERT(switch_prob >= 0.0 && switch_prob <= 1.0); info = Ace_ObjInfo(pi_obj_ptr); info->static_prob = static_prob; @@ -338,7 +338,7 @@ int ace_io_read_activity(Abc_Ntk_t * ntk, FILE * in_file_desc, error = ACE_ERROR; break; } - assert(strlen(vector) == num_Pi); + VTR_ASSERT(strlen(vector) == num_Pi); if (num_vec == 0) { Abc_NtkForEachPi(ntk, obj_ptr, i) @@ -373,7 +373,7 @@ int ace_io_read_activity(Abc_Ntk_t * ntk, FILE * in_file_desc, if (!error) { Abc_NtkForEachPi(ntk, obj_ptr, i) { - assert(num_vec > 0); + VTR_ASSERT(num_vec > 0); info = Ace_ObjInfo(obj_ptr); info->static_prob = (double) high[i] / (double) num_vec; diff --git a/ace2/SRC/sim.c b/ace2/SRC/sim.c index ccc711203..361e2804f 100644 --- a/ace2/SRC/sim.c +++ b/ace2/SRC/sim.c @@ -1,3 +1,4 @@ +#include "vtr_assert.h" #include "ace.h" #include "sim.h" @@ -60,7 +61,7 @@ void get_pi_values(Abc_Ntk_t * ntk, Vec_Ptr_t * /*nodes*/, int cycle) { default: printf("Bad Value\n"); - assert(0); + VTR_ASSERT(0); break; } } @@ -111,7 +112,7 @@ void get_pi_values(Abc_Ntk_t * ntk, Vec_Ptr_t * /*nodes*/, int cycle) { default: printf("Bad value\n"); - assert(FALSE); + VTR_ASSERT(FALSE); break; } } @@ -131,7 +132,7 @@ int * getFaninValues(Abc_Obj_t * obj_ptr) { info = Ace_ObjInfo(fanin); if (info->status == ACE_UNDEF) { printf("Fan-in is undefined\n"); - assert(FALSE); + VTR_ASSERT(FALSE); } else if (info->status == ACE_NEW) { break; } @@ -210,15 +211,15 @@ void evaluate_circuit(Abc_Ntk_t * ntk, Vec_Ptr_t * node_vec, int /*cycle*/) { case ACE_NEW: if (Abc_ObjIsNode(obj)) { faninValues = getFaninValues(obj); - assert(faninValues); + VTR_ASSERT(faninValues); dd_node = Cudd_Eval((DdManager*) ntk->pManFunc, (DdNode*) obj->pData, faninValues); - assert(Cudd_IsConstant(dd_node)); + VTR_ASSERT(Cudd_IsConstant(dd_node)); if (dd_node == Cudd_ReadOne((DdManager*) ntk->pManFunc)) { value = 1; } else if (dd_node == Cudd_ReadLogicZero((DdManager*) ntk->pManFunc)) { value = 0; } else { - assert(0); + VTR_ASSERT(0); } free(faninValues); } else { @@ -240,12 +241,12 @@ void evaluate_circuit(Abc_Ntk_t * ntk, Vec_Ptr_t * node_vec, int /*cycle*/) { info->num_ones += info->value; break; default: - assert(0); + VTR_ASSERT(0); break; } break; default: - assert(0); + VTR_ASSERT(0); break; } } @@ -294,8 +295,8 @@ void ace_sim_activities(Abc_Ntk_t * ntk, Vec_Ptr_t * nodes, int max_cycles, Ace_Obj_Info_t * info; int i; - assert(max_cycles > 0); - assert(threshold > 0.0); + VTR_ASSERT(max_cycles > 0); + VTR_ASSERT(threshold > 0.0); // srand((unsigned) time(NULL)); @@ -326,12 +327,12 @@ void ace_sim_activities(Abc_Ntk_t * ntk, Vec_Ptr_t * nodes, int max_cycles, { info = Ace_ObjInfo(obj); info->static_prob = info->num_ones / (double) max_cycles; - assert(info->static_prob >= 0.0 && info->static_prob <= 1.0); + VTR_ASSERT(info->static_prob >= 0.0 && info->static_prob <= 1.0); info->switch_prob = info->num_toggles / (double) max_cycles; - assert(info->switch_prob >= 0.0 && info->switch_prob <= 1.0); + VTR_ASSERT(info->switch_prob >= 0.0 && info->switch_prob <= 1.0); - assert(info->switch_prob - EPSILON <= 2.0 * (1.0 - info->static_prob)); - assert(info->switch_prob - EPSILON <= 2.0 * (info->static_prob)); + VTR_ASSERT(info->switch_prob - EPSILON <= 2.0 * (1.0 - info->static_prob)); + VTR_ASSERT(info->switch_prob - EPSILON <= 2.0 * (info->static_prob)); info->status = ACE_SIM; }