Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2012-5-6 13:58:13 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
10Chipcoin
各位大大好:) u2 g; E$ ^8 [2 g
                      小弟執行nanosim時,卻無法跑出視窗來,有個錯誤可是我不清楚該如何解決?問題如下
6 ?+ d8 c; g$ y9 A9 @                      [: 113: 64: unexpected operator  `6 e5 ^0 b( K6 G; d
/opt/EDA/nanosim/cur/linux/ns/bin//scripts/nanosim: 1: Syntax error: Unterminated quoted string8 D$ w% T% t3 H2 z+ v3 w1 w! ^$ P
有大大遇過這方面的問題或是指導我方向去解決, 謝謝. 4 M8 o# I" q' o" ~. J
我在猜可能是這個檔案內的文字需要修改 但不知道該如何修改?; a- z0 I0 P$ a1 y, N
以下為/opt/EDA/nanosim/cur/linux/ns/bin//scripts/nanosim 的檔案內容:8 T" g5 z8 S& }
    #!/bin/sh. t' s7 Z5 @! l2 Q6 y
#
& l" Y8 b$ H+ I1 Y* U3 k; p4 ~; i# Copyright (C) 2001 Synopsys INC5 K  u, o" B) h7 Q5 d
# EPIC Dynamic Simulation Wrapper (DSW)
# ~/ H2 C7 ~& [  d$ ^9 z0 v#& \- l+ v& W! i6 p
eval ${DBG_EPIC_WRAPPER:+"set -x"}% g7 T  u$ M, l9 k

+ ^0 U2 c3 W6 b: t4 k5 ~* k0 G9 {if [ "$EPIC_WRAPPER_DVLP" = "" ]; then% a. A# D1 F' S+ J# C; g( M
    TEMP_ARCH="$SES_ARCH"  t" x& x) ^9 P1 q2 \) t# R
else
' B, v0 Q) p* c7 v1 z, ?$ N! K    TEMP_ARCH="$EPIC_ARCH"
- K) y/ ]  F( B1 `fi
) Q6 S6 j7 }: \5 d9 ~8 E# t! R3 Y* V! e6 f' z9 z9 j5 P
scan_for_hva_args()
9 @6 ~& p$ ?$ e{
: r8 O" E' v9 @" B5 h) Z! v  /bin/rm -f hva.init 1>&2+ \6 d9 d. v, x* e
  while [ $# -gt 0 ]; do
; C: s) N( F* `3 m4 p2 ^1 ?& {    case "$1" in
1 K, v4 T, i% O- ]      -vaf)
0 Z% G7 K" C- ?( O) b: \           have_vaf_flag=1
9 V) K2 ?, }; R+ N+ N) T+ l3 H. F           have_va_flag=0
9 y' X" r2 C2 N2 F0 b+ |           shift;
$ [1 L7 Y: o: H" }5 {( D  v           continue;
: J" a' D1 d% ]7 s' v        ;;" K" E  }7 X. L& o, H0 n: o) w
      -va)
+ L/ b# p9 \/ N) a& n! Y           have_va_flag=1
$ t# h1 B5 W8 T6 G6 I           have_vaf_flag=0
" c2 C; D$ P+ ^3 D+ Q           shift;
6 V1 ]7 `% o# a/ \; y* }           continue;
5 ?+ E2 R5 }+ H" @. i        ;;0 L  L. b6 U6 R& q5 D
      -*)9 u- V+ \  s) i
           ARGV="$ARGV $1"! [# b6 _, c- N
           have_va_flag=0
4 s( H% R; W  A& i0 c8 i           have_vaf_flag=0
$ e$ i% D" S3 ]4 J; `7 J           shift;
- F! G9 A5 G' j6 _6 e  y5 P* q( b           continue;
0 V% H' P; R) Q2 _: C        ;;) L9 F9 x; h8 I7 V2 y7 f# p
      *)( r( q4 Z5 s2 m: F- z
           if [ x"$have_va_flag" = x"1" ] ; then
$ }2 Q- H/ r- Q2 F& e4 J              VA_FILE="$VA_FILE $1": ?( T% ?) x; }, D; |2 H9 A
           elif [ x"$have_vaf_flag" = x"1" ] ; then * z: l$ r# `8 o4 [
              X="`cat $1 | sed -e '/\;/d;`"4 u- g; |% S* W4 f, t$ d
              for token in ${X}; do
9 m! ^- K) m" d4 A                 VA_FILE="$VA_FILE $token"2 ~0 ?2 w* Y, f. b& D6 e+ r
              done " p+ M" f2 F0 y% [0 d+ b
           else
& U" c; C! t6 i              ARGV="$ARGV $1"
) |# \0 [" I0 a/ \           fi
8 ?/ E/ B$ D! q, v5 s/ q           shift;9 j& o, P* s6 N+ n
        ;;; x2 o' B3 u* ?
    esac
) [* m8 s: t/ F. `' y8 g- _  done
) K" B2 z) I/ Y7 R. R. z
2 Q1 Q: X9 y: i  g0 V" T. a  if [ x"$VA_FILE" != x"" ] ; then : q9 Y& {0 {/ @' L, l
##     /bin/echo " xxx ARGV $ARGV"
: a0 W% o9 Z1 P1 {+ y* s/ F% ?       /bin/echo "choose nanosim $ARGV ;" > hva.init
. \2 P  W" A% ?) [       echo vcs +ad=hva.init $VA_FILE -o simv
& j3 }( T2 R# D  O8 Y9 _& E( V       vcs +ad=hva.init $VA_FILE -o simv
! C7 ]/ h) `8 C5 \       exe_status=$?
# S+ O! T6 G2 ^% K       if [ $exe_status != 100 ]; then
6 ~6 X* U( I1 P: t. N5 R1 y2 y7 f          /bin/echo ""* t& J4 C; ~8 M. o# d
          /bin/echo "ERROR: Execution of vcs exited with code $exe_status"
) ^: P" @5 }5 W, x          /bin/echo ""
( T5 m4 v$ J4 r! W# F/ i& T          exit $exe_status
: l+ D; h$ D$ s" N       fi$ e3 \! W# H' S0 `
       hva_files="-n simv.daidir/amsVD.ntl simv.daidir/amsWRAP.spi"
/ @/ Y/ k5 s2 x, z4 D" \       ARGV="$ARGV $hva_files"3 B! i; `1 T( N1 z
  fi
% x+ {2 Q" z2 ~. ?9 m. J3 w' `}; Q) Z+ P: l# o0 P
#-------------------------------------------------------------------------, T" \# [7 |; p! @* V

* L* v# F: M4 U  p8 S* e4 C7 ccleanup()
' e9 i% n- \- \  K" D% I8 u. {{
3 N" I2 o; x* J' f5 J    if [ -d "$rundir" ]; then
) X* R1 ^; m2 H, I4 C        # On AIX, a .nfsXXX file is created if libModel.o is removed
: F: P; I0 e3 J  P) W3 J  X        # so .epicrun is not removed because directory is not empty.
* @" R1 ?8 ]; f) `+ ^        # Solution is to remove it again if the first rm failed
* a+ s* q9 e5 N, y, G& Q9 B/ b        # (rm -rf $rundir || rm -rf $rundir) 1> /dev/null 2>&1
: q) G5 c0 \- L! `( o" @        if [ "$EXTRA_CAPACITY" = "YES" ]; then( ~  E2 Q9 X! y% g/ q9 N
        chmod u+x $rundir/rpcidfile9 }: v0 w; }6 Z3 d# g) }0 T6 B0 i
        $rundir/rpcidfile. J( o+ ]  c+ L3 Y: u0 K5 J
        rm $rundir/rpcidfile, U+ W8 N! e! ^+ N1 b# |) }
        fi
, `6 f& P9 A# P: T  `        rm -rf $rundir
: {, N" ]5 D4 C6 X/ E
% F8 Z: d0 ?9 S& W8 n% ]        #Due to NFS problem, we have to copy files needed to
$ ?. y7 v: m! w# d        #/tmp/<temporary directory>, then symlink's files5 t& m$ |8 a5 M8 [3 v- E9 ]0 f, \
        #to the local temporary 'rundir'. This avoids the problem; G4 T/ d0 h/ C
        #to remove 'rundir'- w) \! R8 q0 v, K1 H$ n" ?& O" N) ]
        if [ "$EPIC_ARCH" = "RS6000_AIX_4" -o "$EPIC_ARCH" = "RS6000_AIX_5" -o "$EPIC_ARCH" = "aix64" ]; then: a/ ]1 C: T+ z7 p4 y
          if [ -d "$tdir" ]; then
$ o6 D5 ^: S1 Z% k8 v            rm -rf $tdir
6 L0 W8 q6 P* k2 v2 h. L          fi2 w; b: e1 ^( u- w: W
        fi- Q) P- g" Z/ I
    fi
( l* B2 l3 T0 R: T  w    if [ ${exitstatus:-0} -eq $ld_err_code ]; then6 f  {7 V# x  w; o4 h: C
        [ "$has_model" = "YES" ] && rm -f $cwd/libModel$suffix
3 m. J! {1 d& {4 P3 j8 c' v. `; j- [        [ "$has_custom" = "YES" ] && rm -f $cwd/libCustom$suffix4 k3 k' g7 }, y; n- ?  w5 V
    fi6 _1 L; J, ~4 ^* [3 j# l
    [ -f "$EPIC_SCRIPT_MESSAGES_FILE" ] && rm -f $EPIC_SCRIPT_MESSAGES_FILE 1>&2/ u$ o! v. b7 v4 y7 ^' w
    exit ${exitstatus:-0}
" n- ?$ {3 q# c/ k0 |( O}
( R( w) J& D9 }6 h6 c1 h5 n* V) g$ K/ L
Exit()
3 M2 @7 K, _# H) r3 G5 X{
" k1 c, d. {0 v4 K9 `6 H    exitstatus=$1
! |( Z4 F* n/ C! M7 R    exit $exitstatus
3 S7 V! L$ t4 U+ w+ `}( L+ |! o2 k4 z) R6 v& f

$ z- l1 ^7 P9 q/ s8 A. P7 y7 r# get_epicrc filename keyword! o% Q4 W# o% R/ v3 `8 l  I
get_epicrc()3 h6 ], C7 d- F
{7 x5 W$ F3 }: ~+ G8 L8 E
    [ -f $1 ] || exit 0* h; O" B0 \  |
    key="/^$cmd2:/{print \$3}"
/ h/ h! ^9 \! A+ F0 z    awk -F":" "$key" $17 A7 v& F& I. e. D! J  }5 N
}
1 }9 K+ u7 P( E3 }0 t
' c; z4 p1 o! ~! R% z4 I$ C#
3 o* ]3 T0 ^( r& G2 M5 y# set datasize limit to hardlimit* c2 b+ y) u( B/ b
#
$ i! I  X( X6 {1 y- k% m" m0 qset_data_limit()
8 X0 Q5 C3 D+ W" T- j- L, x+ q{; @3 R8 u; y1 t  J* e* }
    dbglimit=0. O$ [- R: v$ y
    hardlimit=`ulimit -Hd`
4 C, g) n, H0 f% S3 I    softlimit=`ulimit -d`
( G- j5 A5 ~$ r8 g. T    desiredlimit=3500000: a$ ^0 `1 Z2 G* q4 n6 k4 D
    hardisunlimited=0( J# I2 V3 W7 B; o
    softisunlimited=08 S" K: G: `3 [" K: k: N
    is64=0
8 c' U: T6 W5 G; Y& W$ L3 P# k, U
    case "$EPIC_ARCH" in
9 B% t( l; l" a* Z. R    *SUN*64), ~; A* d# D; K* s" [$ [0 F* L' ~
        is64=1
% e  Z$ z; g# a& E2 o' I4 @        ;;& W) R( \3 k6 O4 D* f! P! q
    amd64)
6 U/ G9 X1 _$ Q3 U+ j( I        is64=1, o" k- P" D; A6 m, u
        ;;
2 H- ?5 J% N2 P; n/ Y    x86sol64)
! s/ d' x  E  U( j' J        is64=1- G, y, A) m- G, ~8 T/ v) ^. X4 V
        ;;. P; M2 X' }/ H+ N6 H
    aix64): n2 D, y- v' _7 b+ ~0 d- N2 S0 f
        is64=13 B; _2 ~$ k3 q$ }* L% z9 {* |
        ;;
# _, p6 o8 \+ {/ m% U% z8 f    suse64)
9 ~$ p; P( M3 L. }) Z        is64=12 v# s1 y, d/ V/ g
        ;;5 I2 a$ e' [: R+ Z" z
    esac( C( T1 D0 m' P

; |) ]; q0 o: W+ Z' U" T2 j    if [ $dbglimit -eq 1 ]; then' l0 b7 E- p7 d- }( `4 r" G; Z  ~
        echo hard $hardlimit soft $softlimit
! z9 y: {5 d+ e* V9 O! r. E; E    fi
" s. P9 e3 q3 a9 p, m" z  B- W: y
; `$ F4 s2 W0 K    if [ x$softlimit = "xunlimited" ]; then
+ _) z2 b) I; O        softisunlimited=1% Y; @5 |& S( |0 Q, T' Y) H9 p
    fi
. `. d* \( i4 _& Z' h/ ?: X7 N2 |4 X- o9 f& d! Y- q
    if [ x$hardlimit = "xunlimited" ]; then2 n+ I6 W% @4 n3 Y  e$ l$ F3 d
        hardisunlimited=1
$ d" Z2 O8 @! q9 ~8 v6 }5 I* a    fi' {) a2 H4 k! T! L$ K
* F* N" u1 ^, P- c  d
    # 64 bit machine should have bigger than 4G) P8 A) n/ W: x% E# e
    if [ $is64 -eq 1 ]; then/ ?' U( q1 d" c+ f+ Y/ B+ e3 z" X
        desiredlimit=5000000& E' }+ P0 w- q; F2 k% [/ A
    fi8 Q# i! s, B5 d4 t
" S6 |' F: V+ [/ h
    if [ $hardisunlimited -eq 0 ]; then- k: u4 e) u) D) j8 F) P) \
        if [ $hardlimit -lt $desiredlimit ]; then
; J0 w4 \8 C4 N1 r1 _, c- L            echo "WARNING: datasize hard limit $hardlimit K is too small.": U. J2 j$ \- ]) h$ C) ^
        fi3 ^4 S9 S$ i2 G$ F  u. }% `4 M
    fi1 V$ O! p5 n2 x
% V% h6 G; Y" {6 x. q! a! F
    if [ $hardlimit != $softlimit ]; then
6 O8 Y+ Z. o( I* b& t# I7 K        ulimit -Sd $hardlimit, C) z( w- {- @) ^/ y- O
#        echo "WARNING: datasize limit is set to `ulimit -Sd`"
' G0 n' t2 g2 i  z    fi
9 I4 y3 z/ {7 B% W  u/ R4 U3 `4 O# W, f( h! S
    if [ $dbglimit -eq 1 ]; then
( l6 B# F8 \. r# x( b        echo datasize hard limit: `ulimit -Hd`4 p* i* X1 W( Z' p# [1 u" f/ w
        echo datasize soft limit: `ulimit -d`& F, n6 s! I4 {7 T
    fi
: c$ b. S. F0 W7 {5 Y}
( X4 m  G9 a( L0 L
# I; y3 M$ c) B" J1 o' z% n#
4 p4 d/ w0 }) X" I# set stacksize limit to desired limit
! v6 P+ b+ U2 r# r% `1 Z' k. D3 F$ D#0 a1 R2 o: N& w1 ]' d9 R
set_stack_limit()
: K) M- N5 q$ I6 p' @{) v) f' W, z3 l. U# ^; P
    dbglimit=0
3 E0 q% e2 q9 K    hardlimit=`ulimit -Hs`9 M; Q3 G: a0 i; f" \* [0 _
    softlimit=`ulimit -s`
1 M: e& r! c% ~- r, v% Z6 l    desiredlimit=60000
! t8 D; t. U7 I, T* a  j- M    hardisunlimited=0/ s# H+ d/ |; h9 s. m. O" O. W0 Z
    softisunlimited=0
: x. }5 E6 J3 F6 ?2 d8 V, l    is64=06 J0 v- R/ ?0 J) }/ j$ }+ ^8 D

" c0 o3 L, v, r( s. L) f& E    case "$EPIC_ARCH" in' |: k1 E  A9 |4 ]
    *SUN*64)5 U; W2 X$ K7 f, H' q) ^
        is64=13 |  A! H0 N! }9 D8 x: u+ C8 j
        ;;7 b/ y$ ]+ d. d  f
    amd64)
* I- _4 l9 D' _+ {  _- V* o        is64=1
* ?6 t9 V$ f/ d5 y) P9 `0 Q" f        ;;
; x1 Z1 p6 y) Z/ ?; L6 q    x86sol64)
+ p6 I0 e" V! l# H        is64=1
3 I! _2 w5 _- m2 ]2 z        ;;# j& c3 q" R2 C
    aix64); Q) m. C1 S) B1 w9 T
        is64=16 l+ H" P9 w# t& _# r8 x' M. {7 T
        ;;
. x! P! h  g9 `    suse64)
" \# ~9 S9 f& Z. J5 P8 R        is64=1
8 v3 B9 H0 T% O& d  K        ;;! Z) t: M: T% ^, A. j4 o' i; ?. w
    esac
0 a) _* k* u& _! l8 Z9 C% C9 ], p  Y& f* q! j4 I; X
if [ "$EPIC_WRAPPER_DVLP" = "" ]; then6 ?& w" M# c! Y, t- q; R+ Q) x+ @3 {, ^+ X
    if [ $is64 -eq 1 ]; then
# d2 F% c9 V! K$ P        desiredlimit=200000
9 Z! }0 N& S( S3 p    fi
1 @+ ^8 G' u0 w" m* Melse
" H7 T- ^0 k9 w  F$ p% C8 M    case "$EPIC_ARCH" in, m/ z3 L( K3 }
    *SUN*64): B5 G  l1 |! L9 A) s4 D" p1 b6 R
        desiredlimit=200000
; u7 K- o; A+ ^" m( B7 O) w. }        ;;
0 A; u7 f( i8 c4 A, d" ^    esac* T( m2 m3 d0 [: T: K/ s5 Q1 j* X
fi$ W0 c2 l1 p0 C& p5 C* v; x+ q6 W0 D; @  [
       
, V* M% o3 |# ~5 I; o: u& r4 |    if [ $dbglimit -eq 1 ]; then7 ~& p" v- E) R  M6 n
        echo hard $hardlimit soft $softlimit( s7 ?* L) D" U" @: Y, C$ @3 t
    fi
6 ^( G+ m4 Y( R; o- E& b) P
9 X3 O( f0 V) K! d, `( N1 b    #stacksize can not be unlimited, pick smaller number
. Y2 Y( b+ r7 m7 @5 q% V
3 Z6 _" W$ ]4 u) h3 L/ C, C  ?% y6 Q    stacklimit=$desiredlimit$ o! O; r2 m- K. y9 z

; r" ?, s& I% j% f    if [ x$hardlimit = "xunlimited" ]; then- z; v7 u2 v/ \6 S. g
        hardisunlimited=1
  K. T3 v4 Z4 U    fi/ e9 N: B9 K1 v- h' i8 d0 m
  m, B& w3 E/ w9 G' R% s6 `
    if [ x$softlimit = "xunlimited" ]; then( X) D9 E- W$ X# d- a. W3 y
        softisunlimited=1
4 N9 `' I( C5 H9 I7 j( G% _    fi
' V. z$ d0 A; D5 b) b! \, n0 `$ s* K) a
    if [ $hardisunlimited -eq 0 ]; then6 s# m6 x  [( {7 o- x) ?; \
        if [ $hardlimit -lt $desiredlimit ]; then
$ F; a8 U7 t9 {            echo "WARNING: stacksize hard limit $hardlimit K is too small."
1 ~: V  V1 v1 Q5 |            desiredlimit=$hardlimit
$ t* k1 ^0 f/ L! l  x7 v* u1 h) f            stacklimit=$desiredlimit& J/ [8 }% j* {6 t! U
        fi
; `9 m; E6 {& q& O    fi
. @, Z1 _, F: z# x' n( L
/ z, b8 F. b  i8 V0 W    # desiredlimit is set to proper value (< hardlimit)4 h6 R4 |8 N. l) i* T
5 x4 J# y+ o+ t. [4 A& [
    if [ $softisunlimited -eq 0 ]; then$ Y# [+ W5 E& w5 D  [$ {# L: [( J2 ^! ?
        if [ $softlimit -gt $desiredlimit ]; then8 ?! L# u/ _  j
            stacklimit=$softlimit% m4 Q) M6 Y9 ^% `7 H
        fi4 C' ~4 k0 e4 z& v# ~: {# w' H' e
    fi2 a' Z. e( [( `3 V1 }, c

) J3 @9 k8 y7 n0 W" n$ t6 g$ ~    if [ $softlimit != $stacklimit ]; then
/ O+ p2 m4 L6 `% x9 C        ulimit -Ss $stacklimit
) Y1 n7 w: J2 Q& Q* y#        echo "WARNING: stacksize limit is set to `ulimit -Ss`"* j; Y) S9 ^" b
    fi' y* S* j. X" w; ?, r  B9 F. k9 A

5 g' F& @1 n2 O$ h    if [ $dbglimit -eq 1 ]; then
- G1 V; K1 F1 s6 @% l. w2 S/ H        echo stacksize hard limit: `ulimit -Hs`
' t3 b- L+ _4 ^        echo stackize soft limit: `ulimit -s`' q9 Z: n% q" T2 C5 G6 K8 T7 Z) `
    fi3 G4 n4 @4 V. S' Y
}6 p; x9 B& `2 u  ?/ V
( s; ^8 n6 j+ Z! g' [% P2 U" d& \
open_epicscriptmessages(); B7 c1 R8 M8 e" J% y
{
0 z3 {7 \0 X% `' k! o- ~  @& m#generate  temp ".epicscriptmessages" file based on pid
, k7 @6 c+ ^& Q* E' m/ KEPIC_SCRIPT_MESSAGES_FILE="$EPIC_SCRIPT_MESSAGES_FILE"$$
1 M# V/ _! f2 x" i+ S7 R' Fif [ -f $EPIC_SCRIPT_MESSAGES_FILE ]
6 C7 z! P7 j  `then
$ _# Y& i4 d; n7 E  until [ ! -f $EPIC_SCRIPT_MESSAGES_FILE ]5 l* v  c. w( `% ]
  do8 G6 `) Q% R# |
    EPIC_SCRIPT_MESSAGES_FILE="$EPIC_SCRIPT_MESSAGES_FILE"$$
1 F3 m7 P/ I. i' H2 o& U  done2 O  c0 B1 y5 \! O7 t2 E
fi: H1 n* h: d' a1 t6 g1 X3 t
7 `* q( Q/ t% I/ m6 B) `$ t4 ~. M
export EPIC_SCRIPT_MESSAGES_FILE
6 c2 h/ \6 G8 E- F: R# w8 A}
3 w! H5 y+ }( V8 Q
# t2 r- u$ w; l; ?
6 F3 k5 q* ^6 e  }) pcmdname=`basename $0`! z8 L& g' j/ G/ M- U4 q9 D. P
postgres="n"
. z  d7 P; s* e% j% U9 k6 nostore="n"
0 r7 M3 o& E( V' Y8 Lgui="n"' l) a" b  K# x( G8 z+ t" q
databaseOn="n"
4 Y. `1 p* s- q( qf_next=0
/ g( I2 {) Y& rf_option=""
' G. B/ _' d$ U! O: X! @, }. mo_next=0" n; _& N4 T8 v. U7 }
o_option=""' B# _# L" W" @6 F0 j6 H: g/ F
workDir=""
  m$ M" E+ T% gworkDir_next=0) m2 N  [( I3 P4 u; P
errFile="powrmill.err"' ]% e* C/ c# }
win32flags=""
+ m- N" U) n3 m& X/ D7 ?! {  i& Z: Tln_default="ln -s", k/ V- T9 \2 y
( D# I; z3 b- e
har_hilo_file=""
% B1 Z4 i: G2 ?% k2 N) Fhave_har_flag=0  \+ v  g9 t4 X( m) m! C0 I% u
have_har_setup_flag=05 {6 `! j  _' o7 q
is_special_har_run=0
! y; A* D# U" h9 L# c! rhar_ofile_prefix=""
- C9 n5 R5 G% u, d9 q% U6 g) _& c' e4 _# P
have_va_flag=0: |4 `/ j. t# b+ v6 x2 O  j
have_vaf_flag=0
" a6 D& B2 g5 l  n9 i9 X( S7 rVAF_FILE=""
( y: q. H3 A) c% }: ?0 V1 A1 gVA_FILE=""7 C  M/ }/ E5 a5 }2 A! b+ Q
ARGV=""
% G) a) [4 m" E5 S3 K+ z# g- z; y, M& T& X6 R. }% x
ORIGINAL_COMMAND_LINE=
# m" g" C1 m, bLOOP_CTRL_FILE=".ns_ba_env", R8 V! d8 L; \- o, ~0 b
ALTER_HK_FILE=".alter_hkf"" z; B7 y# r  U9 E& b% B3 d$ P0 f$ ?
ALTER_COUNT_FILE=".alter_count"/ {; ~  M' p% r' f) t9 d
MONTE_IMG_FILE=".monte_img_f"$ |1 V6 H9 m; C# e
MONTE_COUNT_FILE=".monte_count"
& Q. {" a4 u/ K3 y0 N( ~/ QMONTE_CFG_FILE=".monte_cfg": p) R* G  r, G) _! P) t
EPIC_SCRIPT_MESSAGES_FILE=".epicscriptmessages": r% |5 B! B2 C! C  H

. K0 m5 A, I- X8 N; [open_epicscriptmessages $@! ^$ X' b# ^- n3 m

1 I+ y6 t" I% P! }+ g3 X! s: tscan_for_hva_args $@; O$ _! k# t" [1 A# v8 X

; x# ?3 K% f1 O0 s, Iscan_for_har_args()
7 m5 D* F1 x: u3 {; x4 z{
& r: J' S2 J1 j, t& n  while [ $# -gt 0 ]; do
% i+ T4 z4 z7 f2 w    case "$1" in# |: k7 {- [" |+ S+ t4 c9 ~
      -har)
; q; t1 @4 Z  e" l  l5 i           have_har_flag=1
! \# f9 I8 [0 a. n2 `2 f6 R           [ $# -gt 0 ] && shift! r, U  L2 k3 a* M% V" d
           if [ $# -gt 0 -a `expr "$1" : '-.*'` -eq 0 ]; then
+ ]: v1 ], l; X4 i4 g+ ~             har_hilo_file=$15 W. O8 K7 A. `
             shift$ {9 u7 T* a# U# _6 j4 p, m. u/ d  r4 }
           fi
. Z0 h* n, E; Z+ P& V. E7 P           if [ $# -gt 0 -a `expr "$1" : '-.*'` -eq 0 ]; then0 a; \+ n# q  s6 ~  m& }5 I6 r
             echo "Too many arguments to -har flag. Only one hilo file allowed."3 b+ o% C" T  F! e2 c+ W, X9 k7 J
             exit 1
4 u( G, M# U% c( d" y8 i4 @9 F8 _           fi
+ `8 g$ M5 O' K. u           break. m0 O4 Q  Y  Z; f; K$ }8 \
        ;;
( F0 v8 M+ ~/ c' K      -har_setup)6 f$ b/ j# W) F$ d
           have_har_setup_flag=1
& T. ~6 t! K3 o           break6 s3 w& {7 ?/ g; }9 N  ]
        ;;
6 C# T2 b$ D: a/ L' U      *)
1 e' D3 u4 P5 K$ ~" F        shift- _0 @" _) k% ^. `4 {
        ;;5 z# w+ K2 k! C- C8 U& u
    esac( S. v) _# J. h& P
  done
0 a7 P/ R7 i6 @+ ]0 R}
9 Z1 r) n4 T1 y+ P6 o7 G: k
# ^3 K  ^- r: f+ |& e3 Cscan_for_har_args $@
; P1 m' _) z/ z+ A; I
, l) X1 s* n9 Pfor argv in $@3 S3 M/ a1 j. N- Q: Y) y/ H0 Q
do0 y, B0 E, \  F# l# n: t1 `6 }
   ORIGINAL_COMMAND_LINE="$ORIGINAL_COMMAND_LINE $argv"
" s/ o: |, Q3 y3 K    if [ $argv = "-gadb" ]; then* ]3 W* }/ R* _  Z/ c( u
        databaseOn="y"
+ l) B9 T1 V2 G' c) e2 \1 M% p' r        workDir_next=1
$ t3 v( T% q# `# O    elif [ $workDir_next -eq 1 ]; then
+ `2 d8 |. [& Z- z8 [3 L        workDir=$argv
3 l3 N& _8 s2 O7 O/ F/ j        workDir_next=01 e5 Z. D9 F# S$ I
    elif [ $argv = "-ga" ]; then% A, C6 C2 H5 _
        gui="y": ?8 }# w8 S8 D- q$ q
    elif [ $argv = "-f" ]; then
5 W0 \+ j( M6 r        f_next=11 H, `! }/ Y" p
    elif [ $f_next -eq 1 ]; then
' h, Q: r5 ?7 y2 r+ F        f_option=$argv
( a2 C8 u' R$ J: v% Q1 i( c/ Y        f_next=0$ @0 y7 V' ~( r. f+ f
    elif [ $argv = "-o" ]; then
1 J5 t% n& [; V( e: k- ^0 y) N        o_next=1
* X7 Q! q+ e0 m5 B0 E$ _- f    elif [ $o_next -eq 1 ]; then& o  o( y& y# D& h1 `( S5 }1 ~
        o_option=$argv
. W& h" @- t7 S% c1 d        o_next=0
4 Y% G% U3 ?6 e$ |+ i! w    fi" \1 x) X# N7 c, @% L
done
% O/ }/ F9 M! Z. I% v' S# qecho "Command line options: $ORIGINAL_COMMAND_LINE" >  $EPIC_SCRIPT_MESSAGES_FILE
* l! f" A2 ?$ ~. {5 \* u8 f6 |! h
if [ $databaseOn = "y" -o $gui = "y" ]; then
( m% n- Q0 b$ r" i$ o- i- f* g  if [ $cmdname = "pathmill" ]; then
$ S# ^: a! y" J/ K) P    if [ "$EPIC_ARCH" = "SUN4_SUNOS_5"  -o "$EPIC_ARCH" = "SUN4_SUNOS_5_64" ]; then
4 }+ t3 Q7 F/ q/ A* @         ostore="y"
6 z/ b0 |( Y/ }8 h4 I         postgres="n"
" ?7 N6 h# w/ t+ \" T0 Y" |% k     else0 L3 ~! ?; c, ^% U! M( q4 Y: Y
        echo "athmill GUI is supported on Solaris platforms only" 1>&2 6 K/ y- [* y, L" F
        exit
6 U  z3 F9 G" Z& g: A) V     fi
2 b: N7 X; t6 Z! a9 ]9 t  else4 D& V6 z' s/ {- {
    postgres="y"0 t5 [" F; a4 Y: \: N4 |6 S
         ostore="n"
! ~+ j* l' O2 Q6 }) ^9 S) h% g  fi
* k6 |- ?. x( C5 v) A& Wfi3 S* {- D4 t" X# X( S# ^) I- [$ D
! `* [+ r! F4 c2 @
if [ $gui = "y" ]; then
+ n  a. @9 X4 z  m    if [ $cmdname = "powrmill" ]; then
+ O) [0 D, f9 ^0 |" p        pwga $@
% j( S3 P) K4 @        exit
4 @3 m% ~# M* I4 ?7 U5 f" q    fi
0 P4 `9 R6 w: ~* \3 h  [7 J) c' q ; J" B" i( p2 z7 I& o- }3 O5 h
    if [ $cmdname = "pathmill" ]; then
2 A3 u. J- w$ [' P6 J        if [ $ostore = "y" ]; then
& T7 s( T7 C5 Z3 W           ./pathfinder $@; }0 I2 T/ Y8 @  `
           exit
5 Q7 @% v1 `! w! i3 i        elif [ $postgres = "y" ]; then
0 b0 R/ W; h# x: W' v8 Z, o  M           pmga $@
! `6 h# |5 y0 h; m           exit9 h+ m6 @; K/ [) M4 \: z2 E
        fi
1 P. U$ e# }' b$ [3 K+ D5 K: j    fi
# M7 q2 N7 l! _9 B+ Kfi% k5 i4 S' G$ B/ R; R

7 z2 @% \8 [5 ]& W+ S& P/ |if [ $databaseOn = "y" ]; then' c5 ~' c, r4 N* j1 m
   if [ $ostore = "y" ]; then9 j! C* C# G- r7 @8 [
      if [ -z "$workDir" ]; then
, o, A/ X' ^- \4 g+ \! I, K         echo "Error: Missing argument for -gadb option"" k* L$ s" L  z! p9 o
         Exit 16 n; p6 j; S/ R
      fi
, N; d! {7 J( f9 T1 g   fi$ G3 V5 A+ c5 X. \
   if [ $postgres = "y" ]; then
/ _- V/ _  U7 s: p0 p      if [ -z "$workDir" ]; then  M2 ^/ L1 l9 f% E
         echo "Error: Missing argument for -gadb option"9 y+ v* J! b" K" d1 x" t
         Exit 1
, O) `" X6 J7 ^) B# a. y      fi" t) Q. O6 p% U& a
   fi/ R2 Q. J, i# y1 V: q( [
fi1 n# @1 W6 C+ C( p( U& u

1 ?  y. L# Y( c. a# w' i- Pif [ $postgres = "y" ]; then: c% W$ [2 t- Y% Q. K3 |
6 Z7 ^1 f- C8 b  l7 X! ?* j
    if [ -r $EPIC_BIN/scripts/gui-init ]; then
; F+ S2 n& ^2 m" I) g# u3 Q% t! v        . $EPIC_BIN/scripts/gui-init3 B) ~. c& f8 c! p# D
    elif [ -r $SES_ROOT/bin/scripts/gui-init ]; then
9 i5 |- r$ E: f4 f* k        . $SES_ROOT/bin/scripts/gui-init8 S1 y. V. m7 U( b+ r
    else' f/ t! N, ?6 Z( }
        echo " ** Installation in \"$EPIC_HOME\" has been corrupted!" 1>&2# w2 U$ v) \- ^5 e
        echo " file bin/scripts/gui-init is missing." 1>&2
4 W1 O9 X. ~; S0 [4 X% @% q    fi. r/ a- B; @! G- B; ^

1 C7 @3 K1 \2 P9 ]% P; D/ _    workfile -tool $cmdname $@
& v% c" x2 ~; `) g+ Tfi% @2 c; B& a8 Z6 g$ ~' K. J+ y
1 R" B0 ?7 h$ S6 f4 e/ ?' z7 F! L
if [ ! -z "$o_option" ]; then
5 n4 J. O" H; ]3 T" b: Y    errFile=${o_option}.err7 |% d$ b6 Z- w+ l' n- V& x
elif [ ! -z "$f_option" ]; then
/ Z1 P& a" ^. T* j' H    if [ -d $f_option ]; then6 ]5 I6 \& m( |* B! G" }
        errFile=${f_option}/powrmill.err+ i" K8 f0 s" L0 U9 \
    else errFile=${f_option}.err
9 D* U, ]+ s# n$ [/ R    fi+ I; p- D4 J8 o$ L$ A+ u: ~
fi! j6 {7 x7 M) b7 V* T6 `. w
" |8 ^/ ~0 ~4 a8 y6 U
' r3 m! s: h' g, f$ Z% q! V# j
if [ "$EPIC_ARCH" = "RS6000_AIX_4" -o "$EPIC_ARCH" = "RS6000_AIX_5" -o "$EPIC_ARCH" = "aix64" ]; then
8 S; B, {) c; I# C5 Q" u' ~' f+ S) a  rundir=.epicrun
7 w0 S# X' U! @* C5 h( \else) X* M# m( o% c9 O4 C+ x& Y
  rundir=.epicrun$$4 u1 P- i7 Y: y5 B4 o" M$ V
fi
# ?  y/ Y4 o3 b- }+ M$ W0 m. A- l& p# a6 ?$ N7 I9 |4 [' |
libpath="$rundir${EPIC_DLIM}$EPIC_DIR"; @; u8 K. V) K1 s# A/ ?
8 T/ O7 r* V) O. v; b/ N
cwd=`pwd -P`% G- b6 |. _; g
if [ $cmdname = "acehdl_w" ]; then' P% T4 D8 U7 L' t3 R
  cmd=`basename $0 .sun`
1 Y( r4 w$ t4 E1 W2 J. n! h  cmd=`basename $cmd _w`
5 b# h  `- n' @+ X+ x6 {: d+ k% k/ nelse/ c% q5 z) ]; l% P! W& W
  cmd=`basename $0 .sun`: R. u" ~- y& X8 g, S) [6 j: ]
fi1 j' [7 ]" }4 f$ F
2 Z3 H( D9 J  O1 G5 y
command="$EPIC_EXEC/$cmd$EPIC_EXEX"
4 T- F, z0 Z( P" B* P, d) k[ ! -x "$command" ] && echo "$cmd: not installed!" 1>&2 && exit 1
6 o6 u7 ^9 N2 l- Y* C' f, {" ~7 ?# O5 T8 [3 e2 d4 P0 p
# buildmod extracts -u/-fm options and calls genepiclib
% t/ r3 h% F$ m7 `% q* L) D* I# It also set the remaining options to variable CMDLINE8 O: A- o1 m0 u5 [5 G9 V
# look up in .epicrc for -fm & -FM parameters
6 Z, Q* }+ R5 n9 Z  E2 k* a: M: P" o4 y
fmlist1="`get_epicrc ./.epicrc user_adfm_obj_modules`"
( }& q# Q* ~: ?[ "$fmlist1" = "" ] && fmlist1="`get_epicrc $HOME/.epicrc user_adfm_obj_modules`", o1 F! P8 d2 E; [: B  H' E
[ "$fmlist1" = "" ] && fmlist1="`get_epicrc $EPIC_DIR/.epicrc user_adfm_obj_modules`"
$ e5 m) j5 G& {2 ~
+ A$ }  f) L1 _  \# SFMlist1="`get_epicrc ./.epicrc user_adfm_obj_modules_force`"
0 K! B- k0 J* b5 i/ p[ "$FMlist1" = "" ] && FMlist1="`get_epicrc $HOME/.epicrc user_adfm_obj_modules_force`"
  F; p- f7 H8 W( W/ g; j& H[ "$FMlist1" = "" ] && FMlist1="`get_epicrc $EPIC_DIR/.epicrc user_adfm_obj_modules_force`"* W# i; k( n% }0 m3 j# \8 j* V
" U3 w) {( e8 y7 r3 a/ k6 l7 a
if [ $# -gt 0 -o "$FMlist1" != "" -o "$fmlist1" != "" ]; then
+ l$ b# J% p/ M' h    # note that the buildmod script will set the CMDLINE variable
  g: q. W+ O9 w) j3 w& i6 b    . $EPIC_BIN/scripts/buildmod
9 l; O5 U/ h: c5 P% P$ I  h
3 J& w  b4 F: o$ Y0 g/ Z, {    #echo "This is the value of cmdline=$CMDLINE"4 E3 w9 S" O7 N8 X; h6 j
    #exit 02 }9 ]- w) V0 A' F$ S* A

5 Y/ l" w) v& m: ~* S3 B/ \    # if a new timemill/powrmill/pathmill built, run the new one
$ r8 X: f0 v( I- d) y$ \3 l    [ -x "$rundir/$cmd$EPIC_EXEX" ] && command="$rundir/$cmd$EPIC_EXEX"% }! \$ O1 Z! \0 _
fi* {- p& A! D2 u+ _3 n
0 D& ]6 u8 p$ ~) T* Z
if [ "$cmd" = "timemill" -o "$cmd" = "powrmill" -o "$cmd" = "nanosim" ]; then
- e/ Y7 ^9 {0 s8 Y  if [ $have_har_flag -eq 1 ]; then  \& B+ i; R) a: K* J+ U6 c' o. ?
    is_special_har_run=1* D, p& O' R  Q
    if [ "$o_option" = "" ]; then" A. H' _6 Q" i  z6 S* N: Z
      case $cmd in
. J" o9 o% i3 w# a        timemill)' w/ x# x* C6 }! a* ^6 M; B; Z
          har_ofile_prefix=timemill
/ o# i; ]/ ]( {1 N0 U          ;;
1 _. C- H9 k$ l" M) |- p3 c# [        powrmill)6 ]7 R' j4 R0 p% E( |
          har_ofile_prefix=powrmill
% J/ A9 o9 w, i3 q1 s" s7 F          ;;
- u& u* n2 p# k6 ?8 j        nanosim)
, I) P9 Z: X6 g9 r# w          har_ofile_prefix=nanosim
$ ~& A& X+ A/ z4 o# r7 ]# f          ;;  ^3 ^; J, K, M
      esac
9 B4 v$ {0 f; n: q/ Y    else
6 N7 \% q/ b, t0 q      har_ofile_prefix=$o_option
9 J8 T+ l8 o5 ]1 r- ^    fi/ S! O5 \) {& K. p: `
fi
2 |/ m0 Q7 M: W/ W) I8 gfi0 f5 Q5 Y/ D) i
* u/ _/ p- i; x: b
# Call Double precision version of the product if -D
. n9 L% T) V( l' O" G4 J# P# or simulation time > 1,000,000 ns.
) H0 ?8 F9 x7 j, b8 y  Uif [ "$cmd" = "timemill" -o "$cmd" = "powrmill" -o "$cmd" = "nanosim" -o "$cmd" = "railmill" -o "$cmd" = "pwarc" ]; then" _6 X0 h8 s% o0 `
" J9 x2 D' ^$ {$ l2 q3 R
  # Now the binary always has the ACE feature
4 b( ?0 T0 S; P- I' z  USE_ACE=YES
1 l: U2 \, z! M1 z: u0 X; F
9 [! B3 n9 C, F# ~5 W  HAVE_DP=NO
/ |2 b1 j( I; C- Q% q  EXTRA_CAPACITY=NO# W# X4 y- W6 k, G  L! g5 y
  DB_REAL=${FORCE_DB_REAL:-"0"}) o* }8 ~  C8 i6 _0 l3 ]
! a$ N$ P' i( ?# e
  # Enhance for ACE ease of use/ _$ K: X" Q4 M5 `
  # If no command line option or only a -T option, do:
  c. @  u: P2 u! a7 y) \) m1 I5 ?  #   1. set -A option$ X) v/ [3 a0 P9 j
  #   2. assume input file to be hspice
9 i1 {9 @7 C# O. f  n, w, G  #   3. set -o to input file prefix
" E/ ?( n& |8 j9 Z  #   4. set -z to input file prefix
0 R" T) w5 M! ]8 l* }' j9 X/ i  #   5. set -c to default config file* [) ?# J8 Q0 v$ |1 {- L% c; @& n
  netlist=""
% t5 r3 p) K9 e9 _! Q% e  minusT=NO! [8 {! [6 E( o  Y: k- X
  useStdCmdOpt=0
' }# W( k) N4 U6 G2 r" J# c/ d  prefix=""& j2 W% h. {$ r: q& |8 ?2 ~6 F* k$ K
  circuitType="") \1 L+ J9 Q+ }" p6 w6 w+ H$ j# b
  for opt in $CMDLINE' l; P; |. a1 Y1 O0 Z( ]
  do0 H: L$ |7 d7 |
    case "$opt" in
" Z) U6 @6 e: j- Z; }6 m- ?5 L      -T)
1 T  d0 [% n' R' g/ w6 Y- Z        minusT=YES
$ P0 ]9 @- A: b% I5 ?! i        ;;3 o' j8 p0 D2 D/ k4 d, s$ f1 G
      -*)2 E* i7 `, L2 w" Q- I
        # using standard powrmill command line( }8 Z7 T2 ?) O+ |) y, _
        useStdCmdOpt=1% C5 p6 _0 y) d- c# W6 |! J
        break
9 Y* I5 C" I- @! k5 P        ;;
$ S/ A: W  x8 {3 J: L      *)% m6 P" \' a- V4 y$ @
       if [ "$minusT" = "YES" ]; then
( |; P5 P! t) N/ r4 |% p8 v* S         circuitType=$opt3 V  g! q$ V* h" r9 i, Q) m
         minusT=NO  # reset flag
# x* S" B+ x5 U& k8 m4 s! J       else ! o' Q( z$ }1 G' j* M3 F
         if [ "$netlist" = "" ]; then
# F  S' p+ g9 V6 {* P3 Y           prefix=`basename $opt`
. H$ p4 s5 }2 x/ }1 m           prefix=`expr $prefix : '\([^.]*\)\..*' \| $prefix`
' g5 K4 b* N" L" [         fi: N8 O( F7 x9 t' e
         netlist="$netlist $opt"
. u; K% i/ f- w. ^. R       fi
+ H5 x% u( q# A! }9 h+ r6 t& P       ;;) r4 r8 G, s5 H" P" W% E( _" u( e$ v0 H
    esac
, Y- A8 A9 `' L3 W  Q/ Z7 n  done" p' C4 Y4 ~0 n7 U

; V+ s3 B( z2 M$ O, T" H! A3 R' _$ D8 b' M
  if [ $useStdCmdOpt -eq 1 ]; then; ~2 {1 b' A. U! P+ _, g
    # use standard powrmill/timemill command option1 |: A; ?/ M1 |& {) B
    for opt in $CMDLINE, W3 x: H7 y& i& S& J$ I# a; E
    do+ ~1 q1 U/ z4 `$ V0 l
      case "$opt" in . n+ h5 h- n4 F9 B9 n1 u8 \
        -A)& ]0 G% r0 e! e$ h, S: Q
            DB_REAL=1
& i0 q& D' [2 k4 V6 F2 c            ;;
- [: J( a* `3 \) C" s8 w      esac1 F1 t( W9 z3 @
    done  P5 n& h* V" D: C7 H
    if [ "$netlist" != "" ]; then7 _3 W& e+ x/ F3 L' k
      CMDLINE="-nspice $CMDLINE"
0 a5 K5 W( I& s4 E( D9 M: f& x- E& ]8 A    fi
. o$ `2 p4 z' V3 C3 o( R  else. d2 z9 S+ r$ D) R7 P
    if [ "$netlist" != "" ]; then
& P1 f. W' g/ |$ t3 @% a- n, p      EPIC_DEFAULT_CFG_DIR=${EPIC_DEFAULT_CFG_DIR:-"$EPIC_AUXX/etc/$cmd"}) Z7 H5 t# o% @. `
      # construct new command option
! v0 g- H/ @3 B" j% w5 T4 t. q3 W      if [ -f $cmd.ini  -a  "$circuitType" = "" ]; then
) n: E- M  ?  ]/ R, q9 s        CMDLINE="-nspice $cmd.ini $netlist"
# Y9 Y2 `6 X" N% Y' Q: k( _; b3 q      else
4 a  N; p- M" W2 t7 V1 l+ ~        if [ "$circuitType" = "" ]; then
" X/ o- o; S+ D9 |- [          circuitType="msana"( Y* o3 V) D  i  p5 e
        fi2 k+ m! ~; X5 _8 H8 P4 j
        CMDLINE="-nspice $netlist -c $EPIC_DEFAULT_CFG_DIR/$circuitType.cfg"3 ], C, z$ y7 A: K1 F" Y
      fi
$ d  ^  V9 Z' j# I) E+ M      CMDLINE="$CMDLINE -A -o $prefix"
, M- G  J0 Z# Z& `- \0 ?      DB_REAL=1* E7 @& L. {6 L/ K
      echo $cmd $CMDLINE
, ?9 x; }: f6 V& C& L; \; x    fi; P; s7 X9 C* R; o
  fi( O  ?4 l0 i8 c8 |! j; D% o
fi # cmd is timemill or powrmill or nanosim or railmill or pwarc( c' Z. c! L0 P& |: f5 C8 P9 U
" i2 U+ v1 A8 m! Q5 l
[ "$HAVE_DP" = "YES" ] && [ -x "${command}_a" ] && command=$command"_a"! H% T" q3 }( t! H
[ "$USE_ACE" = "YES" -a "$DB_REAL" = "1" -a -x "${command}_a" ] && command=$command"_a"
& D' G# K! M5 T[ "$USE_ACE" = "YES" -a "$vlog_design" != "" -a -x "${command}_v" ] && command=$command"_v") u8 @; `9 u. R3 G6 L

8 f0 [8 P2 \0 bif [ "$__engine_wrapper_called__" != "Indeed" ]; then! h7 _- V6 ~; Y1 ~3 q" C% e' ^
    __engine_wrapper_called__=Indeed
- H* j8 j5 y& v, [0 h! p4 r/ Y    if [ "$cmd" != "amps" ]; then
) h5 H! u4 R4 U        export __engine_wrapper_called__& I6 r; i% S5 w
    fi% p! M6 E2 @# W& D: y2 E
) N+ p! {6 s* l; c) G) ]
    trap "cleanup" 0
% q( I% G8 C6 S) z$ Q( b    trap "" 23 |. k; T+ o' U7 y* ^' Z8 `+ s

. K. i  u& G/ ?; }; h    [ -d "$rundir" ] && rm -fr $rundir; J  q6 a4 g8 K( t* j6 Z. K* }6 m
    [ -d "$rundir" ] || mkdir $rundir
. g- ?! }' C! K( f. o% Y& a4 `- _+ P3 X4 Y" q
    case "$EPIC_ARCH" in
. @( Y% ~4 u" L9 a* z9 P' C* o    *SUN*64)   
2 l6 x% q" o/ Z" C        LD_LIBRARY_PATH="$libpathLD_LIBRARY_PATH"# a) Y, @, t! Q! G* t
        export LD_LIBRARY_PATH
( m* x% G3 E; u3 ?        suffix=.so
, N* |) t" Q0 |& m        ld_err_code=127
# K: j' u) S4 x* h% @1 Y9 }        ;;
8 F4 u2 }% W5 h. S& Q    *SUN*4)   0 z; c, C- F+ `( s3 |
        LD_LIBRARY_PATH="$libpathLD_LIBRARY_PATH"* L! S: ]4 V4 w' j
        export LD_LIBRARY_PATH
8 u- ^2 d, T6 B; r( S8 Y        suffix=.so.1.05 ?4 c# x% d* g3 }4 Q: u8 y
        ld_err_code=127+ T2 _, U! ]* s
        ;;
; g" [+ P' h2 K7 N' k    *SUN*5)   
9 I& t' b% q7 y/ A9 _& B        LD_LIBRARY_PATH="$libpathLD_LIBRARY_PATH"
+ S  W' ^$ h1 }; l1 Z        export LD_LIBRARY_PATH* T2 R: d  o" o9 |+ ]! w
        suffix=.so! ~# y0 l  i' _0 J; g  C' ~) e  P& O
        ld_err_code=127
6 x3 \8 x: y2 g5 F& E0 i        ;;
- p/ ?: c2 n: H    x86sol*)   
! b7 r6 ]( V3 a4 |        LD_LIBRARY_PATH="$libpathLD_LIBRARY_PATH"
" I+ ~+ _9 l5 _0 L. H+ }8 m        export LD_LIBRARY_PATH
# o* O/ N5 o5 b$ M, \# m        suffix=.so
6 C2 E' w* [4 H/ t        ld_err_code=127( m7 L: |% ?% e
        ;;
* m' Z3 I% U2 E& Z    *AIX* | aix64)   2 C5 o) s. x# A; i
        # When genepiclib creates shared objects, it creates a import file and
/ [) |- `' E* l% N        # uses timemill as program. So at exec time,program timemill is needed - A+ ?, Q5 z; J
        # in LIBPATH8 w( g! C/ x) H  Q0 l) ^, w
        $ln_default $command $rundir/foomill+ H2 l9 p9 k( M: J4 [- o; ^8 H
        LIBPATH="$libpathLIBPATH:/lib:/usr/lib"7 q3 N  O% O9 w- o+ S3 l
        export LIBPATH
2 n0 w' ~$ c5 P8 C9 p        suffix=.o) X6 b3 u" `" {7 o
        ld_err_code=8
% u5 f( r, o) j/ C* z* L5 E% z        if [ "$EPIC_ARCH" = "RS6000_AIX_4" -o "$EPIC_ARCH" = "RS6000_AIX_5" -o "$EPIC_ARCH" = "aix64" ]; then8 a; a5 |6 r. k: e: T
          tdir=`echo "/tmp/d"$$`
, `- [( ^0 X# R, {' Q          [ -d "$tdir" ] || mkdir $tdir
. L+ }% B7 e, j- V# q1 z          if [ -f $EPIC_DIR/libCustom.o ]; then+ T% p& p7 _% }) w; W7 }
             cp $EPIC_DIR/libCustom.o $tdir/; l, e" m* d4 g# E9 k$ D
             $ln_default $tdir/libCustom.o $rundir/  i5 `9 H, E- k. e' x/ ^8 g& k3 D
          fi
! L! o- S5 @# o$ o9 F          if [ -f $EPIC_DIR/libModel.o ]; then
6 G; G% X$ o* d$ I& r8 u             cp $EPIC_DIR/libModel.o $tdir/
( Q. [! ^/ J, C& b: k) U+ `" O& @6 V1 f             $ln_default $tdir/libModel.o $rundir/0 `/ x9 Y: }# k0 b- [0 }/ Z: y
          fi0 Y# e9 S/ l0 O  e! s* F3 v
          if [ -f $EPIC_DIR/libFuncModel.o ]; then/ d  h, |+ L  F! H  A
             cp $EPIC_DIR/libFuncModel.o $tdir/( ?, K, }. |6 j1 H% j2 O5 w
             $ln_default $tdir/libFuncModel.o $rundir/
! v: B0 G5 \% s( p! W) N( J% Y, _          fi
: n7 U* b# o5 b/ `          if [ -f $EPIC_DIR/libFuncModel.34.o ]; then
( z4 o$ `! Q, q# w' Y             cp $EPIC_DIR/libFuncModel.34.o $tdir/
' i/ f- P5 [$ T# V1 b' }8 |             $ln_default $tdir/libFuncModel.34.o $rundir/2 g, j$ a% }* ~; H
          fi
$ T( t+ k0 q* V! B/ i( O( u- j2 K5 _        fi
5 g" O) Z3 g2 T' z- R' T        #Set the IBM flag to enable more shared segids
! e+ w$ s; X: A* ]% n# ]# e2 u' f+ O        EXTSHM="ON"
, _) e/ q$ r$ v" T6 X( @        export EXTSHM
4 ^7 j/ b- s, \! ?/ y; k        ;;% P; ?) \3 Y+ P6 {& e
    *LINUX*)   
# b8 h: ]' g1 y0 {2 K        suffix=.so
: R: G1 [6 C4 F3 K  n9 @9 Q        ld_err_code=1
5 j& e2 a1 g$ W4 F8 ]        ;;
9 O- U6 j, B8 ~, L8 u5 J9 ^+ X    *amd64*)
4 w( G3 u! z5 D  z$ X; I# Y        suffix=.so
9 J. C8 S9 o1 D. k7 h! p" a4 z        ld_err_code=11 O- z; ?) v1 R2 e* u! G0 u7 ]
        ;;
$ A/ V# y$ ^: i% Q! n  r% H    *suse64*)) r! h# L" A+ X0 s1 x9 K# O; O: k
        suffix=.so
, e  `; W; d3 s6 s. J        ld_err_code=1
* q% D7 h4 H9 R. \9 v7 h$ O        ;;
6 ?' M! G6 J9 T    *suse32*)   
- h: _6 X& k  P) v" J: a" N" o        suffix=.so) |5 G9 a$ f1 N" N+ a
        ld_err_code=1( y0 t3 r. E: ?3 Q
        ;;
9 B# G% Y3 O! Z( ~  q9 V    esac
  r+ a- h5 N5 W. _/ d& q: v
, H2 i4 B$ N1 M5 M) p" d6 U0 F    [ "$has_custom" = "YES" ] && ulib="$ulib $cwd/libCustom$suffix"& ]) e$ m) }! c( `- ^9 c
    [ "$cmdname" != "timemill" ] && [ "$cmdname" != "powrmill" ] \/ [& S, [4 }% ?* {% M" Z" A
        && [ "$cmdname" != "nanosim" ] \
' n$ `: K* j6 p- h: T        && [ "$has_model" = "YES" ]  && ulib="$ulib $cwd/libModel$suffix"
- u# Y/ T* Z- k5 V    [ "$_VA_" = "YES" ] && ulib="$ulib $cwd/libva$suffix"
. P0 i& J) y9 O4 V2 C# p0 O( `
2 I7 M* ?8 c" {. o: R#Look for command line option for libFuncModel.so2 I0 _+ L8 m  `  k
#    user_library_next=0' O  q8 w- X2 v& h' s
    has_fmlib=""
" H8 J$ a1 @% L) ~% v" {& g    for opt in $CMDLINE
, i% G3 g& Z, _& t    do5 o  D; B8 j- g: r* u# t; J8 H
      case "$opt" in , ^7 ^6 l/ f) ?, m
        -fm)
( X8 `6 V4 z6 s% Q; P7 ^            CMDLINE="$CMDLINE $cwd/libModel$suffix"! Y1 G1 C9 B! \+ w/ }
            ;;
9 @9 j! K: p" c. M0 T; e6 g$ M        -fm_user_lib)$ k% v; Q5 P0 p
            has_fmlib="YES"
4 J  M. z; s' L% A% M' v#            user_library_next=1
/ V) ]* M7 e+ i# o            ;;
1 J+ C$ z7 P; Y: H2 Q        -xc)
3 n7 R; \/ _0 K% Q; L* {9 H; C            if [ "$EXTRA_CAPACITY" = "NO" ]; then& e! C+ `. q  c5 X
            EXTRA_CAPACITY=YES
2 H6 p. ~1 ~3 t& [4 Q            fi9 b2 A: u% v7 H# N1 }9 K" h6 L; W
            ;;
; A( O2 P! G& d) O! |. f% F#        *)$ c2 E$ L) g  Y2 s. t
#            if [ $user_library_next -eq 1 ]; then7 P, z9 [/ z- ~: k% C  h
#                if [ -f "$opt" ]; then7 N; n7 W8 n2 @5 a8 O. [
#                    libfmodel=$opt
) j' ^5 H; R% c#                else! l6 }: r& @' ^+ J
#                    echo "-fm_user_lib: Specified file not found"
% A% L& _- R* j3 G1 `#                    echo "-fm_user_lib: Specified file not found" >> .epicscriptmessages
( m8 N: Y9 j8 _5 R#                fi' G/ V7 y$ n+ b  }
#                user_library_next=00 X; x# k6 X) ?$ t: z
#            fi
# Q+ i3 Y4 N/ O# w5 x8 b! ~6 ]#            ;;0 g! u. z4 B9 b. u7 B
        esac7 D$ }9 J  V2 }/ @+ \7 H- H+ `
    done& N8 Q, h  g% k8 I0 i

( Z: R+ v* u6 o/ m    if [ $cmdname = "timemill" -o $cmdname = "powrmill" -o $cmdname = "nanosim" ]; then
: k7 F! }9 T+ X# @+ X+ d; w# D        flib=""4 a' U6 ~! e' G& j7 }5 T  x$ T
        if [ "$has_fmlib" = "" ]; then
, ]) M3 O& m/ R' a  y4 N) M- K( O            flib="$flib `get_epicrc ./.epicrc user_libraries`"1 Q- V+ C8 U8 x; W( A) n. K8 W  J
            flib="$flib `get_epicrc $HOME/.epicrc user_libraries`"7 D7 N7 G- c) U+ p& |' o
            flib="$flib `get_epicrc $EPIC_DIR/.epicrc user_libraries`"! n! u8 T" h! D2 X- |% C
        fi9 L0 T0 F* `2 q, e" r
    fi
2 j% }2 _% |% Z( Z/ ?2 T* B* s. P  k$ z$ y3 O- ^) Y  x8 o" s6 e
   for i in $ulib. y4 l0 Y+ O( r, K5 i# p9 ~0 ]. \
   do
% g0 P) [. ^! q7 F' N, ?6 E       [ ! -f "$i" ] && continue
/ M$ |8 }8 Z$ u& p7 t4 n       dir=`dirname $i`; cd $dir; dir=`pwd`; cd $cwd. m5 L' }( f/ H! k
       i="$dir/`basename $i`"
# {% W6 A$ _" ~$ c% D+ y6 F       case "$i" in
: h- V2 e  C" B       *libCustom$suffix*)    [ "$libcustom" = "" ] && libcustom=$i;;
7 d9 V$ Z% Q" a+ H; Y, e# X% B       *libFuncModel$suffix*) [ "$libfmodel" = "" ] && libfmodel=$i;;
- U; ^1 ]2 o) r) I1 t& z1 D$ w0 p       *libModel$suffix*)     [ "$libmodel"  = "" ] && libmodel=$i;;! J/ G2 K% N! T, Q# U
       *libva$suffix)         [ "$libva"     = "" ] && libva=$i;;8 ]  q, A% [8 l, D1 z) `/ @
       esac
: }( F; A: v/ H       [ "$libcustom" != "" -a "$libfmodel" != "" -a "$libmodel" != "" ] \
' a$ o5 C' ]0 B9 O. a        && break
7 T8 t! K8 ~# R0 g! V   done* m+ l5 ~% q+ U

. p% U" b$ V+ ^( {; H, C   # symbolic link shared libraries to .epicrun$$* n) a) H5 {7 B# b6 w6 e
    cd $EPIC_DIR; epicdir=`pwd`; cd $cwd
  @0 A4 ^0 A  }    if [ $cmdname != "timemill" -a $cmdname != "powrmill" -a $cmdname != "nanosim" ]; then& c8 r: q% s( u2 i2 v
        if [ "$libfmodel" != "" ]; then
4 w, B' a% A" h) }/ `             [ "$libfmodel" != "$epicdir/libFuncModel$suffix" ] && \
/ \5 I( d2 h* |/ k9 ^             echo "Using $libfmodel ..."  && \$ ?' B: a5 t3 o3 }
             echo "Using $libfmodel ..." >>  $EPIC_SCRIPT_MESSAGES_FILE# m8 f  e' Y9 ?
             if [ -f $rundir/libFuncModel$suffix ]; then
+ ~5 h% ^5 y6 z1 {) ?6 K               rm $rundir/libFuncModel$suffix: A( U/ b% |- Q! P6 f/ f0 j
             fi2 ]( I, }1 R5 ?* \- F7 n7 k
             $ln_default $libfmodel $rundir & o5 ^) N4 H) p1 w6 H. c* m( J
        fi- d# ]5 I; p' ?& ^8 ~9 z
        if [ "$libmodel" != "" ]; then
/ A& U# Q* A4 |+ `; ~- o5 l( j             [ "$libmodel" != "$epicdir/libModel$suffix" ] && \7 q3 F0 [8 T. ?: j
             echo "Using $libmodel ..." && \- h$ g9 A* E' @  L# m: J
             echo "Using $libmodel ..." >>  $EPIC_SCRIPT_MESSAGES_FILE$ }! N& p3 d4 R- Z7 R5 q- R* {' D
             if [ -f $rundir/libModel$suffix ]; then0 H. {1 [" s( U! M
               rm $rundir/libModel$suffix
- V! A  s( r" L& b             fi( f- z; q- X/ a* R
             $ln_default $libmodel $rundir
7 H% u4 p2 u& Y: _        fi  o$ s$ |5 X4 R4 [* _; i( B
   fi
; F: e* d6 c" a5 u   if [ "$libcustom" != "" ]; then
2 a; j6 |" Q3 p$ b3 E3 }        [ "$libcustom" != "$epicdir/libCustom$suffix" ] && \( I* v2 `2 S" Y. i, Q
        echo "Using $libcustom ..."9 N$ E( M7 M  {6 c; r" S
        if [ -f $rundir/libCustom$suffix ]; then) u1 q: M' F3 b2 r' p
          rm $rundir/libCustom$suffix
! v5 L, k: \+ N$ `: e% s/ B3 M        fi
4 |4 M5 P  H% f6 D        $ln_default $libcustom $rundir
9 J4 S% }) e% R! m0 w( v% d   fi
( |7 S3 C2 S: @' j3 d. F
4 }* E1 i& y. i5 x* P9 o2 V   if [ "$flib" != "" -a "$flib" != "   " ]; then/ ]: _0 k. I8 ]; ]
        CMDLINE="$CMDLINE -fm_user_lib $flib"( |" ~8 _) R. d& ?$ }# y9 K
   fi
: y' k; K1 t5 y6 l6 |( O0 L' R/ I6 r, b
   if [ "$libva" != "" ]; then) I5 `; m$ d+ o3 _) W+ M
        if [ -f $rundir/libva$suffix ]; then
; M  _2 P5 ~% K, H: T& |          rm $rundir/libva$suffix
& Z; V# }* I+ V6 ~: [6 m5 m0 t        fi
5 _( Z, F$ ]$ v8 w9 |. S$ |        $ln_default $libva $rundir
; @6 y5 W3 D- @5 K: a# I   fi* a! m) B( z9 ]# l
+ i+ t, Q! M, O' j% W) Q1 ]" p

1 s/ e7 I/ c( O' |/ r& R* U    # VCORE design library! x* V; A1 x$ |. M6 ^: {
    if [ "$vlog_design" != "" ]; then; s0 z1 s" c/ \# n
        $ln_default $cwd/$vlog_design $rundir/`basename $vlog_design`7 p/ F* f4 e5 V1 ?
    fi/ \6 q1 B8 r9 M; y, S0 m
( k( Y& Y7 z8 k7 K* O
    if [ "$EPIC_EXTRA_CAPACITY" = "1" ]; then, A; W# ~3 f) K! O
        EXTRA_CAPACITY=YES
3 G  q5 \: |, T    fi0 S9 c" g9 M9 c
# u) r' E9 i* B  ?! G# i
    [ "$EXTRA_CAPACITY" = "YES" -a "$USE_ACE" = "YES" -a "$DB_REAL" = "0" -a -x "${command}_xc" ] && command=$command"_xc"! d- Q- k0 X$ {
    [ "$EXTRA_CAPACITY" = "YES" -a "$USE_ACE" = "YES" -a "$DB_REAL" = "1" -a -x "${command}_a_xc" ] && command=$command"_a_xc"7 l/ Q( B: h* }5 ~2 s; I
    #Create temp file if dual process is on
8 w  H1 h( l' {1 H5 z    if [ "$EPIC_ARCH" = "SUN4_SUNOS_5" ]; then2 [: f0 R! G( V% j3 }$ u
        if [ "$EXTRA_CAPACITY" = "YES" ]; then5 ?+ o9 w' j9 J  Z! g% y
            touch $rundir/rpcidfile
; m, J( {+ o1 _7 \. U7 W        fi
. B0 A0 E5 U5 Y- Z. j  p    fi
6 H: v0 K( n' ~$ ?fi
2 _# x  t* n& e1 N: Z0 ~( C, C
: s% u2 [* {2 j9 a6 ?; Nrun_cmd()) I: c) m2 l4 V" b$ H
{( e6 G/ j, a  R' Y
  command=$1
) ]5 F: f2 R7 a  shift
/ y! i; x# M% A: l
( F* Q* ?' b+ r& h( Y$ J! i" G$ E  if [ x"$VA_FILE" != x"" ] ; then
* F% s- f  K/ _. n1 w! N     cmdline=$ARGV7 x  u- K+ h( I2 {8 [% v$ ^
  else
  P5 S7 X0 G) o7 N     cmdline=$@  O" b. y  m& s4 {1 y5 j
  fi
4 @. t5 D& S& H5 t& i
# J5 D' {! M6 h6 r1 S* j6 b; m  debug=${DEBUGGER:+"$DEBUGGER $command"};
& b: _' [; B/ x! i
5 @- J8 q! _* f2 z0 h+ L( w  # To disable Exec-shield-randomize in RHEL3 U3+ when running nanosim and nanosim_a
% ]: A9 L- v! @7 l% `5 G$ }  # so save-restore may work.
7 ?2 T' L4 I3 }& f! z4 ?. G/ R; q' T5 u" L  setarchStr=# P- z# ]: S- ~0 s' T/ t- E5 a  Q
  cmd2run=`basename $command`
/ g& A  ~7 u$ r; n( l) u  if [ ${cmd2run} = 'nanosim' -o ${cmd2run} = 'nanosim_a' -o ${cmd2run} = 'powrmill' -o ${cmd2run} = 'timemill' ]; then
/ \2 b8 ^9 N" s  l$ O    if [ "$EPIC_ARCH" = "IBMPC_LINUX_LINUX" ]; then) @* `# k( I8 l
      setarchStr="setarch i386 -R "
. x$ X; ^6 G  f# i    fi
$ h" @; y  U5 D* A+ B" V7 D  W    if [ "$EPIC_ARCH" = "linux" ]; then
" c: E) I' }7 O/ f' o! ]- O      setarchStr="setarch i386 -R "" o! f; m9 Z* J( S* p* ]
    fi- I# Q5 }& ^. @3 V7 X8 X5 x
    if [ "$EPIC_ARCH" = "amd64" ]; then
2 V+ \, f4 n7 M7 {1 A  W      setarchStr="setarch i686 -R "
$ I4 ~% Z  n/ I5 k5 z* Q    fi: z7 ?. H0 ~& S  ^) g0 h
    if [ "$EPIC_ARCH" = "suse32" ]; then' F/ X0 `! f( S0 o2 f7 Q4 {+ Y
      setarchStr="setarch_suse i386 -R "
% R3 b' e6 X6 u' \" T- P" f    fi
; @8 Z0 E  ?+ g* M2 e    if [ "$EPIC_ARCH" = "suse64" ]; then
" T6 w) K/ H  R, e) w% u6 z      setarchStr="setarch_suse i686 -R "
! z$ R& J; F4 s    fi) E% h4 f/ C9 b- \
  fi# v0 o  t; ?# L" C  G$ _8 H  z- [  I9 [
9 m7 ~, m0 p) c
  ret_stat=0, ^! ^2 ^/ `) e: H% ]
  if [ -x "$command" ]; then
3 v" ~4 J; c# ]! b. |( T8 n3 H      if [ "$debug" ]; then3 |  s$ i; _8 z/ ~2 J2 u
        _debug_args_=$cmdline* E5 c3 q% b' c8 Z
        . .epic-debug1 ]' Q# K$ J5 U+ H/ w! s( E2 u5 D
      else
- T* g6 j! t- r6 G) @7 A        DEBUGGER=; export DEBUGGER2 u: s0 X" K0 @9 Q
        $setarchStr $command $cmdline
5 y  C. v: N/ {( Q& Z0 R      fi
* f6 s6 _! N5 g      ret_stat=$?- f6 g2 {% a. n  Z
  else( ?$ ^4 i4 W3 x9 {1 M
    echo "Corrupt installation, executable \"$1\" not found!"' ~, I. {0 \5 i1 t  K) i+ [& D
    ret_stat=1
3 O2 L9 F1 r# A( y& p  k6 \  fi4 J  [8 Y- f' a* \( N$ _
}
8 o2 P5 Z$ p2 d, L7 m. e: |) B/ T" i3 x# I% p$ H
# keep runing cmd if ctrl file exist
' m7 ~. m7 C" g! W: \8 D) I
9 v1 ^5 Q) t1 I4 l/ brun_loop()
& [6 l2 b, R( a9 v{
8 b6 W( x6 X, n9 L6 `; h  command=$1
3 W+ @8 \2 s1 _, ^: P7 }. Q  shift
, ?$ Y( R( ?% V7 n8 M4 O+ H" e! e
2 ~! g8 Y: Z( K6 g7 F; }$ P  if [ x"$VA_FILE" != x"" ] ; then0 ]* A  ~* {/ \1 F- S6 `
     cmdline=$ARGV! o0 S! g: ^1 t* i1 J% z4 Z* L! N
  else
: d: G1 {/ I* x- O0 @) O! q! c     cmdline=$@9 F/ n" q$ @$ N& g( K' _
  fi+ U7 Z( F! v, {" A
# a9 v- i, o. J! J6 Y* ?
  while [ $ret_stat -eq 0 -a -r $LOOP_CTRL_FILE$$ ]; do
4 L. c" B: e9 u2 G    . $LOOP_CTRL_FILE$$
/ z9 U) w* e; p2 Y    run_cmd $command $cmdline -banner 2
% ^0 s# z4 h) D6 U: ?  done;4 M$ D- l" |1 Y3 q

! v+ I# m; j/ k. C& |) x' ]4 K  if [ $ret_stat -ne 0 -a -r $LOOP_CTRL_FILE$$ ]; then
% N% J; g9 ~5 {+ x    rm -f $LOOP_CTRL_FILE$$
- m0 G% n2 E, l+ j9 }  fi8 \2 {, `' a4 w4 S! a; P
}
1 E) N" a3 s7 \! M% F9 k8 f( l7 k8 F; y  @
har_check_ret_stat()+ k$ H& d! J+ Q/ r: r, F% W
{
7 G* x! t% p  @8 f- G  if [ $ret_stat -ne 0 ]; then
, |* ]1 w, {/ }: S* |    echo "Simulator returned with non-zero exit status. Stopping."
7 N  S5 H( P% u    exit 13 }( R, ^, v; P
  fi4 M* b& e, y9 b% _8 u
}
2 ?  F: P* N8 C3 X8 g$ ^
0 r( s5 y! P1 N4 m4 s5 x$ C#4 L2 U1 k+ f: e. |) Y! [/ x8 c
# set stacksize and datasize limit
  O$ }9 I; V" R: G% j2 D- _# W#" U- g7 j' G) c/ H4 o/ c

, c$ z1 Q% [( ^& m+ cset_data_limit
3 f& }0 U( k0 x+ Cset_stack_limit
8 V6 x( P) a: g. A7 i; F& h4 e
! C) W: |. ~6 r$ _$ h#rm -f $LOOP_CTRL_FILE
  ?1 z+ E  e$ }" K8 P7 O6 y5 ~- {/ Q) d
run_main()" L! u4 K' U. j! W0 Z+ k) v+ p
{( Y* k9 W6 `4 s+ U9 ^: T# f
if [ $is_special_har_run -eq 1 ]; then
" e  H7 v4 t# L! E6 f: P  if [ "$har_ofile_prefix" = "" ]; then
- m( J- _. K3 B    echo "Wrapper bug. Notify Synopsys technical support."8 }' G: S0 }: @9 s6 u  ~
    exit 1; n8 S* o' N1 C* m" A- i
  fi/ }3 b/ C0 w. G- _, F7 C' n
  if [ "$har_hilo_file" = "" ]; then2 G9 [4 Y4 Z) c
    # no user specified hi lo file - do both runs* A% I$ z  q8 z7 p1 j
    run_cmd $command $CMDLINE -har_one -har_setup
7 K" v7 }& s( b9 S/ W    if [ $ret_stat -ne 126 ]; then
$ K) K4 q+ n$ z& T/ H      har_check_ret_stat
$ y6 H% K- F( p3 G% J9 c/ O      if [ -r $LOOP_CTRL_FILE$$ ]; then/ e) z6 [0 s5 x0 M1 @
        run_loop $command $CMDLINE -har_one -har_sim ${har_ofile_prefix}.hl
$ b. c( e/ t$ Y" o  {) f# j        rm -f ${har_ofile_prefix}.hl
% u& l) N) a2 v$ P- c, G' e8 Z, b! w      else7 b) P$ x/ @+ i* e0 ]
        run_cmd $command $CMDLINE -har_one -har_rmhilo -har_sim ${har_ofile_prefix}.hl
! a8 q- }) f5 _! i      fi
8 C; g) q2 P3 \, B: B' x; p    else
1 g; }9 r! w4 g) ]% t6 s      ret_stat=0" Z+ u9 \( D6 W) [. l% ^: D. u
    fi
- h" }' i/ |5 V6 ~* R) o$ m  else: H- b- Y# K0 k9 |/ N. f+ C0 d
    # user gave a hi lo file name. {# H; A+ p& a8 u9 _/ y
    if [ -f $har_hilo_file -a -s $har_hilo_file ]; then$ x! }1 t6 y: }0 V. N; Q
      # file exists - use it - only do sim run
" R9 z: h+ K( c8 s/ k      run_cmd $command $CMDLINE -har_one -har_ff -har_sim ${har_hilo_file}
7 d' k( @# L+ y" s  o+ C5 G      run_loop $command $CMDLINE -har_one -har_ff -har_sim ${har_hilo_file}
  o  p+ P8 r% t  l2 N4 Z  X! O/ Q    else) V6 I( _9 X3 |* G
      # no such file - generate it - do both runs; m( v! n8 P1 r9 \* Q2 P
      run_cmd $command $CMDLINE -har_one -har_fnf -har_setup
/ t: _" V2 N; j7 e' x; ~# q6 }+ L      if [ $ret_stat -ne 126 ]; then3 T( ~) F  @2 m. L7 w
        har_check_ret_stat2 y, p" b$ L2 k  s% d
        if [ ! -f ${har_ofile_prefix}.hl ]; then
  f4 ?1 \: _+ T# D" D% z! k          echo "No hi lo file generated after setup phase. "
- |  t& k  T/ N9 R1 ~7 |8 f          echo "Contact Synopsys technical support."8 q+ _3 e# K+ r. t& V  Q( n0 v
          exit 1
( t# W7 }: h1 w" C4 _        else7 P/ W+ |$ T5 b! C# U% \1 c
          if [ ${har_ofile_prefix}.hl != $har_hilo_file ]; then' K  a7 |) M' P
            mv ${har_ofile_prefix}.hl $har_hilo_file
/ F8 z4 J: l) k# w/ _$ q7 q          fi
, }9 m1 h1 h- U        fi
+ v5 b! E6 S6 `  e) L4 o        if [ -r $LOOP_CTRL_FILE$$ ]; then8 d/ r& {% G" i" ^: d7 e. i* o
          run_loop $command $CMDLINE -har_one -har_sim $har_hilo_file& y* L) q2 v: R& `/ v' a2 _
        else. [# B3 z& J) ^4 q! K' c/ j3 I
          run_cmd $command $CMDLINE -har_one -har_sim $har_hilo_file
, }0 m9 H( M+ S9 B/ z        fi
; p% D0 X0 C# `5 r9 j. \& ?      else ' j3 `6 e$ _3 O7 A. F  q
        ret_stat=0
$ q' L' f7 c4 u  D- P      fi
8 A. K7 }) h' d: w  ~    fi" z- ~( w* b  B' h% a  ^( |6 c
  fi9 \4 @( y3 e- {  `0 W( u
else  
3 l6 H) J& E$ v& x# don't loop if -har_setup
2 z  s- t5 u3 t: L/ a  X/ r0 C1 G  if [ $have_har_setup_flag -eq 1 ]; then9 @  f" D+ S3 r, h) q5 _
    run_cmd $command $CMDLINE3 y4 X; v3 c4 ~% d, K; U
    if [ -r $LOOP_CTRL_FILE$$ ]; then
: q6 Z+ H& v( V: J1 m6 R      rm -f $LOOP_CTRL_FILE$$& o9 K+ M' `- Q5 J) B
    fi
/ p! T% G" @5 E6 r' Z7 d+ ^9 R  else
6 E! I. W% f3 `6 L    run_cmd $command $CMDLINE
/ i8 n9 `- g, G% C" i, {    run_loop $command $CMDLINE; c  Y0 x$ k1 i$ `
  fi
! ?) i% h$ e, O/ j/ ?fi4 m3 e, a3 \4 t8 |9 ~
/ S% Y2 \' x( U" k% i5 j+ P
if [ $ret_stat -eq 0 -a $cmdname = "powrmill" -a $postgres = "y" -a ! -z "$workDir" ]; then2 L4 x* j. d$ S
  pwCreateErrDB -w $workDir -e $errFile
6 b& ]0 F1 v# F, v7 R  ret_stat=$?
0 _! ~. s/ y$ }7 n2 Xfi( L- n7 p: [; z: S' J
}
# Q" Y9 P& H! ^4 l$ T. S1 J$ [" L% ?" R) m! D% \" |
cleanup_alter()5 q- S3 S  J+ g9 F; J3 I% K- B
{2 o! z6 Y! r" Q6 R
   /bin/rm -f $ALTER_COUNT_FILE 1>&2
9 h; L% S/ Q$ }   /bin/rm -f $ALTER_HK_FILE 1>&23 t0 G8 v' w/ t+ Y
}1 o7 Y6 G2 i- y3 o+ k! @/ X

" z* {. C, v2 o+ D* P# h#generate alter temp files based on pid/ ^' ?2 M& t: C( f/ B
ALTER_COUNT_FILE="$ALTER_COUNT_FILE"$$, q# Z+ U  B6 f# D1 H- }) ~
if [ -f $ALTER_COUNT_FILE ]! R9 Z  Y0 U6 s  x( T* E
then * v  b9 J. M: v: I2 \/ k
  until [ ! -f $ALTER_COUNT_FILE ]
2 u4 T3 {+ r4 I3 y+ B7 r; |! D  do+ M/ M. ^# H7 G% t' @
    ALTER_COUNT_FILE="$ALTER_COUNT_FILE"$$6 a- D6 M( ~2 K0 c7 r
  done  }& U8 O5 j8 L' \' G
fi2 B# D! `5 q; j
export ALTER_COUNT_FILE
% ^1 L$ `" r9 J. P2 Z8 u4 A# Y9 `( X4 V$ U  E7 ?! g0 ]
ALTER_HK_FILE="$ALTER_HK_FILE"$$
9 I0 T6 A; B1 t4 B2 Bif [ -f $ALTER_HK_FILE ]
7 p4 T% A4 P8 j" x6 Q9 `% w+ bthen ) P; b# i# O) }
  until [ ! -f $ALTER_HK_FILE ]
- E7 ^) W, ]) C% U1 x% W5 ?  C  Z  do0 R) J, y( f. u, _2 f# l
    ALTER_HK_FILE="$ALTER_HK_FILE"$$
+ G% }7 x' j0 n, p6 e, r2 B  done
( F: m+ k( B$ x6 j1 X" _fi) |- h% ^1 ~1 b/ s( M* q
export ALTER_HK_FILE
" S- U% g8 E6 x$ M5 A/ {
. W& r6 ?3 v5 _4 S. P, f#generate monte carlo related temp files based on pid
! w  T0 C$ p$ `! O$ J# q) tcleanup_monte()
* @- V; Y- W! C4 m* S" U7 k{. Q& o7 f6 a9 U% ^+ B" a
   /bin/rm -f $MONTE_IMG_FILE 1>&22 Z1 T  F  q# j& q2 S% X; E
   /bin/rm -f $MONTE_IMG_FILE.gz 1>&2
, f' `: `3 m& s/ _   /bin/rm -f $MONTE_COUNT_FILE 1>&2) n! a6 q0 O* Q+ _
   /bin/rm -f $MONTE_CFG_FILE 1>&2& f) Z, M9 L1 F0 i, y! |4 k/ q2 W
}
4 g5 Z* L! |% l6 z$ n( m
: \6 Y% f8 q8 X$ w+ G5 V2 jMONTE_COUNT_FILE="$MONTE_COUNT_FILE"$$
: p. C+ n( W- F: Mif [ -f $MONTE_COUNT_FILE ]
6 D) m. _* }* Othen
5 q' J/ H: ^8 Q4 g9 E$ T  until [ ! -f $MONTE_COUNT_FILE ]
: o4 O4 K! L: r2 _" g! |6 M; I2 c  do
" O' Q+ T+ J, S! X/ ~- r3 _    MONTE_COUNT_FILE="$MONTE_COUNT_FILE"$$
3 N5 r; R- c. Y; R  done
1 y8 {2 a5 x7 D& ]! L% R% |fi0 A8 c4 z7 ]2 e( p( H
export MONTE_COUNT_FILE7 p% _$ U0 t0 }9 Y5 n; ~

- ]+ f0 ~* N, B6 y3 L! UMONTE_IMG_FILE="$MONTE_IMG_FILE"$$
/ U% o1 @# ?! n# q6 W: D+ ?if [ -f $MONTE_IMG_FILE ]( \+ G; o4 d$ ~$ [
then
" F  I1 R- v9 |! E# y  until [ ! -f $MONTE_IMG_FILE ]9 q% Q8 T' f4 m' f$ G
  do
% V) `8 X! J/ S  C5 O% `7 x. P1 K6 u; ?    MONTE_IMG_FILE="$MONTE_IMG_FILE"$$( x" `% N; ^, O( r$ R3 r( x5 D
  done
# l- J% @' v* ?, d; l4 F3 ofi0 X; ]4 Z# I; U3 Y  I! r6 E
export MONTE_IMG_FILE
; r6 m) Q  K: D% O( K
6 ?9 q; h3 n9 y$ D9 v& I" TMONTE_CFG_FILE="$MONTE_CFG_FILE"$$: J" \9 m! U( G: U4 B
if [ -f $MONTE_CFG_FILE ]
0 @3 g5 X0 R3 Dthen
: j+ [- |. S, H" S  until [ ! -f $MONTE_CFG_FILE ]
6 |7 u. a+ r( j  i  do
2 A. F0 B3 _; t. O3 D6 l) T    MONTE_CFG_FILE="$MONTE_CFG_FILE"$$
% u! b7 i2 v8 d( Q1 W+ _  done& ~5 T/ {7 [2 W
fi5 o& a4 a* g5 {) e- @% O; b7 ]

) H  o2 |! K/ a3 M9 J6 ]" r: W# main iteration  E  G% |# Z) X, x/ d, a& \
run_main
- n& ~( k* B$ b7 h' }; m6 C4 {+ f, y. ?0 f
if [ $ret_stat -ne 0 ] * m5 G: C& M8 D0 E! u
then " x! u3 I& w; C* Y  B  s
  cleanup_alter
5 v3 E1 R6 |% n8 f$ M2 @* V  cleanup_monte
' c: L" l; q" d$ ~. L( [  Exit $ret_stat* ~1 S* l+ V5 Q
fi, I: `3 E) v, \" @

1 i+ W5 g% A. k% W# q0 A+ T. O#Alter related iterations0 f; k! @! V( \$ G4 M# U

% ]) u$ \8 _! @8 I7 {& ?1 O' ]iterations=0' ^7 H. P  n+ k" h3 \% L  j' b
count=0" G9 R% A  v6 r
if test -s "$ALTER_COUNT_FILE"
7 Y- y  G% L$ y2 w1 Y$ \0 Fthen8 }  X) }" ~; B
  if [ -r $ALTER_COUNT_FILE ]; then6 }1 X& \3 n9 r9 H$ o( i
   exec 7< $ALTER_COUNT_FILE
7 m4 `0 d# R/ q( F( a4 q6 F/ t   read iterations <&79 O' j- Y# ]3 Y1 z
fi, q0 V. z6 j$ }' G
fi( {# r" ^# u+ \5 l: w
) h8 z& k4 [" ?) W! F2 P* n, _: q
trap 'echo Program Interrupt; cleanup_alter; exit 1'  2
/ u! c! G1 H- v+ Ewhile [ $count -lt $iterations ]
- a! C8 r  M8 x: b3 bdo) f8 k: ?3 d$ {
count=`expr $count + 1`5 v" p) J8 _) v+ g$ `) `
ALTER_COUNT=$count+ p. k" c# F- Q8 P# K
export ALTER_COUNT
, i# |, @* j! U( L) V) `! f" E, c
run_main% E8 h/ @  J: _; T9 o
' ~: Q0 w1 Z! q& [
done
$ B6 E& W! x- n5 W9 U) q* G, F* ~) f! |5 A# x. U- H% y" ?8 v
#Monte carlo related iterations
" q+ m( `' q2 g9 H3 ?, q7 n. J6 W6 `8 [5 `9 U8 K9 }
monte_runtime_summary()+ W4 w% T) s4 Z: S
{: D- q8 A1 m' \+ z) b7 P8 S# t
  keyword_1=real8 Y% o! C( I  a- K# A7 g* ^( `
  keyword_2=user/ x3 q% a& T% f% P" ?& h- O( p) H5 S
  keyword_3=sys  u7 N' R; V! W$ z6 l
  ofile_prefix=nanosim
: ^6 K- |; |' t) i' N' @8 L* ~( ]8 \/ @- C# _' t6 D
  if [ ! -z "$o_option" ]; then" b8 \& }! ^; ]
    logfile=${o_option}.log
( r; @" R/ u0 f, F; g  else+ ^+ O4 K( J4 q6 K
    logfile=${ofile_prefix}.log: X+ W' d. z+ n* j: p+ r5 s& Z
  fi
& z. D5 k% n9 A7 ~; S$ L+ W2 O3 _7 [
  I  J7 h) _3 e. I  x" p- }  if [ -f $logfile ]; then& f- \- ^! ?0 \5 Q  R4 r$ P" c
    echo "*** Monte Carlo Total Run Time Summary ***" >> $logfile      + _9 S. K3 Y& H3 A
    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
# c6 V9 {: \- N# i& H4 c* j4 ?7 U! v  fi
2 b& P% r, R- M1 e6 b- L0 Q}
& }5 ?' g8 d: |) G& F/ g. R; j4 m
. U2 u& z  b* T6 [) R$ d7 Z+ y1 ^next_monte=0
4 X& A( `* o+ l% f* a" pcur_monte=0
9 v# N( T' J; L' [1 U0 X
6 o! E: U  t) x! c3 g( v' wif test -s "$MONTE_COUNT_FILE"
! T  j) x! `; k/ v& e- F) lthen0 E" J* J: d* j3 Q  n
  if [ -r $MONTE_COUNT_FILE ]; then
+ T* R% _. X( M: s   exec 8< $MONTE_COUNT_FILE: l9 N* Z: {0 F: ^
   read next_monte <&8
# l- }( s- h5 ^8 @* F$ I  fi1 B# U. L" b1 S' P, \
fi
9 c1 N; b. U/ Y" o3 W1 W0 w. k
5 p- z3 v) \! V/ ~' xtrap 'echo Program Interrupt; cleanup_monte; exit 1'  2) G. R, [4 |5 b" ]( z* o# ?
while [ $next_monte -gt 0 -a $next_monte != $cur_monte ]& ~+ F" P) Z! j4 e6 f3 t) e, `
do  [0 Y+ W6 ?, ?1 m* ^
  NS_CURRENT_MONTE_COUNT=$next_monte% h$ V. k$ D" L/ L1 L8 c* W# U! g+ s
  export NS_CURRENT_MONTE_COUNT2 _, O9 P+ u3 w% a7 s  r! ]3 [
6 G- Y- l+ z" U1 p1 L
  echo "restore_ckt_state save_file=$MONTE_IMG_FILE" > $MONTE_CFG_FILE
7 P! \; h1 U7 U2 d# f0 [% [1 ?  CMDLINE="$CMDLINE -c $MONTE_CFG_FILE"
- N. n9 |! y7 K" ?3 I7 |6 B  run_main; S3 r& z/ o9 I3 @, e

& Y; s- o9 `% K! r& {, R  cur_monte=$next_monte# U/ z$ x. v+ |) r9 H7 S5 s+ x
  exec 8< $MONTE_COUNT_FILE! e( j0 D: o0 n1 L; g( _, u. [
  read next_monte <&8. L) s. h  a$ s' K* T5 U2 D& X- ?
done
, N! E, O. P( V( t( o1 c) C) y" L- X  U4 U
if [ -f $MONTE_COUNT_FILE ]
" n# L2 o- ^8 Ithen% A' d: C' x( A. ]: Z3 o' S" o! A
  monte_runtime_summary
% Y4 V. B) W& R7 c, F6 afi+ U0 E2 T& l( g( C1 L. [
& b1 \9 Y9 M/ I1 M' G8 O, N
cleanup_alter/ r- J5 z" r( [* r! \2 A/ \0 F
cleanup_monte. s6 S! g% v1 w

4 r3 Q& O% G! [  }* mExit $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-2 07:00 PM , Processed in 0.140008 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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