Quantcast
Channel: Cadence Custom IC Design Forum
Viewing all 4897 articles
Browse latest View live

[SOI device]How to deal with the backgate pin (VBGP & VBGN) settings of devices with 5 terminals while running liberate?

$
0
0

Hi, I got some questions.

How to deal with the backgate pin (VBGP & VBGN) settings of devices with 5 terminals while running liberate?

Q1: Is it correct to set the backgate an input pin while using define_cell command?

Q2: How to set different voltage values for backgate?

The details of my questions are below:

 

Q1: Liberate runs well when I set VBGP and VBGN as inputs. Besides, design compiler read the lib file (containing inverter, buffer, and gate…etc) and converted it into db format successfully. Anyway, when it comes to compile the design, an error is reported like this:

Error: The target library does not contain an inverter. An inverter is required for mapping.(OPT-101)

The partial char.tcl for characterization is below. Could you please tell me whether the settings are correct? Is it possible the error reported by design compiler comes from the lib file my generating by liberate?

define_leafcell \

       -type pmos_soi \

       -pin_position { 0 1 2 3 4 }  \

       ph

define_leafcell \

       -type nmos_soi \

       -pin_position { 0 1 2 3 4 }  \

       Nh

……

if {[ALAPI_active_cell "INVD1"]} {

define_cell \

       -input { I VBGN VBGP } \

       -output { Z } \

       -pinlist { I Z VBGN VBGP} \

       -delay delay_template_3x3 \

       -power power_template_3x3 \

       INVD1

}

 

 

Q2: When the 5th terminal is set as an input, the partial log is as below after running char.tcl, in which VBGP is set to 1.8v and VBGN is set to 0 by default. Could you please help me set other values for backgate pin?

INFO (LIB-511): (define_leafcell): Leafcell 'ph' (instance) has been identified with pin_position (0 1 2 3 4) mapped to (D G S E P).

LIBERATE parameter "extsim_exclusive" overwritten to "1" from "0"

INFO (LIB-511): (define_leafcell): Leafcell 'nh' (instance) has been identified with pin_position (0 1 2 3 4) mapped to (D G S E P).

……

Processing cell: INVD1

INFO (LIB-500): (char_library): Cannot determine VDD/VSS for port 'VBGN' in cell 'INVD1', use default values 1.800V and 0.000V.

INFO (LIB-500): (char_library): Cannot determine VDD/VSS for port 'VBGP' in cell 'INVD1', use default values 1.800V and 0.000V.

*Info* (char_library) : Cell INVD1 found in file /home/shexy/my_liberate/NETLIST/INVD1.pex.netlist

*Warning* Unable to automatically determine the related_power_pin for pin "VBGN" in cell "INVD1". Assigning to the supply referenced in the default vdd "VDD". Please check the netlist or use set_pin_vdd to avoid such warning.

 

 

And here is our lib file.

cell (INVD1) {

    area : 0;

    cell_leakage_power : 0.00751099;

    pg_pin (GND) {

      pg_type : primary_ground;

      voltage_name : "GND";

    }

    pg_pin (VDD) {

      pg_type : primary_power;

      voltage_name : "VDD";

    }

    leakage_power () {

      value : 0.00764743;

      when : "(I * VBGN * VBGP * !Z)";

      related_pg_pin : VDD;

    }

    leakage_power () {

      value : 0.0195762;

      when : "(I * VBGN * !VBGP * !Z)";

      related_pg_pin : VDD;

    }

    leakage_power () {

      value : 0.00764743;

      when : "(I * !VBGN * VBGP * !Z)";

      related_pg_pin : VDD;

    }

    leakage_power () {

      value : 0.0195762;

      when : "(I * !VBGN * !VBGP * !Z)";

      related_pg_pin : VDD;

    }

    leakage_power () {

      value : 0.00195132;

      when : "(!I * VBGN * VBGP * Z)";

      related_pg_pin : VDD;

    }

    leakage_power () {

      value : 0.00195132;

      when : "(!I * VBGN * !VBGP * Z)";

      related_pg_pin : VDD;

    }

    leakage_power () {

      value : 0.000868983;

      when : "(!I * !VBGN * VBGP * Z)";

      related_pg_pin : VDD;

    }

    leakage_power () {

      value : 0.000868983;

      when : "(!I * !VBGN * !VBGP * Z)";

      related_pg_pin : VDD;

    }

    leakage_power () {

      value : 0.00751099;

      related_pg_pin : VDD;

    }

    pin (Z) {

      direction : output;

      function : "!I";

      power_down_function : "(!VDD) + (GND)";

      related_ground_pin : GND;

      related_power_pin : VDD;

      max_capacitance : 0.007;

      timing () {

        related_pin : "I";

        timing_sense : negative_unate;

        timing_type : combinational;

        cell_rise (delay_template_3x3) {

          index_1 ("0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07");

          index_2 ("0.001, 0.002, 0.003, 0.004, 0.005, 0.006, 0.007");

          values ( \

          …

          );

        }

        rise_transition (delay_template_3x3) {

          index_1 ("0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07");

          index_2 ("0.001, 0.002, 0.003, 0.004, 0.005, 0.006, 0.007");

          values ( \

      …

          );

        }

        cell_fall (delay_template_3x3) {

          index_1 ("0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07");

          index_2 ("0.001, 0.002, 0.003, 0.004, 0.005, 0.006, 0.007");

          values ( \

        …

          );

        }

        fall_transition (delay_template_3x3) {

          index_1 ("0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07");

          index_2 ("0.001, 0.002, 0.003, 0.004, 0.005, 0.006, 0.007");

          values ( \

           …

          );

        }

      }

      internal_power () {

        related_pin : "I";

        related_pg_pin : VDD;

        rise_power (power_template_3x3) {

          index_1 ("0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07");

          index_2 ("0.001, 0.002, 0.003, 0.004, 0.005, 0.006, 0.007");

          values ( \

         …

          );

        }

        fall_power (power_template_3x3) {

          index_1 ("0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07");

          index_2 ("0.001, 0.002, 0.003, 0.004, 0.005, 0.006, 0.007");

          values ( \

           …

          );

        }

      }

    }

    pin (I) {

      direction : input;

      related_ground_pin : GND;

      related_power_pin : VDD;

      max_transition : 0.07;

      capacitance : 0.0263663;

      rise_capacitance : 0.0263663;

      rise_capacitance_range (0.0181643, 0.0263663);

      fall_capacitance : 0.0261161;

      fall_capacitance_range (0.0182719, 0.0261161);

    }

    pin (VBGN) {

      direction : input;

      related_power_pin : VDD;

      capacitance : 0.000271182;

      rise_capacitance : 0.000271178;

      rise_capacitance_range (0.000271161, 0.000271178);

      fall_capacitance : 0.000271182;

      fall_capacitance_range (0.000271173, 0.000271182);

      internal_power () {

        related_pg_pin : VDD;

        rise_power (passive_power_template_3x3) {

          index_1 ("0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07");

          values ( \

           …

          );

        }

        fall_power (passive_power_template_3x3) {

          index_1 ("0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07");

          values ( \

           …

          );

        }

      }

    }

    pin (VBGP) {

      direction : input;

      related_power_pin : VDD;

      capacitance : 0.000307519;

      rise_capacitance : 0.000307519;

      rise_capacitance_range (0.000307478, 0.000307519);

      fall_capacitance : 0.000307513;

      fall_capacitance_range (0.000307457, 0.000307513);

      internal_power () {

        related_pg_pin : VDD;

        rise_power (passive_power_template_3x3) {

          index_1 ("0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07");

          values ( \

           …

          );

        }

        fall_power (passive_power_template_3x3) {

          index_1 ("0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07");

          values ( \

           …

          );

        }

      }

    }

  }

}

 

 

Looking forward to your reply! Thanks in advance!

 


accepting 1st subckt definition when there are duplicate subckts

$
0
0

How can I make spectre accept the 1st subckt definition when there are duplicate subckts.

Thank you

AC Sim Output Setup Issues

$
0
0

Hi,

I have the following setup defined in my outputs.

After the simulation, I can see the "AC CL Gain" but nothing is seen for "AC CL Gain at 10kHz".

Both the outputs are shown as plots. Any comments on why this might be happening?

Also, when I include these outputs in the montecarlo simulation, I dont see the "10 KHz value" listed in the variations. I have dc parameters in there that seem to be ok. This may be because the "10 KHz Value" appears as a "plot" and not a "value". Any suggestions on how to get the "value" and not the "plot"?

Thanks much!

skip=cut inst=[...] statements being ignored

$
0
0

The following skip statement (included via "definitions file") works fine :-

       myScopedOpts options skip=cut inst=[i10.i0*] 

But it does not work when I try to use this:-

     myScopedOpts options skip=cut inst=[i10.i0\<3\> i10.i0\<2\>]         

I get the following warning message in the spectre.out file:-

Warning from spectre during hierarchy flattening.
WARNING (SFE-465): Can not find local option scope `i10.i0<2>' of options statement(options ignored).
WARNING (SFE-465): Can not find local option scope `i10.i0<3>' of options statement(options ignored).

I've also tried cutting all of them and then use skip=none for those I want included (same problem).

Any idea where I'm going wrong. 

Thank you.                                                                                                                

Spectre gives different DC simulation results for the same circuit (even some results don't satisfy KCL)

$
0
0

When I simulated the same two-stage op amp circuit in spectre many times, spectre gave different dc operating point simulation results (the following three pictures are the dc operating point simulation results of the same circuit, each time M6 and M7Ids are different).

The last two simulation results do not satisfy KCL (the id of M6 and M7 are not equal).Are these phenomena caused by errors in the simulator itself? Or are there other reasons?Is there any way to avoid simulation results that do not meet KCL? Thank you very much.

circuit prospector not finding structure

$
0
0

Hi All.  I'm trying to use the Circuit Prospector in tsmcN12, but its not finding any structures like current mirrors or diff pairs.  Is there something I need to configure like m-factor or number-of-fingers?  This is with ICADVM 20.1 isr21.  Thanks

Printing out unconventional process-specific model parameter in ADE

$
0
0

Hi,

Let's say you are performing a simple DC simulation of an inverter with 2 transistors in ADE. Is there anyway you can print out certain model parameters in the Spectre's output log file which are not device-specific (i.e, the model parameters that impact simulation results but are not directly used in the 2 transistor's models). * Enabling extremeinfo doesn't help. 

My problem is that when I do simple Monte Carlo DC simulation in ADE-XL (I am sure ADE-XL settings are ok.), after finishing the simulation, I see no variation in the outputs!!! I believe that I have set the model files properly but I feel this is the most probable source of problem). It seems the simulator doesn't make any changes in mismatch parameters and a unique output is generated. Note that I can change the corner (tt-->ss etc.) and the result change as expected but MC doesn't work. I am using TSMC40.  I tried different virtuoso and spectre versions, but no luck. It works fine though with other pdks e.g., TSCM28. 

So I was hoping to get more inside by printing some flag parameters. Is it possible?

Note that I have talked to customer support and they couldn't find the source of the problem. 

Virtuoso Error

$
0
0

Hi All,

I am trying to integrate "IC618" with a180nm standard PDK. When I am tying to launch Cadence with the command "virtuoso &" it is giving this message:

"/opt/cadence/installs/IC618/tools.lnx86/dfII/bin/64bit/virtuoso: error while loading shared libraries: libPolyBool.so: cannot open shared object file: No such file or directory"

Can you please help me out with this? Thank you.


DC Annotation works sometimes and does not other times

$
0
0

In ADEXL, when back annotating to a schematic the node voltages don't always show up. I thought going through the list of libraries in Views->Annotations->Setup and setting them correctly seemed to help, but am not sure now. Any help would be greatly appreciated. Thanks much!

DRC Error Using Assura

$
0
0

Dear Andrew,

I am using "ICADVM18" version for virtuoso and "4.1_USR6" version for Assura for a standard 180 nm process. But when I am performing DRC, I am getting the some DRC errors. I have attached the a screenshot of the errors. I really appreciate if you have any suggestion for me to resolve this issue. 

Note: 1. In the "Log" window I am getting a warning stating "Layout and Assura versions are not matching".  Is this the reason behind getting the errors?

2. Also in the command window I am getting the message"Failed to obtain license for "Assura_UI" ".

Are there any rules and techniques for setting the accuracy and step length when performing transient simulation of unstable systems (that is, the transfer function has RHP) in Spectre?

$
0
0

I built a two-stage op amp in the spectre and deliberately did not add a compensation capacitor.Then I connected this op amp into a unity gain negative feedback form, as shown in the figure below:

I performed a pz analysis on it, and the result showed that the transfer function from Vin to Vout in the above figure has a pair of conjugate right half-plane poles.

So, if I add a step excitation to Vin at this time, Vout should output a sine wave that gradually diverges and finally stabilizes. Then I set the Vpulse on the Vin side as follows:

Next, I set the transient simulation as follows (accuracy is set to conservative):

So I got the following tran simulation results:

Vout did not diverge first as I thought, but gradually converged.

I feel something is wrong. After that, I changed the accuracy of tran simulation to moderate, and the simulation waveform this time is as follows:

This time Vout diverged first.I think this is the transient simulation result that is consistent with the theory, right?

The accuracy of conservative is higher than that of moderate. But why is the result given by conservative inconsistent with the theory?

Later, I set the simulation step size to 1ns (it was not set manually before, I think spectre should decide the simulation step size by itself).

When the simulation step size becomes 1ns, the simulation results of conservative accuracy and moderate accuracy are both that Vout first diverges and then tends to stabilize the sine wave (I think this is the phenomenon that RHP should produce).

Why is the simulation result inconsistent with theory only when the accuracy is conservative and the step size is not set? (I found that if the simulation step size is not set manually, the conservative simulation result step size is larger, and the moderate simulation step size is smaller.) How should the accuracy be set during transient simulation and when should the simulation step size be set manually? Are there any rules or techniques?

Thank you very much.

Print Noise summary and corresponding OCEAN noiseSummary

$
0
0

Hi,

the print/noise summary function available from ADE-L menu allows for hierarchical grouping of contributors, which is quite an handy feature.

I don't seem to find a programmatic way to obtain the same output within OCEAN's function noiseSummary()

Am I missing some parameter or it is just that the feature is not implemented?

Thanks!

Michele

global pins

$
0
0

I have many global pins(VDD! and VSS!). I f I connect them with metal, resistance increase. I want to connect global pins without physical in layout. Can I connect them in pex extraction  and LVS. 

Can the stb simulation in Spectre calculate the negative phase margin?

$
0
0

When I was simulating a two-stage op amp, I tried to use stb to simulate its stability.

 At first I did not add a compensation capacitor (later I used ac simulation and the calculator to find that the phase margin at this time was a negative value).The stb simulation shows "PM metric not found".

And when I added the compensation capacitor, the stb simulation showed the phase margin.

Therefore, can the stb simulation only calculate the positive phase margin, and the negative phase margin will be considered "PM metric not found"? (If this is the case, then I may prefer to use ac simulation and calculators in the future.)

Thank you very much.

How to point to a CDL netlist in my config view

$
0
0

Hello,

I have a CDL netlist of a digital block. That block is part of a larger hierarchy, rest of which is analog. So far I have been simulating with a model for the digital, and I point to it in the config view of my test bench. Now I want to start simulating with the real digital. How can I use the CDL I have and how to point to it in the config view? I have never done this before.

Thanks

Svilen


Parasitic extraction tools for Cadence

$
0
0

Hi Andrew,

I am using "IC6.1.8-64b.500.21" for Virtuoso and "4.1_USR6_HF11" for Assura. By using Assura I am able to do DRC and LVS check properly. However, I came to know that the RCX option is no longer available in Assura tool. I went through this issue https://community.cadence.com/cadence_technology_forums/f/custom-ic-design/37094/confusion-about-drc-lvs-parasitic-extraction-tools that had similar problem like mine and set the QRCHOME variable like the following:

export QRCHOME=/opt/cadence/installs/EXT191

export CDS_PATH=/opt/cadence/installs/EXT191/bin


export PATH=/$QRCHOME/tools/extraction/bin:$QRCHOME/tools/bin

But the QRC menu is not being integrated with Cadence menu. Also, I am getting these two warnings in the Log window:

Please let me know if you have any suggestion to fix this issue. Also please let me know if there is any other way to perform RC extraction using Cadence. I know we can do that by using Calibre, but I don't have access to that. I really appreciate your kind help and support. 

Looking forward to your kind response. 

DC operating point for different analyses

$
0
0

Hello,

I run several different analyses, i.e., ac, noise and dc, during a Spectre simulation. It seems that the simulator determines the DC operating point separately for each analysis. So, two questions, really:

 - Is it possible to re-use the DC operating point found during, for example, the dc analysis, for the ac and noise analyses?

 - How do I compare the DC solutions used in the various analyses? Ideally, these should be the same, but may not be in circuits with start-up problems, for example.

how to add printf statement to .cdsenv file?

$
0
0

Is there a way to put a printf statement in a .cdsenv file?  Thanks

Stimulating an internal node from a higher hierarchy level

$
0
0

Hi all.

I'm creating a test bench for an APS matrix. Due to my diode voltages won't be measured or controlled, I haven't defined them as pins in my DUT. However, I would like to generate stimuli from my test bench to a lower hierarchy level, that is inside my DUT.

How can I stimulate those nodes from a higher hierarchy level without any pin definitions in my DUT? Is that possible? 

It would be something like:

VSTIM  DUT/nst gnd dc=1

where nst is a node inside DUT instance. 

Thanks in advance. 

PLL reference model for PSS+PNOISE

$
0
0

I am looking for a simple PLL reference model or design with mostly ideal components and adjustable parameters such as Kvco, Kpfd, LFP and reference/VCO phase-noise -  which can be used in PSS+PNOISE simulations.

Background is that I developed and simulated a real PLL in Cadence with transient and PSS+PNOISE. The transient behaviour (lock-time, step-response, loop-bandwidth, phase-margin) etc. is matching the theoretical simulations I have done with both ADIsimPLL and a custom Matlab-tool.

But the PLL phase-noise result of the PSS+PNOISE is about 6dB lower than the theoretically expected phase-noise.This of course calls for a factor of 20*log(2) - but it is not - I have checked that already.

In addition the phase-noise of the CP+PFD seems to be the dominant factor for low offsets in the ADIsimPLL/Matlab simulations, but in the PSS simulations it seems that this noise is very low, or not enabled at all.

I was fiddling a lot to find the reason for the discrepancy, but did not yet suceed.

Therefore I am searching for a more or less ideal and simple PLL reference model for PSS in which I can set the key-parameters for the blocks and do the simulation.

Does someone have such a model at hand and can share it ?

Viewing all 4897 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>