来源:微信公众号“观芯志”。
----------------------------------------
1. 概述:
我们在集成电路行业中一般常用到的有四种脚本,分别是 csh,TCL,Perl, Python.
csh介绍:C shell 是一个交互式命令解释器和一种命令编程语言,采用的语法类似于 C 编程语言。shell 是交互式地从终端键盘或者是从一个文件来执行命令的。这个 csh 命令调用了 C shell。
TCL介绍:Tcl (最早称为“工具命令语言”"Tool Command Language", 但是目前已经不是这个含义,不过我们仍然称呼它为TCL)是一种 脚本语言。 由John Ousterhout创建。 TCL很好学,功能很强大。TCL经常被用于 快速原型开发,脚本编程, GUI和测试等方面。
Perl介绍:Perl,一种功能丰富的计算机程序语言,运行在超过100种计算机平台上,适用广泛,从大型机到便携设备,从快速原型创建到大规模可扩展开发Perl最初的设计者为拉里·沃尔(Larry Wall),于1987年12月18日发表。Perl 一般被称为“实用报表提取语言”(Practical Extraction and Report Language)。
Python介绍:Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年。Python语法简洁清晰,特色之一是强制用空白符(white space)作为语句缩进。
--------------------------------------------------------------------------------------------------
以下分析基于大家都是小白的情况下,不考虑高级写法,长文不易,不喜勿喷。同时以下内容都从一个数字IC设计工程师的角度所写,见识有限,若有不同技术喜好,可友好讨论。
--------------------------------------------------------------------------------------------------
2. 分析: 1)处理简单问题:
csh:
做为linux的原生语言,是最容易的语言。其中的grep,awk, sed等命令对于文本处理有极高的效率。简单问题:比如我要找到一个文本当中,以A开头的行:grep -e "^A" txt. 再如,打出这些行的第二列: grep -e "^A" txt |awk '{print $2}'.基本2秒之内完成。
TCL :
同样实现上述功能(伪代码) 打开文件,遍历开始,if匹配,split分列,显示,遍历结束,关文件. 综上所述,最少7句,可见在这种简单问题上,劣势明显.
Perl :
同样实现上述功能, 同tcl
Python :
同样实现上述功能, 同tcl综上所述:在实现简单问题上面,TCL, Perl, Python都像杀鸡用牛刀,csh简单粗暴。
2)EDA工具的兼容性:
csh:外部调用TCL : 原生兼容。这么理解,集成电路软件就环境像大家用的电源插座(中国标准220v),tcl就是中国标准的插头,在中国走到哪里都能用。Perl : 美国110v插头,到中国来得配个转接头。无法直接用,我只见过极少数的EDA软件原生支持perl,但我见过所有的软件都支持tcl。Python : 这个说到都是泪啊,自定义插头,自己的插头还有两个版本python2.3和python3。在eda里面也是靠外部调用。
综上所述:TCL语言无疑是EDA语言当中兼容性最强的霸者,无法撼动。
3)EDA流程控制:
csh : 罕有见闻,最多拷贝文件,删除文件夹之类TCL: 几乎所有的EDA控制流程控制都是用tcl所写。 个人觉得有两方面原因,一方面是EDA的兼容性,另一方面tcl脚本的可读性是所有几种脚本中最好的,解释性的语言,硬性的语法,为流程维护带来了极大的便利。Perl : 罕有见闻,同时perl的写法比较灵活,维护方面比较困难。Python :罕有见闻,维护灾难~~~强制用空白符(white space)作为语句缩进,一翻页就不知道看的是啥了,两眼都是泪,谁能告诉我为什么?
综上所述: TCL语言在集成电路设计软件流程控制当中依然是主流。
4)语言功能扩展和高级用法(电路方向):
csh : 少TCL : 从未使用,同时对于高级用法,如哈希等扩展性有限,被业界诟病。比较有用的就是开发GUI的时候可以使用tcl/tk。Perl:Perl的社区活跃度很高,有些好用的module扩展,比如有提到的一些“getOptionos“,生成excel,生成图表,等等。对于电路设计人员来说,更为重要的事,perl拥有灵活的正则表达式、很强大的hash功能、指针转换等优点,在数字集成电路前端设计中有非常广泛的应用:(1)自动生成有规律的verilog代码,来保证代码风格的一致性,和强大的低错误率;(2)读取繁杂的技术文档,建立复杂的hash表,自动生成具有参数化的、可扩展性强的verilog代码,可极大地降低人工手动编写的错误率,同时,保证与技术指标更新一致的严格性和实时性。(3)自动生成仿真激励,抓取关键信息,因为随着集成电路规模的增大,仿真测试工作量大大增多,自动化生成激励会大大降低工作量,提高验证效率。Python :扩展多为科学计算开发包多用于金融计算(pandas、tushare可以组合写股票模型),爬虫(scrapy 爬知乎美女图片),机械学习(scikit-learn 简单用来训练识别图片),画一些科学图(matplotlib)... 高级用法,最棒的地方在于支持对象,这个功能在写高级算法的时候非常好用。
综上所述:Perl的优点,奠定了其在IC设计中的无可动摇的地位,而python则成为数据抓取、机器学习领域中风头无二的语言,但在集成电路中使用比较少见。
5)运算性能:
csh: 低 TCL: lowPerl: 挫Python :
之前写过一个脚本需要大量的排序等操作,电路规模一大,慢如牛,换成python速度提高20倍。它的底层是为科学计算,用C优化过的,非常强劲。
综上所述: Python在这个领域,高帅富,无人撼动。
3. 总结:
不知道大家有没有看过“降临”,讲的是一帮“外星人”来到地球给蛮荒的人类带来新的科技。而他们选的方式竟然是教授一门“语言”。(脑洞挺大,推荐大家看看)其实从语言的设计的美来看,来源于它所面对的应用,来源于对解决的问题的思维方式。
比如你在学习TCL时,就能感觉到TCL语言的死板,而这种死板正决定了它适合于做flow。而在学习Perl的时候就能感觉到他的灵活,这种的灵活使它更加适合做成一门“胶水语言“。在学习Python的时候你会觉得它的设计有点反人类,但正是这种反人类会改变我们的思维习惯,而真正的去从数学的方面思考问题。
本文对四种脚本语言的总结,请参照下表
4. 个人观点:
其实要做任何一件事情,使用任何一种语言都可以实现,只是在实现难度,性能上面有些不同。
如果让我来建议微电子的应届大学生学习一门语言,我推荐首选TCL,因为在今后的工作中会经常遇到(数字后端用的更加频繁),而且他的学习比较简单,做为语言学习的开路石,也比较适合。然后,如果有更多的时间,学习一下Perl,体验一下他的灵活,同时在已后的电路设计(前端设计)当中也会碰到大量的应用。
作为一个集成电路设计工程师,Python非常有趣,用Python写过股票分析软件,抢红包软件,自动布局软件,图片加解密软件等。