• 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. Create ideal buffer with verilogA

Stats

  • Locked Locked
  • Replies 5
  • Subscribers 125
  • Views 19805
  • Members are here 0
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Create ideal buffer with verilogA

BaaB
BaaB over 9 years ago

Hi,

With the help of Andrew last time relating to dependent sources, yesterday I tried a similar approach to create an ideal buffer.

I tried it and tested. Everything is OK. However, I have some questions relating to the code. Could you help me clarify it?

Here is the code I used to create an ideal buffer:

subckt ibuff (in out gnd)
V1 (out gnd) bsource v=v(in,gnd)
ends ibuff


It works as expected. But how input impedance of infinity and zero output impedance is realized from the code?

I see that the ideal buffer has infinite input impedance and zero output impedance too

  • Cancel
  • Andrew Beckett
    Andrew Beckett over 9 years ago

    You could have just used a vcvs (voltage controlled voltage source) from analogLib to do this. Isn't it fairly obvious why this has infinite input impedance and zero output impedance? It is simply measuring the input voltage (it would draw no current) and then has an ideal voltage source at the output where the voltage just happens to be the measured input voltage - so there's no impedance included.

    Put another way, I don't really understand why you are unsure as to why this would have ideal behaviour?

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 9 years ago

    Oh, and by the way, this is not Verilog A. A Verilog A model would look like this:

    `include "disciplines.vams"
    module ibuff(in, out, gnd);
    electrical in, out, gnd;
    input in;
    output out;
    inout gnd;

    analog
      V(out,gnd) <+ V(in,gnd);

    endmodule

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • BaaB
    BaaB over 9 years ago

    Thanks for the help. I was not sure how the input voltage is measured in simulator. But from what you said, it draws no current when measuring so it has infinite input impedance then.

    I also thought about vcvs but I haven't tried that.

    For the code, could you tell me how to include that code to make it work?

    I tried the way as you said last time for dependent source but I got the following errors:

    Loading /usr/cadence/MMSIM151/tools.lnx86/cmi/lib/64bit/5.0/libinfineon_sh.so ...
    Loading /usr/cadence/MMSIM151/tools.lnx86/cmi/lib/64bit/5.0/libphilips_o_sh.so ...
    Loading /usr/cadence/MMSIM151/tools.lnx86/cmi/lib/64bit/5.0/libphilips_sh.so ...
    Loading /usr/cadence/MMSIM151/tools.lnx86/cmi/lib/64bit/5.0/libsparam_sh.so ...
    Loading /usr/cadence/MMSIM151/tools.lnx86/cmi/lib/64bit/5.0/libstmodels_sh.so ...
    Reading file:  /home/huannguyen/simulation/ibuff_tb/spectre/schematic/netlist/input.scs
    Reading file:  /usr/cadence/MMSIM151/tools.lnx86/spectre/etc/configs/spectre.cfg
    Reading file:  /home/huannguyen/TSMC65/models/spectre/crn65gplus_2d5_lk_v1d0.scs
    Reading file:  /home/huannguyen/TSMC65/models/spectre/mosCAPrf_ahdl.va
    Reading link:  /usr/cadence/MMSIM151/tools.lnx86/spectre/etc/ahdl/constants.h
    Reading file:  /usr/cadence/MMSIM151/tools.lnx86/spectre/etc/ahdl/constants.vams
    Reading link:  /usr/cadence/MMSIM151/tools.lnx86/spectre/etc/ahdl/discipline.h
    Reading file:  /usr/cadence/MMSIM151/tools.lnx86/spectre/etc/ahdl/disciplines.vams
    Reading file:  /home/huannguyen/TSMC65/models/spectre/mosCap_ahdl.va
    Reading file:  /home/huannguyen/ibuff.scs

    Error found by spectre during circuit read-in.
        ERROR (SFE-841): "/home/huannguyen/ibuff.scs" 1: Unexpected character ``' in netlist.
        ERROR (SFE-868): "/home/huannguyen/ibuff.scs" 1: Can not open input file `disciplines.vams'. No such file or directory. Ensure that the file exists and the path to the file is correct. Otherwise, use the -I<path> command-line option to specify the path to the file.
    Warning from spectre during circuit read-in.
        WARNING (SFE-702): "/home/huannguyen/ibuff.scs" 2: Use of the comma character in node lists is not supported.
        WARNING (SFE-702): "/home/huannguyen/ibuff.scs" 2: Use of the comma character in node lists is not supported.
        WARNING (SFE-702): "/home/huannguyen/ibuff.scs" 3: Use of the comma character in node lists is not supported.
        WARNING (SFE-702): "/home/huannguyen/ibuff.scs" 3: Use of the comma character in node lists is not supported.
    Error found by spectre during circuit read-in.
        ERROR (SFE-678): "/home/huannguyen/ibuff.scs" 8: Statement is not in Spectre format. Use `simulator lang=spice' to introduce spice language sections.
        ERROR (SFE-678): "/home/huannguyen/ibuff.scs" 11: Statement is not in Spectre format. Use `simulator lang=spice' to introduce spice language sections.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 9 years ago

    Simplest way would be to create the view in Virtuoso (File->New->CellView and then set the Type to "VerilogA"; paste in the code there). Then when you instantiate the symbol (it should prompt you to create a symbol when you exit the editor) in your schematic, it will automatically add the ahdl_include line in the netlist.

    You appear to have just specified the Verilog-A as a model file - you can't do that, because it's not in spectre syntax. It has to be included via an ahdl_include statement.

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • BaaB
    BaaB over 9 years ago

    Thank you. You are right. I referred it in Model Libraries too. Now it works like a charm!

    • Cancel
    • Vote Up 0 Vote Down
    • 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