DataFlowGraph *dfg DataFlowGraph(); dfg = dfg->run_Structure_analysis(); # reduce dead code dfg = dfg->run_LoadStore_analysis(); # reduce memory access dfg = dfg->run_reSchedule_analysis(); # parallel / serial dfg = dfg->run_Hardware_analysis(); # SIMD / MIMD ... assert( dfg->run_Pass() && "run BB analysis fail" ); # assignment cycle graph for each BB # BasicBlockList<> = dfg->get_BasicBlocks(); float tmp_time; while ( !BasicBlockList.empty() ) { (BasicBlock) bb = BasicBlockList.pop(); tmp_time = 0; float { start_time:0, end_time:0 } = bb->init_time(); tmp_time = start_time; foreach (Instruction)ii in bb->get_Instructons() { tmp_time = max(tmp_time + ii->get_Operate_time(), tmp_time); if( tmp_time > Clock_Freq ) { bb->set_end_time = ( tmp_time - ii->get_Operate_time() ); BasicBlock *new_bb = dfg->split_BB(bb,ii); if( dfg->run_Pass() && "split_BB fail" ); # split BB before ii, update "nALive", "outALive" for old.new BB BasicBlockList.push(new_bb); } } } # cycle graph schdule # dfg->run_ASAP_schedule(); dfg->run_ALAP_schedule(); dfg->run_Force_Directed_schedule(); # Hardware export # dfg->Module_export(); dfg->Interface_export(); dfg->Register_export(); dfg->Memory_export(); dfg->FSM_export(); dfg->DataPath_export(); dfg->Linker_export(); dfg->test_bench_export();
2011年8月19日 星期五
cycle graph
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言