From d1c952b7f1311e66afd4d8c8254a32abd772efeb Mon Sep 17 00:00:00 2001 From: Jean-Paul Chaput Date: Sat, 2 Aug 2014 11:53:19 +0200 Subject: [PATCH] Do not create "small" BIGVIA (less than two holes). * Bug: In , 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). --- .gitignore | 1 + alliance/src/rds/src/rfmacces.c | 10 +++++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index be0f34cc..69feee2e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ cvsCommit.txt gitCommit.txt +patchs/ Linux.*/ Darwin/ Solaris/ diff --git a/alliance/src/rds/src/rfmacces.c b/alliance/src/rds/src/rfmacces.c index edf794be..3a84deba 100644 --- a/alliance/src/rds/src/rfmacces.c +++ b/alliance/src/rds/src/rfmacces.c @@ -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 ); }