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.

zi_zp() is inaccurate in Cadence Spectre

Status
Not open for further replies.

pancho_hideboo

Advanced Member level 5
Joined
Oct 21, 2006
Messages
2,847
Helped
767
Reputation
1,536
Reaction score
732
Trophy points
1,393
Location
Real Homeless
Activity points
17,490
We can evaluate frequency characteristics of z-domain transfer function, H(z) by using Verilog-A in Cadence Spectre.

Assume H(z) = (1-z^-1)^3 = 1 -3*z^-1 +3*z^-2 -1*z^-3
Here we have three options as expression in Verilog-A.

(1) zi_nd(V(Input), {1, -3, 3, -1}, {1}, Tsample);
(2) zi_zp(V(Input), {1,0, 1,0, 1,0}, {0,0}, Tsample);
(3) zi_zd(V(Input), {1,0, 1,0, 1,0}, {1}, Tsample);

However, only (1) can give accurate result.
See attached figure.
out1 is a result of Spectre primitive, zvcvs.
out2 is a result of (2).

Why can not (2) and (3) give accurate result ?

This is true for H(z) = (1-z^-1)^1 = 1 -1*z^-3
(1) zi_nd(V(Input), {1, -1}, {1}, Tsample);
(2) zi_zp(V(Input), {1,0}, {0,0}, Tsample);
(3) zi_zd(V(Input), {1,0}, {1}, Tsample);

My Cadence Spectre is Version 17.1.0.307.isr6 64bit -- 4 Jul 2018

"test_my_zi_nd.scs"
Code:
ahdl_include "./my_zi_nd.va"

// Generated for: spectre
// Generated on: May 16 13:01:03 2019
// Design library name: My_Tools_TestBenches
// Design cell name: test_my_zi_nd
// Design view name: schematic
simulator lang=spectre
global 0
parameters fsample=36M

// Library name: My_Tools_TestBenches
// Cell name: test_my_zi_nd
// View name: schematic

V1 (net1 0) vsource mag=1 type=dc
E1 (out1 0 net1 0) zvcvs ts=1/fsample gain=1.0 \
polyarg=inversez sxz=none \
numer=[ 1 -3 3 -1 ] denom=[ 1 0 0 0 ]

V2 (net2 0) vsource mag=1 type=dc
I2 (net2 out2) my_zi_nd fsample=fsample

simulatorOptions options psfversion="1.1.0" reltol=1e-3 vabstol=1e-6 \
    iabstol=1e-12 temp=25.0 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" checklimitdest=psf 

ac ac start=1k stop=100M dec=101 annotate=status 

designParamVals info what=parameters where=rawfile
saveOptions options save=allpub

"my_zi_nd.va"
Code:
`include "constants.vams"
`include "disciplines.vams"

module my_zi_nd(Input, Output);
inout Input, Output;
voltage Input, Output;

parameter real fsample = 1.0 from (0.0:inf);

voltage order_3;

real Tsample;

analog begin
   @(initial_step) begin
      Tsample = 1.0 / fsample;
   end //initial_step

   //H(z) = (1-z^-1)^3 = 1 -3*z^-1 +3*z^-2 -1*z^-3
   //V(order_3) <+ zi_nd(V(Input), {1, -3, 3, -1}, {1}, Tsample);
   V(order_3) <+ zi_zp(V(Input), {1,0, 1,0, 1,0}, {0,0}, Tsample);
   //V(order_3) <+ zi_zd(V(Input), {1,0, 1,0, 1,0}, {1}, Tsample);

   V(Output) <+ V(order_3);
end //analog

endmodule
 

Attachments

  • 2019-0516-1300-29.png
    2019-0516-1300-29.png
    44.9 KB · Views: 111

Synopsys HSPICE can give accurate results for any expression.
//H(z) = (1-z^-1)^3 = 1 -3*z^-1 +3*z^-2 -1*z^-3
(1) zi_nd(V(Input), {1, -3, 3, -1}, {1}, Tsample);
(2) zi_zp(V(Input), {1,0, 1,0, 1,0}, {0,0}, Tsample);
(3) zi_zd(V(Input), {1,0, 1,0, 1,0}, {1}, Tsample);
(4) zi_np(V(Input), {1, -3, 3, -1}, {0,0}, Tsample);

Cadence Spectre can not give accurate results for (2) and (3).
But this is a limited case, FIR form.
(1) and (4) are also suspicious in Cadence Spectre.

All of (1)-(4) can not give correct result for more general tranfer function which has both zeros and poles in Cadence Spectre.

We can not trust frequency characteristics of zi_xx() of Verilog-A in Cadence Spectre at all.

"my_zi_xx.va"
Code:
`include "constants.vams"
`include "disciplines.vams"

module my_zi_xx(Input, Output);
inout Input, Output;
voltage Input, Output;

parameter real fsample = 1.0 from (0.0:inf);
parameter integer ix = 1 from [1:4];

//pragma protect
//pragma protect begin
voltage n1, n2, n3, n4;

real Tsample;

analog begin
   @(initial_step) Tsample = 1.0 / fsample;

   //H(z) = (1-z^-1)^3 = 1 -3*z^-1 +3*z^-2 -1*z^-3
   V(n1) <+ zi_nd(V(Input), {1, -3, 3, -1}, {1}, Tsample);
   V(n2) <+ zi_zp(V(Input), {1,0, 1,0, 1,0}, {0,0}, Tsample);
   V(n3) <+ zi_zd(V(Input), {1,0, 1,0, 1,0}, {1}, Tsample);
   V(n4) <+ zi_np(V(Input), {1, -3, 3, -1}, {0,0}, Tsample);

   case(ix)
      1 : V(Output) <+ V(n1);
      2 : V(Output) <+ V(n2);
      3 : V(Output) <+ V(n3);
      4 : V(Output) <+ V(n4);
   endcase
end //analog

endmodule
//pragma protect end
"test_my_zi_xx.spi"
Code:
.hdl "./my_zi_xx.va"

** Generated for: hspiceD
** Generated on: May 17 13:16:30 2019
** Design library name: My_Tools_TestBenches
** Design cell name: test_my_zi_xx
** Design view name: schematic
.PARAM ix=1 fsample=10e6

.PROBE AC
+    V(out) VP(out)
.AC DEC 101 1e3 100e6

.TEMP 25.0
.OPTION
+    LIST=3
+    ARTIST=2
+    INGOLD=2
+    PARHIER=LOCAL
+    POST_VERSION=2001
+    PSF=2
+    RUNLVL=6

** Library name: My_Tools_TestBenches
** Cell name: test_my_zi_xx
** View name: schematic
v0 in 0 AC 1
xi0 in out my_zi_xx fsample=fsample ix=ix
.END
"test_my_zi_xx.scs"
Code:
ahdl_include "./my_zi_xx.va"

// Generated for: spectre
// Generated on: May 17 13:22:40 2019
// Design library name: My_Tools_TestBenches
// Design cell name: test_my_zi_xx
// Design view name: schematic
simulator lang=spectre
global 0
parameters ix=1 fsample=10M

// Library name: My_Tools_TestBenches
// Cell name: test_my_zi_xx
// View name: schematic
V0 (in 0) vsource mag=1 type=dc
I0 (in out) my_zi_xx fsample=fsample ix=ix
simulatorOptions options psfversion="1.1.0" reltol=1e-3 vabstol=1e-6 \
    iabstol=1e-12 temp=25.0 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" 
ac ac start=1k stop=100M dec=101 annotate=status 
designParamVals info what=parameters where=rawfile
save out 
saveOptions options save=selected
 

Attachments

  • HSPICE.png
    HSPICE.png
    64.3 KB · Views: 114
  • Spectre.png
    Spectre.png
    69.4 KB · Views: 120

Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top