Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

Cadence Optimizer in ADE (G)XL

Status
Not open for further replies.

ashrafsazid

Advanced Member level 4
Joined
Sep 17, 2016
Messages
104
Helped
1
Reputation
2
Reaction score
2
Trophy points
18
Location
Germany
Activity points
935
Hi,

I have a confusion about "parameters" and "variables" in Cadence ADE GXL. There are some variables which must satisfy the spec during the run (as an example vdd of 1.8 with 10%, three sweep 1.6, 1.8, 2.0; or bias current variation). Apart from that, there are some parameters which will be fixed to a single best value after a sweep (say W, from 2u to 10u, and then based on the result I will choose the best W). Point to note, this chosen best W has to fulfill the spec for all the sweeps of variable vdd (1.6-1.8).

Now about the Cadence Optimizer, The optimizer finds out the best parameter from the sweep (in our case W) to fulfill all spec. There are several options for optimization when to stop simulation- default "All Spec Fulfilled". The problem is the simulator stops when it satisfies with the first value of vdd (here 1.6) and does not run for all sweep.


Can anybody please give me a hint how to run optimizer with all variable sweep for each parameter sweep before it stops for a particular best parameter fulfilling all spec?
 

This is the OceanXL script:



Code PHP (brief) - [expand]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
[FONT=Courier New];====================== Set to XL mode =========================================
ocnSetXLMode()
ocnxlProjectDir( "/home/simdir/$USER/$PRJ_ID/$PRJ_SEGMENT" )
ocnxlTargetCellView( "playground_tb" "diff_OTA_tb" "adexl_sc_amp" )
ocnxlResultsLocation( "" )
ocnxlSimResultsLocation( "" )
 
;====================== Tests setup ============================================
 
;---------- Test "playground_tb:diff_OTA_tb:1" ------------- 
ocnxlBeginTest("playground_tb:diff_OTA_tb:1")
simulator( 'spectre )
design( "playground_tb" "diff_OTA_tb" "schematic_sc_amp")
path( "/home/global_src/model" )
modelFile( 
    '("/home/dagtech/tsmc/tsmc_0.18/BCD/spice_model/T-018-CV-SP-018/rev1.6/T-018-CV-SP-018/models/c018bcd_gen2_v1d6_usage.scs" "tt_lib")
    '("/home/dagtech/tsmc/tsmc_0.18/BCD/spice_model/T-018-CV-SP-018/rev1.6/T-018-CV-SP-018/models/c018bcd_gen2_v1d6_usage.scs" "pre_simu")
)
definitionFile(
    "$PRJ_HOME/global_src/model/models.scs"
)
analysis('stb ?start "1"  ?stop "1G"  ?probe "/I20"  
        ?usingProbeMode t  ?prevoppoint "yes"  )
analysis('dc ?saveOppoint t  )
analysis('tran ?stop "159u"  ?errpreset "conservative"  )
desVar(   "c1" 1p   )
desVar(   "vdc" 100m    )
desVar(   "vs" 0    )
desVar(   "c_load" 1p   )
desVar(   "ibias" 6u    )
desVar(   "vd" 1.6  )
desVar(   "vcm" "vd/2"  )
desVar(   "cf" "2*c1"   )
envOption(
    'analysisOrder  list("dc" "tran" "stb" "ac" "pz" "dcmatch" "envlp" "lf" "noise" "xf" "sp" "pss" "pac" "pstb" "pnoise" "pxf" "psp" "qpss" "qpac" "qpnoise" "qpxf" "qpsp" "hb" "hbac" "hbnoise" "sens" "acmatch") 
)
option( 'temp  "55.0" 
)
save( 'i "/I48/vd" )
temp( 55.0 ) 
ocnxlOutputTerminal( "/I48/vd" ?save t)
ocnxlOutputExpr( "(vtime('tran "/out1") - vtime('tran "/out2"))" ?name "transient_output_wave" ?save t)
ocnxlOutputExpr( "average(clip(IT("/I48/vd") 0.00012 0.000159))" ?name "current_sc_avg" ?plot t ?save t)
ocnxlOutputExpr( "phaseDegUnwrapped(getData("loopGain" ?result "stb"))" ?name "Loop Gain Phase" ?save t)
ocnxlOutputExpr( "db(mag(getData("loopGain" ?result "stb")))" ?name "Loop Gain dB20" ?plot t ?save t)
ocnxlOutputExpr( "value((vtime('tran "/out1") - vtime('tran "/out2")) 0.0001545)" ?name "transient_output_settled" ?plot t ?save t)
ocnxlOutputExpr( "value(db(mag(getData("loopGain" ?result "stb"))) 100)" ?name "sc_loop_gain" ?plot t ?save t)
ocnxlOutputExpr( "(value(db(mag(getData("loopGain" ?result "stb"))) 100) + dB20(abs((VAR("c1") / VAR("cf")))))" ?name "sc_openloop_gain" ?plot t ?save t)
ocnxlOutputExpr( "getData("phaseMargin" ?result "stb_margin")" ?name "Phase Margin" ?plot t ?save t)
ocnxlOutputExpr( "IT("/I48/vd")" ?save t)
ocnxlEndTest() ; "playground_tb:diff_OTA_tb:1"
 
;====================== Specs ==================================================
ocnxlPutGreaterthanSpec( "playground_tb:diff_OTA_tb:1" "sc_ol_gain" "60" )
ocnxlPutLessthanSpec( "playground_tb:diff_OTA_tb:1" "current_tran_avg" "100u" )
ocnxlPutToleranceSpec( "playground_tb:diff_OTA_tb:1" "sc_cl_gain" "0.5" 'percent "1" )
ocnxlPutGreaterthanSpec( "playground_tb:diff_OTA_tb:1" "Phase Margin" "60" )
ocnxlPutGreaterthanSpec( "playground_tb:diff_OTA_tb:1" "sc_openloop_gain" "60" )
ocnxlPutLessthanSpec( "playground_tb:diff_OTA_tb:1" "current_sc_avg" "100u" )
ocnxlPutLessthanSpec( "playground_tb:diff_OTA_tb:1" "transient_output_settled" "60m" )
 
;====================== Sweeps setup ===========================================
ocnxlSweepVar("c_load" "1p")
ocnxlSweepVar("c1" "1p")
ocnxlSweepVar("cf" "2*c1")
ocnxlSweepVar("vd" "1.6, 1.8, 2")
ocnxlSweepVar("vcm" "vd/2")
ocnxlSweepVar("vdc" "-2.4, 0, 2.4")
ocnxlSweepVar("vin_tran" "0")
ocnxlSweepVar("vs" "0")
ocnxlSweepVar("ibias" "4u, 5u, 6u")
ocnxlSweepVar("temperature" "-40, 55, 150")
ocnxlSweepParam("playground_tb/diff_sc_otaGB/schematic/M27/l" "700n:100n:1u")
ocnxlSweepParam("playground_tb/diff_sc_otaGB/schematic/M27/simM" "2:2:10")
ocnxlSweepParam("playground_tb/diff_sc_otaGB/schematic/M27/w" "2u:1u:10u")
ocnxlSweepParam("playground_tb/diff_sc_otaGB/schematic/M28/l" "M27/l@playground_tb/diff_sc_otaGB/schematic")
ocnxlSweepParam("playground_tb/diff_sc_otaGB/schematic/M28/simM" "M27/simM@playground_tb/diff_sc_otaGB/schematic")
ocnxlSweepParam("playground_tb/diff_sc_otaGB/schematic/M28/w" "M27/w@playground_tb/diff_sc_otaGB/schematic")
 
;====================== Model Group setup ==========================================
 
;====================== Corners setup ==========================================
ocnxlCorner( "tt_pre"
   '(
      ("model" "/home/dagtech/tsmc/tsmc_0.18/BCD/spice_model/T-018-CV-SP-018/rev1.6/T-018-CV-SP-018/models/c018bcd_gen2_v1d6_usage.scs" ?section ""tt_lib"")
      ("model" "/home/dagtech/tsmc/tsmc_0.18/BCD/spice_model/T-018-CV-SP-018/rev1.6/T-018-CV-SP-018/models/c018bcd_gen2_v1d6_usage.scs" ?section ""pre_simu"")
      ("modelGroup" "")
   )
)
ocnxlCorner( "ss_pre"
   '(
      ("model" "/home/dagtech/tsmc/tsmc_0.18/BCD/spice_model/T-018-CV-SP-018/rev1.6/T-018-CV-SP-018/models/c018bcd_gen2_v1d6_usage.scs" ?section ""ss_lib"")
      ("model" "/home/dagtech/tsmc/tsmc_0.18/BCD/spice_model/T-018-CV-SP-018/rev1.6/T-018-CV-SP-018/models/c018bcd_gen2_v1d6_usage.scs" ?section ""pre_simu"")
      ("modelGroup" "")
   )
)
ocnxlCorner( "ff_pre"
   '(
      ("model" "/home/dagtech/tsmc/tsmc_0.18/BCD/spice_model/T-018-CV-SP-018/rev1.6/T-018-CV-SP-018/models/c018bcd_gen2_v1d6_usage.scs" ?section ""ff_lib"")
      ("model" "/home/dagtech/tsmc/tsmc_0.18/BCD/spice_model/T-018-CV-SP-018/rev1.6/T-018-CV-SP-018/models/c018bcd_gen2_v1d6_usage.scs" ?section ""pre_simu"")
      ("modelGroup" "")
   )
)
ocnxlCorner( "fs_pre"
   '(
      ("model" "/home/dagtech/tsmc/tsmc_0.18/BCD/spice_model/T-018-CV-SP-018/rev1.6/T-018-CV-SP-018/models/c018bcd_gen2_v1d6_usage.scs" ?section ""fs_lib"")
      ("model" "/home/dagtech/tsmc/tsmc_0.18/BCD/spice_model/T-018-CV-SP-018/rev1.6/T-018-CV-SP-018/models/c018bcd_gen2_v1d6_usage.scs" ?section ""pre_simu"")
      ("modelGroup" "")
   )
)
ocnxlCorner( "sf_pre"
   '(
      ("model" "/home/dagtech/tsmc/tsmc_0.18/BCD/spice_model/T-018-CV-SP-018/rev1.6/T-018-CV-SP-018/models/c018bcd_gen2_v1d6_usage.scs" ?section ""sf_lib"")
      ("model" "/home/dagtech/tsmc/tsmc_0.18/BCD/spice_model/T-018-CV-SP-018/rev1.6/T-018-CV-SP-018/models/c018bcd_gen2_v1d6_usage.scs" ?section ""pre_simu"")
      ("modelGroup" "")
   )
)
ocnxlCorner( "mc_pre"
   '(
      ("model" "/home/dagtech/tsmc/tsmc_0.18/BCD/spice_model/T-018-CV-SP-018/rev1.6/T-018-CV-SP-018/models/c018bcd_gen2_v1d6_usage.scs" ?section ""mc_lib"")
      ("model" "/home/dagtech/tsmc/tsmc_0.18/BCD/spice_model/T-018-CV-SP-018/rev1.6/T-018-CV-SP-018/models/c018bcd_gen2_v1d6_usage.scs" ?section ""pre_simu"")
      ("modelGroup" "")
   )
)
ocnxlCorner( "mismatch_pre"
   '(
      ("model" "/home/dagtech/tsmc/tsmc_0.18/BCD/spice_model/T-018-CV-SP-018/rev1.6/T-018-CV-SP-018/models/c018bcd_gen2_v1d6_usage.scs" ?section ""mismatch_lib"")
      ("model" "/home/dagtech/tsmc/tsmc_0.18/BCD/spice_model/T-018-CV-SP-018/rev1.6/T-018-CV-SP-018/models/c018bcd_gen2_v1d6_usage.scs" ?section ""pre_simu"")
      ("modelGroup" "")
   )
)
 
;====================== Test v/s corners setup =================================
 
;====================== Job setup ==============================================
ocnxlJobSetup( '(
    "blockemail" "1"
    "configuretimeout" "300"
    "distributionmethod" "Local"
    "lingertimeout" "300"
    "maxjobs" "4"
    "name" "ADE XL Default"
    "preemptivestart" "1"
    "reconfigureimmediately" "1"
    "runtimeout" "-1"
    "showerrorwhenretrying" "1"
    "showoutputlogerror" "0"
    "startmaxjobsimmed" "1"
    "starttimeout" "300"
    "usesameprocess" "1"
) )
 
;====================== Disabled items =========================================
ocnxlDisableCorner("mc_pre")
ocnxlDisableCorner("mismatch_pre")
 
;====================== Run Mode Options ======================================
ocnxlMonteCarloOptions( ?mcMethod "global" ?mcNumPoints "200" ?mcNumBins "" ?mcStopEarly "0" ?mcStopMethod "Significance Test" ?samplingMode "random" ?saveProcess "1" ?saveMismatch "1" ?useReference "0" ?donominal "0" ?saveAllPlots "0" ?monteCarloSeed "" ?mcStartingRunNumber "" ?dumpParamMode "yes" )
ocnxlLocalOptimizationOptions( ?effort "brentPowell" ?runFullEvaluation "1" ?meetAllGoals "0" ?startingstateorpoint "Reference Point" ?startingstatename "NONE" ?timeLimit "1" ?numPoints "" )
ocnxlGlobalOptimizationOptions( ?refPoint "1" ?startingstateorpoint "Reference Point" ?startingstatename "NONE" ?runFullEvaluation "1" ?meetAllGoals "1" ?timeLimit "" ?numPoints "" ?noImprvPoints "" ?pointsAfterAllSpecsSatisfied "" )
 
;====================== Starting Point Info ======================================
ocnxlStartingPoint( '(
      ("variable" "vd" "1.6")
      ("variable" "vdc" "2.4")
      ("variable" "ibias" "6u")
      ("variable" "temperature" "150")
      ("parameter" "playground_tb/diff_sc_otaGB/schematic/M27/l" "700n")
      ("parameter" "playground_tb/diff_sc_otaGB/schematic/M27/simM" "1")
      ("parameter" "playground_tb/diff_sc_otaGB/schematic/M27/w" "2u")
   )
)
 
;====================== Run command ============================================
ocnxlRun( ?mode 'sweepsAndCorners ?nominalCornerEnabled nil ?allCornersEnabled t ?allSweepsEnabled t)
ocnxlOutputSummary(?exprSummary t ?specSummary t ?detailed t ?wave t)
ocnxlOpenResults()
 
;====================== End XL Mode command ===================================
ocnxlEndXLMode()
[/FONT]

 

Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top