Ocean Script for differential amplifier

Status
Not open for further replies.

Narakiran

Junior Member level 2
Joined
Jun 20, 2017
Messages
21
Helped
0
Reputation
0
Reaction score
0
Trophy points
1
Activity points
161
Hi,
I'm writing Ocean Script for Differential amplifier(single ended).
I have to give 3-variables point (I,W,L) as input.
Suppose my points are (150u, 0.5u, 10u), (155u, 0.8u, 15u), (170u, 0.9, 17u), (180u, 1u, 22u )
can anyone help how i should give 4 different points as inputs?

My Ocean Code for which i have to give different inputs.
--------------------------------------------------------------------------


Code dot - [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
prt=outfile("/home/15vl21f/current_bias.csv" "w")
simulator( 'spectre )
design(  "/home/15vl21f/simulation/Current_bias/spectre/schematic/netlist/netlist")
resultsDir( "/home/15vl21f/simulation/Current_bias/spectre/schematic" )
openResults( "/home/15vl21f/simulation/Current_bias/spectre/schematic" )
 
modelFile( 
    '("/opt/cad/cad/FOUNDRY/analog/180nm/models/spectre/gpdk.scs" "stat")
)
analysis('dc ?saveOppoint t  )
analysis('ac ?start "10"  ?stop "100G"  )
 
fprintf(prt "I, W, L, Gain, Bandwidth, overdrive, tail_current\n")
 
 
desVar(   "I"   )
desVar(  "W"    )
desVar(   "L"       )
envOption(
    'analysisOrder  list("dc" "ac") 
)
temp( 27 ) 
run()
 
reg_0=pv("NM0" "region" ?result "dcOpInfo")
reg_1=pv("NM2" "region" ?result "dcOpInfo")
reg_2=pv("PM0" "region" ?result "dcOpInfo")
 
when(((reg_0==2) && (reg_1==2) && (reg_2==2))
 
x = ymax(db20(VF("/vout")))
y = bandwidth(VF("/vout") 3 "low")
vth = pv("NM0" "vth" ?result "dcOpInfo")
vgs = pv("NM0" "vgs" ?result "dcOpInfo")
overdrive = vgs - vth
tail_current = 2 * pv("NM0" "id" ?result "dcOpInfo")
 
Gain = x
Bandwidth = y
fprintf(prt "%d, %f m, %f m,%f dB, %f Hz, %f V, %f A\n", I, W, L,  x, y, overdrive, tail_current)
 
)
)
)
)
close(prt);

 
Last edited by a moderator:

No.
I have to different input and those are not step values. So parametric analysis won't work here.
Hope you got my point.
Any other suggestions.
 

Surely understand parametric analysis.
It supports lists not step.
This corresponds to "paramset" ability of Cadence Spectre.

See "Spectre -h paramset".
This is equivalent ability of ".data" in Synopsys HSPICE.
 
Last edited:

Thank you.
I tried it but i'm getting error.

The code which i executed is below.
-----------------------------------------------

Please check it once and give suggestions.
Thank you.
 

Hi,

I tried it but i'm getting error.
I doubt that it just says "error".
Usually there is an error description. This description is useful to locate and correct the error.
Therefore it is essential to tell us the complete error description.

Klaus
 

I'm getting error as follows
-----------------------------------------

*Error* db20: can't handle db20(nil)


*Error* _ymaxMethod: can't handle _ymaxMethod(nil)


*Error* _bandwidthMethod: can't handle _bandwidthMethod(nil 3 "low" nil)


*Error* eval: unbound variable - I
*Error* load: error while loading file - "param.ocn" at line 24

- - - Updated - - -

Hi,


I doubt that it just says "error".
Usually there is an error description. This description is useful to locate and correct the error.
Therefore it is essential to tell us the complete error description.

Klaus

ERROR (SFE-1997): "input.scs" 14: NM3: parameter `w': The parameter `W' is
used but not set.

ERROR (SFE-1997): "input.scs" 14: NM3: parameter `l': The parameter `L' is
used but not set.

ERROR (SFE-1997): "input.scs" 14: NM3: parameter `as': The parameter `W' is
used but not set.

ERROR (SFE-1997): "input.scs" 14: NM3: parameter `ad': The parameter `W' is
used but not set.

ERROR (SFE-1997): "input.scs" 14: NM3: parameter `ps': The parameter `W' is
used but not set.

ERROR (SFE-1997): "input.scs" 14: NM3: parameter `pd': The parameter `W' is
used but not set.

ERROR (SFE-1997): "input.scs" 19: NM2: parameter `w': The parameter `W' is
used but not set.

ERROR (SFE-1997): "input.scs" 19: NM2: parameter `l': The parameter `L' is
used but not set.

ERROR (SFE-1997): "input.scs" 19: NM2: parameter `as': The parameter `W' is
used but not set.

ERROR (SFE-1997): "input.scs" 19: NM2: parameter `ad': The parameter `W' is
used but not set.

ERROR (SFE-1997): "input.scs" 19: NM2: parameter `ps': The parameter `W' is
used but not set.

ERROR (SFE-1997): "input.scs" 19: NM2: parameter `pd': The parameter `W' is
used but not set.

ERROR (SFE-1997): "input.scs" 24: NM0: parameter `w': The parameter `W' is
used but not set.

ERROR (SFE-1997): "input.scs" 24: NM0: parameter `l': The parameter `L' is
used but not set.

ERROR (SFE-1997): "input.scs" 24: NM0: parameter `as': The parameter `W' is
used but not set.

ERROR (SFE-1997): "input.scs" 24: NM0: parameter `ad': The parameter `W' is
used but not set.

ERROR (SFE-1997): "input.scs" 24: NM0: parameter `ps': The parameter `W' is
used but not set.

ERROR (SFE-1997): "input.scs" 24: NM0: parameter `pd': The parameter `W' is
used but not set.

ERROR (SFE-1997): "input.scs" 29: NM1: parameter `w': The parameter `W' is
used but not set.

ERROR (SFE-1997): "input.scs" 29: NM1: parameter `l': The parameter `L' is
used but not set.

ERROR (SFE-1997): "input.scs" 29: NM1: parameter `as': The parameter `W' is
used but not set.

ERROR (SFE-1997): "input.scs" 29: NM1: parameter `ad': The parameter `W' is
used but not set.

ERROR (SFE-1997): "input.scs" 29: NM1: parameter `ps': The parameter `W' is
used but not set.

ERROR (SFE-1997): "input.scs" 29: NM1: parameter `pd': The parameter `W' is
used but not set.

ERROR (SFE-1997): "input.scs" 34: PM0: parameter `w': The parameter `W' is
used but not set.

ERROR (SFE-1997): "input.scs" 34: PM0: parameter `l': The parameter `L' is
used but not set.

ERROR (SFE-1997): "input.scs" 34: PM0: parameter `as': The parameter `W' is
used but not set.

ERROR (SFE-1997): "input.scs" 34: PM0: parameter `ad': The parameter `W' is
used but not set.

ERROR (SFE-1997): "input.scs" 34: PM0: parameter `ps': The parameter `W' is
used but not set.

ERROR (SFE-1997): "input.scs" 34: PM0: parameter `pd': The parameter `W' is
used but not set.

ERROR (SFE-1997): "input.scs" 39: PM1: parameter `w': The parameter `W' is
used but not set.

ERROR (SFE-1997): "input.scs" 39: PM1: parameter `l': The parameter `L' is
used but not set.

ERROR (SFE-1997): "input.scs" 39: PM1: parameter `as': The parameter `W' is
used but not set.

ERROR (SFE-1997): "input.scs" 39: PM1: parameter `ad': The parameter `W' is
used but not set.

ERROR (SFE-1997): "input.scs" 39: PM1: parameter `ps': The parameter `W' is
used but not set.

ERROR (SFE-1997): "input.scs" 39: PM1: parameter `pd': The parameter `W' is
used but not set.

ERROR (SFE-1997): "input.scs" 46: I5: parameter `dc': The parameter `I' is
used but not set.
 

Simply you don't define W, L, I in both Skill and Spectre.
Can you understand a function of "desVar()" surely ?

Show me Cadence Spectre Netlist generated by your OCEAN Script.
 

Code:
// Library name: Kiran_OTA
// Cell name: diff_amp
// View name: schematic
NM3 (net5 net5 0 0) nmos1 w=((W) / (1)) l=L as=(((W) / (1)) < 599.5n) ? (((((200n > (((400n) - 200n) + 400n)) ? 200n : (((400n) - 200n) + 400n)) * 600n) + (((W) / (1)) * 200n)) + (floor(((1) - 1) / 2.0) * (((((400n) - 200n) + 400n) * 600n) + (((W) / (1)) * 400n))) + ((((1) / 2) - floor((1) / 2) == 0) ? ((((200n > (((400n) - 200n) + 400n)) ? 200n : (((400n) - 200n) + 400n)) * 600n) + (((W) / (1)) * 200n)) : 0)) / 1 : ((((400n > (((400n) - 200n) + 400n)) ? 400n : (((400n) - 200n) + 400n)) * ((W) / (1))) + (floor(((1) - 1) / 2.0) * ((((400n) - 200n) + 400n) * ((W) / (1)))) + ((((1) / 2) - floor((1) / 2) == 0) ? (((400n > (((400n) - 200n) + 400n)) ? 400n : (((400n) - 200n) + 400n)) * ((W) / (1))) : 0)) / 1 \
         ad=(((W) / (1)) < 599.5n) ? ((floor((1) / 2.0) * (((((400n) - 200n) + 400n) * 600n) + (((W) / (1)) * 400n))) + ((((1) / 2) - floor((1) / 2) != 0) ? ((((200n > (((400n) - 200n) + 400n)) ? 200n : (((400n) - 200n) + 400n)) * 600n) + (((W) / (1)) * 200n)) : 0)) / 1 : ((floor((1) / 2.0) * ((((400n) - 200n) + 400n) * ((W) / (1)))) + ((((1) / 2) - floor((1) / 2) != 0) ? (((400n > (((400n) - 200n) + 400n)) ? 400n : (((400n) - 200n) + 400n)) * ((W) / (1))) : 0)) / 1 \
         ps=(((W) / (1)) < 599.5n) ? (((2 * ((200n > (((400n) - 200n) + 400n)) ? 200n : (((400n) - 200n) + 400n))) + 1.6u) + (floor(((1) - 1) / 2.0) * ((2 * (((400n) - 200n) + 400n)) + 2u)) + ((((1) / 2) - floor((1) / 2) == 0) ? ((2 * ((200n > (((400n) - 200n) + 400n)) ? 200n : (((400n) - 200n) + 400n))) + 1.6u) : 0)) / 1 : (((2 * ((400n > (((400n) - 200n) + 400n)) ? 400n : (((400n) - 200n) + 400n))) + (2 * ((W) / (1)))) + (floor(((1) - 1) / 2.0) * ((2 * (((400n) - 200n) + 400n)) + (2 * ((W) / (1))))) + ((((1) / 2) - floor((1) / 2) == 0) ? ((2 * ((400n > (((400n) - 200n) + 400n)) ? 400n : (((400n) - 200n) + 400n))) + (2 * ((W) / (1)))) : 0)) / 1 \
         pd=(((W) / (1)) < 599.5n) ? ((floor((1) / 2.0) * ((2 * (((400n) - 200n) + 400n)) + 2u)) + ((((1) / 2) - floor((1) / 2) != 0) ? ((2 * ((200n > (((400n) - 200n) + 400n)) ? 200n : (((400n) - 200n) + 400n))) + 1.6u) : 0)) / 1 : ((floor((1) / 2.0) * ((2 * (((400n) - 200n) + 400n)) + (2 * ((W) / (1))))) + ((((1) / 2) - floor((1) / 2) != 0) ? ((2 * ((400n > (((400n) - 200n) + 400n)) ? 400n : (((400n) - 200n) + 400n))) + (2 * ((W) / (1)))) : 0)) / 1 \
         m=(1)*(1)
NM2 (net11 net5 0 0) nmos1 w=((2*W) / (1)) l=L as=(((2*W) / (1)) < 599.5n) ? (((((200n > (((400n) - 200n) + 400n)) ? 200n : (((400n) - 200n) + 400n)) * 600n) + (((2*W) / (1)) * 200n)) + (floor(((1) - 1) / 2.0) * (((((400n) - 200n) + 400n) * 600n) + (((2*W) / (1)) * 400n))) + ((((1) / 2) - floor((1) / 2) == 0) ? ((((200n > (((400n) - 200n) + 400n)) ? 200n : (((400n) - 200n) + 400n)) * 600n) + (((2*W) / (1)) * 200n)) : 0)) / 1 : ((((400n > (((400n) - 200n) + 400n)) ? 400n : (((400n) - 200n) + 400n)) * ((2*W) / (1))) + (floor(((1) - 1) / 2.0) * ((((400n) - 200n) + 400n) * ((2*W) / (1)))) + ((((1) / 2) - floor((1) / 2) == 0) ? (((400n > (((400n) - 200n) + 400n)) ? 400n : (((400n) - 200n) + 400n)) * ((2*W) / (1))) : 0)) / 1 \
         ad=(((2*W) / (1)) < 599.5n) ? ((floor((1) / 2.0) * (((((400n) - 200n) + 400n) * 600n) + (((2*W) / (1)) * 400n))) + ((((1) / 2) - floor((1) / 2) != 0) ? ((((200n > (((400n) - 200n) + 400n)) ? 200n : (((400n) - 200n) + 400n)) * 600n) + (((2*W) / (1)) * 200n)) : 0)) / 1 : ((floor((1) / 2.0) * ((((400n) - 200n) + 400n) * ((2*W) / (1)))) + ((((1) / 2) - floor((1) / 2) != 0) ? (((400n > (((400n) - 200n) + 400n)) ? 400n : (((400n) - 200n) + 400n)) * ((2*W) / (1))) : 0)) / 1 \
         ps=(((2*W) / (1)) < 599.5n) ? (((2 * ((200n > (((400n) - 200n) + 400n)) ? 200n : (((400n) - 200n) + 400n))) + 1.6u) + (floor(((1) - 1) / 2.0) * ((2 * (((400n) - 200n) + 400n)) + 2u)) + ((((1) / 2) - floor((1) / 2) == 0) ? ((2 * ((200n > (((400n) - 200n) + 400n)) ? 200n : (((400n) - 200n) + 400n))) + 1.6u) : 0)) / 1 : (((2 * ((400n > (((400n) - 200n) + 400n)) ? 400n : (((400n) - 200n) + 400n))) + (2 * ((2*W) / (1)))) + (floor(((1) - 1) / 2.0) * ((2 * (((400n) - 200n) + 400n)) + (2 * ((2*W) / (1))))) + ((((1) / 2) - floor((1) / 2) == 0) ? ((2 * ((400n > (((400n) - 200n) + 400n)) ? 400n : (((400n) - 200n) + 400n))) + (2 * ((2*W) / (1)))) : 0)) / 1 \
         pd=(((2*W) / (1)) < 599.5n) ? ((floor((1) / 2.0) * ((2 * (((400n) - 200n) + 400n)) + 2u)) + ((((1) / 2) - floor((1) / 2) != 0) ? ((2 * ((200n > (((400n) - 200n) + 400n)) ? 200n : (((400n) - 200n) + 400n))) + 1.6u) : 0)) / 1 : ((floor((1) / 2.0) * ((2 * (((400n) - 200n) + 400n)) + (2 * ((2*W) / (1))))) + ((((1) / 2) - floor((1) / 2) != 0) ? ((2 * ((400n > (((400n) - 200n) + 400n)) ? 400n : (((400n) - 200n) + 400n))) + (2 * ((2*W) / (1)))) : 0)) / 1 \
         m=(1)*(1)
NM0 (net12 vip net11 0) nmos1 w=((W) / (1)) l=L as=(((W) / (1)) < 599.5n) ? (((((200n > (((400n) - 200n) + 400n)) ? 200n : (((400n) - 200n) + 400n)) * 600n) + (((W) / (1)) * 200n)) + (floor(((1) - 1) / 2.0) * (((((400n) - 200n) + 400n) * 600n) + (((W) / (1)) * 400n))) + ((((1) / 2) - floor((1) / 2) == 0) ? ((((200n > (((400n) - 200n) + 400n)) ? 200n : (((400n) - 200n) + 400n)) * 600n) + (((W) / (1)) * 200n)) : 0)) / 1 : ((((400n > (((400n) - 200n) + 400n)) ? 400n : (((400n) - 200n) + 400n)) * ((W) / (1))) + (floor(((1) - 1) / 2.0) * ((((400n) - 200n) + 400n) * ((W) / (1)))) + ((((1) / 2) - floor((1) / 2) == 0) ? (((400n > (((400n) - 200n) + 400n)) ? 400n : (((400n) - 200n) + 400n)) * ((W) / (1))) : 0)) / 1 \
         ad=(((W) / (1)) < 599.5n) ? ((floor((1) / 2.0) * (((((400n) - 200n) + 400n) * 600n) + (((W) / (1)) * 400n))) + ((((1) / 2) - floor((1) / 2) != 0) ? ((((200n > (((400n) - 200n) + 400n)) ? 200n : (((400n) - 200n) + 400n)) * 600n) + (((W) / (1)) * 200n)) : 0)) / 1 : ((floor((1) / 2.0) * ((((400n) - 200n) + 400n) * ((W) / (1)))) + ((((1) / 2) - floor((1) / 2) != 0) ? (((400n > (((400n) - 200n) + 400n)) ? 400n : (((400n) - 200n) + 400n)) * ((W) / (1))) : 0)) / 1 \
         ps=(((W) / (1)) < 599.5n) ? (((2 * ((200n > (((400n) - 200n) + 400n)) ? 200n : (((400n) - 200n) + 400n))) + 1.6u) + (floor(((1) - 1) / 2.0) * ((2 * (((400n) - 200n) + 400n)) + 2u)) + ((((1) / 2) - floor((1) / 2) == 0) ? ((2 * ((200n > (((400n) - 200n) + 400n)) ? 200n : (((400n) - 200n) + 400n))) + 1.6u) : 0)) / 1 : (((2 * ((400n > (((400n) - 200n) + 400n)) ? 400n : (((400n) - 200n) + 400n))) + (2 * ((W) / (1)))) + (floor(((1) - 1) / 2.0) * ((2 * (((400n) - 200n) + 400n)) + (2 * ((W) / (1))))) + ((((1) / 2) - floor((1) / 2) == 0) ? ((2 * ((400n > (((400n) - 200n) + 400n)) ? 400n : (((400n) - 200n) + 400n))) + (2 * ((W) / (1)))) : 0)) / 1 \
         pd=(((W) / (1)) < 599.5n) ? ((floor((1) / 2.0) * ((2 * (((400n) - 200n) + 400n)) + 2u)) + ((((1) / 2) - floor((1) / 2) != 0) ? ((2 * ((200n > (((400n) - 200n) + 400n)) ? 200n : (((400n) - 200n) + 400n))) + 1.6u) : 0)) / 1 : ((floor((1) / 2.0) * ((2 * (((400n) - 200n) + 400n)) + (2 * ((W) / (1))))) + ((((1) / 2) - floor((1) / 2) != 0) ? ((2 * ((400n > (((400n) - 200n) + 400n)) ? 400n : (((400n) - 200n) + 400n))) + (2 * ((W) / (1)))) : 0)) / 1 \
         m=(1)*(1)
NM1 (vo vim net11 0) nmos1 w=((W) / (1)) l=L as=(((W) / (1)) < 599.5n) ? (((((200n > (((400n) - 200n) + 400n)) ? 200n : (((400n) - 200n) + 400n)) * 600n) + (((W) / (1)) * 200n)) + (floor(((1) - 1) / 2.0) * (((((400n) - 200n) + 400n) * 600n) + (((W) / (1)) * 400n))) + ((((1) / 2) - floor((1) / 2) == 0) ? ((((200n > (((400n) - 200n) + 400n)) ? 200n : (((400n) - 200n) + 400n)) * 600n) + (((W) / (1)) * 200n)) : 0)) / 1 : ((((400n > (((400n) - 200n) + 400n)) ? 400n : (((400n) - 200n) + 400n)) * ((W) / (1))) + (floor(((1) - 1) / 2.0) * ((((400n) - 200n) + 400n) * ((W) / (1)))) + ((((1) / 2) - floor((1) / 2) == 0) ? (((400n > (((400n) - 200n) + 400n)) ? 400n : (((400n) - 200n) + 400n)) * ((W) / (1))) : 0)) / 1 \
         ad=(((W) / (1)) < 599.5n) ? ((floor((1) / 2.0) * (((((400n) - 200n) + 400n) * 600n) + (((W) / (1)) * 400n))) + ((((1) / 2) - floor((1) / 2) != 0) ? ((((200n > (((400n) - 200n) + 400n)) ? 200n : (((400n) - 200n) + 400n)) * 600n) + (((W) / (1)) * 200n)) : 0)) / 1 : ((floor((1) / 2.0) * ((((400n) - 200n) + 400n) * ((W) / (1)))) + ((((1) / 2) - floor((1) / 2) != 0) ? (((400n > (((400n) - 200n) + 400n)) ? 400n : (((400n) - 200n) + 400n)) * ((W) / (1))) : 0)) / 1 \
         ps=(((W) / (1)) < 599.5n) ? (((2 * ((200n > (((400n) - 200n) + 400n)) ? 200n : (((400n) - 200n) + 400n))) + 1.6u) + (floor(((1) - 1) / 2.0) * ((2 * (((400n) - 200n) + 400n)) + 2u)) + ((((1) / 2) - floor((1) / 2) == 0) ? ((2 * ((200n > (((400n) - 200n) + 400n)) ? 200n : (((400n) - 200n) + 400n))) + 1.6u) : 0)) / 1 : (((2 * ((400n > (((400n) - 200n) + 400n)) ? 400n : (((400n) - 200n) + 400n))) + (2 * ((W) / (1)))) + (floor(((1) - 1) / 2.0) * ((2 * (((400n) - 200n) + 400n)) + (2 * ((W) / (1))))) + ((((1) / 2) - floor((1) / 2) == 0) ? ((2 * ((400n > (((400n) - 200n) + 400n)) ? 400n : (((400n) - 200n) + 400n))) + (2 * ((W) / (1)))) : 0)) / 1 \
         pd=(((W) / (1)) < 599.5n) ? ((floor((1) / 2.0) * ((2 * (((400n) - 200n) + 400n)) + 2u)) + ((((1) / 2) - floor((1) / 2) != 0) ? ((2 * ((200n > (((400n) - 200n) + 400n)) ? 200n : (((400n) - 200n) + 400n))) + 1.6u) : 0)) / 1 : ((floor((1) / 2.0) * ((2 * (((400n) - 200n) + 400n)) + (2 * ((W) / (1))))) + ((((1) / 2) - floor((1) / 2) != 0) ? ((2 * ((400n > (((400n) - 200n) + 400n)) ? 400n : (((400n) - 200n) + 400n))) + (2 * ((W) / (1)))) : 0)) / 1 \
         m=(1)*(1)
PM0 (vo net12 vdd vdd) pmos1 w=((2*W) / (2)) l=L as=(((2*W) / (2)) < 599.5n) ? (((((200n > (((400n) - 200n) + 400n)) ? 200n : (((400n) - 200n) + 400n)) * 600n) + (((2*W) / (2)) * 200n)) + (floor(((2) - 1) / 2.0) * (((((400n) - 200n) + 400n) * 600n) + (((2*W) / (2)) * 400n))) + ((((2) / 2) - floor((2) / 2) == 0) ? ((((200n > (((400n) - 200n) + 400n)) ? 200n : (((400n) - 200n) + 400n)) * 600n) + (((2*W) / (2)) * 200n)) : 0)) / 2 : ((((400n > (((400n) - 200n) + 400n)) ? 400n : (((400n) - 200n) + 400n)) * ((2*W) / (2))) + (floor(((2) - 1) / 2.0) * ((((400n) - 200n) + 400n) * ((2*W) / (2)))) + ((((2) / 2) - floor((2) / 2) == 0) ? (((400n > (((400n) - 200n) + 400n)) ? 400n : (((400n) - 200n) + 400n)) * ((2*W) / (2))) : 0)) / 2 \
         ad=(((2*W) / (2)) < 599.5n) ? ((floor((2) / 2.0) * (((((400n) - 200n) + 400n) * 600n) + (((2*W) / (2)) * 400n))) + ((((2) / 2) - floor((2) / 2) != 0) ? ((((200n > (((400n) - 200n) + 400n)) ? 200n : (((400n) - 200n) + 400n)) * 600n) + (((2*W) / (2)) * 200n)) : 0)) / 2 : ((floor((2) / 2.0) * ((((400n) - 200n) + 400n) * ((2*W) / (2)))) + ((((2) / 2) - floor((2) / 2) != 0) ? (((400n > (((400n) - 200n) + 400n)) ? 400n : (((400n) - 200n) + 400n)) * ((2*W) / (2))) : 0)) / 2 \
         ps=(((2*W) / (2)) < 599.5n) ? (((2 * ((200n > (((400n) - 200n) + 400n)) ? 200n : (((400n) - 200n) + 400n))) + 1.6u) + (floor(((2) - 1) / 2.0) * ((2 * (((400n) - 200n) + 400n)) + 2u)) + ((((2) / 2) - floor((2) / 2) == 0) ? ((2 * ((200n > (((400n) - 200n) + 400n)) ? 200n : (((400n) - 200n) + 400n))) + 1.6u) : 0)) / 2 : (((2 * ((400n > (((400n) - 200n) + 400n)) ? 400n : (((400n) - 200n) + 400n))) + (2 * ((2*W) / (2)))) + (floor(((2) - 1) / 2.0) * ((2 * (((400n) - 200n) + 400n)) + (2 * ((2*W) / (2))))) + ((((2) / 2) - floor((2) / 2) == 0) ? ((2 * ((400n > (((400n) - 200n) + 400n)) ? 400n : (((400n) - 200n) + 400n))) + (2 * ((2*W) / (2)))) : 0)) / 2 \
         pd=(((2*W) / (2)) < 599.5n) ? ((floor((2) / 2.0) * ((2 * (((400n) - 200n) + 400n)) + 2u)) + ((((2) / 2) - floor((2) / 2) != 0) ? ((2 * ((200n > (((400n) - 200n) + 400n)) ? 200n : (((400n) - 200n) + 400n))) + 1.6u) : 0)) / 2 : ((floor((2) / 2.0) * ((2 * (((400n) - 200n) + 400n)) + (2 * ((2*W) / (2))))) + ((((2) / 2) - floor((2) / 2) != 0) ? ((2 * ((400n > (((400n) - 200n) + 400n)) ? 400n : (((400n) - 200n) + 400n))) + (2 * ((2*W) / (2)))) : 0)) / 2 \
         m=(1)*(2)
PM1 (net12 net12 vdd vdd) pmos1 w=((2*W) / (2)) l=L as=(((2*W) / (2)) < 599.5n) ? (((((200n > (((400n) - 200n) + 400n)) ? 200n : (((400n) - 200n) + 400n)) * 600n) + (((2*W) / (2)) * 200n)) + (floor(((2) - 1) / 2.0) * (((((400n) - 200n) + 400n) * 600n) + (((2*W) / (2)) * 400n))) + ((((2) / 2) - floor((2) / 2) == 0) ? ((((200n > (((400n) - 200n) + 400n)) ? 200n : (((400n) - 200n) + 400n)) * 600n) + (((2*W) / (2)) * 200n)) : 0)) / 2 : ((((400n > (((400n) - 200n) + 400n)) ? 400n : (((400n) - 200n) + 400n)) * ((2*W) / (2))) + (floor(((2) - 1) / 2.0) * ((((400n) - 200n) + 400n) * ((2*W) / (2)))) + ((((2) / 2) - floor((2) / 2) == 0) ? (((400n > (((400n) - 200n) + 400n)) ? 400n : (((400n) - 200n) + 400n)) * ((2*W) / (2))) : 0)) / 2 \
         ad=(((2*W) / (2)) < 599.5n) ? ((floor((2) / 2.0) * (((((400n) - 200n) + 400n) * 600n) + (((2*W) / (2)) * 400n))) + ((((2) / 2) - floor((2) / 2) != 0) ? ((((200n > (((400n) - 200n) + 400n)) ? 200n : (((400n) - 200n) + 400n)) * 600n) + (((2*W) / (2)) * 200n)) : 0)) / 2 : ((floor((2) / 2.0) * ((((400n) - 200n) + 400n) * ((2*W) / (2)))) + ((((2) / 2) - floor((2) / 2) != 0) ? (((400n > (((400n) - 200n) + 400n)) ? 400n : (((400n) - 200n) + 400n)) * ((2*W) / (2))) : 0)) / 2 \
         ps=(((2*W) / (2)) < 599.5n) ? (((2 * ((200n > (((400n) - 200n) + 400n)) ? 200n : (((400n) - 200n) + 400n))) + 1.6u) + (floor(((2) - 1) / 2.0) * ((2 * (((400n) - 200n) + 400n)) + 2u)) + ((((2) / 2) - floor((2) / 2) == 0) ? ((2 * ((200n > (((400n) - 200n) + 400n)) ? 200n : (((400n) - 200n) + 400n))) + 1.6u) : 0)) / 2 : (((2 * ((400n > (((400n) - 200n) + 400n)) ? 400n : (((400n) - 200n) + 400n))) + (2 * ((2*W) / (2)))) + (floor(((2) - 1) / 2.0) * ((2 * (((400n) - 200n) + 400n)) + (2 * ((2*W) / (2))))) + ((((2) / 2) - floor((2) / 2) == 0) ? ((2 * ((400n > (((400n) - 200n) + 400n)) ? 400n : (((400n) - 200n) + 400n))) + (2 * ((2*W) / (2)))) : 0)) / 2 \
         pd=(((2*W) / (2)) < 599.5n) ? ((floor((2) / 2.0) * ((2 * (((400n) - 200n) + 400n)) + 2u)) + ((((2) / 2) - floor((2) / 2) != 0) ? ((2 * ((200n > (((400n) - 200n) + 400n)) ? 200n : (((400n) - 200n) + 400n))) + 1.6u) : 0)) / 2 : ((floor((2) / 2.0) * ((2 * (((400n) - 200n) + 400n)) + (2 * ((2*W) / (2))))) + ((((2) / 2) - floor((2) / 2) != 0) ? ((2 * ((400n > (((400n) - 200n) + 400n)) ? 400n : (((400n) - 200n) + 400n))) + (2 * ((2*W) / (2)))) : 0)) / 2 \
         m=(1)*(2)
E0 (vim net03 vip net03) vcvs gain=-1.0
V1 (vip net03) vsource mag=1 type=sine ampl=1m freq=1K
I5 (vdd net5) isource dc=I type=dc
V3 (net03 0) vsource dc=900.0m type=dc
V0 (vdd 0) vsource dc=1.8 type=dc

The netlist
 
Last edited by a moderator:

("/opt/cad/cad/FOUNDRY/analog/180nm/models/spectre/gpdk.scs" "stat")
 

Is it possible to do parametric analysis for three different variables at a time?
 

I'm new to Cadence and Ocean Script. I have to write code for Nelder-Mead method in Ocean.
 


--------------------------------------
can you tell me what's wrong in this code?
 


I'm a student. I'm working on Cadence - Virtuoso. I have to write Ocean script for following Algorithm. I'm completely new to Ocean. So please help me to write code for the algorithm View attachment New Doc 2017-06-21.pdf

The file is attached.
 

// Generated for: spectre
// Generated on: Jun 21 15:06:12 2017
// Design library name: Kiran_OTA
// Design cell name: diff_amp
// Design view name: schematic
simulator lang=spectre
global 0

netlist header
 


------------------------------------------------
input.scs
 

Status
Not open for further replies.
Cookies are required to use this site. You must accept them to continue using the site. Learn more…