David, Before I answer that, I need to ask some questions: Is this an OCEAN XL script - i.e. is it running multiple simulations with measurements that are being taken after each simulation (as you'd do in ADE XL/Explorer/Assembler)? If you don't want to save any results, how do you know the simulation was successful? Regards, Andrew.
↧
Forum Post: RE: long time ocean simulation w/o saving any waveform database
↧
Forum Post: RE: straight line (best) fit using viva calculator
Yes I want a line between first and last points, so that I can find the deviation from this fitted straight line.
↧
↧
Forum Post: RE: straight line (best) fit using viva calculator
I wouldn't call it a fitted line, but here's the code nevertheless. Was quite easy to throw together (it does bear some similarities with abBestFit, but it's considerably simpler as it doesn't need to do any linear regression). /* abFirstLastLine.il Author A.D.Beckett Group Custom IC (UK), Cadence Design Systems Ltd. Language SKILL Date May 16, 2018 Modified By Construct a line between first and last points in waveform. Not a best fit - just a simple line consisting of just the first and last points. Includes function template so this can be added to the calculator with the "fx" button in the calculator function panel. *************************************************** SCCS Info: @(#) abFirstLastLine.il 05/16/18.22:55:10 1.1 */ /********************************************************************* * * * (abFirstLastLine wave) * * * * Output a waveform which just contains the first and last points of * * the input waveform. * * * *********************************************************************/ ( defun abFirstLastLine (wave) ( cond (( drIsWaveform wave) ( let (xVec yVec newXVec newYVec len newWave) ( setq xVec ( drGetWaveformXVec wave)) ( setq yVec ( drGetWaveformYVec wave)) ( setq len ( drVectorLength xVec)) ( setq newXVec ( drCreateVec 'double 2)) ( setq newYVec ( drCreateVec 'double 2)) ( drAddElem newXVec ( drGetElem xVec 0)) ( drAddElem newXVec ( drGetElem xVec ( sub1 len))) ( drAddElem newYVec ( drGetElem yVec 0)) ( drAddElem newYVec ( drGetElem yVec ( sub1 len))) ;----------------------------------------------------------------- ; Sort out attributes for new waveform to match input ;----------------------------------------------------------------- ( putpropq newXVec ( getq xVec units) units) ( putpropq newXVec ( getq xVec name) name) ( putpropq newYVec ( getq yVec units) units) ( putpropq newYVec ( getq yVec name) name) ( setq newWave ( drCreateWaveform newXVec newYVec)) (famSetExpr newWave `(abFirstLastLine ,(famGetExpr wave))) newWave ) ) ((famIsFamily wave) (famMap 'abFirstLastLine wave) ) (t ( error "abFirstLastLine: cannot handle %L\n" wave) ) ) ) ; ;;;;;;;;;;;;;;;;;;;;;;;;;; GUI builder information ;;;;;;;;;;;;;;;;;;;;;;;;;;; ocnmRegGUIBuilder( '( nil function abFirstLastLine name abFirstLastLine description "Create line between first and last points" category ( "Custom Functions" ) analysis ( nil general ( nil args (wave ) signals ( nil wave ( nil prompt "Waveform" tooltip "Waveform" ) ) params( nil ) inputrange t ) ) outputs(result) ) )
↧
Forum Post: RE: long time ocean simulation w/o saving any waveform database
hi Andrew, this is a valid question. just single step sim yet. our testbench is constructed so that we know the expected output from given input set and self-checked. the lengthy regression is to check if there's any failing point after long random input. if we do see some failing point, we'll print when/what code so that we can just reproduce for that specific case instead the full blown one. so you can see for the lengthy case, I don't have to keep any dump (or later I'll selectively dump a few for FFT or any other post-processing). I see I can use save() and saveOption() to save a few things. but if I'm not using these command, it seems to dump good size intermediate files (if not necessary waveform) which I'm trying to avoid as I don't want to come back next day and see it crashed because of disk space full after just a couple hours run. thanks, David
↧
Forum Post: RE: Unable to map design without a suitable latch. [MAP-3] [synthesize]
Hey There. I found your blog using msn. This is a very well written article. I’ll be sure to bookmark it and come back to read more of your useful info. Thanks for the post. I’ll definitely return. Food
↧
↧
Forum Post: How to plot frequency characteristic of capacitance?
Hi. all. I'd like to plot frequency characteristic of capacitance in spectre. In AC simulation, I get current of capacitor (Ic) and its imaginary part ( Im(Ic) ). Now tring to calculate Cap = Im(Ic) / omega (omega=2*pi*freq) I can't find how to devide Im(Ic) by freq or omega. I find 'xval' can plot simulation frequency, but dividing doesn't work. Could you help, please? Best Regards Kawai
↧
Forum Post: spectre oceaneval funtion documentation
The oceaneval capability in spectre seems to be very poorly documented. It is mentioned indirectly in a couple places in the manual, but that's all I can find. I would like to know if it is possible to declare and make use of intermediate variables when constructing these expressions, like one can do in OCEAN. For example, vclip = clip(vtime('tran "VOUT") 3n 4n) vmax = ymax(vclip) Is there a way to do something like this with oceaneval? Thanks in advance!
↧
Forum Post: RE: Updating Footprint on an existing BRD file
Please avoid off-topic questions. This Forum is not meant for this kind of question. Thanks,
↧
Forum Post: RE: pass variable value to procedure name
Hi Andrew, Thanks a lot again, sprintf(nil "metConvert('%L)" metList) is worked for me. Regards, Basavaraj Tambur
↧
↧
Forum Post: RE: long time ocean simulation w/o saving any waveform database
Hi David, If you don't use save() or saveOption(), the default in spectre is save=selected. What that means is that if no signals are "selected" to be saved (i.e. with a spectre save statement, corresponding to the save() function in OCEAN), then all voltages (or at least all "public" or normally useful voltages; i.e. not those which are internal nodes within devices) are saved. As soon as you save() some signals, only those signals are saved. This is done because if you don't ask to save something specific, the default assumption is that you want to look at something, and better to save all node voltages. There is a save option in spectre save=nooutput which doesn't output any result database at all, but this isn't available from OCEAN (without an include file containing the option statement in spectre syntax). The closest is saveOption('save "none") which saves a single (random) signal ("none" is a bit of a misnomer, but it's related to how the output code is structured in spectre, where the act of opening the database requires something to be saved). Hopefully that gives you some choices. Of course, you could use system("rm...") to remove the psf dir once your simulations have finished and you've read any results you need. OCEAN XL (like ADE XL, via the Options->Save form) has an option not to keep the simulation results, which is useful if you're doing lots of simulation. Regards, Andrew.
↧
Forum Post: RE: How to plot frequency characteristic of capacitance?
Hi Kawai, I don't see why: imag(i("/C1/PLUS"))/(2*3.1415926535*xval(v("/something"))) (or similar) doesn't work. If you can plot xval then you should be able to divide by it (unless you have 0 in the frequency range?) Perhaps you can give the actual expression and the error message. Andrew.
↧
Forum Post: RE: spectre oceaneval funtion documentation
What are you using it for (I assume the export statement, but is this for Monte Carlo, or for normal spectre)? Which version are you using? The export statement is deprecated in spectre and the help has now been removed. Current flows do not use it, so I'm wondering why you're using it and what you're using it for? Regards, Andrew.
↧
Forum Post: RE: Hierarchical Design using characterized blocks timing issues
Thank you for your answer. I have balance the clock tree inside the blocks and used the blackbox model (.lib) that does include, to my understanding, the timing information of the block. Since it is natural to see that kind of violations in the flat timing, what is the process that you follow in order to fix this kind of violations?
↧
↧
Forum Post: RE: PCB Editor Immediately AutoSaving and Closing When Opening Design
I think this needs to be reported to Cadence support ( http://suppport.cadence.com) or the channel partner who you bought the software from. The defaults have been checked and its still happening. You might reference this forum post to show the things you have tried. If you do get a resolution please post the answer here.
↧
Forum Post: RE: Automatically generating pins from nets problem
Thanks Andrew, I really appreciate the effort you have taken! I will try to implement it with the enterPoint function like you have suggested. Kind regards, Nicolas
↧
Forum Post: Allegro Physical Viewer Crashed During Review
Hello, Allegro Physical Viewer has been crashed multiple times when I am moving my cursor to visibility tab. I have installed the latest version of the allegro physical viewer.
↧
Forum Post: RE: Ignore the lower or uppercase in regular expression.
Andrew, Thank you for your help. I can use this function -- pcreMatchp("(^HT|^HEIGHT|^HGT|MAX[ ]+HT)" text pcreGenCompileOptBits(?caseLess t)) to satisfy my request now. I will learn the usage of Regular Expression refer to your sugestion. Thanks again. Regards, Jason
↧
↧
Forum Post: RE: detecting process corner from within verilogA model
Actually, even with AMS, I get the correct behaviour and the value from device models is used in verilog-A. When Spectre sees the same parameter again in model files, here's the warning saying that the previous definition will be ignored: WARNING (SFE-2297): "include_corner.scs" 3: Parameter `cornerval' is already defined in the same block, previous definition is ignored. How are you verifying whether the value from models is used or not? Can you add a $display in the verilogA model to print the value of 'corner' and check what gets printed in irun.log?
↧
Forum Post: performance: constraints list of lists
Hi, I'm trying to get the best performance from constrained a list of list of mvl (data_l) to a list of list of bit (data) ; pseudocode: data[i][j] = ((data_l[i][j] == MVL_1 ) ? 1:0) Simulator used Xcelium. Currently the code looks like this struct if4_bit_list_s { l: list of bit; }; struct if4_bus_type_s { l: list of mvl; keep for each (d) in l { soft d in [MVL_0, MVL_1]; }; }; ............. data_l: list of if4_bus_type_s; keep for each (d) in data_l { for each in d.l {soft it in [MVL_0, MVL_1];}; }; data: list of if4_bit_list_s; ............ keep gen (data_l) before (data); --0 keep data_l.size() == data.size(); --1 keep for each (d) using index (idx) in data_l { data_l[idx].l.size() == data[idx].l.size(); }; keep for each (d) using index (idx) in data_l { for each in d.l { --2 it == MVL_1 => data[idx].l[index] == 1; --3 it != MVL_1 => data[idx].l[index] == 0; --4 }; --5 }; Replacing the second "for each" block (2:5) with data[idx].l == read_only(mvl_to_bits(d.l , {MVL_1}).copy()) ; results in constrain failure to lists size (1 is failing) . As far I can see on debugger the data_l is not fully generated (value inside data_l are not constrain to MVL_0 or MVL_1 yet) when size constraint between data and data_l (1) come into play although data_l should be generated first (0). Replacing the (3) and (4) with data[idx].l[index] == (it == MVL_1).as_a(bit); results in less cpu time consumption (self / self+) : from (3.5 / 14.01) to (3.13 / 9.38) ; Is there a way to write the generation of data from data_l better/optimal (maybe get rid of second "for each" somehow )?
↧
Forum Post: RE: spectre oceaneval funtion documentation
Andrew, I'm running Monte Carlo yes. The Spectre version is Version 16.1.0.567.isr12 64bit -- 12 Dec 2017 which is quite up-to-date. The manual for this version still includes references to oceaneval, mostly in the montecarlo statement section. It doesn't mention it being deprecated. I'm using it for the use shown in the manual, which is to save measurements to a .dat file when running montecarlo. If this method is deprecated, what is the official replacement method?
↧