找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

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

[复制链接]

551

主题

1470

帖子

3万

积分

EDA365管理团队

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

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

EDA365欢迎您!

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

x
我不是专业的程序员,我也没有太固定的coding style,只是最近在写一个utility,有些许感想,加上在之前网上收集了一些参考资料,遂想整理出来,以享需要之同志。& J6 @: f9 h- U1 |6 q
这个系列暂时还没想好写多少,目前有以下几个议题,在此基础上展开来写:
" C/ a! b" G! ?# }, C: z
    % O  I" M+ k+ K7 u5 @
  • 脚本流程的开发与建立(本文). Y4 h$ x/ ^! k
  • 降低维护成本需要的好习惯
    & {* l0 ^+ E. y! ^' F
  • 权衡流程自动化与深入学习之间的矛盾' T% g& l1 P* |% D; K2 [
# U2 T$ H3 |# }; ~4 s  a# X; z, K
今天开始将第一个议题:流程的开发与建立" P0 q, C7 c3 A
flow chart
7 ]7 D( k+ K0 a
# J( b( Q; }0 X* A& M" V5 Q
# Q4 Q$ g" z' }! }2 S
我是做IC的,大规模集成电路,在我们行业里,一切按流程办事早已成为一种共识,主要是因为集成电路的生产工艺要求很高,生产成本巨大,技术门槛相对较高(专业化),开发周期相对较长(相对传统制造业)。
/ d% q& y* {* D9 c2 r! [
# Z5 \; h+ K* t, v2 `' s1 J8 y) S: x2 X4 ]/ n, E' f
EDA工具都有一套行之有效地参考flow,每家公司都会开发一些flow和工具,来提高员工的工作效率,标准化开发手段。那么怎样的flow才是一个好的flow呢?大家的意见都是不同的,我只是管中窥豹地讲下我认为的好flow是怎么样子的。' X2 ^. m: z  ~6 @2 i) J; {
请看图(原创,如需引用请表明出处):8 [( c1 G1 v- i  l; N* z' x
; F: c3 ?9 Y; b) D; a8 b
' X0 P+ N/ N, x3 F

    . o. e% Z3 @2 h: d# \
  • flow是最外层与用户交互的部分,接受用户的输入,给予用户输出结果
    8 N& B' H8 O1 _5 Z
  • flow与核心的工具没有关系,flow行驶的是管理和后勤之类的事情,而真正生产线上是生产汽车还是生产iphone,这对于flow来说没有差别3 P8 V' E8 I8 s5 Y8 `
  • flow中应该要包含项目管理和时间控制等等子模块,这些子模块本身可能也是一个比较复杂的过程
    # {% Y8 Q! h$ L# n0 J, S
  • 确定执行具体功能脚本的机制,尽可能降低维护成本
    0 A! Q/ `) C% V/ b* X) o

4 Y) v3 z9 G; W! _6 }对于Tcl来做flow controller,以下两种方式的调用子功能的方法做个比较:1 b/ f6 e" u5 e
— proc 实现子功能/ |, W; p; v& ^2 `4 {' o4 Z
    6 R9 f8 Y- m0 ]% x: l" l3 i+ O
  • 作用域不明确,需要不断切换,EDA工具的所有配置都是在global domain里的,proc封装之后经常会发生作用域不明确,给开发带来额外的负担
    ! s2 x& f% H: j4 S  P
  • 方便管理,责任明确
    9 g0 X7 F! e2 ?# n# l
  • 更新维护方便6 j+ l, m6 D: B  j% K" s9 ?
  • 复用性强' H1 C6 l) f" G# ]% G, u
1 H" S# s: h' Y- M
— eval 运行子功能模块( Z: s$ X' {  Y2 Q

    8 y; n  K( _& W  e6 q. {5 v. v- i
  • 运行排错滞后,不能在source的时候就发现一些code上的基本错误& e1 _# l4 t8 f% X
  • 所有功能模块都是在global域内执行的,功能模块中使用到的变量的作用域被扩大( I( [; f! i1 T$ u9 |
  • 开发调试上的便利
    + \) T: I2 U3 }( j& E3 ~3 p
  • 可复用
    8 K& ?, q  i$ Y$ `  t! o
  • 使用wrapper的方式运行具体脚本,便于流程的建立9 `7 O+ j* x; G# J

* ^$ A, y: N+ |5 V/ p' a由于eval的第三条,我采用的是eval来运行具体的功能模块,相当于给具体的脚本加了一层wrapper,可以做到flow与具体功能脚本隔绝开来,能更好地对flow之外的过程进行详细的控制。9 e2 h$ S, b3 {: z
对于方便管理和责任明确,维护方便等优点,我自建了一套debug系统,自己建立数据联系,将脚本管理,维护方式,错误报告等统一起来。3 z% T# n. v* v* ?/ K9 ]6 @" g
而复用这个问题上,eval的确没有proc来得强,也不可能做到封装,而灵活性本来就是eval的优点,这个要有所取舍了。
# ~2 [) Y( D, i; r, L7 q% |8 ^我编写的这个flower cotrolloer有如下特性:
4 z- [! C3 o4 _$ [7 m. W/ P

    2 g2 s! D. R6 m5 E
  • 读取excel做为配置文件,实则是转换为ASICII文件后做为flow cotroller的配置文件;6 l) p. p9 S( @) M' ^
  • 每个子功能模块需要的信息都定义在配置文件中,包括维护者,各种特性,有flow cotroller读取并存储在变量里;1 Y$ f9 m' J, \# U: ]: e
  • 有自己的message system,定义多种message的级别;2 t( `. |/ _+ ?7 F. _
  • 输入信息的总体check,有不合理的return并给出解决办法;# X# B) Z) x( X5 S' d8 W0 ^5 j8 L
  • 每个子功能模块有tag机制,方便扩展后续功能;1 d* L; `  h$ d2 E
  • 子模块出错,自动发送mail给维护者,抄送当前用户并记录出错时的error message和所有相关变量的值$ L7 c6 t9 X5 C( v9 v
  • 监控子模块的运行时间runtime3 ]/ W  X7 m1 k2 ^0 v( V) p
  • flow run结束有mail提醒,mail中有概要的运行结果信息
    ! |- X' X2 q+ r( a1 e* Z5 V0 k
  • 最终结果以网页的形式发布
    " l2 Z+ w& [2 E: X
  • 使用list来代替bool输入" c, p- m% ^8 I: t, F% A$ ~% \
  • 适用于ICC/EDI并可以支持其他工具
    $ e1 `' O! I! @% g' I) J
  • 预留了prerun和postrun的接口7 S* ?+ ^7 ^& |0 z# @* |* w( A
  • 各种模式切换的接口
    & L# G2 ^- z, [

. A9 X6 h! h2 G4 }% c# x这些事主要功能,还有很多贴心的小地方在用户的不断测试中在完善。3 _6 B" [/ f7 r7 V( i
分享一个Tcl运行cmd set的wrapper :整套cmd set包含exeCmdSet, msgCmdSet, cfgCmdSet三个命令和一个全局数组变量varCmdSet。1 F: h5 M5 l) r; S0 F- r' B! j

    1 q0 B; |& P+ h4 o0 _
  • 可接受数据输入
    * Z: M! ~- {( n, }" g0 z. ^  {
  • 计算runtime4 ?8 M( n5 I. @& |" K
  • mute消息/ K/ N5 V5 [$ P3 y7 M0 k& M5 N
  • 自定义array
    ' o  P% Q9 H$ b/ |5 D8 {% n
?Download execmdset.proc0 A% Q9 K+ q# ?* R/ {

    9 F- m' G0 G3 Q- e4 {! G. N
  • proc exeCmdSet {args} {3 I. r9 u$ h! d+ L. V1 S

    $ K" O  ~3 H7 v1 s
  • 7 j. `8 B7 D% C. q

    6 \% s7 }+ k4 X1 v* a- p
  • global varCmdSet ;
    * G: ]% t( ?; ~- {: K2 @9 D7 ?; X' W
  • my_parse_proc_arguments -args $args alist ;" z# j4 x- N- Q7 ~3 t" |. E
    4 E3 e( B. y5 A' c& w
  • ...! u- Y. M6 G3 Z
    - ?2 Y4 b5 r! ?; C6 b
  • }0 H" h$ {* O: L; I0 w
    ! u: Y- n9 T# i% l( M
  • my_define_proc_arguments exeCmdSet -info "Evaluate tasks defined in -array, default is strCmdSet" \) {, s+ i1 [, h, l) C: b3 `
    3 P; z- `" R0 Q+ s
  • -define_args {
      m! L, s3 Z' n. M1 h
    & J$ H3 c& b1 g5 y) I- ]5 [
  • {task     "Name of tasks" tasks list required}3 A7 f) V0 S9 P

    ( m6 C& c9 L: ]$ X
  • {-nomsg   "Boolean to control the stdout msg" "" boolean optional}4 W6 E; q- U8 m( @$ }
    5 M8 N- e: @% i
  • {-array   "Array to exec" array string optional}& _) t  H' I- R6 ~; L; K5 l. ]

    , F. F) ~* L- Z0 }; a
  • {-runtime "Calculate the runtime" "" boolean optional}0 u# k$ Z: s9 s. Y6 ]2 S

    ! t" p/ t; F+ _- |9 T9 Z' b* f
  • {-data    "Data store in varCmdSet" data list optional}
    / c* p+ i% i! d& y8 X$ C0 T
    5 W2 K. j) g+ z" l+ o- G1 `' ]
  • }
    , X. z; J. D9 i  W/ u$ o) y
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2025-4-7 08:32 , Processed in 0.057088 second(s), 33 queries , Gzip On.

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

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

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