写在前面
准备用3-5篇文章的篇幅,将一些必备的技能cover一遍,期望对于入职IC的新同学有一些帮助。这些东西,每一项其实在网络上的介绍资源都非常丰富,但是IC新同学常常面对的问题是,并不知道“原来这个事情是这么做的”。所以,长话短说。
预计的topic list:
- Shell and Vim
- 正则表达式
- Perforce (版本管理系统)
- Shell脚本套路
- Tcl脚本套路
- Perl脚本套路
- Makefile套路
为什么是这三个语言?
- 曾几何时,在找工作时候看Job Description,会发现几乎大部分数字岗位都要求“熟练csh/tcl/perl脚本”。当时,天真以为,“反正都是脚本,会一个就能过关了”。实际上有点大错特错。
- 实际上,这三个脚本技能(我不称为技术,因为它们只是工具)是有非常鲜明的针对性的,是都要会的(除了Perl稍微有点复杂,Tcl/Shell巨简单)
Shell (cshell or bash)
- 具体这两者的区别就不介绍了,应用上来看,就是一些语法细节的区别。cshell对于会C语言的同学,更容易上手一些。而且,在centOS系统中,默认的脚本解释系统是cshell (tcsh)。所以,如果想学,就是从cshell开始吧 (熟练bash的可跳过this section)。
- Shell脚本的目标:
- 批量执行linux命令或者其他self-made脚本的wrapper脚本(理解为一个总管)
- 能吃进命令行传参,配合if/else, foreach等分支,完成简单的组合功能。
- 优点:
- 太容易写了,配合linux各种內建cmd (grep, sed, ls, echo, awk, mutt)基本能完成你想做的任何操作,是做批量处理动作的最佳选择。
- 缺点:
- 复杂文本处理任务上,没有perl那么轻松,配合sed,马马虎虎,不堪重任。
Tcl
- Tcl语言,是工具语言 (Tool command language),是一个能直接操作EDA的工具语言。
- Tcl的目标:
- 几乎所有EDA平台,都会将开源的Tcl解释系统include到自己的软件系统中,魔改并提供一些自己EDA平台专用的函数(比如dc_shell)。
- IC公司的Inhouse eda team,也会魔改Tcl,提供一些专用功能的函数(比如nv的tn_shell)。
- 为什么能操纵EDA?
- 优点:
- 其实没啥大优点,它是IC新同学必须会的一种语言,操纵EDA就靠它了。
- 缺点:
- 在文本处理和Hash类数据结构的访问上,没有Perl那么方便。
Perl
- Perl语言其实在互联网界被黑的有点狠,因为它的语言“随意性”真的是太随意了。如果你是C出身,一开始入门这个语言的时候,会头疼到想放弃,使用规则特别的不严谨。
- 比如:https://www.zhihu.com/question/37944158/answer/77018535
- 优点:
- Perl语言对于文本处理和Hash类数据结构的支持,太过强大了。。是一个你绕不过去的语言。
- 什么是Hash类数据结构?其实Hash (哈希) 的讲解都太高深莫测。说白了,在IC flow中会用Hash这种数据结构,描述很多config类型的数据,并读取。例如:
$cadConfig = {
'chip_name' => 'ampere',
'jtagreg_dir' => 'xxx',
};
# 访问的时候,只要:
print $cadConfig->{'chip_name'} , "n"; # 即可
- 缺点:
- 语法不严谨,对于强迫症同学,真的很头疼。
后面的安排
- 讲解语言其实很费篇幅,但是!我只会从“工具字典”的角度写短文,将三个脚本最常用的code block拿出来,分解讲一下。这样,同学们在使用时候,只需要点开文章,按图索骥即可。没必要remember.