In MBK (mvl) losig associated to locon on a lofig where not created.

* Bug: In <mbk>, in mvl_scomp_y.y, when the ENTITY PORT was parsed,
    pairs of losig/locon must be created on the lofig (one losig per
    locon). But in the case of a port 'out mux_bit|mux_vector bus',
    the signals *where* created but *not* connected to the locons.
    Instead, the previously created signal from former locons were
    connected. This was showing in flattenlofig() and causing wrong
    short circuits to be detected by lvx (tricky to diagnose).
* Bug: In <mbk>, in mbk_lo_util.c, check the PRCN struct attribute
    to be NULL before trying to display it in mlodebug().
* Change: In <mbk>, more debug informations in various places.
This commit is contained in:
Jean-Paul Chaput 2014-06-21 17:50:33 +02:00
parent 6db3ad0bee
commit db34ab91bb
4 changed files with 38 additions and 20 deletions

View File

@ -47,24 +47,23 @@ int main(argc, argv)
int argc;
char **argv;
{
lofig_list *p;
lofig_list *p;
mbkenv();
alliancebanner ("flatLO", "1.4", "FLATen LOgical figure", "1990", ALLIANCE_VERSION);
mbkenv();
alliancebanner ("flatLO", "1.4", "FLATen LOgical figure", "1990", ALLIANCE_VERSION);
if (argc != 4)
usage(argv[0]);
if (argc != 4)
usage(argv[0]);
if (!strcmp(argv[1], "-r"))
rflattenlofig(p = getlofig(argv[2],'A'), YES, YES);
else if (!strcmp(argv[1], "-t"))
rflattenlofig(p = getlofig(argv[2],'A'), YES, NO);
else
flattenlofig(p = getlofig(argv[1], 'A'), argv[2], YES);
if (!strcmp(argv[1], "-r"))
rflattenlofig(p = getlofig(argv[2],'A'), YES, YES);
else if (!strcmp(argv[1], "-t"))
rflattenlofig(p = getlofig(argv[2],'A'), YES, NO);
else
flattenlofig(p = getlofig(argv[1], 'A'), argv[2], YES);
p->NAME=argv[3];
savelofig(p);
exit(0);
return 0;
p->NAME=argv[3];
savelofig(p);
exit(0);
return 0;
}

View File

@ -923,6 +923,8 @@ ptype_list *ptype = NULL;
ptsig = ptcon->SIG;
ptype = getptype(ptsig->USER, (long)LOFIGCHAIN);
ptype->DATA = (void *)addchain((chain_list *)ptype->DATA, (void *)ptcon);
if (DEBUG_MODE == 'Y')
(void)printf("--- mbk --- lofigchain (lofig): on signal <%s> add con <%s>\n", getsigname(ptsig), ptcon->NAME);
}
/* scan instance list */
@ -930,8 +932,9 @@ ptype_list *ptype = NULL;
for (ptcon=ptins->LOCON; ptcon; ptcon=ptcon->NEXT) {
ptsig=ptcon->SIG;
ptype = getptype(ptsig->USER, (long)LOFIGCHAIN);
ptype->DATA = (void *)addchain((chain_list *)ptype->DATA,
(void *)ptcon);
ptype->DATA = (void *)addchain((chain_list *)ptype->DATA, (void *)ptcon);
if (DEBUG_MODE == 'Y')
(void)printf("--- mbk --- lofigchain (loins): on signal <%s> add con <%s>\n", getsigname(ptsig), ptcon->NAME);
}
}

View File

@ -361,6 +361,9 @@ while(ptfig->LOINS != NULL)
}
else /* scanlosig->TYPE == EXTERNAL */
{
if (DEBUG_MODE == 'Y')
(void)printf( "--- mbk --- scanlosig (EXTERNAL): %s\n", getsigname(scanlosig) );
/* cree la liste interf */
interf = (struct st_interf*)mbkalloc( sizeof( struct st_interf ) );
interf->base = 0;
@ -376,6 +379,16 @@ while(ptfig->LOINS != NULL)
)
{
ptcon = (locon_list*)(scanchain->DATA);
if (DEBUG_MODE == 'Y') {
(void)printf( "--- mbk --- scanchain: con:%s", ptcon->NAME );
(void)printf( " sig:%s", getsigname(ptcon->SIG) );
if (ptcon->TYPE == EXTERNAL) {
(void)printf( " lofig:%s\n", ((lofig_list*)ptcon->ROOT)->NAME );
} else {
(void)printf( " loins:%s\n", ((loins_list*)ptcon->ROOT)->INSNAME );
}
}
if( ptcon->ROOT == figins )
{
for( scanlocon = ptins->LOCON ;
@ -2800,7 +2813,10 @@ key[VHD_scon2DFN] = vhd_hash ("scon2");
ptchain = ptchain->NEXT;
}
(void)printf (" capa : %f\n",(losig_pnt->PRCN->CAPA?losig_pnt->PRCN->CAPA:0.0) );
if (losig_pnt->PRCN)
(void)printf (" capa : %f\n",(losig_pnt->PRCN->CAPA?losig_pnt->PRCN->CAPA:0.0) );
else
(void)printf (" capa : NULL\n" );
(void)printf (" index : %ld\n",losig_pnt->INDEX);
(void)printf (" type : %c\n",losig_pnt->TYPE);
(void)printf ("-> user : %s\n",tab[VHD_userDFN]);

View File

@ -473,7 +473,7 @@ formal_port_element
case (MVL_OCNDFN + MVL_MUXDFN + MVL_BUSDFN) :
case (MVL_OCNDFN + MVL_MXVDFN + MVL_BUSDFN) :
mvl_addlosig (MVL_LOFPNT,MVL_SIGIDX,'E','M',
losig_pnt = mvl_addlosig (MVL_LOFPNT,MVL_SIGIDX,'E','M',
sig_name,$6.LEFT,$6.RIGHT);
mvl_addlocon (MVL_LOFPNT,losig_pnt,'Z',
sig_name,$6.LEFT,$6.RIGHT);