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)
沒有留言:
張貼留言