Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

Switched Capacitor Circuits - PSS/PAC

Status
Not open for further replies.

Puppet123

Full Member level 6
Joined
Apr 26, 2017
Messages
356
Helped
22
Reputation
44
Reaction score
21
Trophy points
18
Activity points
3,058
Hello,

I already have the paper by Ken Kundert, but I am looking for a tutorial on how to do PSS/PAC simulation for Switched Capacitor Amplifiers in Cadence Spectre/Virtuoso.

I am not looking for the theory, rather a step by step tutorial on how this is simulated and set up in Cadence Virtuoso/Spectre.

Thank you.
 

Last edited by a moderator:

Hello,

Thank you for your response.

As I said he wrote a tutorial - that is theoretical - about this topic.

But I am looking for a practical tutorial on this subject.

Thank you.
 

Hello,

Thanks, but this document does not talk about Switched Capacitor simulations.

Thank you.
 

Hello,

Thanks for your response.

I read the course notes and understand the simulation procedure except for one thing.

How do I:

– Divide results by sinc(f/fs) to correct for ZOH distortion?

Thank you.
 

– Divide results by sinc(f/fs) to correct for ZOH distortion?
This is true for Transient Analysis.
Howerver, this is not required for PSS/PAC.

See https://www.edaboard.com/showthread.php?364294

Post Processing of Roll-Off-Compensation for Transient Analysis Result
Code:
selectResult('tran)

time_vec = drGetWaveformXVec( v("/Vout") )
tstop = drGetElem( time_vec, drVectorLength(time_vec)-1 )
printf("tstop = %g[usec]\n", tstop/1u)

fmax = 25M

tw_in = 1.0/(5*fmax)
froll_off = 1.0 / tw_in
fnyquist = 2*froll_off

delta_f = 1.0 / tstop
maxstep = 1.0 / fnyquist
N = round(2*fnyquist * tstop)
ip = round(log(N)/log(2))
NN = 2**ip
if( NN < N then NN=2**(ip+1) )
fnyquist = NN / (2.0*tstop)
printf("N = %d --> N = %d\n", N NN)

k = tstop / (2.0 * tw_in)  ;  Amplitude Compensation

Vout_freq = dft(v("/Vout") 0 tstop N "Rectangular" 1 1)

Vref_freq = dft(v("/Vref") 0 tstop N "Rectangular" 1 1)

xvec = drGetWaveformXVec(Vout_freq)
len  = drVectorLength(xvec)
printf("len = %d\n", len)

bid = currentSubwindow(1)
plot( db20(k*Vout_freq) ?expr '("tran-S21 without roll-off compensation") )
plot( db20(Vout_freq/Vref_freq) ?expr '("tran-S21 with roll-off compensation") )
 
Last edited:

Puppet23 - are you required to use PSS/PAC or are you free to use any other simulation environment?
 

Hello,

Must use Cadence and must use PSS/PAC.

That is why I asked the question originally.

Thank you.
 

I must use Cadence Spectre as my simulator from Cadence ADE on Cadence Virtuso Design Framework and use the PSS/PAC type simulations.
 
Last edited:

Yes, I am required to use:

Cadence Design Framework as my design environment, Cadence Spectre as my simulator and Cadence ViVA from Cadence ADE for Post Processing.

Also, @pancho_hideboo, what is the code you posted earlier - is that MATLAB ?

Thank you.

--

Post Processing of Roll-Off-Compensation for Transient Analysis Result

Code:


Code dot - [expand]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
selectResult('tran)
 
time_vec = drGetWaveformXVec( v("/Vout") )
tstop = drGetElem( time_vec, drVectorLength(time_vec)-1 )
printf("tstop = %g[usec]\n", tstop/1u)
 
fmax = 25M
 
tw_in = 1.0/(5*fmax)
froll_off = 1.0 / tw_in
fnyquist = 2*froll_off
 
delta_f = 1.0 / tstop
maxstep = 1.0 / fnyquist
N = round(2*fnyquist * tstop)
ip = round(log(N)/log(2))
NN = 2**ip
if( NN < N then NN=2**(ip+1) )
fnyquist = NN / (2.0*tstop)
printf("N = %d --> N = %d\n", N NN)
 
k = tstop / (2.0 * tw_in)  ;  Amplitude Compensation
 
Vout_freq = dft(v("/Vout") 0 tstop N "Rectangular" 1 1)
 
Vref_freq = dft(v("/Vref") 0 tstop N "Rectangular" 1 1)
 
xvec = drGetWaveformXVec(Vout_freq)
len  = drVectorLength(xvec)
printf("len = %d\n", len)
 
bid = currentSubwindow(1)
plot( db20(k*Vout_freq) ?expr '("tran-S21 without roll-off compensation") )
plot( db20(Vout_freq/Vref_freq) ?expr '("tran-S21 with roll-off compensation") )

 
Last edited by a moderator:

Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top