• Skip to main content
  • Skip to search
  • Skip to footer
Cadence Home
  • This search text may be transcribed, used, stored, or accessed by our third-party service providers per our Cookie Policy and Privacy Policy.

  1. Community Forums
  2. Custom IC Design
  3. error of laplace_zp in verilogA

Stats

  • Replies 2
  • Subscribers 125
  • Views 1593
  • Members are here 0

error of laplace_zp in verilogA

sjwprcker
sjwprcker 5 months ago

Hi,

I have created the following module

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

module H_ZP(IN, OUT);
input IN;
output OUT;
voltage IN, OUT;

parameter real gm1 = 5.05e-6;
parameter real RL1 = 190.0e6;
parameter real Cp1= 20.0e-15;
parameter real Cp2= 80.0e-15;
parameter real C= 5.0e-12;
parameter real R1= 4.0e6;
parameter real R2= 160.0e6;
parameter real gm2= 32.0e-6;
parameter real RL2=2.38e6;
parameter real Cc=1.0e-12;

real wz1 = -1/(R1*C);
real wz2 = -1/(R2*C);
real wz3 = gm2/Cc;
real wp1 = -1/(RL1*gm2*RL2*Cc);
real wp2 = -1/(2*R2*C);
real wp3 = -2/(R1*C);
real wp4 = -gm2/(Cp1+Cp2);
real wp5 = -6.2e-6/80.0e-15;

real ZERO [5:0] = {wz1, 0, wz2, 0, wz3, 0};
real POLE [9:0] = {wp1, 0, wp2, 0, wp3, 0, wp4, 0, wp5, 0};

analog begin
V(OUT) <+ gm1*RL1*gm2*RL2*laplace_zp( V(IN), ZERO, POLE);
end

endmodule

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

I run AC simulation to check the frequency response. However the error info is

"Fatal error found by spectre during DC analysis `dcOp'.
FATAL (ASL-4601): "xxx: Laplace filter is missing conjugate zero (0 + j*-3.2e+07). Correct the problem and try again.
"

In the transfer function, all the zeros (poles) are only real number. The imag parts are all 0. 

Is there any clue for this error?

Thanks. 

  • Sign in to reply
  • Cancel
  • Andrew Beckett
    Andrew Beckett 5 months ago

    The LRM (and our Verilog-A documentation too) is a big vague on this, but the issue is that the orders of your vectors are back to front. The assumption of real then imaginary pairs is that the vector is indexed in increasing order. If you use:

    real ZERO [0:5] = {wz1, 0, wz2, 0, wz3, 0};
    real POLE [0:9] = {wp1, 0, wp2, 0, wp3, 0, wp4, 0, wp5, 0};

    it will work. What was happening was that the 0th element of the vector was 0, and the 1st element was non-zero, and hence you had all the real values as 0, and only specified the imaginary values of the zeros and poles.

    Regards,

    Andrew

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • sjwprcker
    sjwprcker 5 months ago in reply to Andrew Beckett

    Very cool and fast answer, which perfectly solve the issue. 

    Thanks a lot, Andrew!

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel

Community Guidelines

The Cadence Design Communities support Cadence users and technologists interacting to exchange ideas, news, technical information, and best practices to solve problems and get the most from Cadence technology. The community is open to everyone, and to provide the most value, we require participants to follow our Community Guidelines that facilitate a quality exchange of ideas and information. By accessing, contributing, using or downloading any materials from the site, you agree to be bound by the full Community Guidelines.

© 2025 Cadence Design Systems, Inc. All Rights Reserved.

  • Terms of Use
  • Privacy
  • Cookie Policy
  • US Trademarks
  • Do Not Sell or Share My Personal Information