Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 8013|回復: 1
打印 上一主題 下一主題

[問題求助] 版本ubuntu 11.10 軟體nanosim 無法執行錯誤?

[複製鏈接]
跳轉到指定樓層
1#
發表於 2012-5-6 13:58:13 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
10Chipcoin
各位大大好:
; [) O3 }4 l7 ^+ h, ~                      小弟執行nanosim時,卻無法跑出視窗來,有個錯誤可是我不清楚該如何解決?問題如下8 V$ a  E, A/ D% i
                      [: 113: 64: unexpected operator
  F( T# ^3 k/ E- G9 S6 g& p! m/opt/EDA/nanosim/cur/linux/ns/bin//scripts/nanosim: 1: Syntax error: Unterminated quoted string
" w! L: u2 S' L; q; J) |+ L有大大遇過這方面的問題或是指導我方向去解決, 謝謝.
, R$ G) D" |1 y( n' X2 c" j" m! c, A我在猜可能是這個檔案內的文字需要修改 但不知道該如何修改?) E/ M5 P9 q3 b2 x; ?
以下為/opt/EDA/nanosim/cur/linux/ns/bin//scripts/nanosim 的檔案內容:6 G1 P! {  [: o- _' ?
    #!/bin/sh1 {, W, ^: B, R
#, k* U. {! o, h9 B- |* I. n% m" g7 |1 E
# Copyright (C) 2001 Synopsys INC. ~+ R) e+ u* b" t) g/ h
# EPIC Dynamic Simulation Wrapper (DSW)# O: r  B2 e* r' W. @2 O
#
- o& v' P' C, S0 u+ peval ${DBG_EPIC_WRAPPER:+"set -x"}9 R" |! l! X. q- y4 K$ `9 R( r2 E

1 J( d4 x1 m( ^2 ~: _4 y$ Vif [ "$EPIC_WRAPPER_DVLP" = "" ]; then# @1 i6 {/ v4 G9 O  O( G, C
    TEMP_ARCH="$SES_ARCH": _, O* A$ L; w
else
7 }6 G. \3 D' R, O    TEMP_ARCH="$EPIC_ARCH"
# z8 c; y- m, J/ W! s( |fi' i% [1 c3 I! @* c( p) s# z

( f" d, z, C8 T  E3 bscan_for_hva_args()0 M1 c+ U+ y5 y! V$ {% d, h8 R( E9 Q
{* q0 M- _; k0 ?9 X  R* `8 q
  /bin/rm -f hva.init 1>&2
; a" t6 f' [9 }; a; b) ?  while [ $# -gt 0 ]; do
4 e/ f$ V% h3 z- d" Z* t8 |  r    case "$1" in
  {& M4 v4 I: b. B* U      -vaf)1 J! P% y8 T6 O. m: t8 a$ o0 f
           have_vaf_flag=1
" w+ `; l0 [. v; G8 ?" \0 r: f           have_va_flag=08 _0 x8 M/ d& Q
           shift;
. H" o: Y7 X3 [           continue;
5 J" r$ T' {/ b: @6 @        ;;
' L8 K% r+ f# k- ]      -va)
3 _5 S" \) u+ V# u. p4 Y  w* k8 @           have_va_flag=1
' s; u3 h. ?8 r           have_vaf_flag=0
; n* w$ d' G( B& I           shift;
* z3 V" V- B& G           continue;
  c1 m# C1 o! C3 R* g        ;;5 f6 b0 C+ H6 P+ s. _
      -*)0 i0 o6 N  Q  m# e! V( Z5 F5 n% G
           ARGV="$ARGV $1"' x/ ~9 S7 a3 w
           have_va_flag=0
8 u# B+ J$ D+ [. r" ]           have_vaf_flag=0; {0 d# X: f  D  ~& o; t( j
           shift;" m: I) N' X3 T  r# @6 E( \
           continue;
' w4 q6 C, ?3 J( _& Q. m: M: L        ;;* v3 J: [+ \# K% K
      *)
! _6 W$ q3 z0 O; p; y! ^; e           if [ x"$have_va_flag" = x"1" ] ; then
2 }# }  v5 C, g$ ?! M4 b              VA_FILE="$VA_FILE $1"% u( @/ m9 h. `3 H
           elif [ x"$have_vaf_flag" = x"1" ] ; then , k# r  Q* a: q1 R& U' O
              X="`cat $1 | sed -e '/\;/d;`"
& h# k- b- u- A3 [              for token in ${X}; do
, V5 [( M: z7 ~' R. ^  P) O% q                 VA_FILE="$VA_FILE $token"
! y- @3 |1 p( @  c% o) E  H              done
- g7 e: b% M& d2 I           else
- ~! ]! k( f" A: T% [              ARGV="$ARGV $1"  p! g2 F  z2 V8 ?- u. a
           fi
- E5 @; X0 G6 Z$ \           shift;: o' n2 F  d8 N$ T, h
        ;;! s6 R! Q! t3 }  p5 R# x) V
    esac
9 n7 |; _! Y# B( I1 G. o  done% p4 S6 Q- \! E5 ~4 X& o$ X  z
. _- I' N3 M" G5 \% O9 n
  if [ x"$VA_FILE" != x"" ] ; then 3 I) e6 T4 |; C5 m, t  Z
##     /bin/echo " xxx ARGV $ARGV"' E7 C, H; ^+ X( ?4 h, ^9 `% f5 O. P
       /bin/echo "choose nanosim $ARGV ;" > hva.init
1 f5 x6 g' p0 w/ k! H6 {       echo vcs +ad=hva.init $VA_FILE -o simv& L& C# v" R+ I: X4 A. L, T
       vcs +ad=hva.init $VA_FILE -o simv+ u& I& X5 v. }$ z4 w2 y) v5 o
       exe_status=$?/ v& `0 J8 _: U: e. o
       if [ $exe_status != 100 ]; then( e% y4 g" a7 O6 Q2 F
          /bin/echo ""  h8 E6 J8 k4 p# v0 ~% C4 {& ~4 G
          /bin/echo "ERROR: Execution of vcs exited with code $exe_status"
: A7 U5 }9 r7 v2 C% K          /bin/echo ""
4 C" ~3 q% Y+ N  X1 Q; v          exit $exe_status
+ }/ L2 `: z: A- f: u+ f       fi
/ U7 ?# ]) k9 l& }       hva_files="-n simv.daidir/amsVD.ntl simv.daidir/amsWRAP.spi"; I5 ]% K5 N7 g; x3 k: H0 m; Y  ?
       ARGV="$ARGV $hva_files"
9 }/ r" _' D* x; t$ e  fi. {* L3 U5 v8 j( \" P: E
}
' Y- E; @/ a* c0 r( q" D8 Z#-------------------------------------------------------------------------
+ g5 p! ]8 _# ]  v1 O& A' j5 @( @  U% v( [4 k
cleanup()+ F6 Z7 I4 a. Z; a6 T# P& _5 z
{
7 e5 c7 d: T6 g3 f* h# }/ q, S    if [ -d "$rundir" ]; then7 H& }* m! B8 R3 F
        # On AIX, a .nfsXXX file is created if libModel.o is removed  I- f( P. o9 R; E& L  J$ m% m* Q) X
        # so .epicrun is not removed because directory is not empty.- R1 _" h0 ^' I9 q- O$ I5 a! p
        # Solution is to remove it again if the first rm failed2 i/ H4 }0 ]: I* D6 Y
        # (rm -rf $rundir || rm -rf $rundir) 1> /dev/null 2>&1
4 L" @& I1 {2 V        if [ "$EXTRA_CAPACITY" = "YES" ]; then6 ^+ u& k5 J7 t2 c. Y4 I% j9 j0 Z4 L
        chmod u+x $rundir/rpcidfile
' J% C3 }1 Q* V- \, B+ o/ J: s/ D        $rundir/rpcidfile
' V7 q; H! K( A4 n        rm $rundir/rpcidfile- U* D% J) J4 n2 g3 d
        fi
: i8 ?" X: T6 e4 F, o9 J4 Z        rm -rf $rundir
& |* D# _3 }* {0 e
2 b7 m) R/ e( w8 K        #Due to NFS problem, we have to copy files needed to
: E( a5 B$ s3 D" u        #/tmp/<temporary directory>, then symlink's files
( F6 _& {7 y$ R/ ~, r4 j        #to the local temporary 'rundir'. This avoids the problem3 N2 _) F/ T8 e0 N
        #to remove 'rundir'; w: q. q  J  N+ |7 J- x- T1 Z) s
        if [ "$EPIC_ARCH" = "RS6000_AIX_4" -o "$EPIC_ARCH" = "RS6000_AIX_5" -o "$EPIC_ARCH" = "aix64" ]; then
4 J" K/ H. X1 }# \# }# \" Q: H" ^          if [ -d "$tdir" ]; then  y  H0 Q8 H. J4 {
            rm -rf $tdir
# m% M  r. U8 w8 w! L- b          fi$ r( }7 N) X* k/ g/ d
        fi
  N( K, u/ E5 I2 u: t  q5 R    fi
. z4 q6 Q) W; q5 T7 ?! o    if [ ${exitstatus:-0} -eq $ld_err_code ]; then( c- j$ ~1 s% v8 {& L! Y
        [ "$has_model" = "YES" ] && rm -f $cwd/libModel$suffix
+ i& N3 u! [  I& `# \& E        [ "$has_custom" = "YES" ] && rm -f $cwd/libCustom$suffix
1 F) e; R" y$ W8 K    fi9 H' Y  b  E9 f# I% R# Q0 H
    [ -f "$EPIC_SCRIPT_MESSAGES_FILE" ] && rm -f $EPIC_SCRIPT_MESSAGES_FILE 1>&2
& N* m: ]: s; c3 E7 \  A    exit ${exitstatus:-0}
0 E4 _& p# i$ i) Z; r}7 Z0 ^/ t8 u8 _: m  H

% Z+ D: b7 ]* @7 z& kExit()6 f6 W9 c" w% u
{8 K/ r( k3 S7 B; b8 T8 h
    exitstatus=$19 v" j+ J+ n' A3 Q8 S5 R; |
    exit $exitstatus4 Y- R- F" l$ f
}
; G/ o5 j0 i" }; S% B+ ]
! \( e' x) X  T. C# get_epicrc filename keyword
) l. u% m/ a- I! Y, \. mget_epicrc()
' ]8 i0 D$ C4 e2 H% t8 q. |5 f{
  b1 V3 D' p0 O0 |; Q    [ -f $1 ] || exit 0: R: U& m- ?  r/ N1 V2 Y2 D. \& Z
    key="/^$cmd2:/{print \$3}"
9 B9 N% O7 `% `# ?8 U; R    awk -F":" "$key" $1$ Y; D' n9 f6 l5 ]4 ~- q
}2 C. A7 n. v2 G! F" \
3 ?5 V! s# v' c  ?- c
#5 T4 x5 m; W/ d$ e/ o' M" m8 P
# set datasize limit to hardlimit4 R# {" G& U3 h" R
#
- O' f, t7 w' j1 J- Gset_data_limit()
: P7 X# p* P: T. `2 q{
- e/ e+ X3 A& T) T3 J7 r    dbglimit=0* y4 U0 N2 N. V" y
    hardlimit=`ulimit -Hd`% Q$ j: ?  h. J
    softlimit=`ulimit -d`
6 h" N# A  ^6 n    desiredlimit=3500000* @8 F& |% |& {9 x& Z
    hardisunlimited=0, \3 ^+ g( ]: R. Q5 H
    softisunlimited=02 ?1 q- i% z, ]# z  T+ E
    is64=0
+ x5 Y& K9 c7 p+ Q' V6 z" @$ ^) w  s: a0 @7 f
    case "$EPIC_ARCH" in" l; p9 w3 N- i: Y  ~$ Z
    *SUN*64)% j  K8 Z7 e  B/ X. d1 b3 O
        is64=1& e* D5 f6 b0 O- M0 E5 z( F
        ;;
! K5 o' H8 h* R: n    amd64)+ `# S) S$ G, n' E7 M3 H" y
        is64=1
/ X/ G9 D/ N" C( F0 o$ _+ z" H        ;;
: R( Y: i6 M* ]( z. Y3 }    x86sol64)3 r8 E! r2 O9 n2 [
        is64=1. E& `$ K- Y* a7 X6 x1 a3 O( ~
        ;;
  ?- D" N1 p% k7 J4 U0 d    aix64)% e6 [: `0 r9 d" \8 F
        is64=16 C5 w9 J, k7 L
        ;;5 ^3 q* h" `8 o
    suse64)$ {. d1 H/ _9 I9 p2 J8 W0 j# U
        is64=1
! A& s( s( y  @9 F7 V3 u2 U: m        ;;$ W% u. d# Q$ K) P/ v& H
    esac
6 K2 r( e. c/ G
$ M0 B# a8 s4 _# h- H! t    if [ $dbglimit -eq 1 ]; then! [0 L4 W7 }) L9 l6 Z3 a4 V
        echo hard $hardlimit soft $softlimit+ r) l8 t+ K# r! U
    fi. n' F* V% T7 A8 n' c0 n, j/ v

- F3 I0 E7 s( [    if [ x$softlimit = "xunlimited" ]; then/ K( N" i1 G* D
        softisunlimited=16 u  m- M  Q" K0 E( R
    fi
8 z" {1 X6 Y1 W$ F6 n: g  R; U" j- B) u; ]5 k% g
    if [ x$hardlimit = "xunlimited" ]; then
9 ?' C1 c- {" c4 i        hardisunlimited=1* o4 }; V) A' e
    fi
2 p2 p: x4 [- c2 Y
9 }! M; e2 {5 [2 P  u/ i    # 64 bit machine should have bigger than 4G" L3 `& e8 R# l3 R( G
    if [ $is64 -eq 1 ]; then
+ g2 p9 r4 Q4 w! |        desiredlimit=5000000& j' S( g# p1 ^0 \
    fi
) @  ~( _) K, [4 v$ r4 D6 X
6 v0 ~, H5 W5 W" V    if [ $hardisunlimited -eq 0 ]; then# G. U- N* r6 |0 `
        if [ $hardlimit -lt $desiredlimit ]; then# J0 u5 R8 e( c, i2 @' N, w2 R
            echo "WARNING: datasize hard limit $hardlimit K is too small."7 E. j3 E. }! ?" N
        fi
$ B" v9 F0 L4 T/ s8 z: m    fi
3 f$ e8 G6 p0 ]) ]8 q+ c! s: \1 B& F2 c# m
    if [ $hardlimit != $softlimit ]; then9 Z0 Q: D% E8 l0 f" U
        ulimit -Sd $hardlimit, Y0 T( ^6 C4 f( q
#        echo "WARNING: datasize limit is set to `ulimit -Sd`"& a+ c6 C7 b' X! R% M7 J
    fi
6 H5 \+ i3 N+ b: ?" g- Y5 c
" r& M/ C" |3 m$ [! s. D    if [ $dbglimit -eq 1 ]; then
# ]* V! v/ M. s        echo datasize hard limit: `ulimit -Hd`
% K5 ^! o$ x3 V$ ^) v3 n0 `5 p        echo datasize soft limit: `ulimit -d`
1 W. n  {+ z/ d1 r6 J1 p    fi
. A& S' `0 P) d( B9 P8 ?  n' v1 r* J}
& c. P/ N, i- o& G8 t& w$ @* u6 j" W) e
#
1 p1 w) u! t% ]/ n; ?$ S' u0 K# set stacksize limit to desired limit
; p* t+ S# V5 ]% H+ g3 ^#
" \) `7 L% U, P& K$ p; vset_stack_limit()
! J% C  `  C* c) u" g7 e: \% l{- @9 t3 W5 M5 f, g% p. M  E4 [( J6 B
    dbglimit=0
, M! H8 }+ ~2 U5 {2 j    hardlimit=`ulimit -Hs`5 T" K  Y4 W4 ~- s- ~
    softlimit=`ulimit -s`6 c7 z& m  i! L0 v/ e: r
    desiredlimit=60000* d7 U+ Q% Y) T: U- |) q
    hardisunlimited=05 }! u4 ]9 r# M5 a: ~2 D( F
    softisunlimited=0
6 H- B. I6 A% c  E    is64=0
5 k6 @- c* K. s7 \
0 h9 }) z; N* s( x: |' _    case "$EPIC_ARCH" in1 w" J+ F: }0 Y7 A% z9 q
    *SUN*64)
9 u+ |6 p2 A6 [/ n4 Z5 \        is64=1+ h3 B& L1 u7 E2 J. U! Y
        ;;
% H4 J9 J: F6 q; a4 ?$ k4 a    amd64)) y; x7 F+ j5 ]  r/ m: @
        is64=1
! w$ F3 a9 A$ d9 [8 R/ I9 N6 X        ;;
) l/ T( j& c; A9 j7 q    x86sol64)
- v0 h& {+ b- ^        is64=1' B  H. A3 s+ X) s2 |1 \
        ;;0 @9 {1 k' F; I% G( H4 Z
    aix64)# W" K) ?1 I  O; \
        is64=1- i9 A2 C6 X4 q+ O% u
        ;;7 |5 G* P5 x! M; F9 U
    suse64)' K8 S3 R8 B: C2 [/ ?0 N
        is64=12 O/ ?/ W  _( b! S
        ;;
' [  S9 g0 o5 ^  i4 n' S    esac4 p) |( [# ~+ p' \0 r4 }) o0 V! o
; a; m# g- P: \, h) h5 S9 p) g& r
if [ "$EPIC_WRAPPER_DVLP" = "" ]; then
( G( G9 a0 u' n  e8 v1 R# I    if [ $is64 -eq 1 ]; then& @4 s! U* W2 w9 l
        desiredlimit=200000" l! A! z) z* j% L6 N6 P- u
    fi
' I/ n) m& W1 j/ t# Welse
4 `1 l1 _1 i  C    case "$EPIC_ARCH" in$ \$ O( N% s2 T) Q
    *SUN*64)
0 H9 f0 F, |5 L- `( o        desiredlimit=200000" b. W2 N5 a+ c6 d( V
        ;;
: J0 r* t0 o0 e9 ~/ p    esac: {5 s+ B  Q" ]: ^$ n! _) m+ o
fi
3 @8 U; ~+ J, P4 B        ( w) G1 Q7 c% x
    if [ $dbglimit -eq 1 ]; then
5 w& ?6 Z( N( R        echo hard $hardlimit soft $softlimit
9 f0 Y) ?" [) R! |    fi* t! u. E& }: v1 d8 d( ?2 F- Z8 w

, a1 ~" X0 S) x$ C: j$ h) k    #stacksize can not be unlimited, pick smaller number( E  ^: w: s& G" ]5 ^, n
7 U9 k3 ~* V; L% t3 m' j4 N+ m
    stacklimit=$desiredlimit% b1 c3 M5 [8 V$ x7 Y* L

. j3 i- b$ C% \% i    if [ x$hardlimit = "xunlimited" ]; then
6 ]. V6 D/ E* P, g; O$ s/ J        hardisunlimited=1
0 C5 m, h8 E: i0 }    fi
- k0 ?5 T, {! j( c) M( O
4 L- s3 c# m! ^  p8 h) M    if [ x$softlimit = "xunlimited" ]; then, l( g8 J. `& Y* h6 D2 P
        softisunlimited=1! d7 J3 v! u5 s/ y$ N4 I
    fi6 Q* L% R/ P; t' d6 u
8 O/ h) @# l( O
    if [ $hardisunlimited -eq 0 ]; then
; f, [) V6 `) o" G        if [ $hardlimit -lt $desiredlimit ]; then* B- Y- @; R3 k9 p
            echo "WARNING: stacksize hard limit $hardlimit K is too small."- V( L7 M% d/ D: q  A
            desiredlimit=$hardlimit( b8 ]! e/ E# C/ ]+ \! h
            stacklimit=$desiredlimit4 @5 N( ]" Q8 b2 c5 i5 x
        fi$ V- @3 D- w0 F/ ^. ]/ t1 N
    fi
8 P: S0 l& Z8 j. Q7 C- N8 t6 a% x! g2 i* W2 L+ K& W
    # desiredlimit is set to proper value (< hardlimit)* X+ a8 |9 A( G/ D0 D4 O3 z
* f  _: F- Y0 J3 E0 f
    if [ $softisunlimited -eq 0 ]; then) v  A: }9 g8 J  S
        if [ $softlimit -gt $desiredlimit ]; then- f$ `& b/ i  Q
            stacklimit=$softlimit
% C* l6 T6 @9 G* s4 f        fi" v6 p$ r( Z$ v
    fi
5 v) ]6 z- `% e- x& h. O+ @& B( y! a; q
    if [ $softlimit != $stacklimit ]; then; g, p. N8 l- d! q7 g1 |
        ulimit -Ss $stacklimit) D) V( W) o8 g: I$ t; r
#        echo "WARNING: stacksize limit is set to `ulimit -Ss`"
0 J; |; O! N, Y' s6 e- p9 h    fi; l( {5 F; W. g% W5 {

( l* s; R4 l7 d6 I  z" E    if [ $dbglimit -eq 1 ]; then
+ a# a, T; ?6 ~+ A; P        echo stacksize hard limit: `ulimit -Hs`, X4 n" X# N* ^. O% k
        echo stackize soft limit: `ulimit -s`
+ M+ e# D: G, g1 v" M6 D5 V) ~! X, K    fi3 }& m# k5 B7 [5 ^0 |0 C$ Q* L
}
. B9 B7 M, u3 [: Y2 ]0 Y# o' k/ U& x+ k
open_epicscriptmessages()
4 [% L8 I* f, d, c1 i9 U. ^8 `{
1 ]' H  m; z% f; l/ ]3 C' h#generate  temp ".epicscriptmessages" file based on pid3 ]0 Q# E- U$ ?9 g4 d7 |1 ~% [
EPIC_SCRIPT_MESSAGES_FILE="$EPIC_SCRIPT_MESSAGES_FILE"$$
" e2 \% F( l2 ^7 _if [ -f $EPIC_SCRIPT_MESSAGES_FILE ]
( D4 K- M6 x% F5 s9 ~$ j  Xthen
$ Q* A* n& Y" p' O9 L  until [ ! -f $EPIC_SCRIPT_MESSAGES_FILE ], k7 N! A9 `2 c' f6 w* A' \
  do
, _, Y4 {# k' o3 f  t7 p& d    EPIC_SCRIPT_MESSAGES_FILE="$EPIC_SCRIPT_MESSAGES_FILE"$$; \7 e# K) N) L: w2 S: |$ ?
  done
) Q+ O6 |9 F7 D' L: O4 ?! F0 t, _% gfi& u, X6 [/ j9 r6 X  u, |: i' t

# n% A# B$ S9 ]- C7 s; ~export EPIC_SCRIPT_MESSAGES_FILE
' s+ _9 R) Q& N& X# C}
7 C# d( [" ?& s+ ^) v5 }$ E! O! P: e1 [0 @9 O' x3 }
: H) c2 ~0 T: v, g) \' d3 H5 P
cmdname=`basename $0`3 g& l% U) Y7 }+ O6 m& Q
postgres="n") U9 H' L# ^/ ?9 A9 w" V9 x8 k
ostore="n"
9 g. b9 B0 }4 I# J% C" zgui="n"
' u* \' ]& O! h6 i, J0 M( H$ P, UdatabaseOn="n"! n+ l. g( L: r( W+ c
f_next=03 ^! d0 K/ Z1 ~* a
f_option=""$ \+ q/ y1 M( L$ V5 D
o_next=0) ?- E- s) ^* M5 a
o_option=""
+ V1 P7 l4 o. l* X8 _workDir=""
- q: j6 P- n9 c9 AworkDir_next=04 ], `3 m7 z8 O  A% X
errFile="powrmill.err"9 I/ {5 t4 B3 K* B
win32flags=""
0 @+ I/ T3 h- l% G- W3 ?ln_default="ln -s"
: `7 n3 k3 ]9 [; W
( I2 F1 s) x( |, o5 Q3 ahar_hilo_file=""" D- F9 V  w: g& Z1 X, [1 u
have_har_flag=0' a2 N' d. B: Y5 _& I9 K! X
have_har_setup_flag=0
7 [' P4 ~/ ]5 g" I' o- k: p* lis_special_har_run=0
# R* d/ ?' Z9 A& w% v) Bhar_ofile_prefix=""
/ X6 d1 B$ z' `- b, H
3 h1 @: I2 P9 [5 W4 C( Phave_va_flag=0
& u! J* U) u& b  B2 Z/ c$ rhave_vaf_flag=0
# `8 a/ |; G/ k$ E; M9 fVAF_FILE=""- f2 G# l- i5 z4 I4 B. K, i
VA_FILE=""
" H+ R0 ?7 @+ F3 a  ]% N0 Q5 h0 PARGV=""2 j4 j3 r1 N* `( ~  x

  r' `; w* G3 ?1 i8 }. X6 aORIGINAL_COMMAND_LINE=0 ^* s  l0 `& d
LOOP_CTRL_FILE=".ns_ba_env"3 T% G9 T! p" R6 z- d/ T
ALTER_HK_FILE=".alter_hkf"7 u$ k( _5 @. D
ALTER_COUNT_FILE=".alter_count"7 Q. A: S* f" D/ |1 P
MONTE_IMG_FILE=".monte_img_f"
5 s5 a9 E4 a  q6 p$ K% _MONTE_COUNT_FILE=".monte_count"
/ r/ {, c5 O) L' yMONTE_CFG_FILE=".monte_cfg"  I$ W+ }' N0 t
EPIC_SCRIPT_MESSAGES_FILE=".epicscriptmessages"
- [! c# j) M- U4 W
( x0 e) t3 Y( _4 e  t2 sopen_epicscriptmessages $@
/ n; l) s4 I, x* G) o( r4 i, h! s) }& F1 ^* t% c4 ]9 b( ~% _
scan_for_hva_args $@3 f6 k3 [- x6 P! W8 w, l) P4 ]  M

+ N0 \* P/ E$ j- z' j* ^5 ]scan_for_har_args()
+ Y  Z! x" ]5 b: `( |{( L5 i' c; o9 I; [4 h
  while [ $# -gt 0 ]; do) u2 U  ?+ b7 b, y8 }$ ^" T" V9 \" K
    case "$1" in/ q2 T1 z+ o. g+ E3 V- l; y% B
      -har). {, S* S- u/ H: W* W3 c5 X' u
           have_har_flag=1
4 V0 ^( j1 B2 {/ m9 B           [ $# -gt 0 ] && shift
, D4 {, I3 ~* v) {           if [ $# -gt 0 -a `expr "$1" : '-.*'` -eq 0 ]; then3 m* r: \! [- N+ F
             har_hilo_file=$1
. k3 B* ^: l# h& u; z3 O6 w             shift( y1 J" U3 \) [% Z
           fi; n# E* r& \# E0 E
           if [ $# -gt 0 -a `expr "$1" : '-.*'` -eq 0 ]; then. G* J8 y& m2 n+ G* ~, r! H' ]
             echo "Too many arguments to -har flag. Only one hilo file allowed."0 X- ~+ H/ I) f- S
             exit 1
' a/ I: \8 g0 G* g+ y, J) e           fi
# M! Z' c( j" j+ O" d7 V  J% f           break
4 V% B# d! J' n/ s2 v5 i; m        ;;
; ~6 T. f5 ~$ T8 f* Q; L" V      -har_setup)3 w% Y% M' c+ x. }$ K
           have_har_setup_flag=1% ~, [' q! B6 m, P  A) G# c
           break$ @3 \# Z( O1 L4 `
        ;;2 G+ C' j1 K' ~8 U
      *)
1 i; J: n: w0 ^1 w" m        shift
) R$ G# d3 P$ K% Z: L        ;;
6 F* v2 z$ S+ U  i; K    esac
5 V6 q& \4 D% V+ j# b  done% b+ }' M$ v" }+ r8 b8 B
}
  t* m, U# w* h$ j% r
$ E4 s9 ?0 O; ~1 n6 iscan_for_har_args $@
& U% J9 O8 }# l, F$ K* Y4 v; H# b0 u1 l- D- f/ b, i
for argv in $@
/ W" z2 Z& N0 r9 R, u- Udo
. s* U7 ?6 d& j3 Y& ]   ORIGINAL_COMMAND_LINE="$ORIGINAL_COMMAND_LINE $argv"
) ]2 n9 I3 J6 @5 @; j    if [ $argv = "-gadb" ]; then
9 T4 e7 q# h8 I- r* `, g        databaseOn="y"
6 F6 Z1 W+ t. r        workDir_next=1% A5 r/ [2 N5 q  Z
    elif [ $workDir_next -eq 1 ]; then
" Y: U! _" J2 K7 f, U7 z+ W6 a& K        workDir=$argv
5 P& a" k! b  C! \# t! r        workDir_next=0
2 W: i" w, h/ K    elif [ $argv = "-ga" ]; then. @7 V- ?# e8 ]: P" o* z5 ^! k
        gui="y"' t" B  k& `5 P( x: Y+ ?+ h! Y0 f
    elif [ $argv = "-f" ]; then
; H7 U" f2 u2 y; S! I% ]  T        f_next=1
5 H( ]. C2 O$ y/ z$ |    elif [ $f_next -eq 1 ]; then
" x7 v+ V) e2 r2 C% e4 [8 o4 u; ^2 _$ \        f_option=$argv
" g: r1 Y( D- F8 X0 c        f_next=0
* p; v/ k4 T! d5 B  }    elif [ $argv = "-o" ]; then' q! c; d# t, t8 E) Q
        o_next=1
8 @& H0 ]+ [; [( u# A1 z    elif [ $o_next -eq 1 ]; then; `# |8 o: n# U- A+ o& K' Z0 q
        o_option=$argv
4 r0 D# Z  K( s5 T/ Y        o_next=0
% b3 g8 A. G/ O4 v: Y    fi
) A$ ?3 e5 t2 B  bdone
, M: H! ?- l; b1 s  L+ iecho "Command line options: $ORIGINAL_COMMAND_LINE" >  $EPIC_SCRIPT_MESSAGES_FILE
" ^. x! x8 h( D( W7 |* t8 M/ p, f  b  H( [) P, u$ ?
if [ $databaseOn = "y" -o $gui = "y" ]; then
; a# ~# m7 t6 Z- T- l  if [ $cmdname = "pathmill" ]; then0 L3 T9 O4 D* b% r
    if [ "$EPIC_ARCH" = "SUN4_SUNOS_5"  -o "$EPIC_ARCH" = "SUN4_SUNOS_5_64" ]; then) o7 q& G, W- c
         ostore="y"
7 P8 C% w8 [; h, K" g         postgres="n"( K/ q- H. K( i9 w$ S$ A6 f
     else
2 `. I- D: ?( `. p        echo "athmill GUI is supported on Solaris platforms only" 1>&2
1 z3 w) g1 W' A- z) u        exit
9 q% s1 q- Z! Y& v     fi
( q3 f3 f7 n* k  else# l2 Y3 G1 `7 q8 ]7 G: P
    postgres="y"
7 k# n' ^, G# Z, f* ~5 B% ~2 P         ostore="n", G% H" s; v; J% s7 d) B) G$ S
  fi7 s! {. O0 f/ `, I# E" \
fi
; D; H7 ?7 N. H% {6 S* q( t. \1 Z/ s/ s& s% i
if [ $gui = "y" ]; then
& z) L9 ?: m: r/ u! g. Y    if [ $cmdname = "powrmill" ]; then
& n3 [' r- k7 k1 _" _3 L2 D        pwga $@
+ A7 V' ^  L( W0 s3 X& A3 O: H        exit  R& K4 J3 t% i4 ]6 u
    fi
+ p, |" z6 l  x
4 W( {  e* n( ?& O7 D. B    if [ $cmdname = "pathmill" ]; then/ |" r# {, s( P1 g
        if [ $ostore = "y" ]; then
! J& g: E) C( A6 p3 S           ./pathfinder $@
" w7 B. H  O# ^' e9 @( Z           exit, L8 Z5 O+ p: v( D
        elif [ $postgres = "y" ]; then
7 w1 J' c4 X$ B3 w  p( B- m* l( `           pmga $@
3 Y( \2 a6 N8 T/ Q4 R           exit- r* M- F9 A( ^( H7 o
        fi! P. n& _/ @% J) ~1 g
    fi
6 f6 X# Q! R) O! xfi
& A3 a2 {( K9 l3 s. Q3 B5 N7 L
' B" `+ ^1 p1 B- B; q1 Rif [ $databaseOn = "y" ]; then
* i" O+ q+ i$ O( X2 Q   if [ $ostore = "y" ]; then2 F  Q& }* f: B
      if [ -z "$workDir" ]; then" d; z5 L# `1 T% v: Z
         echo "Error: Missing argument for -gadb option"
  p: v* u! M* R  R         Exit 1& L- C6 E" k! n0 t' d8 |
      fi8 N' |0 y1 E1 j$ M, [; n! y6 w
   fi
# e! u3 l7 d( m4 }1 o   if [ $postgres = "y" ]; then8 N" p& w' O7 Q3 ^# z) _
      if [ -z "$workDir" ]; then3 M5 i' W# I/ k4 H
         echo "Error: Missing argument for -gadb option"8 v' c0 j$ Q4 G; S
         Exit 1" D0 B" z( K7 [$ G* z7 L
      fi/ \! A2 d# k. |3 H( g
   fi
1 v  f- P) c3 e3 J) Y( t6 rfi
! o+ ]$ v7 l' Q9 k
: W0 h. |$ Y  x+ I1 l4 u# H, v- t2 m4 aif [ $postgres = "y" ]; then
6 v! y% x- N! b  g/ ^
0 j$ A% e5 c0 j, j# S5 g    if [ -r $EPIC_BIN/scripts/gui-init ]; then( E7 X6 s/ J/ p3 r
        . $EPIC_BIN/scripts/gui-init
3 P7 ?; n1 T! r1 i1 o" A& k/ s( [4 p    elif [ -r $SES_ROOT/bin/scripts/gui-init ]; then- N3 S; U3 m" F' _
        . $SES_ROOT/bin/scripts/gui-init
; j3 k5 i5 d+ i, c! r    else
$ C) ~% |- G7 N" S, R+ N$ _. @        echo " ** Installation in \"$EPIC_HOME\" has been corrupted!" 1>&2
$ K# K' h1 S7 d( P        echo " file bin/scripts/gui-init is missing." 1>&2& B" P7 B& z! S% D  F, L( S* ]
    fi: C$ B( K% h$ T0 N" ^+ [
) {3 }1 _  M8 l$ V1 f: a/ c3 N
    workfile -tool $cmdname $@
. W$ X+ w3 T7 T6 ?fi! v. c) ~. W1 T6 `
- U  \. f; @7 N# P5 A
if [ ! -z "$o_option" ]; then
& p" C' L, @: X4 b: H    errFile=${o_option}.err9 v- O: d, k2 G- x
elif [ ! -z "$f_option" ]; then
! j# u" J1 T% P8 O/ a5 L4 v    if [ -d $f_option ]; then0 o9 G* _0 Q! @) D
        errFile=${f_option}/powrmill.err
8 h* J$ q2 p7 j- \9 J! a7 T9 m    else errFile=${f_option}.err
1 f: a: r- L( Y, D  U) ^3 U    fi
/ R. A8 ~! M1 `. B+ Ofi
; I% }  A. c5 k) C/ ~0 t
  x9 E5 R3 A9 P! t
4 F9 U% X& |5 Nif [ "$EPIC_ARCH" = "RS6000_AIX_4" -o "$EPIC_ARCH" = "RS6000_AIX_5" -o "$EPIC_ARCH" = "aix64" ]; then
' R8 s5 f6 J" j) g  K* s9 L  rundir=.epicrun! D3 C. f) R* e8 b/ U
else
9 n$ u; n$ s# }8 d  rundir=.epicrun$$* ^- B4 n; M2 R$ c; O7 _$ Y; ^  e
fi
# L2 K9 _! ?7 n; \/ q% D8 I+ g+ a" t& t5 H8 t5 H
libpath="$rundir${EPIC_DLIM}$EPIC_DIR"
7 k& O/ l4 m6 ]6 O0 E+ J
; D, M* ?$ [0 t9 qcwd=`pwd -P`
2 [/ O2 O/ b& R6 H9 B) Yif [ $cmdname = "acehdl_w" ]; then
, k) D3 I. M  l# ?# B, C2 q  cmd=`basename $0 .sun`) G- r; h3 B3 r" P6 `7 N
  cmd=`basename $cmd _w`$ f$ O( `) p# z/ Q7 C0 f* t( d
else
& k# U5 \8 R6 c7 t" q( E# M  cmd=`basename $0 .sun`# p$ N! L- {5 Z1 v! E
fi7 k; X' S. T+ \, ?6 M6 Z1 `  [

5 Y4 k' P) Y1 s& tcommand="$EPIC_EXEC/$cmd$EPIC_EXEX"
/ H5 V  w/ i# `+ p" e[ ! -x "$command" ] && echo "$cmd: not installed!" 1>&2 && exit 1
! n% V2 l1 j4 K* j; y' P7 M
) w+ K. Z3 o/ w4 U, j- Z# buildmod extracts -u/-fm options and calls genepiclib! T$ Y3 K0 G' L" f
# It also set the remaining options to variable CMDLINE
, [- `9 a$ a7 A+ X! h* P1 p( n0 c1 T# look up in .epicrc for -fm & -FM parameters0 ~. U4 S3 w: }3 `8 Z+ [3 l* t

  l* P4 l$ R  @6 }9 e/ dfmlist1="`get_epicrc ./.epicrc user_adfm_obj_modules`"
* @2 k) j/ t3 W! Q6 A9 A$ e, ~" i[ "$fmlist1" = "" ] && fmlist1="`get_epicrc $HOME/.epicrc user_adfm_obj_modules`"
5 q  Z0 e) ^3 |1 T[ "$fmlist1" = "" ] && fmlist1="`get_epicrc $EPIC_DIR/.epicrc user_adfm_obj_modules`"
0 g0 c6 G+ W% z1 C+ o2 y: }- ] $ H1 h& O! c; B2 [
FMlist1="`get_epicrc ./.epicrc user_adfm_obj_modules_force`"
5 p( l% C3 q6 g* x5 {[ "$FMlist1" = "" ] && FMlist1="`get_epicrc $HOME/.epicrc user_adfm_obj_modules_force`"
! Y( c* P: }: ?" c' w[ "$FMlist1" = "" ] && FMlist1="`get_epicrc $EPIC_DIR/.epicrc user_adfm_obj_modules_force`"% _, H3 s& ^4 r& y# ]7 X! _$ Q

! J# B; g2 B* Y/ ]if [ $# -gt 0 -o "$FMlist1" != "" -o "$fmlist1" != "" ]; then
6 t7 F4 U* p5 B# p    # note that the buildmod script will set the CMDLINE variable! A: A! R0 v. \- y
    . $EPIC_BIN/scripts/buildmod5 x! O7 E) b1 \  D1 I
# V$ x% J) X$ ]
    #echo "This is the value of cmdline=$CMDLINE"
5 }) K. b3 M. c0 Q8 L, ?1 A4 x    #exit 0
5 D4 Q: Q1 \$ _9 Q+ n
' m8 S8 s% h4 S! v7 _    # if a new timemill/powrmill/pathmill built, run the new one6 ^$ I8 l& m: _2 ^
    [ -x "$rundir/$cmd$EPIC_EXEX" ] && command="$rundir/$cmd$EPIC_EXEX"
+ s" ~2 f. a/ m" {6 K1 j  F3 E7 Zfi7 [; s( O+ C& Y* ?2 I7 N; x" E
  t* G# ~0 p3 r
if [ "$cmd" = "timemill" -o "$cmd" = "powrmill" -o "$cmd" = "nanosim" ]; then
* U8 l+ H' U0 w5 ^; `0 Q7 u  if [ $have_har_flag -eq 1 ]; then) q' A) c6 C: E7 n9 ]
    is_special_har_run=1
4 A3 s  T* i. Z8 n    if [ "$o_option" = "" ]; then( p) P! R$ ^0 z" b: M, m7 N( T
      case $cmd in
  e; k- S, P- ]" t( T        timemill); ]& q2 t: A: y5 o: d% Y! E
          har_ofile_prefix=timemill
7 W5 O; r  M: D6 X$ I          ;;
/ L) }) G. O* ?* r+ t& L        powrmill)2 a" C) u' a) X
          har_ofile_prefix=powrmill3 ?: S" p0 Z7 {
          ;;
' K* ~+ V$ i. q        nanosim)
4 g6 x% k" \! G) j( q! S* \          har_ofile_prefix=nanosim
+ k. D) |7 J8 _" p' s          ;;1 j1 c7 f  f) Z4 y# B! |
      esac9 n8 Y% H% U( Y  N9 [% V
    else
, W7 F6 ^% N; n/ z. d      har_ofile_prefix=$o_option. T/ f& Z4 T6 z9 I7 p
    fi4 d& n1 \3 e$ L1 L3 q* r- N; F
fi% m  A* ]5 }; T7 m  C
fi- ~9 m# J( d! |1 \# H6 N3 B
+ u! @4 Q: r1 O8 ^# C7 W
# Call Double precision version of the product if -D& t2 L' V# D$ H" n; B
# or simulation time > 1,000,000 ns.
* u; C2 s5 v/ |if [ "$cmd" = "timemill" -o "$cmd" = "powrmill" -o "$cmd" = "nanosim" -o "$cmd" = "railmill" -o "$cmd" = "pwarc" ]; then7 [. R; t8 H3 H$ `) p# z7 c& g

  P7 ?5 I; h3 ]3 [2 e7 R# T) s  # Now the binary always has the ACE feature
9 D# w% G+ s* Q  USE_ACE=YES
* ?9 @3 ~" ]2 J4 ~& N( G. d' W4 b9 ], c! ]6 g5 A8 h
  HAVE_DP=NO
) Q9 o' ^1 B! x  J  EXTRA_CAPACITY=NO/ k$ O1 g1 F9 J4 i! h) D
  DB_REAL=${FORCE_DB_REAL:-"0"}
# k4 G) g: F9 [+ J* m& I  f/ g9 z" l$ W7 m2 @% a# H' j
  # Enhance for ACE ease of use# E. |" T3 k* T$ a/ M" U
  # If no command line option or only a -T option, do:9 K( l- F2 q$ Z' O; U& m& N1 E
  #   1. set -A option; A  w3 B* L# \* g% R8 @7 f5 o
  #   2. assume input file to be hspice
9 y' d8 B  X- A  #   3. set -o to input file prefix
. X5 K9 Z! j! }9 i2 r  #   4. set -z to input file prefix8 D9 d  d6 ~% K2 c
  #   5. set -c to default config file8 B4 J1 M! i4 b7 H) H4 X% |% h
  netlist=""
  N1 o6 Z9 {" f8 r* i$ a& n$ _  minusT=NO
$ {+ w. n5 Z( c8 ~& W5 R  useStdCmdOpt=0
8 x  c/ t" q) J; R  prefix=""2 x4 C1 h$ V% V# l# q! q+ e
  circuitType="", U' B( J$ {+ a7 T5 J1 Z! x5 t
  for opt in $CMDLINE
8 E- W; q9 |; [4 t6 f2 ^  do
) u$ e2 W  I5 `" A5 m/ G    case "$opt" in 8 ~3 F2 r! Q0 v4 F& J
      -T)+ ]1 n% h0 [2 A  |" n$ q
        minusT=YES
) I5 v& t/ x5 u        ;;
0 ]  K' G% V7 L      -*)
4 w  S8 s: w, R7 y! k: o+ Z+ g4 b0 t        # using standard powrmill command line
0 B6 @9 J$ j2 j. I: t! `        useStdCmdOpt=1
' {- i# l( _! h1 |( G' p        break
# S0 n9 p) c8 O/ e, {% x& O        ;;0 o2 Z; m, B  O& y
      *)) K( H' E2 q! O9 n
       if [ "$minusT" = "YES" ]; then/ d7 w; u. H; e* c8 J& \; I
         circuitType=$opt
! w  G$ q. R. K% ~/ a! C         minusT=NO  # reset flag! O. T' \3 ]1 j$ W9 I
       else 2 Z9 {1 j3 C& N8 V$ S/ U
         if [ "$netlist" = "" ]; then
$ j6 w4 h2 l0 C2 ^           prefix=`basename $opt`
4 T: e3 l6 I9 H( f           prefix=`expr $prefix : '\([^.]*\)\..*' \| $prefix`  F9 ~/ ?( P. J# Z
         fi
, a5 V# b" N2 }% C: b4 C         netlist="$netlist $opt": K' c: p" j# {& u5 F8 @/ n+ j* h$ s
       fi, B: x7 V# h* B8 U
       ;;
" e0 _1 k8 c8 Z* {3 T    esac4 h9 ~. b3 T8 e: p& k) \$ _# n5 d/ P
  done! c0 h0 n$ f; ]- ~( \  f

8 l+ \; T- p  S- f3 P0 y& G; Z5 i( z) D
  if [ $useStdCmdOpt -eq 1 ]; then8 t* A) d6 \/ b% \+ c
    # use standard powrmill/timemill command option
! A$ j! q$ L0 m1 s( X4 T    for opt in $CMDLINE5 B5 |+ I4 T! P! B- e
    do) F  Z5 F4 d7 y+ P5 ~
      case "$opt" in
* Z7 G# `+ e3 {        -A)
2 f3 L8 i: I. b8 f. A" H            DB_REAL=1
; g7 n  H1 l- ]/ K) Y6 o+ r: \            ;;6 o  T( [% z9 H$ g1 T8 C
      esac
, X1 f; b3 |; R" j    done/ A4 e* Y; O; @" P+ C# x
    if [ "$netlist" != "" ]; then
1 V3 m% J! a( a      CMDLINE="-nspice $CMDLINE"
2 i  S1 j& C2 A7 \0 V% a    fi7 U& A( X/ V4 Q* \4 y3 d8 x+ A
  else
  T7 x+ A9 n* G% W+ \  s    if [ "$netlist" != "" ]; then
! R: j) N9 ?+ n. s      EPIC_DEFAULT_CFG_DIR=${EPIC_DEFAULT_CFG_DIR:-"$EPIC_AUXX/etc/$cmd"}
( i3 V/ \  h, R) p- }; @; O, ^$ z8 N      # construct new command option; {, c5 u( f0 g0 \
      if [ -f $cmd.ini  -a  "$circuitType" = "" ]; then
+ z0 n8 V4 k0 u. i* \+ B1 \        CMDLINE="-nspice $cmd.ini $netlist"* ~) L# R) {# ?: D4 Y5 `4 }
      else+ Q+ O  }( J9 L+ Q4 E7 \1 M
        if [ "$circuitType" = "" ]; then& W2 \# Y& g( z. i: y+ s$ m
          circuitType="msana"
  W$ _! ]! S, r: l, _& s* i: j        fi6 F/ [* k1 v) }8 m! J2 V
        CMDLINE="-nspice $netlist -c $EPIC_DEFAULT_CFG_DIR/$circuitType.cfg"
# y( P, ]! g! u; P/ v$ i9 I8 j      fi
: ~8 t: l9 ~4 b& ~' \0 c      CMDLINE="$CMDLINE -A -o $prefix"/ w, Z2 N  k7 b( l9 a
      DB_REAL=1% ~; O& v7 W$ x* {1 T( \9 K* S9 y
      echo $cmd $CMDLINE/ q) x% W% W9 x2 x  |  R
    fi, j: Z+ ?% l0 C  _  h% j+ f' d
  fi% z& x: I" G1 U% @/ `, m
fi # cmd is timemill or powrmill or nanosim or railmill or pwarc
2 o# D  {( I4 n! k  T9 T- W) [# [1 W/ }' z
+ n- H9 W, w/ |5 t[ "$HAVE_DP" = "YES" ] && [ -x "${command}_a" ] && command=$command"_a"
: Q2 z, }; ^: r; \0 u# ?! B[ "$USE_ACE" = "YES" -a "$DB_REAL" = "1" -a -x "${command}_a" ] && command=$command"_a"& l  x! i% i( L
[ "$USE_ACE" = "YES" -a "$vlog_design" != "" -a -x "${command}_v" ] && command=$command"_v"7 o" Q* S# v! @+ V" W+ l% _$ i

/ k5 y8 R3 }8 p0 Sif [ "$__engine_wrapper_called__" != "Indeed" ]; then
- ]* J4 q1 L. ~  F    __engine_wrapper_called__=Indeed
0 r$ ^/ o* f1 b7 t5 L+ }3 D    if [ "$cmd" != "amps" ]; then
  X9 m* o% z6 A- }2 Y2 a% A        export __engine_wrapper_called__* J1 e/ C5 |7 J# F1 R
    fi. c4 p) c4 ]( o/ `
0 b% |0 @+ O2 L$ V# a
    trap "cleanup" 07 i8 k& O8 t" p7 ]5 I$ n$ n
    trap "" 2
$ y# D1 ~/ b0 P- M! D9 r! S$ g7 ]4 P
    [ -d "$rundir" ] && rm -fr $rundir
! Y5 W: P2 S. T7 R5 D    [ -d "$rundir" ] || mkdir $rundir
6 @: ^! q% g  ^' Y* ]- V! q. X' {5 O( Z( l
    case "$EPIC_ARCH" in! ~* u. h, B) {* n' P$ c) M
    *SUN*64)   - R1 y; g. R" A3 ~4 _8 V; C
        LD_LIBRARY_PATH="$libpathLD_LIBRARY_PATH"
3 s4 }' @- v- {& F        export LD_LIBRARY_PATH) ^- u8 N+ w1 I, ?; M2 N
        suffix=.so
/ Q; e/ l& ]* `$ e        ld_err_code=1274 a" p+ H0 A8 L$ N2 H0 U
        ;;
+ m* c7 q4 B2 l# k5 [. c( Z    *SUN*4)   
5 c) {& b- E6 M# o4 C! j        LD_LIBRARY_PATH="$libpathLD_LIBRARY_PATH"
- \( g8 `# W' ]; s& j7 q; J/ z        export LD_LIBRARY_PATH3 a. e9 Y" G# A7 w( e9 b) Y+ n
        suffix=.so.1.0
2 c* ~& h' d: B7 Q  P9 [        ld_err_code=127" Z$ p1 K( ?4 G. o- Q5 {0 E6 ]
        ;;& m5 ]# V+ |: K) [$ U. i
    *SUN*5)   
8 x& A  o) Z5 D9 Z0 u* B/ w        LD_LIBRARY_PATH="$libpathLD_LIBRARY_PATH"
9 R  @9 I. t  `0 P! S% J        export LD_LIBRARY_PATH- C$ a/ O. `0 `) Z1 m
        suffix=.so# Z/ X5 G" [7 v8 T$ L  X7 V
        ld_err_code=127
7 ]# j& E! N0 d, k1 P( C        ;;6 l' }" g; ?+ N  e
    x86sol*)   9 q  X2 W7 ~; T' W/ \  u
        LD_LIBRARY_PATH="$libpathLD_LIBRARY_PATH"  B, k* B6 w: X
        export LD_LIBRARY_PATH
; X$ Q; T6 w+ ]& Y" n: g        suffix=.so
% R/ b6 C7 ^! r: f& B        ld_err_code=127( s) n. E! K% p# V
        ;;
) [; {0 v- i* {    *AIX* | aix64)   , `* T- l9 a7 I
        # When genepiclib creates shared objects, it creates a import file and / p5 X- P0 J* w
        # uses timemill as program. So at exec time,program timemill is needed
4 R6 B! c! I& m9 z+ r2 x        # in LIBPATH8 ]1 R0 E, ?9 }8 Z7 p; e1 h; ?$ c6 ?
        $ln_default $command $rundir/foomill
3 m3 j8 N2 j& ^. k  A0 o        LIBPATH="$libpathLIBPATH:/lib:/usr/lib"& `/ Y3 j) Y, J) d- z+ @% T+ ~8 A) y
        export LIBPATH% C/ w( E2 p2 v/ s! s' ]
        suffix=.o0 \0 v  G/ w9 X+ t# H
        ld_err_code=8$ Q2 ~% ]: [' ?- P) s
        if [ "$EPIC_ARCH" = "RS6000_AIX_4" -o "$EPIC_ARCH" = "RS6000_AIX_5" -o "$EPIC_ARCH" = "aix64" ]; then$ t3 j  `2 B1 y+ g' n
          tdir=`echo "/tmp/d"$$`
3 E# L3 d2 @1 u3 j8 @          [ -d "$tdir" ] || mkdir $tdir6 q% W& c7 E8 c# e
          if [ -f $EPIC_DIR/libCustom.o ]; then+ D4 k, H2 j3 C0 o3 o# z0 a; J
             cp $EPIC_DIR/libCustom.o $tdir/
$ |- f) [7 T5 L             $ln_default $tdir/libCustom.o $rundir/6 h' K. i0 G0 h: Z) B" a
          fi2 y- ~, ?% X! C  n
          if [ -f $EPIC_DIR/libModel.o ]; then4 }8 B9 m) X0 r+ \0 a
             cp $EPIC_DIR/libModel.o $tdir/4 N2 V* |, s# \5 H
             $ln_default $tdir/libModel.o $rundir/! p7 A4 _! J8 c3 V" Q- N
          fi$ P6 E2 e/ O7 s1 \" I  u
          if [ -f $EPIC_DIR/libFuncModel.o ]; then
9 U* d. w, F& q: C. }             cp $EPIC_DIR/libFuncModel.o $tdir/+ k- z) T8 |6 T/ }5 S' }  ?
             $ln_default $tdir/libFuncModel.o $rundir/) j9 i! @- e3 C5 U8 n2 |- k' j. {. z* ^
          fi( x( U! p; |# U6 U3 l. s3 y
          if [ -f $EPIC_DIR/libFuncModel.34.o ]; then
; ?, k) b% g- y( h. @             cp $EPIC_DIR/libFuncModel.34.o $tdir/! q; z8 }0 z6 {( H
             $ln_default $tdir/libFuncModel.34.o $rundir/
, R" i2 [: W# T          fi
% d# {" _/ Q2 t6 S5 B4 k7 R0 T        fi' _9 A1 O+ G( \" |! C! A2 \
        #Set the IBM flag to enable more shared segids
6 X. F* R; W/ [: q# p* D/ N        EXTSHM="ON"; ?9 k* {, M- E7 ^. Y+ }1 h1 q
        export EXTSHM7 S1 P4 C  @+ j% K# J$ k
        ;;  C, z) e* z# m" r
    *LINUX*)    . u6 j2 v6 M; v! K
        suffix=.so
3 ]: Y# _) f2 r' l# N        ld_err_code=13 R/ W% L* U9 t% ^
        ;;
9 F- K7 h) O6 ?6 n& x    *amd64*)  c" j: i; A0 P% g1 [
        suffix=.so5 U: x+ ^" [3 ?* z3 y4 b7 H/ G
        ld_err_code=1
. T4 v! H% o. U1 a& j        ;;" h6 _4 F) q. H- T" N# u1 S5 d
    *suse64*)1 d7 g, {2 g% o: y
        suffix=.so. ], y( ^' b0 q! m0 C2 o9 S- v
        ld_err_code=16 l9 o6 B% _0 Q4 D& y3 ]2 [
        ;;
: t7 r' j1 ^, o3 f* s( ]7 {! u    *suse32*)    & q3 K" @. o. d: T. o2 }  q
        suffix=.so  [2 m: d& q) h) k; o
        ld_err_code=1
' |: \) _6 C1 ~. ?. @7 Y        ;;
, R$ E% K& y1 t) M/ Q    esac
, h% o1 d6 ^  p8 p
; E' i* ]( c4 F    [ "$has_custom" = "YES" ] && ulib="$ulib $cwd/libCustom$suffix"% T* j2 ?& R9 A& Y9 p) j- d
    [ "$cmdname" != "timemill" ] && [ "$cmdname" != "powrmill" ] \* N; r8 }7 l2 k9 G
        && [ "$cmdname" != "nanosim" ] \
1 ?! l- C7 W6 N% n        && [ "$has_model" = "YES" ]  && ulib="$ulib $cwd/libModel$suffix"
5 M  k: z. r/ O: B    [ "$_VA_" = "YES" ] && ulib="$ulib $cwd/libva$suffix"
( v  B. ^2 R4 T/ Z$ A( Y  h' x9 r2 ^
#Look for command line option for libFuncModel.so
5 m' l3 Q) u" b. N/ Z+ |#    user_library_next=0
( h9 @, r1 L- g8 n1 ^5 \    has_fmlib=""
3 t  o1 n! F; b' C" B    for opt in $CMDLINE
+ X* _$ F' u7 s7 @    do
; V+ Y* t! t5 V, g      case "$opt" in . X' E7 d1 d& \7 n1 U2 n1 j
        -fm)
$ [7 y! A3 v/ g  J, Q/ `- N, Y            CMDLINE="$CMDLINE $cwd/libModel$suffix"" z6 O1 t5 a1 z6 R
            ;;9 K4 b- t. n! W! q7 }0 @- z
        -fm_user_lib)
' w" H/ \7 ]: V: P7 w; M            has_fmlib="YES"
/ _, j. q! {) U9 G: U2 A7 \9 x#            user_library_next=1
: D  [  Q& W7 s) S% l            ;;, F4 Y, f6 d4 ~4 X/ K9 G0 a, z
        -xc)
4 u7 e- ^$ C# [8 r$ M' A* c% J            if [ "$EXTRA_CAPACITY" = "NO" ]; then
; x7 l* I8 a1 ]9 U% x            EXTRA_CAPACITY=YES
5 L! w5 F% l' B. x6 g            fi; |) c( X! S' y: U" L/ `
            ;;
( V) @7 |# [# D# E+ q7 T#        *)( [" J7 o8 i) C9 m8 n
#            if [ $user_library_next -eq 1 ]; then
. H& E7 L9 B" w) L# Y5 c6 y#                if [ -f "$opt" ]; then
' u# l7 P" M! w5 [# W#                    libfmodel=$opt
) U5 W8 e- l, @$ B0 j8 C#                else$ \' F, P- @% }1 {) h4 ^6 C
#                    echo "-fm_user_lib: Specified file not found"
; _* G8 D2 \6 d0 F* q#                    echo "-fm_user_lib: Specified file not found" >> .epicscriptmessages
: i. L" P6 G  V#                fi
4 Y" K  l6 R$ l3 C#                user_library_next=05 d, ~3 o% k* d2 x3 y) h1 g
#            fi1 ?  b8 w4 p  V0 ~' Q
#            ;;
# {6 U4 ?+ {9 O% d. e% D- E8 N- l1 G        esac
2 m$ i( V5 W! s+ l0 S5 Z1 \    done' u$ f' b& o& g# R/ c- ^" h& i

+ s; k  A. Y% b6 N* C8 q0 o8 M    if [ $cmdname = "timemill" -o $cmdname = "powrmill" -o $cmdname = "nanosim" ]; then
; {* k: }! G8 |5 z( T6 J        flib=""
9 x& s7 Y. S  G- Q, E& _8 i        if [ "$has_fmlib" = "" ]; then9 N) W" U! D) j/ J, K8 o8 ]
            flib="$flib `get_epicrc ./.epicrc user_libraries`"
6 U8 ]& M3 f" ?8 E  k' }) B            flib="$flib `get_epicrc $HOME/.epicrc user_libraries`"& R" V) Z+ j$ ]7 j
            flib="$flib `get_epicrc $EPIC_DIR/.epicrc user_libraries`"
6 f, ?- G" X/ K$ A) S2 p        fi  C1 |" `8 g7 h+ X9 ~9 `
    fi
, {. {& {8 J1 \  e
% r. O, C, [: n  K: {   for i in $ulib
/ r+ x8 U" \6 v+ H   do$ T9 P4 J  _9 ]. u0 r( o& u
       [ ! -f "$i" ] && continue' M5 ^$ M  p8 I4 s+ u
       dir=`dirname $i`; cd $dir; dir=`pwd`; cd $cwd: W; O( A) p' X
       i="$dir/`basename $i`"
. E; P; P  {+ h' m* {       case "$i" in
/ R9 t+ t9 ~8 S5 u       *libCustom$suffix*)    [ "$libcustom" = "" ] && libcustom=$i;;
" g( h# Q9 k* j5 Q. C) s9 u2 g       *libFuncModel$suffix*) [ "$libfmodel" = "" ] && libfmodel=$i;;
, E3 s. K! M' S2 m       *libModel$suffix*)     [ "$libmodel"  = "" ] && libmodel=$i;;
9 x6 {. c- B2 R) {0 r1 b+ ^/ _1 M       *libva$suffix)         [ "$libva"     = "" ] && libva=$i;;
8 b/ {! l) C* j' A, D+ C" ^( Y" _       esac% G& x/ b3 [4 m  [
       [ "$libcustom" != "" -a "$libfmodel" != "" -a "$libmodel" != "" ] \. H( j' ~3 T* A  f: F
        && break
$ g, ?, N) d: z* `" G, ?% S   done# b( L$ l6 I' K: S' u0 Y  K
8 B. T6 s0 o5 ~- Y: ~1 |4 c9 O
   # symbolic link shared libraries to .epicrun$$4 K/ d( o" h0 `
    cd $EPIC_DIR; epicdir=`pwd`; cd $cwd
8 j, T0 [$ [+ G3 B    if [ $cmdname != "timemill" -a $cmdname != "powrmill" -a $cmdname != "nanosim" ]; then4 m$ ?8 }) H! J* j+ t
        if [ "$libfmodel" != "" ]; then
9 a" E, g: o& p+ C" S9 q             [ "$libfmodel" != "$epicdir/libFuncModel$suffix" ] && \
" w/ M& F7 Q4 W4 J             echo "Using $libfmodel ..."  && \$ ?9 Z) q3 F: Y7 ~  y
             echo "Using $libfmodel ..." >>  $EPIC_SCRIPT_MESSAGES_FILE$ Z" y0 g* y! B" |% J4 h
             if [ -f $rundir/libFuncModel$suffix ]; then% B8 h$ d& F$ g6 v( l0 Q) H9 y; A
               rm $rundir/libFuncModel$suffix
' q5 P% R7 P8 N" j" L: t             fi
/ c- J* m0 c7 K0 ^; b7 }8 Z# y             $ln_default $libfmodel $rundir
2 f5 f5 u: Q, @% D3 W' v1 p        fi
* q: S3 F6 ]$ \# L2 v( [9 @        if [ "$libmodel" != "" ]; then
. j' {9 S9 C$ w) k5 b1 z. \             [ "$libmodel" != "$epicdir/libModel$suffix" ] && \9 R9 j9 t( w( y: J& t
             echo "Using $libmodel ..." && \
" u& s% I3 _) X7 \  `1 m             echo "Using $libmodel ..." >>  $EPIC_SCRIPT_MESSAGES_FILE( ]) q5 L' ~7 R+ A' D6 T
             if [ -f $rundir/libModel$suffix ]; then
5 r) H5 e: |# u' V8 N) z               rm $rundir/libModel$suffix$ n! M" ^# K+ f" a3 Y1 e3 G
             fi
0 z: v) \" S+ E9 ]: C             $ln_default $libmodel $rundir
. Y3 {2 Z- _/ |5 y" s7 {/ M        fi
4 V2 r8 Y* F" j. A4 P! `   fi# |( v/ d9 `' `6 o
   if [ "$libcustom" != "" ]; then( u8 d/ W3 h& T. v6 t* @) J7 N7 y
        [ "$libcustom" != "$epicdir/libCustom$suffix" ] && \# p" f. o2 c5 b7 m
        echo "Using $libcustom ..."0 s* Z! `9 Q9 Z" C7 Y/ i, v' L
        if [ -f $rundir/libCustom$suffix ]; then
1 S& |0 j+ J: q          rm $rundir/libCustom$suffix
8 V- }7 I& R( `        fi* A) e/ U& M& \
        $ln_default $libcustom $rundir
+ v! @% B' E$ d6 ^   fi' @/ _( P8 I! A/ S% b- c

# P. l0 m2 j* z' V! s   if [ "$flib" != "" -a "$flib" != "   " ]; then
, n  `4 C( f+ T7 N+ ]4 w  Q) F* O8 d        CMDLINE="$CMDLINE -fm_user_lib $flib"7 k$ L) u; x5 I3 y
   fi! ^& _7 U3 u, y& W& c8 b6 L
/ A" P1 z) t% ^# f9 S
   if [ "$libva" != "" ]; then. V6 u& v9 s% d2 K' U, a
        if [ -f $rundir/libva$suffix ]; then
" q! m/ Q  A: M4 Y3 v          rm $rundir/libva$suffix, x/ g1 w3 }" I& l7 }" Q- C9 j
        fi
; K) v. H2 F# Z4 ~1 L2 f        $ln_default $libva $rundir
' R' F3 t& G' V/ }1 }  \   fi2 T2 ~7 q& ^9 D* x1 ?& a1 L
' h5 k! Y* N2 M5 U( u& T6 X7 Z3 Q% n
5 B$ S& B& F- M, h0 K% m7 D1 r5 x7 J
    # VCORE design library' ^6 K0 p- f/ t% Y. ?8 c5 A. i
    if [ "$vlog_design" != "" ]; then
  @: a2 Y4 L, C# q: M        $ln_default $cwd/$vlog_design $rundir/`basename $vlog_design`' p" p3 p& W% |  s
    fi
2 _) J. z$ b" F6 W. R9 o+ d' s* Q! l; G& Q) v1 f) H
    if [ "$EPIC_EXTRA_CAPACITY" = "1" ]; then0 @9 _# m$ s3 t
        EXTRA_CAPACITY=YES( L3 S4 D* u, s8 W; f
    fi
& z! ]7 w5 y9 w. H5 B8 l, d$ K& p: n9 z9 D
    [ "$EXTRA_CAPACITY" = "YES" -a "$USE_ACE" = "YES" -a "$DB_REAL" = "0" -a -x "${command}_xc" ] && command=$command"_xc"
' h0 ]0 w, O# X  z    [ "$EXTRA_CAPACITY" = "YES" -a "$USE_ACE" = "YES" -a "$DB_REAL" = "1" -a -x "${command}_a_xc" ] && command=$command"_a_xc"/ v+ W- g; H: X4 s
    #Create temp file if dual process is on2 ^  ?0 X* m! p8 k: e+ R
    if [ "$EPIC_ARCH" = "SUN4_SUNOS_5" ]; then
6 V4 _- G% R1 c        if [ "$EXTRA_CAPACITY" = "YES" ]; then: C7 {- O# y' e: S% ~! d2 b1 `0 \7 F
            touch $rundir/rpcidfile! y* z5 S2 d7 M& \8 l0 h
        fi" I) a- ]6 M4 j  A) V
    fi: Y3 e0 e7 _/ X' |. l( o7 z
fi: m" R1 c/ f2 [/ c" N2 j# m4 G
! `1 a, c+ S. |7 r4 l. }
run_cmd()8 ?; B) J1 i' C
{
* N5 i" l2 i8 a0 R4 D0 a( g4 k! y  command=$1" p, i1 Q/ O  g2 s  o
  shift8 N6 L; Q. A1 e1 ]# Y+ F  M
5 G8 |' G2 f. X2 j/ V# c
  if [ x"$VA_FILE" != x"" ] ; then
& `5 }% V* D. E! ]1 e6 m     cmdline=$ARGV1 s8 W6 w0 e3 X. J' _
  else
0 r" T* U+ s9 m4 w     cmdline=$@
- c. u1 r3 ^6 B! O  fi
6 q/ p- B. `( ?
; r! q9 L- w8 a! }* i  debug=${DEBUGGER:+"$DEBUGGER $command"};6 K" x4 c6 m- K7 ^3 y2 o) K& ]6 T

8 k8 ]) Z  o% z7 \, T* ]2 [) U  # To disable Exec-shield-randomize in RHEL3 U3+ when running nanosim and nanosim_a
( T. h! l0 A- D: N  # so save-restore may work.
6 N* D) Y$ o( H  setarchStr=; v1 V7 C7 N8 T  V" B
  cmd2run=`basename $command`
: _8 C$ g5 y4 A% h$ I  if [ ${cmd2run} = 'nanosim' -o ${cmd2run} = 'nanosim_a' -o ${cmd2run} = 'powrmill' -o ${cmd2run} = 'timemill' ]; then2 a  F7 r! {! I- E6 |5 R* j
    if [ "$EPIC_ARCH" = "IBMPC_LINUX_LINUX" ]; then
+ q) `4 d5 v' K; h/ b' Z      setarchStr="setarch i386 -R "
+ C# t. A3 y7 k    fi
3 G4 y4 u. z. W% T5 z    if [ "$EPIC_ARCH" = "linux" ]; then
. L) Q0 C+ a% Z9 X* a) Y      setarchStr="setarch i386 -R "
% _/ Y/ L; e; b* C; X    fi/ ]7 h7 x! k& D& k0 j
    if [ "$EPIC_ARCH" = "amd64" ]; then9 D" L& e' v. r9 b6 j$ M
      setarchStr="setarch i686 -R "& W% e. g/ L4 m0 o8 G1 T/ |! F! R
    fi& V- b) Z; b; x
    if [ "$EPIC_ARCH" = "suse32" ]; then
+ W: t: n4 M) c      setarchStr="setarch_suse i386 -R "- }1 }7 Y; F3 w
    fi
  w& T2 R) G8 E    if [ "$EPIC_ARCH" = "suse64" ]; then/ ]( W5 y; F3 S. W
      setarchStr="setarch_suse i686 -R "! c9 Z7 M$ i& Q# }* v: a
    fi
5 {7 A8 B- O( g! ?5 S9 @  fi! {: E! n6 P( r- T

$ B2 r" ?: L! z0 @* h- J  ret_stat=07 R+ f" t! z7 y
  if [ -x "$command" ]; then- d7 b6 M- c+ s( {% m$ _2 F0 E
      if [ "$debug" ]; then
# m1 D! C1 V3 L9 i' }/ r        _debug_args_=$cmdline
1 c9 q& A, W- j0 c2 h$ k$ J        . .epic-debug0 D0 T2 ]/ O4 i- W/ f1 e* n
      else+ @1 K8 e1 y% l& H7 t
        DEBUGGER=; export DEBUGGER9 l( b7 `. L3 X/ w( B: t  q
        $setarchStr $command $cmdline+ D8 h! ], b/ B7 R$ e
      fi% j; i$ l0 M, \9 Z2 k
      ret_stat=$?
3 O: t+ C9 ~# F  @& R! C/ H  else
  z- G0 ~, g' o6 e6 W8 Q+ D    echo "Corrupt installation, executable \"$1\" not found!"
# T2 E4 N3 a1 {: i    ret_stat=1& n0 U  e) D3 _% W
  fi
; ^: R9 ~( E: ?+ P}3 j6 `. i9 D4 g  r
' G( i+ W( z+ L6 ]. e8 z4 S# O3 }6 e
# keep runing cmd if ctrl file exist
  ?$ K9 ^, N( p5 T- S/ V( m
$ d, b4 r, _' I- K6 U3 A, t9 a% Qrun_loop()
7 ~) @0 H5 w4 U% t{
) D3 ]( T, Q; t# f/ K& a* a% P8 @" n' s  command=$1
, A4 V0 h8 i& v& |  g& `  shift
8 u% @8 _3 D9 }/ {
9 C; k) H6 n9 Q- |1 c2 a* m  if [ x"$VA_FILE" != x"" ] ; then+ k4 o" n! _& V) t
     cmdline=$ARGV* o( U0 `, `# C- `9 I# K3 Q
  else
- c% _, l5 r0 Y- [3 j; `     cmdline=$@
3 @! B  N2 |3 J+ z& @9 [  fi
+ x) J/ k/ H" s" P& Z3 @7 G7 J: E  H
* r  w. l  U' `$ ^& B8 m  while [ $ret_stat -eq 0 -a -r $LOOP_CTRL_FILE$$ ]; do
; J' v. u- L" [* t  h1 H" s    . $LOOP_CTRL_FILE$$; k% b+ {* [. ~8 t8 d: W
    run_cmd $command $cmdline -banner 2
1 @# [; G3 z8 P4 ^; s9 j! j( V- S! z  done;5 y" Z/ z. }' W8 L+ I; f

% R! c  x: l1 E5 L7 C& q  if [ $ret_stat -ne 0 -a -r $LOOP_CTRL_FILE$$ ]; then$ ~4 Q! N; z% k8 k7 k. n7 D
    rm -f $LOOP_CTRL_FILE$$+ C  m* B- c# V+ p
  fi! _) P! ?  y6 l) E
}
4 f, X# @0 y/ n( @& u2 R& Y5 y  |1 _7 c1 n2 ^
har_check_ret_stat()
. _7 [3 Q  F/ [$ f$ J5 B: l% K( R) j{
+ q4 V; y. S! ~1 o3 X  if [ $ret_stat -ne 0 ]; then
# @8 Z' Z& e2 r( e    echo "Simulator returned with non-zero exit status. Stopping."
3 B( a8 }% Q2 N) J" g    exit 1- R+ b& ^- y! h: _' {; G
  fi. B$ v( r( b! M) a
}* Q& N* y: F1 i
6 s$ l4 j" D% a6 L" e
#
# I/ }, l% L9 P2 s- P# set stacksize and datasize limit) R- T% J8 |8 C5 O; m) A- ^
#
! B7 \; w& ~1 l7 U
. _8 q- {" D' z6 t' k' |set_data_limit
: A" e2 j1 `% Sset_stack_limit
# T$ q" @& u0 F3 e3 H5 y$ C# [* t1 z& B" s
#rm -f $LOOP_CTRL_FILE
- [( X7 `- y4 C+ l1 e0 X3 g4 @" f: n5 Q& a
run_main()7 [, t" K9 L! h- M* r9 t
{! c0 \' I0 g4 f0 H
if [ $is_special_har_run -eq 1 ]; then; D, o9 s, T+ h# A% E
  if [ "$har_ofile_prefix" = "" ]; then
- m2 x9 R+ d  ^) r9 {) @    echo "Wrapper bug. Notify Synopsys technical support."
) K; |* \' w; D' N- Q8 o& e. [% ~    exit 1. V0 Z% @4 d; ?" |
  fi6 ^3 _2 k2 {* k$ @* [
  if [ "$har_hilo_file" = "" ]; then7 U; B! [& V3 h' \
    # no user specified hi lo file - do both runs
  G# s7 e* p: B* W$ N" H    run_cmd $command $CMDLINE -har_one -har_setup
4 D' q6 Y7 a1 ^" d    if [ $ret_stat -ne 126 ]; then  y0 t* _( w/ m) n& g3 ^9 o  r  d: M
      har_check_ret_stat- k  H! s: d! R' t
      if [ -r $LOOP_CTRL_FILE$$ ]; then6 l& Q6 R$ _" R) y+ ]5 ?8 }! Y
        run_loop $command $CMDLINE -har_one -har_sim ${har_ofile_prefix}.hl
% D5 g0 E# |8 i& F/ S+ j* F8 A        rm -f ${har_ofile_prefix}.hl2 v* K* c4 v% u' ~
      else+ a' v$ x7 X9 M: W* {
        run_cmd $command $CMDLINE -har_one -har_rmhilo -har_sim ${har_ofile_prefix}.hl2 Y( Z$ B( v  Y5 q2 P, @. c
      fi# V- q6 j3 d( V" v
    else
, F. b9 e8 B; Y      ret_stat=0  |. Q  f/ ?3 I  f0 k) d! R7 t
    fi
: D/ p0 r! C/ A" k  else
8 N% Q7 B8 `* O, V+ K$ X    # user gave a hi lo file name" F( F! c1 R0 n& u' x
    if [ -f $har_hilo_file -a -s $har_hilo_file ]; then
5 A) m4 d" z( m7 [% j      # file exists - use it - only do sim run! |6 L9 G/ k# p
      run_cmd $command $CMDLINE -har_one -har_ff -har_sim ${har_hilo_file}' ?, _1 S$ q! U- `7 _0 a
      run_loop $command $CMDLINE -har_one -har_ff -har_sim ${har_hilo_file}# `$ Z6 w  a" w2 {- R- ]
    else
5 P, ?* Z8 J; `  m% ^9 P) M      # no such file - generate it - do both runs6 I. `  z0 v9 Y5 w
      run_cmd $command $CMDLINE -har_one -har_fnf -har_setup) G' w3 y* ]/ L% c
      if [ $ret_stat -ne 126 ]; then
1 d% ?/ v+ k5 R; D2 C* \/ T        har_check_ret_stat
/ C1 k/ O2 {) ?9 V& j, t  e7 e        if [ ! -f ${har_ofile_prefix}.hl ]; then2 w; H9 G8 q+ }0 {8 @8 ?
          echo "No hi lo file generated after setup phase. "
8 @5 f( e6 v- i          echo "Contact Synopsys technical support."# q- T/ N- U; H& W4 f, f0 r$ T
          exit 1
# [8 E7 q8 Z. R2 a5 W# N0 b        else4 r( `) ~" ~$ B) I% h$ q
          if [ ${har_ofile_prefix}.hl != $har_hilo_file ]; then+ ?" y3 k- d* B, |- g
            mv ${har_ofile_prefix}.hl $har_hilo_file, b& E% ]5 p/ `0 M3 c! @
          fi; J. B4 [6 w0 l4 ]
        fi
9 _' Z! b& c8 s        if [ -r $LOOP_CTRL_FILE$$ ]; then
2 j% @6 h/ J; A5 S& G/ T/ {          run_loop $command $CMDLINE -har_one -har_sim $har_hilo_file
0 y* C* X) ]8 w1 f, e" y        else  R, i/ K& D4 ~
          run_cmd $command $CMDLINE -har_one -har_sim $har_hilo_file9 r3 q$ f* |* G; k4 J6 _) m3 e# F; ~) P& ^
        fi
: n5 L! ]% F0 D& ~9 g8 }, w      else
" G/ w! v: u. b% m        ret_stat=0. e  P7 A4 L5 P2 P' V
      fi5 v. v  w( I- |% S* U' {/ C5 G# [, `; O
    fi
! ]. I1 F, f, J0 B  fi  @- O3 u* h8 ]& H. V7 u
else  
; g, i8 y2 A. \8 ~; |( l, {# don't loop if -har_setup+ ~, z# t2 f9 l+ m+ f" H
  if [ $have_har_setup_flag -eq 1 ]; then
/ `# o" b* P. o, b; b- o+ k* Q    run_cmd $command $CMDLINE* @" s7 G% Y$ v
    if [ -r $LOOP_CTRL_FILE$$ ]; then0 _% s/ I" V1 c+ R
      rm -f $LOOP_CTRL_FILE$$, I! |! Q$ ]2 D
    fi
8 @# g" g3 ^% m+ F- y7 H4 X  else6 z! S: g0 W: G- H) t+ _1 u
    run_cmd $command $CMDLINE- L. S! o" N: y
    run_loop $command $CMDLINE
4 ]4 ^: _' Z3 Z7 S  fi
, O1 V8 D0 L! \fi
7 u( {1 z8 A+ v* s+ f# e7 g/ O! x0 V' m
if [ $ret_stat -eq 0 -a $cmdname = "powrmill" -a $postgres = "y" -a ! -z "$workDir" ]; then
9 b& J: Y9 W" d6 y- B! h+ ~- }" c  pwCreateErrDB -w $workDir -e $errFile; @9 a) n" {/ x/ ~/ U
  ret_stat=$?4 x- T6 }# a; g% T( p) R
fi( b( l8 @) z5 ]8 i% e
}
% r' k( ?; u2 w: y6 s8 D0 A
/ t6 i0 g  e) Z, c3 |, }5 Y" z# rcleanup_alter(); `, J: ]  z. }; S' x3 G2 n
{
3 R' ~& y/ u% C4 t6 j0 p   /bin/rm -f $ALTER_COUNT_FILE 1>&2
! i) e; ~! |$ P6 M& v3 f   /bin/rm -f $ALTER_HK_FILE 1>&2
8 U9 X: r! s; v( O3 W}
; Y1 ~7 w0 K, s
* z" y. O/ b0 O2 s7 ^. w#generate alter temp files based on pid
1 a3 l5 o# {$ M) Y/ a8 oALTER_COUNT_FILE="$ALTER_COUNT_FILE"$$; y0 V" _; I! d; y" C  H
if [ -f $ALTER_COUNT_FILE ], Q- Q4 I& a0 G7 A5 m4 R
then
+ k, _+ l6 p* ^+ z8 o% P6 R% G  until [ ! -f $ALTER_COUNT_FILE ]
* a: b3 d2 d6 h2 q6 I+ v9 d: O  do
% d8 q* ^) d5 b  ?) q  n    ALTER_COUNT_FILE="$ALTER_COUNT_FILE"$$
' w/ z4 B% o! M% s, |3 e' W, k  done
+ o1 Q) |) _$ s  p& B1 H( Bfi" {( O; J9 ?  |' Z/ j" r; W
export ALTER_COUNT_FILE0 ~7 d! J6 C. e0 u. g$ R

0 {& Q; C1 K3 X; O1 _$ MALTER_HK_FILE="$ALTER_HK_FILE"$$: v2 m) F' c* b! x- d$ O
if [ -f $ALTER_HK_FILE ]
% h) x! m1 W5 N: ~( ~then
' O1 N6 I) Q; y3 w/ l$ l  until [ ! -f $ALTER_HK_FILE ]/ w* @9 C% \' c; l
  do
$ n* x; P5 g5 T1 m  {/ |    ALTER_HK_FILE="$ALTER_HK_FILE"$$
: r% f0 P" Q: \" V5 f, J  done* b& @$ \1 D' E7 C" t+ y
fi
% O, R1 a* i$ M+ I/ bexport ALTER_HK_FILE
7 _2 R: u% `3 ?  H1 M
& \6 m. _% q- ~) C9 z) E2 H#generate monte carlo related temp files based on pid
: E& Y& g0 q! `' G# D6 jcleanup_monte()8 c/ K) ]  @) }8 D9 Z# M
{
  ?2 l3 r* K9 G" L* k# s& Q   /bin/rm -f $MONTE_IMG_FILE 1>&2
9 E+ q' |7 O; \1 i2 z2 K3 n. D+ C   /bin/rm -f $MONTE_IMG_FILE.gz 1>&2' y3 i! j- W4 L8 _/ G: p
   /bin/rm -f $MONTE_COUNT_FILE 1>&2. Z6 ~6 ?1 w* S' V! s( d
   /bin/rm -f $MONTE_CFG_FILE 1>&24 O# |8 D; k8 G" \: C9 [: r
}
3 W. m. l  ]. M
" b  v' U( c- g7 f# y" GMONTE_COUNT_FILE="$MONTE_COUNT_FILE"$$" l6 c  R5 L8 ^" w# r& \
if [ -f $MONTE_COUNT_FILE ]4 U; y9 R5 w( M- l0 P( \
then
( @  m9 ~1 C/ [5 H  until [ ! -f $MONTE_COUNT_FILE ]
: r% x. S1 V0 M3 h; q* n  do
3 {" R; y* Q, D4 o! ], ]    MONTE_COUNT_FILE="$MONTE_COUNT_FILE"$$
. R! y5 ~3 G, m. m+ E$ w+ R4 U  done  f( m/ E( U/ I( N7 {& ]! ?2 `
fi
! n3 K& @! z3 hexport MONTE_COUNT_FILE
+ K. k5 B; n$ P3 C* B- a  T  @6 d7 o- |3 v3 ~, ~, n8 G
MONTE_IMG_FILE="$MONTE_IMG_FILE"$$
( g  |0 k: }; U9 T  bif [ -f $MONTE_IMG_FILE ]
9 N# @( L3 k6 L0 s/ nthen
, ^1 O. Z. d! T! d- C  until [ ! -f $MONTE_IMG_FILE ]+ x4 R3 [- O0 S( J- a
  do5 |' F( r4 K. @1 p# N2 q
    MONTE_IMG_FILE="$MONTE_IMG_FILE"$$; p  U' I& G# Z0 R1 T8 g
  done
8 b* a6 k0 a5 Ffi
8 E+ R  V5 s% t2 z& B: Lexport MONTE_IMG_FILE! k# {8 v3 B* U8 B& g" {( ?
. K$ C3 V$ @. P+ O+ n
MONTE_CFG_FILE="$MONTE_CFG_FILE"$$" Y9 K% W8 x" W& @+ O1 E$ Q
if [ -f $MONTE_CFG_FILE ]! j8 E: u# T: ]+ \. Q
then4 A5 b: r) x; D$ b8 n5 O
  until [ ! -f $MONTE_CFG_FILE ]" _/ p8 l! s4 Z) g
  do0 M# w! s4 w# p1 a' q8 h" r& t5 W
    MONTE_CFG_FILE="$MONTE_CFG_FILE"$$
) i5 i( h" x& }  done
& ^* s- t0 i/ E; C& |* }fi9 d, K  u& }/ B. q1 A
; L8 [! s% C' W. E' h. L9 H
# main iteration
& o' j9 U0 E. Xrun_main' e5 |8 D. j; e  d
* |9 ~: L8 Y3 I
if [ $ret_stat -ne 0 ] 2 l% G) b) Z3 o. k
then   L7 ^) V% I& c4 W9 _/ f
  cleanup_alter, O! k3 `- m+ f& }( b; H; f, F9 f
  cleanup_monte) F! K2 [  f# l* F
  Exit $ret_stat1 {4 ~6 Y7 f% n% a: F
fi' t3 W1 P5 z1 g$ C
5 f: k1 O& j# v! B1 |: Z
#Alter related iterations5 K  u9 }3 n8 L+ a# T; I2 z
& F9 C1 T$ K0 {% ^+ t5 q
iterations=0
0 e8 v5 J( S9 V! J: ?# Gcount=0
6 f. o( w  F$ R; o5 {if test -s "$ALTER_COUNT_FILE"& U: J- B9 t1 t6 S1 ~
then
% o- s% E7 D2 t  if [ -r $ALTER_COUNT_FILE ]; then  h: R) ?! v) I) N) C, t
   exec 7< $ALTER_COUNT_FILE
1 m9 v! C. W8 H& L7 z: v   read iterations <&79 n' p  ^3 ]: d( `6 y* j+ p
fi
; a& E' C  y; E7 J1 {% Hfi, O3 i. V$ q) c

! N; c$ v" ~1 x$ D* Otrap 'echo Program Interrupt; cleanup_alter; exit 1'  2' G. B0 M' b' Q0 H1 h
while [ $count -lt $iterations ]
4 j% h9 v& L4 m) W* x5 udo
7 d* N: i/ O: W: f: j" m. ] count=`expr $count + 1`
9 b+ Q( ^7 |1 J- j2 [ ALTER_COUNT=$count( q, K$ E3 c: E7 K1 V( o: V0 K
export ALTER_COUNT2 {% g* k" W5 s  J! [: s0 x

: j. k! b# @0 g" S5 _4 y( f) p- K, u run_main; `, n. ~4 m) ~. V3 O

% I6 q. A  E8 Gdone
# V8 ~. h. ^+ {0 `$ Z. f; c" O2 B1 k* ]( {
#Monte carlo related iterations
, Q& `6 p# I/ Q1 J7 [0 Q  x+ L  ^/ [! X* ]
monte_runtime_summary()) L' F7 P* U1 X! l7 J5 V
{5 X3 N! c4 r7 q# Z: k
  keyword_1=real  _7 G6 \( v% A3 v9 y. a& r
  keyword_2=user
* |( m$ b8 n- `% l8 I! j( n  keyword_3=sys
3 \  |) l% @5 t  ofile_prefix=nanosim
3 f  O' o3 I% J' F8 E" b  h1 E2 C2 x7 p- C! h
  if [ ! -z "$o_option" ]; then2 ^9 x& ~* o+ b' a3 n6 N' W
    logfile=${o_option}.log
, N: H" t! x# b: J  else" c6 t- c  r5 A- \( v5 `: \1 `# }
    logfile=${ofile_prefix}.log
6 J8 [+ S+ r3 c( O9 i  fi
6 ^$ P& Q3 N! _! G
! U9 t; h/ m/ c  if [ -f $logfile ]; then- ~5 O  u$ j4 L
    echo "*** Monte Carlo Total Run Time Summary ***" >> $logfile      , L% B8 J  {# j: m+ G% c
    cat $logfile | grep ${keyword_1} | grep ${keyword_2} | grep ${keyword_3} | awk 'BEGIN{ t_real=0; t_user=0; t_sys=0; } NF==6 { t_real=t_real+$1; t_user=t_user+$3; t_sys=t_sys+$5 } END{ print "\t", t_real, $2, t_user, $4, t_sys, $6 }' >> $logfile
6 R) X3 F( N; x' ], V/ l) l$ B1 j  fi
; ~* Y7 }7 r, S) S0 U; N) S}
; }' i8 t; A" D: o: B0 D5 _. p# T$ R% S& p6 x+ ?3 b
next_monte=0
: Z1 \) L, U2 t% Hcur_monte=0. l2 q9 U, E7 m$ W

0 o1 ?) V2 g$ dif test -s "$MONTE_COUNT_FILE"
3 g9 q6 S( m9 w# Rthen
( U/ Y+ S7 @( z3 H  if [ -r $MONTE_COUNT_FILE ]; then8 Q; ]/ r/ n. x% V! ]! l
   exec 8< $MONTE_COUNT_FILE1 v) u# j" @8 K- w+ I" \1 r; b
   read next_monte <&8
, n& Z4 |# P+ _* r' p8 n  fi
( n$ Q  m  x. A1 b) `, N9 dfi
* O! c' n7 _% V0 C) o7 h/ }$ f9 [3 g8 o1 x
trap 'echo Program Interrupt; cleanup_monte; exit 1'  29 V& j) R2 a8 H, b* H
while [ $next_monte -gt 0 -a $next_monte != $cur_monte ]
1 W" Q( }! |- B, _$ @, ^/ Ndo1 z4 s0 {/ E( E  p2 J1 [  a
  NS_CURRENT_MONTE_COUNT=$next_monte# d, N$ Y! E1 w# t! o" x
  export NS_CURRENT_MONTE_COUNT
4 g( |5 D5 P% M* K5 o
2 m3 Y3 t9 Z% V! @% W- l5 X  s% Y  echo "restore_ckt_state save_file=$MONTE_IMG_FILE" > $MONTE_CFG_FILE
/ B; E0 P  d" H7 j  CMDLINE="$CMDLINE -c $MONTE_CFG_FILE"
8 g5 u+ k$ e( B  run_main  M/ V8 E' T1 g% ^6 k

/ N3 M* C# @% R  cur_monte=$next_monte. k8 n9 t& E( g- h/ x
  exec 8< $MONTE_COUNT_FILE5 g. T0 l" s. s# v  E
  read next_monte <&8% z1 X) y, @0 Q: X" X. t
done) f' P2 m2 j$ I: ~$ y" i. ~

& x! D. Q& |: h5 J& Vif [ -f $MONTE_COUNT_FILE ]. J7 w7 V7 X, p( i4 `* e8 c% W
then
' J7 L' h+ t, G  monte_runtime_summary' A4 X1 z7 m4 t- S
fi( E$ N& w8 E) A- ]

# M( z4 Q( ~7 s( G- jcleanup_alter3 [, p# V2 b" q8 f2 h7 U. f/ g
cleanup_monte
6 @( C$ {) L( R1 Y- u
3 k9 |/ L# [0 H& \0 dExit $ret_stat

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2012-5-24 09:22:22 | 只看該作者
nanosim有說支援ubuntu 11.10?為何不用RHEL5,這才是EDA的主流linux os
回復

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

首頁|手機版|Chip123 科技應用創新平台 |新契機國際商機整合股份有限公司

GMT+8, 2024-5-29 08:02 PM , Processed in 0.155020 second(s), 16 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表