• 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. RF Design
  3. Verilog A code with lookup table

Stats

  • Locked Locked
  • Replies 9
  • Subscribers 64
  • Views 22181
  • 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

Verilog A code with lookup table

Gold
Gold over 9 years ago

Hai,

I have a doubt in TFET based Mixer circuit design. Actually I have downloaded InAs TFET model generated by PennState University. This model is having verilog A code and lookup table for current and capacitance values. I am trying to use this model in cadence virtuoso. I did DC and AC analysis. Is it possible to find pss, pac analysis for mixer circuit using InAs TFET model?

Thank you.

  • Cancel
  • Andrew Beckett
    Andrew Beckett over 9 years ago

    It depends on how the model is written. If there are "hidden states" then it won't work (but will tell you why). In general if there's a problem, spectre should tell you. There are a few more checks added in MMSIM15.1 version of spectre to trap some of the more esoteric Verilog-A issues with RF analyses.

    Did you try running with it?

    Regards,

    Andrew.

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

    Hai Andrew,Thanks for your reply. The verilog A code is:

    analog begin
    Ids=$table_model(V(d,s), (V(g,s)), "IdVg-InAs-NTFET-Lg-20nm.tbl","1LL,1LL");
    Cgd=$table_model(V(d,s), (V(g,s)), "CGD-InAs-NTFET-Lg-20nm.tbl","1LL,1LL");
    Cgs=$table_model(V(d,s), (V(g,s)), "CGS-InAs-NTFET-Lg-20nm.tbl","1LL,1LL");

    if(analysis("dc")) begin
        I(d,s) <+ 1*Ids*W;
    end
    else begin
      if(analysis("tran")) begin
          Qgd = (W*1*Cgd)*(V(g,d));
          Qgs = (W*1*Cgs)*(V(g,s));
          Qg=Qgs+Qgd;
          I(d,s) <+ 1*Ids*W ;
          I(d) <+ ddt(-1*Qgd);
          I(s) <+ ddt(-1*Qgs);
          I(g) <+ ddt(Qg);
      end
    end

    In my point of view, according to code, we can run only 'dc' and 'tran' analysis of the mixer circuit. Is it correct?

    If I want to find pss and pac analysis for the mixer circuit, what can I do?

    Pls suggest me..

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

    Contact the model writer and ask them to provide something better written? Generally models should not do different things for different analyses. I think the model would behave the same without the conditional stuff at all, and just having:

    analog begin
    Ids=$table_model(V(d,s), (V(g,s)), "IdVg-InAs-NTFET-Lg-20nm.tbl","1LL,1LL");
    Cgd=$table_model(V(d,s), (V(g,s)), "CGD-InAs-NTFET-Lg-20nm.tbl","1LL,1LL");
    Cgs=$table_model(V(d,s), (V(g,s)), "CGS-InAs-NTFET-Lg-20nm.tbl","1LL,1LL");


          Qgd = (W*1*Cgd)*(V(g,d));
          Qgs = (W*1*Cgs)*(V(g,s));
          Qg=Qgs+Qgd;
          I(d,s) <+ 1*Ids*W ;
          I(d) <+ ddt(-1*Qgd);
          I(s) <+ ddt(-1*Qgs);
          I(g) <+ ddt(Qg);

    end

    If you don't want to be that radical, just remove the if(analysis("tran") from around the statements and leave it as having one bit of code for dc, and the rest of the code for every other analysis.

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • AishwaryaP
    AishwaryaP over 8 years ago

    Hi,

    I have table with two inputs X and Y and an output Z=F(X,Y). I am facing the following error upon running the simulation.

    FATAL (VLOGA-5081): "veriloga/veriloga.va" 21: I2: $table_model failed: Insufficient sample points. The table must provide at least two points for each isoline. Correct the problem and try again.
    FATAL (VLOGA-5083): "veriloga/veriloga.va" 21: I2: Found only sample points 'y=10.840000' when 'x=11.850000' for table model data of form output = F(x,y). Provide at least one more point with different 'y' value when 'x=11.850000' and try again.

    This is how my table looks like:

    11.85 10.84 -1.73E-06
    11.85 10.84 -1.73E-06
    13.29 8.81 -1.96E-05
    13.37 8.596 -1.99E-05

    I understand the problem that it expects atleast two points in each dimension so it can interpolate. I want to know is there an option to turn off interpolation if the nearest neighbour is not found. Or in other words, is there a way to specify $table_model to just return exact value like a LUT: 

    Please help me here. Thank you.

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

    This ought to be possible by using "D" as the control string for each of the dimensions (according to the VerilogAMS 2.4 LRM at least this should pick the closest value). However, if I compare that with the VerilogA documentation in the MMSIM/SPECTRE installation, it says there that it looks for the exact value - and this appears from a very quick experiment what it does in practice.

    I think you'll need to contact customer support to ask for this closest fit to be supported in Spectre. I can't find anyone who has asked for this so far.

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • AishwaryaP
    AishwaryaP over 8 years ago
    Hi Andrew,
    Thank you for the feedback. I tried using 'D,D' as control string for the above case. It does not resolve this issue. I will contact customer support.
    Thank you.
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 8 years ago
    Note you still need the isolines as it describes even when using D,D - but assuming you fixed that and it still fails to find the closest fit, you should contact customer support.

    Andrew.
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • AishwaryaP
    AishwaryaP over 8 years ago
    Hi Andrew,
    With isolines it works fine. My problem is when there is just one value (like 11.85 10.84 -1.73E-06. There is no value other than y=10.84 for x=11.85). Can $table_model just return the available value for the given X,Y without looking for neighbour.
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 8 years ago

    I don't believe so currently. I think the requirement for isolines should be relaxed if you are using "D" mode, in addition to it being changed to give the closest fit rather than an exact match only. That's why you need to take this up with support so that we can file the CCR on your behalf (always better to have a real customer associated with it rather than just an internal request).

    Andrew

    • 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