找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

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

[复制链接]

551

主题

1470

帖子

3万

积分

EDA365管理团队

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

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

EDA365欢迎您!

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

x
我不是专业的程序员,我也没有太固定的coding style,只是最近在写一个utility,有些许感想,加上在之前网上收集了一些参考资料,遂想整理出来,以享需要之同志。8 o- r0 d4 E0 |$ G. l$ N% |
这个系列暂时还没想好写多少,目前有以下几个议题,在此基础上展开来写:3 ]3 ]# I# {! y
    , N+ }* Z6 {' \; x! j' {
  • 脚本流程的开发与建立(本文)
    * s2 f& {2 j3 Z# a1 a
  • 降低维护成本需要的好习惯( h; v+ U) A& I1 f
  • 权衡流程自动化与深入学习之间的矛盾
    . v" }' F4 q; |' v
) g. }) m, F4 V! y9 u& a
今天开始将第一个议题:流程的开发与建立& Q5 I: i/ s3 W6 e# l/ t) F
flow chart

# n7 V/ f. J3 V% H7 W* C9 J' h: _* t+ O) G2 R- B( ~

6 e& `$ f9 g. F9 n5 x& a: l我是做IC的,大规模集成电路,在我们行业里,一切按流程办事早已成为一种共识,主要是因为集成电路的生产工艺要求很高,生产成本巨大,技术门槛相对较高(专业化),开发周期相对较长(相对传统制造业)。4 Q5 \+ L' Q  u

! ]1 I. G) w9 g* s/ z. v0 {3 S+ O& _% K- P4 z9 r- r& Y
EDA工具都有一套行之有效地参考flow,每家公司都会开发一些flow和工具,来提高员工的工作效率,标准化开发手段。那么怎样的flow才是一个好的flow呢?大家的意见都是不同的,我只是管中窥豹地讲下我认为的好flow是怎么样子的。
* B7 d- Z0 L- N# q! T4 I请看图(原创,如需引用请表明出处):
5 Y; H, ^) w; `6 A$ M* ~
! U; a6 E* w. s! g2 p7 B3 {
9 X3 D; P! }- s! d( Q! ~* B% s9 F
      @# V, I& I7 y1 R; M' s! Z
  • flow是最外层与用户交互的部分,接受用户的输入,给予用户输出结果
    % ]4 s1 g& I% T: I4 u2 g
  • flow与核心的工具没有关系,flow行驶的是管理和后勤之类的事情,而真正生产线上是生产汽车还是生产iphone,这对于flow来说没有差别8 p3 |. g) |8 `: A/ N! @  ~" _
  • flow中应该要包含项目管理和时间控制等等子模块,这些子模块本身可能也是一个比较复杂的过程
    3 q+ d$ D+ e% ^- m& W$ S
  • 确定执行具体功能脚本的机制,尽可能降低维护成本
    : V  C. G3 v( p  N$ M2 v& v

: i1 [+ p$ ]& {) i4 s对于Tcl来做flow controller,以下两种方式的调用子功能的方法做个比较:
! _: w2 K9 K  t. Q! |% L4 d— proc 实现子功能
: {6 L1 T% w, T$ D$ l
    3 ]% t2 z5 P" `* _6 j( T2 P
  • 作用域不明确,需要不断切换,EDA工具的所有配置都是在global domain里的,proc封装之后经常会发生作用域不明确,给开发带来额外的负担, D8 V! [1 }! I$ B: l, Q6 a
  • 方便管理,责任明确
    0 W1 i/ j) e1 s; q+ S
  • 更新维护方便# q2 D% ?$ Y3 N7 ]  e  L
  • 复用性强
    6 [' M  n' d* w' a

) M1 Y7 c" R5 r9 [  v5 K" r— eval 运行子功能模块
/ C8 C" M$ I7 O0 u' S( B1 j
    8 Z: d; ^( M2 p, J& W. O, p
  • 运行排错滞后,不能在source的时候就发现一些code上的基本错误! i$ G2 Y; y4 |; i% i
  • 所有功能模块都是在global域内执行的,功能模块中使用到的变量的作用域被扩大
    4 ^1 i4 K0 u8 B; L
  • 开发调试上的便利6 @/ z+ k) x2 a5 o! A
  • 可复用
    " ?5 Z( t' f+ g5 x
  • 使用wrapper的方式运行具体脚本,便于流程的建立2 i  ^+ m5 Y6 N1 u# P4 x. Z8 Q

' M5 q* W8 s5 Y& Q由于eval的第三条,我采用的是eval来运行具体的功能模块,相当于给具体的脚本加了一层wrapper,可以做到flow与具体功能脚本隔绝开来,能更好地对flow之外的过程进行详细的控制。
! Q1 s. p& s6 _$ \% r2 B对于方便管理和责任明确,维护方便等优点,我自建了一套debug系统,自己建立数据联系,将脚本管理,维护方式,错误报告等统一起来。% p, s7 f' ^0 B3 o# @0 g
而复用这个问题上,eval的确没有proc来得强,也不可能做到封装,而灵活性本来就是eval的优点,这个要有所取舍了。
# ?( O0 G" @. j4 y: a我编写的这个flower cotrolloer有如下特性:
& r4 P0 j6 Z% t- b- D# s0 S

    9 a' ?0 ~9 f& {* N$ V/ [% a
  • 读取excel做为配置文件,实则是转换为ASICII文件后做为flow cotroller的配置文件;" }/ w: l# p, B; A8 a! L! L% J
  • 每个子功能模块需要的信息都定义在配置文件中,包括维护者,各种特性,有flow cotroller读取并存储在变量里;1 a+ c8 ?" {$ y' Z3 S- }. M
  • 有自己的message system,定义多种message的级别;6 f9 J. O1 q9 F
  • 输入信息的总体check,有不合理的return并给出解决办法;
    - b* j% r  w# ~$ J' I8 v9 o
  • 每个子功能模块有tag机制,方便扩展后续功能;
    9 e, F  A+ j( G: A+ g
  • 子模块出错,自动发送mail给维护者,抄送当前用户并记录出错时的error message和所有相关变量的值% h6 U8 g; |7 ?. m1 r7 i. ^" c1 w
  • 监控子模块的运行时间runtime* e: D# a" k" V* z
  • flow run结束有mail提醒,mail中有概要的运行结果信息
    ) a2 L2 F. u9 _9 b% S$ ], R1 l
  • 最终结果以网页的形式发布
    ) I' d3 B3 B2 Q9 v
  • 使用list来代替bool输入9 L$ k5 G6 P+ l( d) q, w1 y
  • 适用于ICC/EDI并可以支持其他工具
    & m, y& I# H, F, O
  • 预留了prerun和postrun的接口! S: _5 c3 p$ Y$ \1 x( [" Q
  • 各种模式切换的接口: }3 n( J6 `4 F6 W1 t
. i6 W* _5 P+ c/ N( b
这些事主要功能,还有很多贴心的小地方在用户的不断测试中在完善。
4 ^9 M( C2 i, H/ X分享一个Tcl运行cmd set的wrapper :整套cmd set包含exeCmdSet, msgCmdSet, cfgCmdSet三个命令和一个全局数组变量varCmdSet。3 ^* S! Q! X9 h$ h

    / m3 Y+ j; M  F2 K
  • 可接受数据输入
    ! E( b" ]% Q3 c2 @" ~" W$ u" i
  • 计算runtime
    8 P% o$ u6 z2 p( B; Q
  • mute消息
    $ }+ O/ J" `' n& t3 f
  • 自定义array
    ! I2 X# U. K& e! j
?Download execmdset.proc
) R6 x, a; p0 B4 a6 k, j9 m

    7 q3 T, `  F$ i2 Z5 `8 H
  • proc exeCmdSet {args} {  B! z  b# g% O, |! p" t

    1 i* a% u; n8 e5 W  f
  • 0 k% z+ @' T) X2 u  \9 c

    8 s3 @0 _- s. M
  • global varCmdSet ;7 y! `( D) U5 v( }8 `8 ?
    2 G3 D; ~+ X9 }- m2 ?
  • my_parse_proc_arguments -args $args alist ;! B: Z3 }4 P9 s! q# K

    9 J7 L7 C8 N5 Z) ]
  • ...
    1 ^7 U! u  x. i4 ]! q: Y# r: i+ z
    % n6 j# |4 E* R/ A' e  ?' w* }4 |
  • }: U" h$ e: @# G7 H% q+ i, t2 S

    - D) Y4 }! {% C4 c. L/ O0 `4 G+ u6 @
  • my_define_proc_arguments exeCmdSet -info "Evaluate tasks defined in -array, default is strCmdSet" \
    5 K  O8 \7 w2 m+ L, B; T/ p
    5 ^  H: L) L& m) u$ g0 G
  • -define_args {
    ' k$ T/ s  V, N. }1 @7 H: J* z" T$ L/ X5 `3 g2 Y
  • {task     "Name of tasks" tasks list required}! F' Y+ _( I! m/ E

    / O/ G# V% E  n& i  a/ v" V
  • {-nomsg   "Boolean to control the stdout msg" "" boolean optional}
    ) P- o+ y5 S/ x# E; l7 T( |8 ?* a# u: @$ f7 ~0 I1 B# ^
  • {-array   "Array to exec" array string optional}
    0 ^% P. w5 W/ ^
    * S2 G. s3 t) D
  • {-runtime "Calculate the runtime" "" boolean optional}
    ) }( f9 l* P# ]- C
    9 {6 H' n  V/ G
  • {-data    "Data store in varCmdSet" data list optional}! O: f  T8 a7 [* V6 s

    3 |: _7 C- `1 n5 b& A
  • }6 K" z( Y/ o5 E, b
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2025-4-6 12:06 , Processed in 0.061595 second(s), 32 queries , Gzip On.

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

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

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