I'm not going to beat around the bush here. I could tell you about all the things that are new in ADE (Analog Design Environment) in IC 6.1.4. I could tell you about the fact that the individual subwindows are now resizeable, rearrangeable (is that a word?), undockable and tabbable (I know that's not a word, but it's fun to say) just like the assistants in the main Virtuoso window. I could tell you that the Parametric Analysis UI has been redesigned. I could also remind you to read my earlier post about all the new features added to ADE in previous IC 6.1 releases.
But I won't. Why? Because there is one new feature in ADE in IC 6.1.4 that tops all the others in terms of fulfilling widespread long-awaited user requests. Dependent expressions. Being able to use the name of one expression in others expressions based on it instead of having to repeat the entire definition of the first expression. No longer do you have to go cross-eyed trying to parse enormous paragraph-long expressions. Break them up into smaller, more sensible expressions and build from there. It's logical, it's intuitive and it's here today in IC 6.1.4.
There is a great video available here in the Cadence Online Support Video Library showing you how this works. I have a favorite example I use in demos. The original expression (which was created in IC 6.1.3) looks like:
((1 - (average((VT("/OUTM") - VT("/INM"))) / ((value((VT("/OUTM") - VT("/INM")) 4.3e-09) + value((VT("/OUTM") - VT("/INM")) 1.23e-08) + value((VT("/OUTM") - VT("/INM")) 2.03e-08) + value((VT("/OUTM") - VT("/INM")) 2.83e-08) + value((VT("/OUTM") - VT("/INM")) 3.63e-08) + value((VT("/OUTM") - VT("/INM")) 4.43e-08)) / 6))) * 100)
Egads! That 33 sets of parentheses (hopefully in the right places), and 7 repetitions of the expression (VT("/OUTM") - VT("/INM")). Not to mention I'm also interested in the values of several of the subexpressions individually (so those will have to be repeated again on their own).
So now in IC 6.1.4 that above expression can be created as:
((1 - (GainDiffAvg / GainDiffErr6Avg)) * 100)
GainDiffAvg = average(GainDiff)
GainDiff = (VT("/OUTM") - VT("/INM"))
GainDiffErr6Avg = ((GainDiff_4p3 + GainDiff_12p3 + GainDiff_20p3 + GainDiff_28p3 + GainDiff_36p3 + GainDiff_44p3) / 6)
GainDiff_4p3 = value(GainDiff 4.3e-09), etc.
Granted, it's still pretty involved, but by breaking up the expression into more manageable bits, it's a whole lot easier to see what's going on (and to make sure you've got it right).
Expressions can be added in any order and can be based on any number of other expressions. No cyclic dependencies, please.
Hopefully, this improvement will help make it a bit easier to create the measurements your really interested in.