为什么选择python

有个后端朋友问我,在芯片设计领域为什么选择python,而不是perl或tcl?我才突然意识到,写了这么多天的《Python在ASIC中的应用》系列文章,居然忘了对比介绍Python、Perl、Tcl的优缺点。因此我周末抽空写了这篇文章。

本文包括以下内容。共计1900多字,阅读时间大概10分钟。

了解Python发展的大背景

Perl语言的优缺点

Tcl/Tk语言的优缺点

Python在ASIC领域的应用

总结

了解Python发展的大背景

我们都知道现在python很火。小到python在学校受到前所未有的重视(如,被编入小学教材,纳入浙江省高考范畴,成为全国计算机二级考试科目)。大到Python是人工智能AI的主要编程语言之一(如,google的TensorFlow,facebook的PyTorch)。

为什么火?就是因为Python简单易学、完善的面向对象(封装、继承、多态)编程。

简单易学体现在Python的语法格式上,强制利用缩进来规范代码风格,不能随意换行等。简单易学还体现在Python的设计思想“只用最好的方法做一件事”。正因为简单易学,所以小白容易入门,小学生有了python的入门课程,社会上有了python兴趣班,出现了《python for kids》、《learn to program with minecraft》这样的儿童书籍。

面向对象的特征使得python具有了像C++那样的建模能力。在软件开发初期时,常常被用来快速建模,只需要把其中对性能有要求的功能模块改用C++实现即可。

由于上面的优势,各行各业都开始使用Python。Web开发、游戏脚本、网络攻防、大数据分析、计算机视觉、机器人开发、人工智能AI等。连微软的office编程也在计划支持python语言。

Python也有缺点。我们知道Python有两个版本,Python2和Python3。Python3设计时没有做向下兼容,这使得2和3的语法有较大的不同,给初学者带来很大的困惑(关于版本的选择,我的建议是直接学习Python3)。但换个角度看,正是这种破釜沉舟的精神使得Python保持了简洁。

Perl语言的优缺点

Perl语言是由C、Sed/Awk、Shell、Basic、Pascal等语言发展而来,因此语法类似C语言,相对容易学。Perl作为一种粘合语言,功能强大、实用,而不是优美、简洁,就像它的标志骆驼(据说是O'Reilly出版社首先使用),“有点难看,气味不好,但干起活来好使唤”。

正因为Perl结合了多种语言的优势,功能变得非常强大和灵活。perl语言最初被设计用来就处理log等文本文件,因此内嵌了功能强大的正则表达式,这也是perl语言的灵魂所在。

perl语言的强大离不开CPAN库。CPAN也是广大开发者学习交流的平台。据官网介绍,从1995年至今,有13,343位作者提交了194,785个perl模块(这一数字每天都在增长,我验证过这一点,连续看了三天),并镜像在全球256个服务器上。

Perl语言正是因为它的灵活多变,每个人写出来的代码风格可能完全不一样,甚至同一个人每次写出来代码也不尽相同。有时候把自己一两个月之前写的代码拿来看看,都不一定能一下看明白。不少初学者就被$ @ % $_ @_ $1 $` $& $' $! $ $/ @$ %$ ... 这些特殊符号给吓住了。因此,入门和精通都相对不容易,吓走了很多初学者。(可以点击阅读我写的《Perl在ASIC中的应用》系列文章哈)

Tcl/Tk语言的优缺点

Tcl语言语法规则简单,任何语句都看起来像一条Linux命令。因此Tcl语言简单易学,入门零门槛。

Tcl语言,正如它的名字Tool Command Language,常常EDA软件结合比较紧密,像前端的vcs、modelsim、dc,后端的icc都支持tcl语言。因此,我们常常在用EDA时,不经意之间就学会了一些基本的Tcl语法。

Tcl语言把一切都看作字符串,有丰富的字符串处理函数(比Python还要多出不少)。Tcl语言有正则表达式,适合做复杂的文本处理,如自动分析log文件。另外Tcl语言常常用来做综合、PR、LEC、STA的flow。

由于Tcl原生支持tk库,因此被很多后端工程师用来做带图形界面的小工具,以辅助后端设计。事实上,现在tk库也被其他动态语言,如Perl、Python支持。

Tcl类似Linux命令的语法也有缺点。每个命令的参数很多,不容易记住。Tcl程序语言上不如Perl和Python灵活,写大程序时相对臃肿很多。

Tcl语言本身不支持面向对象,需要利用C++或Java来扩展。这也是一个很大的缺陷。

Python在ASIC领域的应用

最后再回到Python语言上来。在ASIC领域,Python的应用已经无处不在。我简单罗列了一下我所知道的应用:

算法开发

Git database创建和维护、自动生成Makefile等

寄存器数据库管理、读写Excel、XML、Json等格式的配置文件

RTL模板、部分RTL自动生成、顶层RTL自动连线等

测试激励生成、验证脚本(前仿、后仿、回归测试)

自动产生及配置UVM环境

直接或间接维护前后端Flow(包括利用模板实现后端通用Flow)

利用脚本修改数字网表、模拟Spice网表等

前后端的报告分析、及可视化(图表分析)

前后端GUI图形界面(支持Tk,QT,wxPython等库)

辅助FPGA验证、测试

CP测试、良率分析,及可视化

辅助芯片应用、测试

项目管理、日报周报及绩效管理系统、BUG跟踪管理等等。

因此,我们几乎可以说Python能做一切你想做的事情。(如果你知道Python在ASIC领域的其它应用,请在文章后面留言,一起来补充)

总结

Python从语言本身到应用大环境都有绝对的优势,所以ICer们不要再犹豫,赶紧学起来用起来。

但是不是说我们只学Python就够了呢?不是的。我们实际做项目时,需要从方便、简洁、快速等角度,根据各语言的优缺点,择优而用,甚至多种语言混用。

欢迎关注ExASIC

分享数字集成电路设计中的经验和方法

Sharing makes work smoother

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180108G0572H00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券