• 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. How to debug VerilogA compilation when code seems to check...

Stats

  • Locked Locked
  • Replies 3
  • Subscribers 125
  • Views 14980
  • 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

How to debug VerilogA compilation when code seems to check clean but simulation aborts when compiling ?

Herge
Herge over 13 years ago

Hello I have a verilogA module using multi-terminal ports and where I want to use for loops to assign all currents. I took care to use genvars, and I don't get any syntax error during the check after saving the verilogA view. However during simulation, spectre is aborting (very laconically, even if I use option +debug).

** Below the header of my module :

  module qnrmesh2d(majport,minport);
   
   // Majority carriers terminals  
   inout [1:`QNRMESH2D_NPORTS] majport;
   electrical [1:`QNRMESH2D_NPORTS] majport;

   // Minority carriers terminals  
   inout [1:`QNRMESH2D_NPORTS] minport;
   electrical [1:`QNRMESH2D_NPORTS] minport;

 ...

**  Below the declarations of my genvars :

    genvar    thisPort, otherPort, refPort; 

**  Below a typical set of loops

     // Trick to define the reference port
      for (refPort = `QNRMESH2D_NPORTS; refPort == `QNRMESH2D_NPORTS; refPort = refPort + 1) begin

          // Generate the charge balance equations at all ports
          for (thisPort = 1; thisPort < `QNRMESH2D_NPORTS; thisPort = thisPort + 1) begin

              // Extract the quasi-Fermi potential and evaluate its exponential
              Imref_min[thisPort] = sq_min*V(minport[thisPort],majport[thisPort]);
              LimExpImref = limexp(Imref_min[thisPort]/$vt);
             ...

              // Loop over all ports to compute the current in the selected port (thisPort)
             for (otherPort = 1; otherPort < `QNRMESH2D_NPORTS; otherPort = otherPort + 1) begin

                  // Assign the drift majority current
                 I(majport[thisPort],majport[refPort]) <+ Gdrift_maj[`index2D(`QNRMESH2D_NPORTS,thisPort,otherPort)]
                                                                           *V(majport[otherPort],majport[refPort]);
             ...
             end
       end
end

** ICFB message when saving :

          veriloga Diagnostics: Warnings exist in veriloga text of cell qnrmesh2d.
          Abort

 ** Spectre.out contains nothing beyond the lines "Loading ..lib...so"

  • Cancel
Parents
  • Herge
    Herge over 13 years ago
    See support request nbr : 42907042 (it has the complete files attached).
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • Herge
    Herge over 13 years ago
    See support request nbr : 42907042 (it has the complete files attached).
    • 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