• Skip to main content
  • Skip to search
  • Skip to footer
Cadence Home
  • This search text may be transcribed, used, stored, or accessed by our third-party service providers per our Cookie Policy and Privacy Policy.

  1. Community Forums
  2. Custom IC Design
  3. LVS Matching error

Stats

  • Locked Locked
  • Replies 5
  • Subscribers 126
  • Views 17675
  • Members are here 0
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

LVS Matching error

archive
archive over 17 years ago

Hi everybody
I'm using Diva from Cadence to run LVS.
I get many nets and devices mismatch when running an LVS. This is due to M factor of mos transistor, and also because I draw my MOS transistors in Layout using multifingered design. I thought LVS didn't recognize parallel device, but
I checked DivaLVS.rul file and parallel simplification seems to be set by permuteDevice statement. (permuteDevice parallel "nfet")......)
Have anyone been faced to this problem and could help me resolve this???

any help will be very appreciated thanks!!!!


Originally posted in cdnusers.org by isazul
  • Cancel
Parents
  • Andrew Beckett
    Andrew Beckett over 15 years ago

    Rather hard to read your append because of the line wrap, but there's a much simpler way to solve this - rather than combining and keeping just w and l, keep track of m as well when you combine parallel mos. Here's some old code (not tested for a long time, but you should get the idea)

    procedure(parallelMOS(m1 m2) 
        let((mt mult1 mult2 lmult1 lmult2) 
    	mt = ncons(nil)
    	mt->m = nil 
    	mt->W = nil 
    	mt->L = nil
    	;----------------------------------------------------------------
    	; get multipliers
    	;----------------------------------------------------------------
    	if(m1->m then
    	    mult1 = m1->m
    	else
    	    mult1 = 1
    	) 
    	if(m2->m then
    	    mult2 = m2->m
    	else
    	    mult2 = 1
    	) 
    	;----------------------------------------------------------------
    	; get the length multipliers - this is so that the average length
    	; can be calculated correctly
    	;----------------------------------------------------------------
    	if(m1->lm then
    	    lmult1 = m1->lm
    	else
    	    lmult1 = 1
    	) 
    	if(m2->lm then
    	    lmult2 = m2->lm
    	else
    	    lmult2 = 1
    	) 
    	;----------------------------------------------------------------
    	; Combine widths - try to preserve multipliers if possible
    	;----------------------------------------------------------------
    	if(m1->W && m2->W then
    	    if(m1->W == m2->W && m1->L == m2->L then
    		mt->W = m1->W
    		mt->m = mult1 + mult2
    	    else
    		mt->W = m1->W * mult1 + m2->W * mult2
    		mt->m = 1
    	    )
    	)
    	;----------------------------------------------------------------
    	; Combine lengths
    	;----------------------------------------------------------------
    	when(m1->L && m2->L
    	    mt->L = (m1->L * lmult1 + m2->L * lmult2) / (lmult1 + lmult2)
    	    mt->lm = lmult1 + lmult2
    	) 
    	mt
        )
    )
    

    Note of course it means that you'd need to take into account the m factor in the comparison function - you could multiply W by m then. Or you could choose (Diva allows this) to reject combination of parallel devices which are not the same W and L. That's quite a good idea - and then you could also check that the m factors match between schematic and layout - it depends on how rigid you are about allowing folding of W into multiple fingers - for good analog layout, I would always say that you should not divide the W differently at layout time, because then delta-W effects mean that your layout doesn't really match the schematic, and that may mess up the behaviour of the design (for critical, matched transistor, circuits).

    Regards,

    Andrew. 

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • Andrew Beckett
    Andrew Beckett over 15 years ago

    Rather hard to read your append because of the line wrap, but there's a much simpler way to solve this - rather than combining and keeping just w and l, keep track of m as well when you combine parallel mos. Here's some old code (not tested for a long time, but you should get the idea)

    procedure(parallelMOS(m1 m2) 
        let((mt mult1 mult2 lmult1 lmult2) 
    	mt = ncons(nil)
    	mt->m = nil 
    	mt->W = nil 
    	mt->L = nil
    	;----------------------------------------------------------------
    	; get multipliers
    	;----------------------------------------------------------------
    	if(m1->m then
    	    mult1 = m1->m
    	else
    	    mult1 = 1
    	) 
    	if(m2->m then
    	    mult2 = m2->m
    	else
    	    mult2 = 1
    	) 
    	;----------------------------------------------------------------
    	; get the length multipliers - this is so that the average length
    	; can be calculated correctly
    	;----------------------------------------------------------------
    	if(m1->lm then
    	    lmult1 = m1->lm
    	else
    	    lmult1 = 1
    	) 
    	if(m2->lm then
    	    lmult2 = m2->lm
    	else
    	    lmult2 = 1
    	) 
    	;----------------------------------------------------------------
    	; Combine widths - try to preserve multipliers if possible
    	;----------------------------------------------------------------
    	if(m1->W && m2->W then
    	    if(m1->W == m2->W && m1->L == m2->L then
    		mt->W = m1->W
    		mt->m = mult1 + mult2
    	    else
    		mt->W = m1->W * mult1 + m2->W * mult2
    		mt->m = 1
    	    )
    	)
    	;----------------------------------------------------------------
    	; Combine lengths
    	;----------------------------------------------------------------
    	when(m1->L && m2->L
    	    mt->L = (m1->L * lmult1 + m2->L * lmult2) / (lmult1 + lmult2)
    	    mt->lm = lmult1 + lmult2
    	) 
    	mt
        )
    )
    

    Note of course it means that you'd need to take into account the m factor in the comparison function - you could multiply W by m then. Or you could choose (Diva allows this) to reject combination of parallel devices which are not the same W and L. That's quite a good idea - and then you could also check that the m factors match between schematic and layout - it depends on how rigid you are about allowing folding of W into multiple fingers - for good analog layout, I would always say that you should not divide the W differently at layout time, because then delta-W effects mean that your layout doesn't really match the schematic, and that may mess up the behaviour of the design (for critical, matched transistor, circuits).

    Regards,

    Andrew. 

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Children
No Data

Community Guidelines

The Cadence Design Communities support Cadence users and technologists interacting to exchange ideas, news, technical information, and best practices to solve problems and get the most from Cadence technology. The community is open to everyone, and to provide the most value, we require participants to follow our Community Guidelines that facilitate a quality exchange of ideas and information. By accessing, contributing, using or downloading any materials from the site, you agree to be bound by the full Community Guidelines.

© 2025 Cadence Design Systems, Inc. All Rights Reserved.

  • Terms of Use
  • Privacy
  • Cookie Policy
  • US Trademarks
  • Do Not Sell or Share My Personal Information