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

Problem on connect all the bus lines together.

$
0
0

I have a requirement to short-circuit 512-bit signals every 8 bits and then send them to the next circuit module for current detection, as shown in the figure below. After carefully reading Chapter 2 of the "Virtuoso® Schematic Composer Tutorial" manual, I found that such operation is not supported. I thought of designing a symbol called "8current_to_1current" to achieve this operation. I have thought of two solutions:

 

  • For the first solution, it seems that currently, I can only connect a device (e.g., a 0-ohm resistor) to each bit. On the layout, according to the solution provided by the experts earlier[post title: update the layout connectivity by shorting two terminals of Analog lib Resistor in layout - Custom IC SKILL - Cadence Technology Forums - Cadence Community], I can use the "Remove Device entry” to (short(PLUS MINUS)). By doing so, the layout issue indeed shorts the resistor, but it seems that LVS cannot pass. Is there a solution to make LVS pass as well? In this post whose question is similar to me[post title: How to properly short together named nets for schematic and layout], someone mentioned that metal resistors can be used to replace the resistors, so that the layout also has metal resistors. Unfortunately, the PDK I am using does not have the layout of metal resistors.

 


Optimize and speed up automatic routing

$
0
0

Hello everyone,

I'm using automatic route to create connections between two blocks that are placed vertically. There are about 80k nets to be routed.

The automatic route has been running for a week and the log window freezes like this:

For the layout, every instance inside block A has a pin on Metal 1 for routing. However, the pin is tightly surrounded by metal 1 to metal 3. So the only way out is to add vias and start routing on metal 4.

Block B has lots of rooms so the routing can start from metal 2.

I'm looking for a way to speed up the routing. The auto route stuck at cycle 1 for a week doesn't look right to me.

How do I make the auto route aware that it's supposed to route from metal 4 in block A? Should I add vias to the instance and place the pin on Metal 4 as well?

Thanks!

Optimize and speed up automatic routing

$
0
0

Hello everyone,

I'm using automatic route to create connections between two blocks that are placed vertically. There are about 80k nets to be routed.

The automatic route has been running for a week and the log window freezes like this:

For the layout, every instance inside block A has a pin on Metal 1 for routing. However, the pin is tightly surrounded by metal 1 to metal 3. So the only way out is to add vias and start routing on metal 4.

Block B has lots of rooms so the routing can start from metal 2.

I'm looking for a way to speed up the routing. The auto route stuck at cycle 1 for a week doesn't look right to me.

How do I make the auto route aware that it's supposed to route from metal 4 in block A? Should I add vias to the instance and place the pin on Metal 4 as well?

Thanks!

Delete certain runs in Monte Carlo simulation.

$
0
0

I have simulated a TSPC D flip flop, whose output (Q) is logic '1' at time (zero +). When i run a monte Carlo simulation for certain corners (FF/SF say), My Q(Zero + time) is logic '0' in some case. This is giving me junk values for the delay expression i am running a Monte carlo simulation for.

 

Example: delay for 1 single FF case -> 200p (say), Then the same simulation at certain data point (in a 2000 monte Carlo run) is giving me -5p. Because of the initial output (Q at time zero +). This leads to wrong mean and standard dev. in my final result.

Is there anyway i can delete certain points from my 2000 runs Monte Carlo simulation? 
--
Thank you

  and 

Transition in conditional statement, VerilogAMS

$
0
0

I'm trying to create a testbench using verilogAMS, and for that, I need a port that is at times, voltage-controlled, and other times, current-controlled. I used a conditional statement for that.
Here is a snippet of my code:


if (i==0) V(Vout,n)<+VVout;

else I(Vout)<+1u;

VVout and i are variables that change value in other parts of my code.
The problem is that I can't use "transition" in a conditional statement (returns an error).
Is there a way to alternate between voltage and current source without the use of a conditional statement? If not, any way (or alternative) to using transition?

Verilog-AMS variable with randomly selected value at each Monte Carlo sample

$
0
0

Dear community

I would like to create a Verilog-AMS module where a variable is initialized to a random value for each sample in a Monte Carlo analysis, i.e. something like that:

integer seed;
real random_value;
analog initial begin
    seed = $random;
    random_value = $rdist_normal(seed, 0, 1.0);
end

Problem: random_value never changes in a Monte Carlo simulation. Why? My understanding is that $random returns a new number with every call - at least that's what the documentation claims. A look into the log files confirms that the seed indeed never changes,

Additional note: I am aware that Spectre actually does not exit with every MC iteration. ADE assigns a certain number of point to a job. But even setting the maximum number of points per job to 1 in the monte Carlo form does not change the outcome.

Another note: It is technically not the best practice to achieve the randomness by just setting a random seed, and then drawing one sample from a probability distribution. Rather, the seed should stay the same during the whole MC analysis but every iteration draws another sample from the probability distribution function. Is there a way to achieve that?

Thanks in advance for any help.

assigning a complex value to a design variable in ADE assembler

$
0
0

Hi 

I'm trying to assign a complex value to a design variable so I can do sourcepull in cadence but it's been so frustrating with no solution. I have tried using 

Gamma_S = complex((mag * cos(theta)) (mag * sin(theta))) or Gamma_S = mag*cos(theta)+i*mag*sin(theta)

with no luck. Is it even possible to do it?

I appreciate any help.

Detecting when a Job Policy form is opened or modified

$
0
0

I am attempting to connect to the event triggered when a user opens the Job Policy Setup Form via ADE to execute certain modifications to the form itself, such as hiding or disabling some input fields.

Similar to how the `postInstall` signal detects when an ADE window has been opened, I would like to utilize signals or triggers to accomplish this task. I understand how to directly modify the field when I have a `formStruct`, but now I need to establish a connection to trigger these modifications when the event occurs. I know I can use the `hiRegTimer()` as a last resort, but I would like to avoid this approach.

Any idea on how to achieve this?


Ocean script not converging in transient simulation

$
0
0

I have a ADE-L setup which runs just fine but if I save it as a ocean script file and run it from the ICFB window (on the same session where I ran the ADE-L simulation) using the load command it fails to converge. Should this be reported to Cadence support or is there something I can check on my side to see why there is a difference in behavior.

I am running Cadence Virtuoso IC6.1.8-64b.500.30

Thanks,

Milind

Liberate error ERROR (LIB-465)

$
0
0

I've tried to execute a tcl scrpit using command line of Liberate, and it show this error.

My code is :

exec mkdir -p ${rundir}/LDB
exec mkdir -p ${rundir}/LIBRARY
exec mkdir -p ${rundir}/DATASHEET

### Define temperature and default voltage ###
set_vdd vdd 0.65
set_gnd gnd 0
set_operating_condition -voltage 0.65 -temp 27 -supply_name vdd


## Load template information for each cell ##
source ${rundir}/TEMPLATE/template.tcl

## Load spice models ##

# Command and options to call the external SPICE simulator
set_var extsim_cmd spectre
# Option to be passed to SPICE simulator
set_var extsim_cmd_option "+spice"
# Option to be used during characterization
set_var extsim_option "runlvl=5"
set_var extsim_leakage_option "gmindc=1e-14 pivtol=1e-15"
#set_var extsim_save_failed all

set_var reset_negative_power 1

set_var extsim_deck_header ".hdl $rundir/MODELS/nGAAFET/bsimcmg_nmos.va\n.hdl $rundir/MODELS/pGAAFET/bsimcmg_pmos.va"
define_leafcell -extsim_model -type nmos_soi -pin_position {0 1 2 3 4} bsimcmg_nmos
define_leafcell -extsim_model -type pmos_soi -pin_position {0 1 2 3 4} bsimcmg_pmos

set_var extsim_flatten_netlist 0

# The external simulation engine is used for all simulations (char_library option -extsim must be specified)
set_var extsim_exclusive 1

set spicefiles_spectre $rundir/NETLIST/$cell.scs
lappend spicefiles_spectre $rundir/MODELS/nGAAFET/bsimcmg_nmos.scs
lappend spicefiles_spectre $rundir/MODELS/pGAAFET/bsimcmg_pmos.scs
read_spice -format spectre $spicefiles_spectre

## Characterize the library for NLDM (default), CCS and ECSM timing.
char_library -ccs -ecsm -extsim spectre -cells $cell -thread 10

## Save characterization database for post-processing ##
write_ldb ${rundir}/LDB/$cell.ldb

## Generate a .lib with ccs, ecsm ###
write_library -overwrite -ccs ${rundir}/LIBRARY/${cell}_ccs.lib
write_library -overwrite -ecsm ${rundir}/LIBRARY/${cell}_ecsm.lib
write_library -overwrite ${rundir}/LIBRARY/${cell}.lib

## Generate ascii datatsheet ###
write_datasheet -format text ${rundir}/DATASHEET/$cell

--------------------------------------------------------------------------------------

The error is:

ERROR (LIB-465): (char_library): The Program will exit now, as char_library is not supported in interactive mode.
Finished Liberate Execution.

New user - all inverter layout components getting one pin name

$
0
0

Hi all! I'm a new user for school and I'm trying to layout a simple inverter. When I go to add the pins on the metal1 layer, I can't for the life of me figure out why everything seems connected. If i delete my output metal1 between nmos and pmos, gnd and vdd separate. Why does it seem like it's "conducting" pin names through the nwell, pactive, and nactive? What am I missing? Thank you!

Different number of ports in NPORT and S-parameter file

$
0
0

Hello,

is it possible to set as an ERROR (stopping the netlist) the WARNING we have when the number of ports in NPORT and in the S-parameter file are different?

WARNING (CMI-2131): 12 port data file `/home/.../touchstone_s12p/text.txt' used as 8 port.

Thank you

Best regards

Aldo

Temperature simulation in ADE Explorer/Assembler

$
0
0

Hi, I am quite new to the Virtuoso software and I am trying to sweep the temperature to see the thermal-dependent transient response of the circuit. I have seen that you could use Tools->Parametric Analysis and I can find that interface in ADE explorer. However, I don't know how I can set this globally as when no instance is selected, no parameter is shown.

Calling a C function from Verilog-A that involves ddt

$
0
0

I know we can call a C function from Verilog-A using a signature like `double some_func(double a, double b, double* deriv_a, double* deriv_b)`. However, from the user manual, it seems like the C function can only substitute Verilog-A function that does not involve time-mixing functions, such as `ddt` or `laplace_*`. Is there any way to call a C-function that can substitute the time-mixing functions in Verilog-A?

Joules Power Calculator v22.1 lecture pdf is unavaliable

$
0
0

Same as subject, Joules Power Calculator v22.1 lecture pdf is unavailable 

Please find a way to fix the URL, thank you!


input-referred noise measurement issue

$
0
0

I’m facing an issue with the input-referred noise in a circuit I’m simulating in Cadence. The input noise I’m getting is significantly different from what I expected.

To elaborate, according to Chapter 4 of Dr. Behzad’s book, the output and input-referred noise of a resistance-based Transimpedance Amplifier (TIA) should be as follows:


However, when I simulate this circuit in Cadence and perform the noise analysis, I get the following results:

Interestingly, the output noise from the simulation aligns approximately with the formula. However, the input noise is completely different.

I’m unsure why this discrepancy exists and would appreciate any insights or suggestions.  I am calculating the total noise by integrating the I**2/Hz and V**2/Hz curves, as shown below. ( A form also discusses this method of noise measurement in cadence.)  


Thank you in advance for your help!

Parametric Analysis Maestro

$
0
0

Hello,

in the past, I used ADE L for my simulations, but now, with Maestro, I can't seem to figure out how to perform parametric analyses at all. Do you have any suggestions or advice to help me with this process?

Thank you in advance for your assistance.

Aghiles

ASU 7nm installation in Cadence Virtuoso

$
0
0

I want to install 7nm predictive PDK of Arizona State University for my project. But I have no idea how to do so. Can someone kindly guide me to do this?? I also want to install GF180 but my lack of knowledge in this matter is preventing me to do so.

how to write log while using features of Advanced Optimization ?

$
0
0

I would like to record how many times the feature "Advanced Optimization" used by user ?

Hope to have record while user click "Advanced Optimization" and "run" the simulation, not just clock "Advanced Optimization" without "run".

just want to differentiate the difference in between "Single run, Sweep and Corners" and "Advanced Optimization" ?

Device Check Asserts that only apply within a specific time window

$
0
0

Hello Everyone,

I have a question as to how one could implement a general device check/assert where the expression being checked only applies if the violation time within a time value value. 

For example : lets say I have an assert statement that does the following for a transient simulation condition

Check01 assert sub=device1  anal_types=[tran] expr="V(g,s)<X & V(d,s)>Y)" message="device 1 violated Vds under condition 1" level=warning

The above statement will issue warning whenever any signal meets the criteria specified in the expression. Now I know that I can filter the above check so that it only applies for violations that are greater than time Tmax using the duration=Tmax modifier. What I want to do is something more flexible. 

I am looking for a way of configuring the checks so that they only apply for durations that are within specific time windows So for example, If I have a very short time pulse I want to allow for a looser check, if the violation time is somewhat longer I want another check, and so on ..There is the check_windows=[t1 t2] modifier which does what I want  but it only applies to specific time points for the specific simulation that I am running. I would like to find a way to implement the check_windows functionality but in a way that is generic and can be used by any designer running a transient simulation in spectre.

Thanks

Viewing all 4889 articles
Browse latest View live


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