summaryrefslogtreecommitdiffstats
path: root/src/map/mapper/mapperTime.c
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2012-03-02 13:50:28 -0800
committerAlan Mishchenko <alanmi@berkeley.edu>2012-03-02 13:50:28 -0800
commiteb4aa4257722d1a72401fdd477aaaff19028e290 (patch)
tree9d8b548ba0848086479ae68ec18016e48fc73e5a /src/map/mapper/mapperTime.c
parenta0933b1643d216ec401983580d896ab7d70669de (diff)
downloadabc-eb4aa4257722d1a72401fdd477aaaff19028e290.tar.gz
abc-eb4aa4257722d1a72401fdd477aaaff19028e290.tar.bz2
abc-eb4aa4257722d1a72401fdd477aaaff19028e290.zip
Enabling user-specified required times in 'map'.
Diffstat (limited to 'src/map/mapper/mapperTime.c')
-rw-r--r--src/map/mapper/mapperTime.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/map/mapper/mapperTime.c b/src/map/mapper/mapperTime.c
index d12b607a..162e6f9a 100644
--- a/src/map/mapper/mapperTime.c
+++ b/src/map/mapper/mapperTime.c
@@ -231,7 +231,7 @@ void Map_TimeComputeRequiredGlobal( Map_Man_t * p )
***********************************************************************/
void Map_TimeComputeRequired( Map_Man_t * p, float fRequired )
{
- Map_Time_t * ptTime;
+ Map_Time_t * ptTime, * ptTimeA;
int fPhase, i;
// clean the required times
@@ -250,7 +250,17 @@ void Map_TimeComputeRequired( Map_Man_t * p, float fRequired )
{
fPhase = !Map_IsComplement(p->pOutputs[i]);
ptTime = Map_Regular(p->pOutputs[i])->tRequired + fPhase;
- ptTime->Rise = ptTime->Fall = ptTime->Worst = fRequired;
+ ptTimeA = Map_Regular(p->pOutputs[i])->tArrival + fPhase;
+
+ // if external required time can be achieved, use it
+ if ( p->pOutputRequireds && p->pOutputRequireds[i].Worst > 0 && ptTimeA->Worst <= p->pOutputRequireds[i].Worst && p->pOutputRequireds[i].Worst <= fRequired )
+ ptTime->Rise = ptTime->Fall = ptTime->Worst = p->pOutputRequireds[i].Worst;
+ // if external required cannot be achieved, set the earliest possible arrival time
+ else if ( p->pOutputRequireds && p->pOutputRequireds[i].Worst > 0 && ptTimeA->Worst > p->pOutputRequireds[i].Worst )
+ ptTime->Rise = ptTime->Fall = ptTime->Worst = ptTimeA->Worst;
+ // otherwise, set the global required time
+ else
+ ptTime->Rise = ptTime->Fall = ptTime->Worst = fRequired;
}
// sorts the nodes in the decreasing order of levels