• 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. Fatal error found by spectre during topology check.

Stats

  • Locked Locked
  • Replies 9
  • Subscribers 125
  • Views 13304
  • 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

Fatal error found by spectre during topology check.

Aswathyn
Aswathyn over 3 years ago

I am trying to build verilogA code of MTJ in cadence. I got the following error. I am new to cadence . please help me to eliminate the error . 

Fatal error found by spectre during topology check.
FATAL: The following branches form a loop of rigid branches (shorts) when added to the circuit:
I1:mz_flow (from net012 to 0)
I1:my_flow (from net14 to 0)
I1:mx_flow (from net13 to 0)

the schematic used is given below

  • Cancel
Parents
  • Aswathyn
    Aswathyn over 3 years ago

    Please find the attached verilogA code of two modules and help me to solve the error

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 3 years ago in reply to Aswathyn

    OK, the issue is that you have indirect branch assignments in the MTJ_model block:

    V(mx):
    ddt(V(mx)) == k1*(h3*V(my) - h2*V(mz)) + k2*(-h1*V(my)*V(my)- h1*V(mz)*V(mz) + h2*V(mx)*V(my) + h3*V(mx)*V(mz))+k3*net_torque*(-s1*V(my)*V(my) -s1*V(mz)*V(mz) + s2*V(mx)*V(my)+ s3*V(mx)*V(mz));

    (similar expressions for my and mz), and then the Initial block has some voltage sources:

    V(x) <+ 0.2;//0;

    These are in conditional blocks based on the analysis (which is a dubious modelling practice and potentially dangerous because the behaviour might be different). The indirect branch assignments will be creating voltage sources on mx, my and mz - and so the simulator sees these as potentially in parallel. In practice, because of the condition they are not in parallel - the Initial module only has the sources when in the "ic" analysis, and the MTJ module only has the sources when in the "tran" analysis. So you could workaround this by changing the analog begin in the Initial module to:

    (* no_rigid_switch_branch *) analog begin

    which turns off the check for switch branches (this is sort of a multi-module switch branch).

    However I would question whether this is a particularly good way of implementing the model. You might want to look at this again and decide whether there is a better way of setting up the initial conditions. Maybe have the indirect branch assignments there all the time, and use initial conditions in the simulator (which are handled via a 1ohm resistor to avoid the rigid loops) rather than using this Initial block?

    Regards,

    Andrew

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Aswathyn
    Aswathyn over 3 years ago in reply to Andrew Beckett

    sir, when i tried as per your suggestion by putting the code before analog begin the error report got is attached . please find the attachment error_2.docx

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • Aswathyn
    Aswathyn over 3 years ago in reply to Andrew Beckett

    sir, when i tried as per your suggestion by putting the code before analog begin the error report got is attached . please find the attachment error_2.docx

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Children
  • Andrew Beckett
    Andrew Beckett over 3 years ago in reply to Aswathyn

    I checked in the same version of Spectre that you're using, and don't see that error. The error you're seeing is exactly what would happen if you have two voltage sources in parallel (the loop of rigid branches that the check normally performs, and that this attribute is disabling). With the attribute on the analog line, no check for a loop of rigid branches is performed, and so parallel voltage sources will lead to a singularity and that's what you're seeing.

    I suspect you've changed the conditions in the code so that there is a time when both sources are enabled. For me (because the Initial block as them enabled during the "ic" analysis, and MTJ block has them in "tran" analysis) they are never in parallel at the same time.

    Did you change something else as well? Maybe by mistake?

    Andrew 

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Aswathyn
    Aswathyn over 3 years ago in reply to Andrew Beckett

    yes sir, i made a small mistake in code. when i remove that transient working. but the output of MTJ is shown  as 

    in the graph. it is only 100mv. normally around 1v should be there to indicate high state. any information regarding this . 

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 3 years ago in reply to Aswathyn

    Sorry, I can't debug your code for you - I don't know what it's supposed to be doing, and my quick tests showed different (and rather strange behaviour) - the model looks pretty unstable to me.

    Andrew

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel

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