Do not create "small" BIGVIA (less than two holes).

* Bug: In <rds>, in rfmaccess.c viambkrds(), the holes of the BIGVIAs
    are aligned on a design-wide matrix to allow two overlapping BIGVIAs
    to have their holes exactly at the same places (one consequence is
    that the holes of a BIGVIA may be off-center).
      But, if the BIGVIA is "too small", that is, it's area cannot
    accomodate at least one "on grid" hole, it silently replaced by a
    default (i.e. minimal size VIA). In that case you may endup with
    a mixture of BIGVIA (when the hole is aligned) and default VIA,
    when it is not... The fun part, is that it is DRC correct, but
    looks messy.
      To avoid this, we systematically use the default VIA when the
    side of the BIGVIA is less than two holes wide (in either direction).
This commit is contained in:
Jean-Paul Chaput 2014-08-02 11:53:19 +02:00
parent b7ac3afd80
commit d1c952b7f1
2 changed files with 8 additions and 3 deletions

1
.gitignore vendored
View File

@ -1,5 +1,6 @@
cvsCommit.txt
gitCommit.txt
patchs/
Linux.*/
Darwin/
Solaris/

View File

@ -369,6 +369,8 @@ rdsrec_list *viambkrds( Figure, Via, Lynx )
phvia_list *Via;
char Lynx;
{
fprintf( stderr, "viambkrds()\n" );
rdsrec_list *Rectangle;
rdsrec_list *First;
rdsrec_list *Link;
@ -436,13 +438,13 @@ rdsrec_list *viambkrds( Figure, Via, Lynx )
MIN_DWR = -1;
MAX_OVER = 0;
LayerRds = GET_BIGVIA_METAL_LAYER( ViaMbk, Index );
while ( LayerRds != RDS_BIGVIA_METAL_EMPTY )
{
DWR = GET_BIGVIA_METAL_DWR( ViaMbk, Index );
OVERLAP = GET_BIGVIA_METAL_OVERLAP( ViaMbk, Index );
USE = GET_BIGVIA_METAL_USE( ViaMbk, Index );
if ( ( ( USE == RDS_USE_ALL ) ) ||
( ( USE == RDS_USE_EXTRACT ) && ( Lynx ) ) ||
( ( USE == RDS_USE_DRC ) && ( ! Lynx ) ) )
@ -478,6 +480,8 @@ rdsrec_list *viambkrds( Figure, Via, Lynx )
( ( USE == RDS_USE_DRC ) && ( ! Lynx ) ) )
{
if ( SIDE_STEP == 0 ) break;
if ( WSX < (SIDE_STEP << 1) ) break;
if ( WSY < (SIDE_STEP << 1) ) break;
X1R = Xvia + OVERLAP - ( ( WSX + DWR ) >> 1 );
Y1R = Yvia + OVERLAP - ( ( WSY + DWR ) >> 1 );
@ -705,7 +709,7 @@ rdsrec_list *viambkrds( Figure, Via, Lynx )
}
if ( First != (rdsrec_list *)NULL ) Link->USER = (void *)First;
return( First );
}