pour reduire le pb du flatten de instance lorsqu'on a une lib incomplete
incrementer les index des signaux pour les signaux flattened
This commit is contained in:
parent
7c50bcd323
commit
5228717f2b
|
@ -167,7 +167,7 @@ extern cell_list* addCell_bus(befig_list* befig, biabl_list* biabl)
|
||||||
extern cell_list* addCell_register(befig_list* befig, biabl_list *biabl)
|
extern cell_list* addCell_register(befig_list* befig, biabl_list *biabl)
|
||||||
{
|
{
|
||||||
cell_list* cell, *list;
|
cell_list* cell, *list;
|
||||||
port_list* internal_reg_port=NULL, *port;
|
port_list* internal_reg_port=NULL;
|
||||||
|
|
||||||
cell=addCell(befig);
|
cell=addCell(befig);
|
||||||
|
|
||||||
|
|
|
@ -93,6 +93,8 @@ static void addlofigchain(loins_list* loins)
|
||||||
static losig_list* loc_map_abl(lofig_list *lofig, chain_list *abl)
|
static losig_list* loc_map_abl(lofig_list *lofig, chain_list *abl)
|
||||||
{
|
{
|
||||||
losig_list* losig;
|
losig_list* losig;
|
||||||
|
locon_list* locon;
|
||||||
|
loins_list* loinsStart;
|
||||||
port_list* port, *top;
|
port_list* port, *top;
|
||||||
chain_list* sigchain = NULL, *new, *pred=NULL;
|
chain_list* sigchain = NULL, *new, *pred=NULL;
|
||||||
char* name;
|
char* name;
|
||||||
|
@ -102,7 +104,9 @@ static losig_list* loc_map_abl(lofig_list *lofig, chain_list *abl)
|
||||||
cell_list* cell;
|
cell_list* cell;
|
||||||
losig_list* output_losig;
|
losig_list* output_losig;
|
||||||
loins_list* loins;
|
loins_list* loins;
|
||||||
|
char memo;
|
||||||
int master;
|
int master;
|
||||||
|
long delay;
|
||||||
|
|
||||||
if (!abl || !lofig) {
|
if (!abl || !lofig) {
|
||||||
fprintf(stderr,"loc_map_abl: NULL pointer\n");
|
fprintf(stderr,"loc_map_abl: NULL pointer\n");
|
||||||
|
@ -124,7 +128,8 @@ static losig_list* loc_map_abl(lofig_list *lofig, chain_list *abl)
|
||||||
insname=loins_name(name);
|
insname=loins_name(name);
|
||||||
putdelay(insname,cell->DELAY); /*delay for loins*/
|
putdelay(insname,cell->DELAY); /*delay for loins*/
|
||||||
putdelay(signame,cell->DELAY); /*delay for new signal*/
|
putdelay(signame,cell->DELAY); /*delay for new signal*/
|
||||||
|
delay = cell->DELAY;
|
||||||
|
|
||||||
/*output_losig */
|
/*output_losig */
|
||||||
namechain=addchain(NULL,signame);
|
namechain=addchain(NULL,signame);
|
||||||
output_losig=addlosig(lofig, getindex(), namechain, INTERNAL);
|
output_losig=addlosig(lofig, getindex(), namechain, INTERNAL);
|
||||||
|
@ -161,7 +166,32 @@ static losig_list* loc_map_abl(lofig_list *lofig, chain_list *abl)
|
||||||
|
|
||||||
/*if cell doesn't exist but is composed by several cells, develop it*/
|
/*if cell doesn't exist but is composed by several cells, develop it*/
|
||||||
if (cell->MODE=='A' || cell->MODE=='a') {
|
if (cell->MODE=='A' || cell->MODE=='a') {
|
||||||
|
/*insertion de nouvelles instances, la premiere est supprimee*/
|
||||||
|
loinsStart=lofig->LOINS->NEXT;
|
||||||
|
memo=SEPAR;
|
||||||
|
SEPAR='_';
|
||||||
flattenlofig(lofig,insname,YES/*change internal signal name*/);
|
flattenlofig(lofig,insname,YES/*change internal signal name*/);
|
||||||
|
SEPAR=memo;
|
||||||
|
/*put delay on new instances inserted*/
|
||||||
|
for ( loins=lofig->LOINS; loins!=loinsStart; loins=loins->NEXT )
|
||||||
|
{
|
||||||
|
signame=loins->INSNAME;
|
||||||
|
putdelay( signame, delay );
|
||||||
|
/*put delay on new signals inserted*/
|
||||||
|
for ( locon=loins->LOCON; locon; locon=locon->NEXT )
|
||||||
|
{
|
||||||
|
losig = locon->SIG;
|
||||||
|
/*remove added name on old signal*/
|
||||||
|
if ( losig->NAMECHAIN->NEXT )
|
||||||
|
{
|
||||||
|
losig->NAMECHAIN = losig->NAMECHAIN->NEXT;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
signame=(char*)losig->NAMECHAIN->DATA;
|
||||||
|
putdelay( signame, delay );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
setindex( lofig->LOSIG->INDEX + 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
AREA+=cell->AREA;
|
AREA+=cell->AREA;
|
||||||
|
@ -176,13 +206,17 @@ static losig_list* loc_map_abl(lofig_list *lofig, chain_list *abl)
|
||||||
extern void map_abl(lofig_list *lofig, chain_list *abl, losig_list *output_losig)
|
extern void map_abl(lofig_list *lofig, chain_list *abl, losig_list *output_losig)
|
||||||
{
|
{
|
||||||
losig_list* losig;
|
losig_list* losig;
|
||||||
|
locon_list* locon;
|
||||||
|
loins_list* loinsStart;
|
||||||
loins_list* loins;
|
loins_list* loins;
|
||||||
port_list* port, *top;
|
port_list* port, *top;
|
||||||
chain_list* sigchain = NULL, *new, *pred=NULL;
|
chain_list* sigchain = NULL, *new, *pred=NULL;
|
||||||
char* insname;
|
char* insname;
|
||||||
char* signame;
|
char* signame;
|
||||||
cell_list* cell;
|
cell_list* cell;
|
||||||
|
char memo;
|
||||||
int master;
|
int master;
|
||||||
|
long delay;
|
||||||
|
|
||||||
if (!abl || !lofig) {
|
if (!abl || !lofig) {
|
||||||
fprintf(stderr,"map_abl: NULL pointer\n");
|
fprintf(stderr,"map_abl: NULL pointer\n");
|
||||||
|
@ -203,6 +237,7 @@ extern void map_abl(lofig_list *lofig, chain_list *abl, losig_list *output_losig
|
||||||
signame=(char*)output_losig->NAMECHAIN->DATA;
|
signame=(char*)output_losig->NAMECHAIN->DATA;
|
||||||
insname=loins_name(signame);
|
insname=loins_name(signame);
|
||||||
putdelay(insname,cell->DELAY); /*delay for loins*/
|
putdelay(insname,cell->DELAY); /*delay for loins*/
|
||||||
|
delay = cell->DELAY;
|
||||||
|
|
||||||
top=copyport(cell->PORT); /*not to be disturb by recursion*/
|
top=copyport(cell->PORT); /*not to be disturb by recursion*/
|
||||||
for (port=top; port; port=port->NEXT) {
|
for (port=top; port; port=port->NEXT) {
|
||||||
|
@ -234,7 +269,32 @@ extern void map_abl(lofig_list *lofig, chain_list *abl, losig_list *output_losig
|
||||||
|
|
||||||
/*if cell doesn't exist but is composed by several cells, develop it*/
|
/*if cell doesn't exist but is composed by several cells, develop it*/
|
||||||
if (cell->MODE=='A' || cell->MODE=='a') {
|
if (cell->MODE=='A' || cell->MODE=='a') {
|
||||||
|
/*insertion de nouvelles instances, la premiere est supprimee*/
|
||||||
|
loinsStart=lofig->LOINS->NEXT;
|
||||||
|
memo=SEPAR;
|
||||||
|
SEPAR='_';
|
||||||
flattenlofig(lofig,insname,YES/*change internal signal name*/);
|
flattenlofig(lofig,insname,YES/*change internal signal name*/);
|
||||||
|
SEPAR=memo;
|
||||||
|
/*put delay on new instances inserted*/
|
||||||
|
for ( loins=lofig->LOINS; loins!=loinsStart; loins=loins->NEXT )
|
||||||
|
{
|
||||||
|
signame=loins->INSNAME;
|
||||||
|
putdelay( signame, delay );
|
||||||
|
/*put delay on new signals inserted*/
|
||||||
|
for ( locon=loins->LOCON; locon; locon=locon->NEXT )
|
||||||
|
{
|
||||||
|
losig = locon->SIG;
|
||||||
|
/*remove added name on old signal*/
|
||||||
|
if ( losig->NAMECHAIN->NEXT )
|
||||||
|
{
|
||||||
|
losig->NAMECHAIN = losig->NAMECHAIN->NEXT;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
signame=(char*)losig->NAMECHAIN->DATA;
|
||||||
|
putdelay( signame, delay );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
setindex( lofig->LOSIG->INDEX + 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
AREA+=cell->AREA;
|
AREA+=cell->AREA;
|
||||||
|
@ -247,14 +307,18 @@ extern void map_abl(lofig_list *lofig, chain_list *abl, losig_list *output_losig
|
||||||
extern void map_bus(lofig_list* lofig, biabl_list* biabl, losig_list* output_losig)
|
extern void map_bus(lofig_list* lofig, biabl_list* biabl, losig_list* output_losig)
|
||||||
{
|
{
|
||||||
losig_list* losig;
|
losig_list* losig;
|
||||||
|
locon_list* locon;
|
||||||
|
loins_list* loinsStart;
|
||||||
loins_list* loins;
|
loins_list* loins;
|
||||||
chain_list* sigchain = NULL, *new, *pred=NULL;
|
chain_list* sigchain = NULL, *new, *pred=NULL;
|
||||||
|
char* signame;
|
||||||
char* insname;
|
char* insname;
|
||||||
port_list* port, *top;
|
port_list* port, *top;
|
||||||
cell_list* cell;
|
cell_list* cell;
|
||||||
char memo;
|
char memo;
|
||||||
int master;
|
int master;
|
||||||
biabl_list* biabl_aux;
|
biabl_list* biabl_aux;
|
||||||
|
long delay;
|
||||||
|
|
||||||
if (!biabl || !lofig) {
|
if (!biabl || !lofig) {
|
||||||
fprintf(stderr,"map_bus: NULL pointer\n");
|
fprintf(stderr,"map_bus: NULL pointer\n");
|
||||||
|
@ -290,6 +354,7 @@ extern void map_bus(lofig_list* lofig, biabl_list* biabl, losig_list* output_los
|
||||||
|
|
||||||
insname=loins_name(insname);
|
insname=loins_name(insname);
|
||||||
putdelay(insname,cell->DELAY); /*delay for loins*/
|
putdelay(insname,cell->DELAY); /*delay for loins*/
|
||||||
|
delay = cell->DELAY;
|
||||||
|
|
||||||
top=copyport(cell->PORT);
|
top=copyport(cell->PORT);
|
||||||
for (port=top; port; port=port->NEXT) {
|
for (port=top; port; port=port->NEXT) {
|
||||||
|
@ -322,7 +387,32 @@ extern void map_bus(lofig_list* lofig, biabl_list* biabl, losig_list* output_los
|
||||||
|
|
||||||
/*if cell doesn't exist but is composed by several cells, develop it*/
|
/*if cell doesn't exist but is composed by several cells, develop it*/
|
||||||
if (cell->MODE=='A' || cell->MODE=='a') {
|
if (cell->MODE=='A' || cell->MODE=='a') {
|
||||||
|
/*insertion de nouvelles instances, la premiere est supprimee*/
|
||||||
|
loinsStart=lofig->LOINS->NEXT;
|
||||||
|
memo=SEPAR;
|
||||||
|
SEPAR='_';
|
||||||
flattenlofig(lofig,insname,YES/*change internal signal name*/);
|
flattenlofig(lofig,insname,YES/*change internal signal name*/);
|
||||||
|
SEPAR=memo;
|
||||||
|
/*put delay on new instances inserted*/
|
||||||
|
for ( loins=lofig->LOINS; loins!=loinsStart; loins=loins->NEXT )
|
||||||
|
{
|
||||||
|
signame=loins->INSNAME;
|
||||||
|
putdelay( signame, delay );
|
||||||
|
/*put delay on new signals inserted*/
|
||||||
|
for ( locon=loins->LOCON; locon; locon=locon->NEXT )
|
||||||
|
{
|
||||||
|
losig = locon->SIG;
|
||||||
|
/*remove added name on old signal*/
|
||||||
|
if ( losig->NAMECHAIN->NEXT )
|
||||||
|
{
|
||||||
|
losig->NAMECHAIN = losig->NAMECHAIN->NEXT;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
signame=(char*)losig->NAMECHAIN->DATA;
|
||||||
|
putdelay( signame, delay );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
setindex( lofig->LOSIG->INDEX + 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
AREA+=cell->AREA;
|
AREA+=cell->AREA;
|
||||||
|
@ -341,15 +431,19 @@ extern void map_bus(lofig_list* lofig, biabl_list* biabl, losig_list* output_los
|
||||||
extern void map_register(lofig_list* lofig, biabl_list* biabl, losig_list* output_losig)
|
extern void map_register(lofig_list* lofig, biabl_list* biabl, losig_list* output_losig)
|
||||||
{
|
{
|
||||||
losig_list* losig;
|
losig_list* losig;
|
||||||
|
locon_list* locon;
|
||||||
loins_list* loins;
|
loins_list* loins;
|
||||||
|
loins_list* loinsStart;
|
||||||
chain_list* sigchain = NULL, *new, *pred=NULL;
|
chain_list* sigchain = NULL, *new, *pred=NULL;
|
||||||
port_list* port, *top;
|
port_list* port, *top;
|
||||||
|
char* signame;
|
||||||
char* insname;
|
char* insname;
|
||||||
char memo;
|
char memo;
|
||||||
cell_list* cell;
|
cell_list* cell;
|
||||||
int master;
|
int master;
|
||||||
biabl_list* biabl_aux;
|
biabl_list* biabl_aux;
|
||||||
|
long delay;
|
||||||
|
|
||||||
if (!biabl || !lofig) {
|
if (!biabl || !lofig) {
|
||||||
fprintf(stderr,"map_register: NULL pointer\n");
|
fprintf(stderr,"map_register: NULL pointer\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
|
@ -383,6 +477,7 @@ extern void map_register(lofig_list* lofig, biabl_list* biabl, losig_list* outpu
|
||||||
|
|
||||||
insname=loins_name(insname);
|
insname=loins_name(insname);
|
||||||
putdelay(insname,cell->DELAY); /*delay for loins*/
|
putdelay(insname,cell->DELAY); /*delay for loins*/
|
||||||
|
delay = cell->DELAY;
|
||||||
|
|
||||||
top=copyport(cell->PORT);
|
top=copyport(cell->PORT);
|
||||||
for (port=top; port; port=port->NEXT) {
|
for (port=top; port; port=port->NEXT) {
|
||||||
|
@ -415,7 +510,32 @@ extern void map_register(lofig_list* lofig, biabl_list* biabl, losig_list* outpu
|
||||||
|
|
||||||
/*if cell doesn't exist but is composed by several cells, develop it*/
|
/*if cell doesn't exist but is composed by several cells, develop it*/
|
||||||
if (cell->MODE=='A' || cell->MODE=='a') {
|
if (cell->MODE=='A' || cell->MODE=='a') {
|
||||||
|
/*insertion de nouvelles instances, la premiere est supprimee*/
|
||||||
|
loinsStart=lofig->LOINS->NEXT;
|
||||||
|
memo=SEPAR;
|
||||||
|
SEPAR='_';
|
||||||
flattenlofig(lofig,insname,YES/*change internal signal name*/);
|
flattenlofig(lofig,insname,YES/*change internal signal name*/);
|
||||||
|
SEPAR=memo;
|
||||||
|
/*put delay on new instances inserted*/
|
||||||
|
for ( loins=lofig->LOINS; loins!=loinsStart; loins=loins->NEXT )
|
||||||
|
{
|
||||||
|
signame=loins->INSNAME;
|
||||||
|
putdelay( signame, delay );
|
||||||
|
/*put delay on new signals inserted*/
|
||||||
|
for ( locon=loins->LOCON; locon; locon=locon->NEXT )
|
||||||
|
{
|
||||||
|
losig = locon->SIG;
|
||||||
|
/*remove added name on old signal*/
|
||||||
|
if ( losig->NAMECHAIN->NEXT )
|
||||||
|
{
|
||||||
|
losig->NAMECHAIN = losig->NAMECHAIN->NEXT;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
signame=(char*)losig->NAMECHAIN->DATA;
|
||||||
|
putdelay( signame, delay );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
setindex( lofig->LOSIG->INDEX + 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
AREA+=cell->AREA;
|
AREA+=cell->AREA;
|
||||||
|
|
|
@ -58,6 +58,15 @@ static long index;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
/* set an unique index for losig in lofig under building */
|
||||||
|
/****************************************************************************/
|
||||||
|
extern void setindex(long new_index)
|
||||||
|
{
|
||||||
|
index = new_index;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
/*return an unique index for losig in lofig under building */
|
/*return an unique index for losig in lofig under building */
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
|
@ -47,6 +47,11 @@
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
extern long getindex __P (());
|
extern long getindex __P (());
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
/* set an unique index for losig in lofig under building */
|
||||||
|
/****************************************************************************/
|
||||||
|
extern void setindex __P ((long new_index));
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
/* return the losig named name in lofig under building */
|
/* return the losig named name in lofig under building */
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
Loading…
Reference in New Issue