怎样写出好的脚本-流程的开发与建立

荣辰
荣辰 这家伙很懒,还没有设置简介...

0 人点赞了该文章 · 57 浏览

  今天开始将第一个议题:流程的开发与建立

  flow chart

  我是做IC的,大规模集成电路,在我们行业里,一切按流程办事早已成为一种共识,主要是因为集成电路的生产工艺要求很高,生产成本巨大,技术门槛相对较高,开发周期相对较长。

  EDA工具都有一套行之有效地参考flow,每家公司都会开发一些flow和工具,来提高员工的工作效率,标准化开发手段。那么怎样的flow才是一个好的flow呢?大家的意见都是不同的,我只是管中窥豹地讲下我认为的好flow是怎么样子的。

  请看图:

  flow是最外层与用户交互的部分,接受用户的输入,给予用户输出结果

  flow与核心的工具没有关系,flow行驶的是管理和后勤之类的事情,而真正生产线上是生产汽车还是生产iphone,这对于flow来说没有差别

  flow中应该要包含项目管理和时间控制等等子模块,这些子模块本身可能也是一个比较复杂的过程

  确定执行具体功能脚本的机制,尽可能降低维护成本

  对于Tcl来做flow controller,以下两种方式的调用子功能的方法做个比较:

  — proc 实现子功能

  作用域不明确,需要不断切换,EDA工具的所有配置都是在global domain里的,proc封装之后经常会发生作用域不明确,给开发带来额外的负担

  方便管理,责任明确

  更新维护方便

  复用性强

  — eval 运行子功能模块

  运行排错滞后,不能在source的时候就发现一些code上的基本错误

  所有功能模块都是在global域内执行的,功能模块中使用到的变量的作用域被扩大

  开发调试上的便利

  可复用

  使用wrapper的方式运行具体脚本,便于流程的建立

  由于eval的第三条,我采用的是eval来运行具体的功能模块,相当于给具体的脚本加了一层wrapper,可以做到flow与具体功能脚本隔绝开来,能更好地对flow之外的过程进行详细的控制。

  对于方便管理和责任明确,维护方便等优点,我自建了一套debug系统,自己建立数据联系,将脚本管理,维护方式,错误报告等统一起来。

  而复用这个问题上,eval的确没有proc来得强,也不可能做到封装,而灵活性本来就是eval的优点,这个要有所取舍了。

  我编写的这个flower cotrolloer有如下特性:

  读取excel做为配置文件,实则是转换为ASICII文件后做为flow cotroller的配置文件;

  每个子功能模块需要的信息都定义在配置文件中,包括维护者,各种特性,有flow cotroller读取并存储在变量里;

  有自己的message system,定义多种message的级别;

  输入信息的总体check,有不合理的return并给出解决办法;

  每个子功能模块有tag机制,方便扩展后续功能;

  子模块出错,自动发送mail给维护者,抄送当前用户并记录出错时的error message和所有相关变量的值

  监控子模块的运行时间runtime

  flow run结束有mail提醒,mail中有概要的运行结果信息

  最终结果以网页的形式发布

  使用list来代替bool输入

  适用于ICC/EDI并可以支持其他工具

  预留了prerun和postrun的接口

  各种模式切换的接口

  这些事主要功能,还有很多贴心的小地方在用户的不断测试中在完善。

  分享一个Tcl运行cmd set的wrapper :整套cmd set包含exeCmdSet, msgCmdSet, cfgCmdSet三个命令和一个全局数组变量varCmdSet。

  可接受数据输入

  计算runtime

  mute消息

  自定义array

  ?Download execmdset.proc

  proc exeCmdSet {args} {

  global varCmdSet ;

  my_parse_proc_arguments -args $args alist ;

  ...

  }

  my_define_proc_arguments exeCmdSet -info "Evaluate tasks defined in -array, default is strCmdSet"

  -define_args {

  {task "Name of tasks" tasks list required}

  {-nomsg "Boolean to control the stdout msg" "" boolean optional}

  {-array "Array to exec" array string optional}

  {-runtime "Calculate the runtime" "" boolean optional}

  {-data "Data store in varCmdSet" data list optional}

  }

发布于 2022-10-23 20:10

免责声明:

本文由 荣辰 原创或收集发布于 火鲤鱼 ,著作权归作者所有,如有侵权可联系本站删除。

火鲤鱼 © 2024 专注小微企业服务 冀ICP备09002609号-8