• 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 using cds_innersrr

Stats

  • Locked Locked
  • Replies 4
  • Subscribers 126
  • Views 5474
  • 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

Error using cds_innersrr

elic253
elic253 over 1 year ago

HI , I am using MALTAB R2021b and Spectre IC618.230. 

In the MATLAB i am using both cds_srr and cds_innersrr commands. 

After some debugging and reading older post in the forum i have set matlab path as follow :

$ setenv MATLABPATH /nfs/tools/cadence/virtuoso/IC618.230/tools.lnx86/srrmatlab.

this solve my error regard cds_srr function. 

In addition to that i have the next command in my matlab code:

struct_n = cds_innersrr(c.outfile, c.sweep_noise, params_n{1},0);
when I perform this code line i get the next error in matlab: 
Error using cds_innersrr Command not recognized. 
in the matlab path that i have set above i can see the cds_innersrr.mexa64 but as i understand that matlab doesn't recognized the function. 
thanks!
  • Cancel
Parents
  • ShawnLogan
    ShawnLogan over 1 year ago

    Dear elic253,

    elic253 said:
    when I perform this code line i get the next error in matlab: 
    Error using cds_innersrr Command not recognized. 
    in the matlab path that i have set above i can see the cds_innersrr.mexa64 but as i understand that matlab doesn't recognized the function. 

    Are you sure your understanding of the error "command is not recognized" is correct? I have a feeling the command is located, but the syntax with which you are using it is not correct. The actual error message you include states "Command not recognized". If it were a path problem, not only would you not find the cds_innersrr.mexa64 file in the $MATLABPATH variable directory, but I would expect an error including a term such as "cds_innersrr not defined" or "cds_innersrr not found".

    My understanding is the command syntax is something like:

    sig = cds_innersrr(dirname, dataset, signame, verbose)

    As a guess, your use of the {} nomenclature suggests params_n1 is a cell array. A cell array can have members of different data types - its members are not exclusively strings. If the function cds_innersrr() is expecting a string as the argument "signal", perhaps the result of params_n{1} is not considered a string by the function and hence it is not capable of executing the function and results in the error of "command not recognized".

    You might try to execute the command using a very simple case where signame is a quoted net name in your results and see if the command succeeds.

    Shawn

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • elic253
    elic253 over 1 year ago in reply to ShawnLogan

    Thanks Shawn. i have tried to quote the signal name directly and still the same error. i have read that both cds_srr and cds_innersrr has the same interface so i tired the next commands in order to see what i get: 

    struct_n = cds_innersrr(c.outfile, c.sweep_noise);

    struct_n = cds_srr(c.outfile, c.sweep_noise);

    the first one has returned the same error , the second attempt return a structure that i can debug , what do you think?

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 1 year ago in reply to elic253

    The cds_innersrr is not intended for public use - it's an internal function used by cds_srr() and that's the interface you're expected to use tSecondly the Spectre Toolbox shipped with the IC tools is primarily intended for use within the ADE MATLAB interface (i.e. using MATLAB expressions in ADE outputs) rather than for standalone use - it's been modified a little from the version shipped with the SPECTRE release stream (to allow for some of the other objects that you can query over from within ADE). I think it's OK to use either, but I've only ever used the IC version from within ADE (and you don't need to set MATLABPATH in that case). When using the Spectre version, I'd use:

    setenv MATLABPATH `cds_root spectre`/tools/spectre/matlab/64bit

    The use of cds_srr is that you can do:

    >> res='simulation/Diff_LNA_test/spectre/comp1db/psf'

    >> cds_srr(res)
    PSFversion: 1.00
    sweeppss_pss_td-sweep (td.pss).
    sweeppss_pss_fd-sweep (fd.pss).
    modelParameter-info (info).
    element-info (info).
    outputParameter-info (info).
    designParamVals-info (info).
    primitives-info.primitives (info.primitives).
    subckts-info.subckts (info.subckts).
    variables (design_variables).

    ans =

    9×1 cell array

    {'sweeppss_pss_td-sweep' }
    {'sweeppss_pss_fd-sweep' }
    {'modelParameter-info' }
    {'element-info' }
    {'outputParameter-info' }
    {'designParamVals-info' }
    {'primitives-info.primitives'}
    {'subckts-info.subckts' }
    {'variables' }

    i.e. it will print a summary of the databases available and then return them as an array. If you run with two arguments, the second argument is the name of the database:

    >> cds_srr(res,'sweeppss_pss_td-sweep')
    Total: 51 properties
    'PSFversion' 'PSF style' 'PSF types' 'PSF sweeps' 'PSF sweep points' 'PSF sweep min' 'PSF sweep max' 'PSF groups' 'PSF traces' 'PSF buffer size' 'PSF window size' 'PsfTrailerFileNumber' 'PsfTrailerStart' 'PsfEndTableFileNumber' 'simulator' 'version' 'date' 'design' 'analysis type' 'analysis name' 'analysis description' 'tolerance.relative' 'fundamental' 'load:r' 'load:num' 'load:units' 'rf:r' 'rf:num' 'rf:units' 'start' 'outputstart' 'stop' 'period' 'steadyratio' 'harms' 'step' 'maxstep' 'ic' 'skipdc' 'reltol' 'abstol(V)' 'abstol(I)' 'temp' 'tnom' 'tempeffects' 'errpreset' 'method' 'lteratio' 'relref' 'cmin' 'gmin'

    Total: 2 type(s) of signals
    Signal type: I Data type: Real
    'V1:p' 'V2:p' 'I8.L3.ls:1' 'I8.L4.ls:1' 'I8.L14.ls:1' 'I8.L17.ls:1' 'I8.L22.ls:1' 'I8.L23.ls:1'
    Signal type: V Data type: Real
    'gnd_rf!' 'inm' 'inp' 'net026' 'net028' 'net034' 'net035' 'outm' 'outp' 'RFin' 'RFout' 'vdd_rf!' 'I8.L3.n1' 'I8.L3.n2' 'I8.L3.n3' 'I8.L4.n1' 'I8.L4.n2' 'I8.L4.n3' 'I8.L14.n1' 'I8.L14.n2' 'I8.L14.n3' 'I8.L17.n1' 'I8.L17.n2' 'I8.L17.n3' 'I8.L22.n1' 'I8.L22.n2' 'I8.L22.n3' 'I8.L23.n1' 'I8.L23.n2' 'I8.L23.n3' 'I8.NM0.bi' 'I8.NM0.db' 'I8.NM0.di' 'I8.NM0.gi' 'I8.NM0.sb' 'I8.NM0.si' 'I8.NM1.bi' 'I8.NM1.db' 'I8.NM1.di' 'I8.NM1.gi' 'I8.NM1.sb' 'I8.NM1.si' 'I8.NM2.bi' 'I8.NM2.db' 'I8.NM2.di' 'I8.NM2.gi' 'I8.NM2.sb' 'I8.NM2.si' 'I8.NM3.bi' 'I8.NM3.db' 'I8.NM3.di' 'I8.NM3.gi' 'I8.NM3.sb' 'I8.NM3.si' 'I8.NM4.bi' 'I8.NM4.db' 'I8.NM4.di' 'I8.NM4.gi' 'I8.NM4.sb' 'I8.NM4.si' 'I8.NM6.bi' 'I8.NM6.db' 'I8.NM6.di' 'I8.NM6.gi' 'I8.NM6.sb' 'I8.NM6.si' 'I8.NM7.bi' 'I8.NM7.db' 'I8.NM7.di' 'I8.NM7.gi' 'I8.NM7.sb' 'I8.NM7.si' 'I8.NM9.bi' 'I8.NM9.db' 'I8.NM9.di' 'I8.NM9.gi' 'I8.NM9.sb' 'I8.NM9.si' 'I8.net2' 'I8.net7' 'I8.net17' 'I8.net20' 'I8.net032' 'I8.net033' 'I8.net034' 'I8.net036' 'I8.net046' 'I8.net055' 'I8.net070' 'I8.net073' 'I8.net076' 'I8.net079'


    ans =

    struct with fields:

    signal_info: {'prop' 'Unknown' 'I' 'Real' 'V' 'Real'}
    prop: {51×1 cell}
    I: {8×1 cell}
    V: {92×1 cell}

    then it tells you the available output signals in that result database. The result is a structure with each type - so you can do:

    >> ans.I

    ans =

    8×1 cell array

    {'V1:p' }
    {'V2:p' }
    {'I8.L3.ls:1' }
    {'I8.L4.ls:1' }
    {'I8.L14.ls:1'}
    {'I8.L17.ls:1'}
    {'I8.L22.ls:1'}
    {'I8.L23.ls:1'}

    or:

    >> ans.V

    ans =

    92×1 cell array

    {'gnd_rf!' }
    {'inm' }
    {'inp' }
    {'net026' }
    {'net028' }
    {'net034' }
    {'net035' }
    {'outm' }
    {'outp' }
    {'RFin' }
    {'RFout' }
    {'vdd_rf!' }
    {'I8.L3.n1' }
    {'I8.L3.n2' }
    ...

    Now I can retrieve a specific signal:

    >> rfout=cds_srr(res,'sweeppss_pss_td-sweep','RFout')

    rfout =

    struct with fields:

    info: {'V' 'V' 'time' 's' 'prf' ''}
    prf: [-30 -27.5000 -25 -22.5000 -20 -17.5000 -15 -12.5000 -10 -7.5000 -5]
    time: [161×11 double]
    V: [161×11 double]

    In this case, there's a sweep, so I can do:

    >> rfout.V

    ans =

    0.0090 0.0123 0.0171 0.0243 0.0352 0.0524 0.0805 0.1309 0.2201 0.3396 0.4700
    0.0081 0.0112 0.0156 0.0223 0.0326 0.0490 0.0760 0.1252 0.2125 0.3293 0.4580
    0.0056 0.0078 0.0112 0.0165 0.0249 0.0389 0.0626 0.1082 0.1896 0.2986 0.4219
    0.0015 0.0024 0.0040 0.0071 0.0122 0.0223 0.0407 0.0806 0.1521 0.2482 0.3621
    -0.0041 -0.0049 -0.0057 -0.0057 -0.0049 -0.0002 0.0111 0.0433 0.1012 0.1801 0.2811
    -0.0108 -0.0138 -0.0174 -0.0212 -0.0257 -0.0275 -0.0249 -0.0019 0.0395 0.0979 0.1840
    -0.0182 -0.0237 -0.0305 -0.0385 -0.0490 -0.0583 -0.0654 -0.0527 -0.0292 0.0059 0.0789
    -0.0260 -0.0340 -0.0442 -0.0567 -0.0735 -0.0906 -0.1081 -0.1063 -0.1004 -0.0908 -0.0264
    -0.0335 -0.0440 -0.0576 -0.0745 -0.0974 -0.1224 -0.1503 -0.1600 -0.1699 -0.1851 -0.1271
    ...

    and so on.

    In your example, it's not clear what c.sweep_noise or c.outfile are, or why you are trying to use cds_innersrr.

    Andrew

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • Andrew Beckett
    Andrew Beckett over 1 year ago in reply to elic253

    The cds_innersrr is not intended for public use - it's an internal function used by cds_srr() and that's the interface you're expected to use tSecondly the Spectre Toolbox shipped with the IC tools is primarily intended for use within the ADE MATLAB interface (i.e. using MATLAB expressions in ADE outputs) rather than for standalone use - it's been modified a little from the version shipped with the SPECTRE release stream (to allow for some of the other objects that you can query over from within ADE). I think it's OK to use either, but I've only ever used the IC version from within ADE (and you don't need to set MATLABPATH in that case). When using the Spectre version, I'd use:

    setenv MATLABPATH `cds_root spectre`/tools/spectre/matlab/64bit

    The use of cds_srr is that you can do:

    >> res='simulation/Diff_LNA_test/spectre/comp1db/psf'

    >> cds_srr(res)
    PSFversion: 1.00
    sweeppss_pss_td-sweep (td.pss).
    sweeppss_pss_fd-sweep (fd.pss).
    modelParameter-info (info).
    element-info (info).
    outputParameter-info (info).
    designParamVals-info (info).
    primitives-info.primitives (info.primitives).
    subckts-info.subckts (info.subckts).
    variables (design_variables).

    ans =

    9×1 cell array

    {'sweeppss_pss_td-sweep' }
    {'sweeppss_pss_fd-sweep' }
    {'modelParameter-info' }
    {'element-info' }
    {'outputParameter-info' }
    {'designParamVals-info' }
    {'primitives-info.primitives'}
    {'subckts-info.subckts' }
    {'variables' }

    i.e. it will print a summary of the databases available and then return them as an array. If you run with two arguments, the second argument is the name of the database:

    >> cds_srr(res,'sweeppss_pss_td-sweep')
    Total: 51 properties
    'PSFversion' 'PSF style' 'PSF types' 'PSF sweeps' 'PSF sweep points' 'PSF sweep min' 'PSF sweep max' 'PSF groups' 'PSF traces' 'PSF buffer size' 'PSF window size' 'PsfTrailerFileNumber' 'PsfTrailerStart' 'PsfEndTableFileNumber' 'simulator' 'version' 'date' 'design' 'analysis type' 'analysis name' 'analysis description' 'tolerance.relative' 'fundamental' 'load:r' 'load:num' 'load:units' 'rf:r' 'rf:num' 'rf:units' 'start' 'outputstart' 'stop' 'period' 'steadyratio' 'harms' 'step' 'maxstep' 'ic' 'skipdc' 'reltol' 'abstol(V)' 'abstol(I)' 'temp' 'tnom' 'tempeffects' 'errpreset' 'method' 'lteratio' 'relref' 'cmin' 'gmin'

    Total: 2 type(s) of signals
    Signal type: I Data type: Real
    'V1:p' 'V2:p' 'I8.L3.ls:1' 'I8.L4.ls:1' 'I8.L14.ls:1' 'I8.L17.ls:1' 'I8.L22.ls:1' 'I8.L23.ls:1'
    Signal type: V Data type: Real
    'gnd_rf!' 'inm' 'inp' 'net026' 'net028' 'net034' 'net035' 'outm' 'outp' 'RFin' 'RFout' 'vdd_rf!' 'I8.L3.n1' 'I8.L3.n2' 'I8.L3.n3' 'I8.L4.n1' 'I8.L4.n2' 'I8.L4.n3' 'I8.L14.n1' 'I8.L14.n2' 'I8.L14.n3' 'I8.L17.n1' 'I8.L17.n2' 'I8.L17.n3' 'I8.L22.n1' 'I8.L22.n2' 'I8.L22.n3' 'I8.L23.n1' 'I8.L23.n2' 'I8.L23.n3' 'I8.NM0.bi' 'I8.NM0.db' 'I8.NM0.di' 'I8.NM0.gi' 'I8.NM0.sb' 'I8.NM0.si' 'I8.NM1.bi' 'I8.NM1.db' 'I8.NM1.di' 'I8.NM1.gi' 'I8.NM1.sb' 'I8.NM1.si' 'I8.NM2.bi' 'I8.NM2.db' 'I8.NM2.di' 'I8.NM2.gi' 'I8.NM2.sb' 'I8.NM2.si' 'I8.NM3.bi' 'I8.NM3.db' 'I8.NM3.di' 'I8.NM3.gi' 'I8.NM3.sb' 'I8.NM3.si' 'I8.NM4.bi' 'I8.NM4.db' 'I8.NM4.di' 'I8.NM4.gi' 'I8.NM4.sb' 'I8.NM4.si' 'I8.NM6.bi' 'I8.NM6.db' 'I8.NM6.di' 'I8.NM6.gi' 'I8.NM6.sb' 'I8.NM6.si' 'I8.NM7.bi' 'I8.NM7.db' 'I8.NM7.di' 'I8.NM7.gi' 'I8.NM7.sb' 'I8.NM7.si' 'I8.NM9.bi' 'I8.NM9.db' 'I8.NM9.di' 'I8.NM9.gi' 'I8.NM9.sb' 'I8.NM9.si' 'I8.net2' 'I8.net7' 'I8.net17' 'I8.net20' 'I8.net032' 'I8.net033' 'I8.net034' 'I8.net036' 'I8.net046' 'I8.net055' 'I8.net070' 'I8.net073' 'I8.net076' 'I8.net079'


    ans =

    struct with fields:

    signal_info: {'prop' 'Unknown' 'I' 'Real' 'V' 'Real'}
    prop: {51×1 cell}
    I: {8×1 cell}
    V: {92×1 cell}

    then it tells you the available output signals in that result database. The result is a structure with each type - so you can do:

    >> ans.I

    ans =

    8×1 cell array

    {'V1:p' }
    {'V2:p' }
    {'I8.L3.ls:1' }
    {'I8.L4.ls:1' }
    {'I8.L14.ls:1'}
    {'I8.L17.ls:1'}
    {'I8.L22.ls:1'}
    {'I8.L23.ls:1'}

    or:

    >> ans.V

    ans =

    92×1 cell array

    {'gnd_rf!' }
    {'inm' }
    {'inp' }
    {'net026' }
    {'net028' }
    {'net034' }
    {'net035' }
    {'outm' }
    {'outp' }
    {'RFin' }
    {'RFout' }
    {'vdd_rf!' }
    {'I8.L3.n1' }
    {'I8.L3.n2' }
    ...

    Now I can retrieve a specific signal:

    >> rfout=cds_srr(res,'sweeppss_pss_td-sweep','RFout')

    rfout =

    struct with fields:

    info: {'V' 'V' 'time' 's' 'prf' ''}
    prf: [-30 -27.5000 -25 -22.5000 -20 -17.5000 -15 -12.5000 -10 -7.5000 -5]
    time: [161×11 double]
    V: [161×11 double]

    In this case, there's a sweep, so I can do:

    >> rfout.V

    ans =

    0.0090 0.0123 0.0171 0.0243 0.0352 0.0524 0.0805 0.1309 0.2201 0.3396 0.4700
    0.0081 0.0112 0.0156 0.0223 0.0326 0.0490 0.0760 0.1252 0.2125 0.3293 0.4580
    0.0056 0.0078 0.0112 0.0165 0.0249 0.0389 0.0626 0.1082 0.1896 0.2986 0.4219
    0.0015 0.0024 0.0040 0.0071 0.0122 0.0223 0.0407 0.0806 0.1521 0.2482 0.3621
    -0.0041 -0.0049 -0.0057 -0.0057 -0.0049 -0.0002 0.0111 0.0433 0.1012 0.1801 0.2811
    -0.0108 -0.0138 -0.0174 -0.0212 -0.0257 -0.0275 -0.0249 -0.0019 0.0395 0.0979 0.1840
    -0.0182 -0.0237 -0.0305 -0.0385 -0.0490 -0.0583 -0.0654 -0.0527 -0.0292 0.0059 0.0789
    -0.0260 -0.0340 -0.0442 -0.0567 -0.0735 -0.0906 -0.1081 -0.1063 -0.1004 -0.0908 -0.0264
    -0.0335 -0.0440 -0.0576 -0.0745 -0.0974 -0.1224 -0.1503 -0.1600 -0.1699 -0.1851 -0.1271
    ...

    and so on.

    In your example, it's not clear what c.sweep_noise or c.outfile are, or why you are trying to use cds_innersrr.

    Andrew

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Children
  • elic253
    elic253 over 1 year ago in reply to Andrew Beckett

    I changed to cds_srr and it all good now, thanks

    • 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