1、逻辑优化
#if 1
//logic optimization
ArithOptimize* ArithOpt = new ArithOptimize(&m);
ArithOpt->binaryOpt();
Optimizer opt;
opt.reset();
opt.setOutputFileName("hw_aft_arithopt.bc");
opt.setNoOutput(false);
opt.optimize(m);
//printf("logic opt for debug\n");
#endif
2、位宽优化
MinimizeBitWidth mbw = MinimizeBitWidth(design, raminfo);
mbw.runMinimizeBitWidth();
3、STG优化
#if 1
clock_t stg_opt_start, stg_opt_end;
stg_opt_start = clock();
std::cout << "STG Opt Info: Start running STG opt :" << std::endl;
// STG chg by zhgu !!!
for (auto i = graph_to_stg_.begin(); i != graph_to_stg_.end(); ++i) {
CDFG::Graph *graph = i->first;
StateTransitionGraph *stg = i->second;
assert(graph_to_cg_builder_.find(graph) != graph_to_cg_builder_.end());
CGBuilder *cg_builder = graph_to_cg_builder_[graph];
cg_builder->mapStateToCondNodes(stg);
cg_builder->modifySTG(stg);
cg_builder->optSTG(stg);
}
stg_opt_end = clock();
double stg_opt_seconds =(double)(stg_opt_end - stg_opt_start)/CLOCKS_PER_SEC;
std::cout << "STG Opt Info: Finish running STG opt time: " << stg_opt_seconds << std::endl;
#endif
4、binding优化
#if 1
binding->run();
#endif
Binding.cpp:
void Binding::run(){
std::unordered_set<std::string> visited_fu;
bindRamPortCntForNode();
/*
if (!pLoop::PIPELINE) {
shareRegistersFromBinding(visited_fu);
// operatorAssignment(BindStep::ComplexOp);
// shareRegistersFromBinding(visited_fu);
//
// operatorAssignment(BindStep::OpPattern);
operatorAssignment(BindStep::BasicOp);
shareRegistersFromBinding(visited_fu);
operatorAssignment(BindStep::BasicOp);
shareRegistersFromBinding(visited_fu);
operatorAssignment(BindStep::BasicOp);
shareRegistersFromBinding(visited_fu);
//for debug
std::string file_name = "elemReadPortBinding.txt";
std::ofstream out(file_name);
dumpElemReadPortBinding(out);
}
*/
}