Hi Andrew,
Thanks for your response!, I am using IC6.17.713_SPECTRE16.10.284. The node I am plotting is the one from hbnoiseOut1. Thanks in advance!
simulator lang=spectre
global 0
parameters harm=9 flo=2G prf=-50
include "netlist"
simulatorOptions options reltol=5e-3 vabstol=1e-6 iabstol=1e-12 temp=27 \
tnom=27 scalem=1.0 scale=1.0 gmin=1e-12 rforce=1 maxnotes=5 maxwarns=5 \
digits=5 cols=80 pivrel=1e-3 sensfile="../psf/sens.output" \
dochecklimit=yes checklimitdest=both
dcOpCheckLimit checklimit checkallasserts=yes severity=none
dcOp dc write="spectre.dc" homotopy=dptran maxiters=150 maxsteps=10000 \
annotate=status
dcOpInfo info what=oppoint where=rawfile
hb hb tstab=80n saveinit=yes autosteady=yes oversample=[2]
+ fundfreqs=[(flo/2)] maxharms=[harm] errpreset=moderate
+ tstabmethod=gear2only annotate=status
+hbstb hbstb start=10 stop=300M dec=20
+annotate=status
hbac hbac sweeptype=relative relharmvec=[1] start=10 stop=300M
+ dec=30 maxsideband=3 annotate=status
hbnoiseOut1 ( vop von )
+ hbnoise sweeptype=relative relharmvec=[0] start=1k stop=200M
+ dec=5 values=[10 100] iprobe=PORT1 refsideband=[0]
+ noisetype=timeaverage noiseout=[am pm usb lsb]
+ separatenoise=yes annotate=status krylov_max_iter=400
hbnoiseOut2 ( vop2 von2 )
+ hbnoise sweeptype=relative
+ relharmvec=[0] start=1k stop=200M dec=1 values=[10 100 100k]
+ iprobe=PORT1 refsideband=[0] noisetype=timeaverage noiseout=[am
+ pm usb lsb] separatenoise=yes annotate=status
+ krylov_max_iter=400
primitives info what=primitives where=rawfile
subckts info what=subckts where=rawfile
asserts info what=assert where=rawfile
RE: hbnoise: difference between sweep-type relative harmonic=0 and absolute
RE: Verilog-A: Lookup tables for AC analysis
I think I know what's going on - essentially it's computing the derivative to determine the small-signal response of a voltage or current generated with a table; that would be reasonable if it was a voltage or current being looked up, but not if it's a capacitance.
I filed CCR 1823411 for this to see what R&D have to say about it. You might want to contact customer support so that a duplicate can be filed for you in order to track it since I don't know which customer you're from.
Regards,
Andrew.
Verilog-A: Lookup tables for AC analysis
Hello everyone,
I have a problem performing AC analysis on lookup tables based components.
Basically, on the basis of Pown M. question, I wanted to extend the validity of that code to AC analysis as well. By reducing the problem to its core, I created a simple voltage dependent differential capacitance and I found out that it does not work properly. I should better say that the error seems to be proportional to the variation of the capacitance (defined in the lookup table) with respect to the polarization point.
Below I attach the code of a simple nonlinear capacitor described by a lookup table, which gives the capacitor value according to a specific polarization point.
`include "constants.vams"
`include "disciplines.vams"
module cap_LT(c1,c2);
inout c1,c2;
electrical c1,c2;
real c;
(* desc = "charge" *) real q;
analog begin
c=$table_model( (V(c1,c2)), "vc_C.txt","1LL");
q = c*(V(c1,c2));
I(c1,c2) <+ ddt(q);
end
endmodule
The lookup table has been generated at a fixed frequency and changing the voltage across the capacitor. Hence, the simulation I am performing is an AC analysis at a fixed frequency while the sweep is made on a design variable which correspond to the DC bias of the component. Additionally I have put a very small AC stimulus.
As stated above, the simulation runs without issues but the capacitance I extract from the results is not the same as the one defined by the lookup table. Indeed, the more its changes along the polarization, the more the error increases (the maximum error is more or less twice the capacitance values it should have).
I think it is related to the time derivative ddt but still I can't find any workaround. As far as I know, the simulator performs at each sweep point a DC analysis in order the respective small signal circuit. Hence, even doing single polarization analysis the result does not change.
can somebody help me please?
many thanks in advance.
RE: hbnoise: difference between sweep-type relative harmonic=0 and absolute
For me, if I do that, I get identical results whether I use relative with harmonic 0 or absolute.
Regards,
Andrew.
RE: Verilog-A: Lookup tables for AC analysis
In practice, the derivation was made recursively to the capacitance and not just to the voltage. I had assumed that once the bias point was found the value of c was kept fixed according to the table. However, seems like it still considers c as variable and try to compute the derivative of it, thus adding that error i was experiencing.
I have solved the problem by just doing the ddt before the multiplication with the looked up capacitance c.
with best regards,
Julian.
RE: Verilog-A: Lookup tables for AC analysis
Julian,
Thanks - both R&D and I had come to the same conclusion too. I have suggested that we document this behaviour to make it clearer what happens when you use ddt() on an expression including something looked up from a table.
Regards,
Andrew.
Calculate input impedance for matching with spectreRF
Hi
I am designing an LNA and want to match its input impedance to 50Ohms port impedance.
During 'sp' analysis in spectreRF , which function will give me idea about this impedance matching.
Gp,Ga , Gmax ,Gumx etc. only gives the gain value depending upon kind of matching at input and output of LNA.
Is it OK to use Z11 and Z22 as input and output impedance values for matching purpose.
Or is their some other way thru which impedance matching is determined in SP or some other analysis with spectreRF.
Regards
Vipul
Query on Harmonic Port element in analogLib
Hi
In what applications is harmonic port required.
In user guide it mentions that this element is required when different impedance need to be set for different harmonics.
Can somebody tell application in which such requirement is needed in port element.
Regards
Vipul
Quantus QRC for RF design parasitic extraction
Hi
I want to use QUANTUS QRC for extraction of my RFCMOS circuit layout.
Can anybody tell what all options or properties need to be set in ICT file in order to generate qrcTechFile to be used for extraction of high frequency parasitic effects
like skin effect , self and mutual inductance etc.
There are several license options for QRC available, which option will be suitable for 180nm RFCMOS technology.
My frequency of operation for RF design is <5GHz.
Regards
Vipul
FATAL (CMI-2010) in transient simulation
My spectre version is: Version 15.1.0.644.isr13 64bit -- 22 Oct 2016
Error information as following:
Internal error found in spectre at time = 35.7142 ps during transient analysis `tran'.
Encountered a critical error during simulation. Submit a Service Request via Cadence Online Support, including the netlist, the Spectre log file, the behavioral model files, and any other information that can help identify the problem.
FATAL (CMI-2010): Assertion failed in file `waves.c' at line 12549.
FATAL (SPECTRE-21): Assertion failed.
It is related to the block "shifter_combiner" in the rfLib, and the simulation could run after I remove this block. But I have to use this block for simulation.
Any idea how to resolve this issue?
S
Harmonic Balance -LC Oscillator
Hi all,
I am facing a weird issue. When I am simulating a LC Oscillator in HB, the Estimated oscillating frequency from Tstab Tran differs around 1GHz from the calculated fundamental frequency. The oscillator aims to oscillate in 11.5Ghz.
When I am saying "Estimated oscillating frequency from Tstab", I am referring to the frequency that SpectreRF simulator calculates after the simulation is done. It's written in the output log file.
I have followed all the recommended settings that MMSIM 14.1 Spectre RF document proposes, such as:
A] Transient-Aided Options: 1) Run Transient -->either YES or Decide automatically
2) Detect Steady State -->YES
3) tstab= 30n
B] Fundamental Freq =12G
Number of Harmonics =12
Over-sample Factor = 12
C] Accuracy: conservative
D] Options button:
1)Integration method tstab: I tried both traponly and trap. I am getting the same freq. deviation
2)maxstep=1psec,350f --> I am getting the same freq. deviation
The testbench is consisted of: 1) the extracted view of the capacitor bank and the GM circuit
2) N-Port S -parameter file for the inductor and the tracks (extracted from EMX tool)
From my previous experience, the estimated osc. frequency from tstab tran is a bit close to the fundamental freq.
My questions are: 1) Could anybody tell me what is the reason behind this big deviation? Did anyone has experienced similar HB/tstab behavior?
2) Is it safe as a verification check to run the same testbench in Transient analysis and set the stop time around 200nsec and then measure the frequency using the "freq" function from the calculator menu?
Thanks in advance
Problem with Hidden states in Verilog A while running PSS/PAC...
I wrote a code in Verilog A to generate four different clocks clk1, clk2, clk3 and clk4 from clk, as shown below. These clocks are used for switching in the filter. While doing PSS/PAC analysis for plotting the magnitude response of filter, its giving an error shown below, Could anybody please tell how can I avoid this. I am a beginner in Verilog A, the code is also posted for the reference.
Regards,
Jayaram
ERROR In Running PSS/PAC...
Error found by spectre during periodic steady state analysis `pss'.
ERROR (SPCRTRF-15177): PSS analysis doesn't support behavioral module components with hidden states found in component 'JYR_CLKgen_VerA'. Skipped.
/home/jayaram/SCL_JYR_filter/JYR_CLKgen_VerA/veriloga/veriloga.va, declared in line 18: Hidden state variable: count
/home/jayaram/SCL_JYR_filter/JYR_CLKgen_VerA/veriloga/veriloga.va, declared in line 19: Hidden state variable: vout1
/home/jayaram/SCL_JYR_filter/JYR_CLKgen_VerA/veriloga/veriloga.va, declared in line 19: Hidden state variable: vout2
/home/jayaram/SCL_JYR_filter/JYR_CLKgen_VerA/veriloga/veriloga.va, declared in line 19: Hidden state variable: vout3
/home/jayaram/SCL_JYR_filter/JYR_CLKgen_VerA/veriloga/veriloga.va, declared in line 19: Hidden state variable: vout4
Analysis `pss' was terminated prematurely due to an error.
CODE:
`include "constants.h"
`include "disciplines.h"
module JYR_CLKgen_VerA(vclk, vclk1, vclk2, vclk3, vclk4);
input vclk;
output vclk1, vclk2, vclk3, vclk4;
electrical vclk, vclk1, vclk2, vclk3, vclk4;
parameter real vtrans_clk=0.9;
parameter real voh=1.8;
parameter real vol=0.0;
parameter real tdel = 0 from [0:inf);
parameter real trise = 0.1n from [0:inf);
parameter real tfall = 0.1n from [0:inf);
integer count;
real vout1, vout2, vout3, vout4;
analog begin
@(initial_step) begin
count = 0;
end
@ (cross(V(vclk) - vtrans_clk, 1.0)) begin
if (count == 0) begin
vout1 = voh;
vout2 = vol;
vout3 = vol;
vout4 = vol;
end
else if (count <= 7) begin
vout1 =vol;
vout2 = voh;
vout3 = vol;
vout4 = vol;
end
else if (count <= 20) begin
vout1 = vol;
vout2 = vol;
vout3 = voh;
vout4 = vol;
end
else if (count <= 31) begin
vout1 = vol;
vout2 = vol;
vout3 = vol;
vout4 = voh;
end
if (count<=31)
count = count+1;
else count = 0;
end
V(vclk1) <+ transition(vout1,tdel,trise,tfall);
V(vclk2) <+ transition(vout2,tdel,trise,tfall);
V(vclk3) <+ transition(vout3,tdel,trise,tfall);
V(vclk4) <+ transition(vout4,tdel,trise,tfall);
end
endmodule
Problem with Monte Carlo in ADE XL: no psf written
Hi,
I am new to ADE XL and want to run a MC sim bt it behaves weird and I cannot see/browse the results. I am not sure if I am doing anything wrong or if it is buggy. I am ADE L user so I describe what I did:
1. Set up my environment in ADE L as usual. Simple transient sim with output waveform as result
2. Start ADE XL, create new cell, Tests -> Click to add test and then load the state from ADE L. The Outputs Setup and Results get populated.
3. I am working with an ST PDK, so I go to ArtistKit -> Load corners from state and select the scenario that I previously saved where I enabled statistics/monte cartlo. I choose "Select Nominal Corner: yes" and "Location: ADE-XL Results Database"
4. "Corners" in the data view gets populated with my monte carlo states. I think this is fine.
5. I select "Single Run, Sweeps and Corners" and hit the "Plot all waveforms" button. IT WORKS -> the results browser shows two traces on top (one for nominal and one for monte carlo)
6. Then I select "Monte Carlo Sampling" and select number of points, save mismatch data etc and run.
7. After the run, hitting the "plot all waveforms" button, the window is just black and empty! Hitting Results browser button also shows the empty results browser.
It seems that no psf file is created which is there for the interactive run. The file adexl/data/MonteCarlo.0/psf/testlib:testcell:1/psf is empty.
Opening the run log shows that all runs (total number of points 4, number of points passed 4) have been completed successfully.
Am I doing anything wrong here? Where are the MC results supposed to be?
PSS shooting vs. transient with nport (S-aparm) loading
Hello,
I am simulating a differential circuit with a tune-load (LC tank), where L is modeled by EMX. I am using AnalogLib/nport cell to include S-parameter behavior of the inductor in my PSS simulations. PSS is using shooting method to solve the circuit. nport cell is created by EMX tool (interpolation method="linear").
Here is the problem that I see:
for a given condition, transient and PSS-shooting results are different (output swing in PSS is wrong; doesn't lineup with current*Rp). I checked the tstab transient results of PSS simulations and I can see that tstab results correlate with transient simulation results.
I appreciate any comments.
-Masoud
S11 for bandpass filter
I am designing a bandpass filter using active inductor as shown in attached schematic and had a query in this regard.
Since this is a BPF I am interested in seeing its S21 response. But for that ckt input and output impedance should match with input and output port impedance so that S11 and S22 are low.
But since I am in initial phase of my design I dont want to spend too much time in input matching and just want to see S21 response of my filter. For that I want to minimize S11 and S22.
How can I achieve this input and output matching in spectreRF so as to see optimum s21 response of my filter ? Can load/source pull analysis be of any help to achieve this requirement ?
Regards
Vipul
RF front-end simulation
Dear collegues,
I am trying to simulate an RF front-end (LNA+VCO+MIXER) in order to get performances such as conversion gain, noise figure, etc.
If I simulate only the LNA+MIXER and use a Vsin to emulate the behavior of the VCO I can perform a PSS+PNOISE+PAC and get all the desired performances.
However, If i use the "real" VCO, which is an autonomous circuit, then the PSS does not work correctly:
- If I simulate the whole front-end and give the fundamental frequency, then it does not get the exact VCO frequency, and I cannot get the performances.
- If I simulate the whole front-end and the PSS is enable for autonomous circuits, then it simulates the entire front-end as an oscillator, and I cannot get the performances.
Can anyone help me with this issue?
Best Regards,
Fabio
Guarantee LC Oscillator Start Up over PVTs
Hi all and Andrew,
I have a question which I think it has been examined thoroughly but I would like to clarify to myself something which is not very clear to me.
The question is:
Which testbench-analysis is most accurate regarding the correctness of starting the oscillator and so satisfying the Barkhausen criteria?
1) Run PSS analysis without any stimulus [such as: a) set initial condition at the differential outputs of the VCO, or b) Power up VCO or c) inserting a time-varying independent source]
and then check the start-up transient behavior using tstab analysis?
OR
2) Run PSS analysis with a stimulus such those that I referred just before?
Thanks , any advice is more than welcome
Error in Evaluating IIP2 with Monte Carlo
Hello All,
I would like to know why Monte carlo iteration is being terminated prematurely while computing IIP2 due to the following error:
ERROR (SPECTRE-8003): mc1_subckts: Error evaluating ocean expression `MONTE_EXPR_1=ipnVRI((v("/Voutp" ?result "hbac") -
v("/Voutn" ?result "hbac")) '-1 '0 ?rport 50.0 ?ordspur 2)'.
I am presently using cadence Virtuoso IC6.1.3.500.13
for the spectre : sub-version 7.1.1.187.isr11
Thanks as I look forward to possible suggestions and solutions.