/* ** gtn.c -- area estimation generation for entire layout, NLMS algorithm ** Joseph B. Evans, 1/29/89 */ #include #include #include "estimate.h" estimate(area,time) double *area,*time; { struct pe fadd,cadd,fmult,cmult,nmult,ndiv,nadd; struct pe dlatch,clatch,elatch; struct pe dram,cram,row; struct pe mpe_glue; /* main processing elements */ if (parallel == 1) { addp(q.data,&fadd); addp(q.coef,&cadd); multp(q.data+1,q.data,&fmult); multp(q.err,q.data,&cmult); addp(q.data,&nadd); multp(q.data,q.data,&nmult); divp(q.coef,q.coef,&ndiv); } else if (serial == 1) { adds(q.data,&fadd); adds(q.coef,&cadd); multsp(q.data+1,q.data,&fmult); multsp(q.err,q.data,&cmult); adds(q.data,&nadd); multsp(q.data,q.data,&nmult); divsp(q.coef,q.coef,&ndiv); } *area = cmult.area + fmult.area + cadd.area + fadd.area + ndiv.area + nmult.area + nadd.area; *time = cmult.time + fmult.time + cadd.time + fadd.time + ndiv.time + nmult.time + nadd.time; /* multiple tap effects and memory */ if (dedicate == 1) { latch(q.coef,&clatch); latch(q.data,&dlatch); *area = (*area + clatch.area + 2.*dlatch.area)*(double)taps; *time += clatch.time+dlatch.time; } else if (multi == 1) { ramrow(taps,&row); sram(q.data,taps,&dram); dram.y += row.y; dram.area += row.area; sram(q.coef,taps,&cram); cram.y += row.y; cram.area += row.area; latch(q.err,&elatch); latch(q.data,&dlatch); glue(taps,&mpe_glue); *area += dram.area+cram.area+2.*dlatch.area+elatch.area+mpe_glue.area; *time += (*time+max(cram.time+row.time,dram.time+row.time)+mpe_glue.time)*(double)taps+dlatch.time; } }