找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 4|回复: 0
打印 上一主题 下一主题

[硬件] 论坛推荐:怎样写出好的脚本-流程的开发与建立

[复制链接]

551

主题

1470

帖子

3万

积分

EDA365管理团队

Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

积分
39487
跳转到指定楼层
1#
发表于 2019-9-27 15:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您!

您需要 登录 才可以下载或查看,没有帐号?注册

x
我不是专业的程序员,我也没有太固定的coding style,只是最近在写一个utility,有些许感想,加上在之前网上收集了一些参考资料,遂想整理出来,以享需要之同志。
: g5 l9 k* V6 O这个系列暂时还没想好写多少,目前有以下几个议题,在此基础上展开来写:
" @# l  P7 p3 L9 a7 R4 R

    3 t5 e1 h  L$ s2 Z# }, @6 G( C
  • 脚本流程的开发与建立(本文)
    $ `- X6 Z& e* o# h. j
  • 降低维护成本需要的好习惯
    3 X) \8 J4 U! M9 y7 G0 l0 t
  • 权衡流程自动化与深入学习之间的矛盾; |" o" ^1 U- T+ ?; `" s3 i
. l8 L# n3 {; [' e4 F: e
今天开始将第一个议题:流程的开发与建立/ r- \1 u9 t3 S- u
flow chart

" U) E$ J# I3 ~6 G% \$ C  g; }! s3 }9 t( s' {
  H, b: k+ s) M) @
我是做IC的,大规模集成电路,在我们行业里,一切按流程办事早已成为一种共识,主要是因为集成电路的生产工艺要求很高,生产成本巨大,技术门槛相对较高(专业化),开发周期相对较长(相对传统制造业)。: B* r" f  ]+ {) b6 Q* _
1 ~" C! |  B+ r/ |$ ^9 U

% `! S0 ]% N: q1 L6 b" M4 dEDA工具都有一套行之有效地参考flow,每家公司都会开发一些flow和工具,来提高员工的工作效率,标准化开发手段。那么怎样的flow才是一个好的flow呢?大家的意见都是不同的,我只是管中窥豹地讲下我认为的好flow是怎么样子的。; E8 W+ h) S8 W6 F
请看图(原创,如需引用请表明出处):
, x9 x4 j1 S1 d8 D
5 k3 J. q0 k+ C9 `8 w3 F. \" l8 [9 d. w

    - G4 G: ~0 B; c  y8 E
  • flow是最外层与用户交互的部分,接受用户的输入,给予用户输出结果7 b0 _% ^2 T/ a; g4 \
  • flow与核心的工具没有关系,flow行驶的是管理和后勤之类的事情,而真正生产线上是生产汽车还是生产iphone,这对于flow来说没有差别1 A6 f+ u! [3 A
  • flow中应该要包含项目管理和时间控制等等子模块,这些子模块本身可能也是一个比较复杂的过程0 ]9 G& T8 P; S4 d) F; G
  • 确定执行具体功能脚本的机制,尽可能降低维护成本0 I7 j; Z4 G/ `6 z" {. x
% V/ h! C+ F0 b2 P, g2 ~
对于Tcl来做flow controller,以下两种方式的调用子功能的方法做个比较:
5 |# ^. P! L" H+ J— proc 实现子功能
4 k* h& ?: s% U) H1 X

    2 \: `7 \- M& }$ l  t3 U) }
  • 作用域不明确,需要不断切换,EDA工具的所有配置都是在global domain里的,proc封装之后经常会发生作用域不明确,给开发带来额外的负担
    , s. |- Z8 q3 z  x3 x
  • 方便管理,责任明确
    # }, `: X6 Z( K9 C  B! u
  • 更新维护方便6 Q8 r( D" x' \' x
  • 复用性强! T0 y% e4 s- C, C7 n8 R1 v! b; S

1 l$ R7 d0 a# _  W3 X- N— eval 运行子功能模块
# y3 a3 z. a0 i) t- _7 w: E" V

    5 q  @6 n$ ^; {  A: A) j  M
  • 运行排错滞后,不能在source的时候就发现一些code上的基本错误7 X: S6 K+ z+ A3 h5 d2 _
  • 所有功能模块都是在global域内执行的,功能模块中使用到的变量的作用域被扩大# A5 R$ B6 k7 U$ Y* A/ X
  • 开发调试上的便利
    . A7 a9 f% H! f
  • 可复用! c. b! s- R) W1 L, `9 L
  • 使用wrapper的方式运行具体脚本,便于流程的建立4 q  a/ N& n, W! Q- o: T

* E: J- ~4 s2 D4 z/ G' o: w由于eval的第三条,我采用的是eval来运行具体的功能模块,相当于给具体的脚本加了一层wrapper,可以做到flow与具体功能脚本隔绝开来,能更好地对flow之外的过程进行详细的控制。
, x% M# H3 R- y对于方便管理和责任明确,维护方便等优点,我自建了一套debug系统,自己建立数据联系,将脚本管理,维护方式,错误报告等统一起来。  \6 q3 E) @; [+ j5 n( K
而复用这个问题上,eval的确没有proc来得强,也不可能做到封装,而灵活性本来就是eval的优点,这个要有所取舍了。# L  L7 a+ R7 |! O7 v& _
我编写的这个flower cotrolloer有如下特性:
, J  }+ m8 p" S5 _- G
      u! Z; D! M0 n
  • 读取excel做为配置文件,实则是转换为ASICII文件后做为flow cotroller的配置文件;% e+ B, p, m! r3 U
  • 每个子功能模块需要的信息都定义在配置文件中,包括维护者,各种特性,有flow cotroller读取并存储在变量里;
    & C# W6 |7 b3 Y% I  y' G+ W, j( V
  • 有自己的message system,定义多种message的级别;. e0 H4 u% D8 b6 G  _
  • 输入信息的总体check,有不合理的return并给出解决办法;
    0 }; R, F& t7 `" C# J# t9 ]: t4 V
  • 每个子功能模块有tag机制,方便扩展后续功能;
    % S9 _, Z& ?9 y4 {1 ]$ ^' R
  • 子模块出错,自动发送mail给维护者,抄送当前用户并记录出错时的error message和所有相关变量的值
      b# x" c* s' A+ e3 z
  • 监控子模块的运行时间runtime+ i" b) a) K  ?) O1 {! p
  • flow run结束有mail提醒,mail中有概要的运行结果信息7 n( A3 g/ H0 w
  • 最终结果以网页的形式发布
    . ^, I. O( a5 E0 G
  • 使用list来代替bool输入
    . _* n% M; q/ Q6 |4 L, T3 [
  • 适用于ICC/EDI并可以支持其他工具3 t5 s% C( y' j$ y9 `0 C9 x0 J
  • 预留了prerun和postrun的接口6 O. r# l" Q3 l2 z1 @3 \
  • 各种模式切换的接口
    . r5 u; w- F1 o9 O
) k8 M. ~& \. b7 [) H
这些事主要功能,还有很多贴心的小地方在用户的不断测试中在完善。9 N6 i. N2 p1 P: Q6 Y
分享一个Tcl运行cmd set的wrapper :整套cmd set包含exeCmdSet, msgCmdSet, cfgCmdSet三个命令和一个全局数组变量varCmdSet。/ i9 m( h' `7 F- K! h9 j  I
    6 v1 t7 g+ r3 ^
  • 可接受数据输入
    $ T, v7 L& |( {4 N& M: i' Z
  • 计算runtime8 K" i- A/ b5 F# U: V
  • mute消息& R4 r$ v! ~+ z0 t- j) D
  • 自定义array
    3 q7 D  y" C* D
?Download execmdset.proc
7 `* U& j% v. p0 i; J
    7 f6 T+ n; U& w# Y# T$ y$ d
  • proc exeCmdSet {args} {
    8 C; C6 z% w3 Y3 H9 F7 A7 w4 d; h! P) L( ~( r2 }+ ~" l- f

  • ( |4 G$ @1 F8 U- D) U, S8 M$ e# H* W. O8 [' T: |7 W$ X" f
  • global varCmdSet ;' @/ T, h- [1 m8 s' W

    : d6 H+ z# ~5 k! V
  • my_parse_proc_arguments -args $args alist ;' E$ t6 q8 E) c6 k% r5 S1 K! b4 g

    . ?6 Q$ Y. X5 G% Y: A8 f9 @
  • ...
    * U4 ]- @3 {- N% \8 n$ H; u' R. F; V7 t/ o5 o3 I
  • }
    # U& \" N& R5 s/ I  \
    2 u) V5 L2 B/ o  j
  • my_define_proc_arguments exeCmdSet -info "Evaluate tasks defined in -array, default is strCmdSet" \2 r& E! t$ [  F' t2 a3 h2 ~) }5 R9 `
    1 Y# y8 Z7 }1 O& p8 D
  • -define_args {
    2 J) ]" K7 O# c6 H  l/ Y0 I  m7 m% ^( F) t9 J# B( x
  • {task     "Name of tasks" tasks list required}6 N( {3 z* r' S2 R1 a3 v" j

    3 [8 J+ @2 @$ u- T0 N% l
  • {-nomsg   "Boolean to control the stdout msg" "" boolean optional}" O2 F) d2 ?5 m( m2 Z' S
    , f7 y  v- L& s. L- L4 J
  • {-array   "Array to exec" array string optional}
    . \8 L( K  E) @- ~
    . i7 \1 U9 {$ y: y+ J5 _6 ?/ D
  • {-runtime "Calculate the runtime" "" boolean optional}# M8 P/ d' g) Y

    1 }! I3 U) P+ J. ^/ S0 u/ z: c- c
  • {-data    "Data store in varCmdSet" data list optional}" Z; i; M/ ?4 h0 t

    5 ]* V( q, x2 q# t
  • }
    ' F+ d2 e, S% L; p/ w- p8 u' I
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

巢课

技术风云榜

关于我们|手机版|EDA365 ( 粤ICP备18020198号 )

GMT+8, 2025-4-12 15:55 , Processed in 0.075468 second(s), 32 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表