• 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. How to plot the verilogA module data points using OCEAN

Stats

  • Locked Locked
  • Replies 9
  • Subscribers 126
  • Views 15918
  • 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

How to plot the verilogA module data points using OCEAN

RFStuff
RFStuff over 12 years ago

 Dear All,

I used a verilogA module in my schematic which measures the period of the output  waveform of a block.

The verilogA code is as follows:-

`include "disciplines.vams"

(*instrument_module*)
module frequency_meter(in);
    parameter real thresh=0;    // threshold (V)
    parameter integer dir = 1 from [-1:1] exclude 0;
                // 1 for rising edges, -1 for falling
    input in;
    voltage in;
    integer timing;
    real t0, t, period, freq;
    analog begin
    t = last_crossing(V(in) - thresh, dir);
    @(cross(V(in) - thresh, dir)) begin
        if (timing) begin
        period = t - t0;
        freq = 1/period;
        $strobe("period = %rs (measured at %rs).\n", t - t0, $abstime);
        end
        t0 = t;
        timing = 1;
    end
    end
endmodule

 

I want to plot freq versus time  using OCEAN script.

Can anybody please tell how it can be done.

I did :

save I5:period I5:freq
plot(I5:freq).

This gives error in OCEAN script.

But in input.scs file I worte:-

save I5:period I5:freq 

I ran the simulation and in the wavescan I was able to plot freq-vs-time.

 

 

 

Kind Regards,

 

 

  • Cancel
  • Andrew Beckett
    Andrew Beckett over 12 years ago

    In the spectre netlist, you can add:

      myOpts options saveahdlvars=all

    or in OCEAN you could say:

      saveOption( ?saveahdlvars "all" )

    And then to reference the freq signal, you'd do:

      plot(getData("I5:freq" ?result 'tran))

    Or you could make the frequency an output pin of the meter instead - but that involves changing it a bit so that you are contributing to a node - for your needs the above is probably sufficient?

    Best Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • RFStuff
    RFStuff over 12 years ago

     Dear Andrew,

    Thanks a lot.

    Now, I am beginner to verilogA coding. 

    I have some doubt regarding the above verliogA code.

    1:- $Strobe prints at what instants

    2:- Looks like it is printing even if there is NO thresold cross

    Kind Regards,

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

     It should print when there's a threshold crossing and timing==1. That's what I see. Are you sure you don't have threshold crossings?

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • RFStuff
    RFStuff over 12 years ago

    Dear Andrew,

    Theree are thresold crossings. But it is printing ( what is inside  $strobe )even between the  zero crossings.

    To me it looks like it is being printed at the end of  each simulation time step ? This I am not able to understand.

    Kind Regards,

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

    Can you put together a simple example (just with voltage sources, analogLib res/cap) which shows the problem? Then post the input.scs (also the version of spectre that you're using).

    Thanks,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • RFStuff
    RFStuff over 12 years ago

     Sorry Andrew,

    I misinterpreted the result. It is printing as you have mentioned.

    1:-  I have some doubt regarding the initial parameter value of  "t0" and "timing" in the 1st iteration.

    2:- Could you please tell what change I have to make to make freq as an output node in the code ?

    3:- Could you please tell how to plot it in GHz unit instead of GV ?

    Kind Regards,

     

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

    1. The initial values will be 0 - this is in the VerilogAMS language definition.

    2 & 3 - see the model below. By specifying the output as a frequency discipline, the graph comes out with the right units too (I'd not seen your third point until I'd updated the model, but it solves 3 too...)

    `include "disciplines.vams"

    // could specify the fout signal as being electrical
    // but it's nicer to do it as the specific discipline - this
    // way we can have a custom abstol and blowup, since the
    // magnitude of the frequency will be much larger than
    // voltages in the circuit
    nature Frequency
        units="Hz";
        access=Freq;
        abstol=1;
        blowup=100G;
    endnature

    discipline frequency
        potential Frequency;
    enddiscipline

    (*instrument_module*)
    module frequency_meter(in,fout);
        parameter real thresh=0;    // threshold (V)
        parameter integer dir = 1 from [-1:1] exclude 0;
                    // 1 for rising edges, -1 for falling
        input in;
        voltage in;
        output fout;
        frequency fout;
        integer timing;
        real t0, t, period, freq;
        analog begin
        t = last_crossing(V(in) - thresh, dir);
        @(cross(V(in) - thresh, dir)) begin
            if (timing) begin
            period = t - t0;
            freq = 1/period;
            $strobe("period = %rs (measured at %rs).\n", t - t0, $abstime);
            end
            t0 = t;
            timing = 1;
        end

        // use a transition filter to ensure that the frequency doesn't
        // change discontinuously
        Freq(fout) <+ transition(freq,0,100p);
        end
    endmodule

     

    Kind Regards,

    Andrew

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • RFStuff
    RFStuff over 12 years ago

    Dear Andrew,

    Thanks a lot.

    Whether setting abstol and blowup in this code affects the accuracy.

    Actually, I am seeing some differnece in the frequency plots ( i.e. periodic spike ) in this code as compared to the code ( without having a pin)

     

    Kind Regards,

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

    blowup won't, abstol might. Depends on what frequencies you're dealing with - ideally abstol should be about a millionth of a typical frequency that is being measured.

    Also, the transition time should not be excessively sharp if the frequency is low. Or it may be too short - I don't know what frequency ranges you're dealing with.

    Regards,

    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