前言
Perl语言的特点
Perl语言是一门解释型编程语言,与C/C++语言相比,它的程序不需要用户编译,可以直接运行。Perl的一个特点是,它提供了简洁的数据类型,包括标量、数组和散列(在其他高级语言中,常称为关系数组或字典),其中数组和散列可以是任意深度的嵌套组合—这使我们可以高效地描述数据。Perl内嵌的正则表达式是它的另一大特点,不仅提供了极其强大而全面的功能,而且使用起来非常方便。
IC设计为什么需要编程
如果你是IC设计领域的在职人员,那么你可能知道,许多EDA软件厂商为该领域提供了各式各样满足不同需求的EDA软件。在这种情形下,还需要我们编程吗?目前的答案仍然是肯定的。EDA软件专注于某个特定的任务,而无法满足公司定制的具体需求(比如根据公司内部的实际需求,生成特定格式的报告),也无法把多个可能来自不同厂商的软件串联起来运行。还有一些烦琐的手动编辑工作,暂时没有专门的软件来完成。这些都要通过编程来完成。
Perl语言可以应用在IC设计过程中的以下场景
在IC设计中,仿真、验证、版图设计等工作,都有专用的EDA软件。那么,Perl语言主要用在哪里呢?笼统地说,Perl语言可以用于以下场景:
- 处理输入文本。
- 运行某个EDA软件。
- 分析输出文本。
Perl语言也可以用于这三者的某种组合。比如,运行某个EDA软件并分析其结果,或者先处理输入文本,然后运行某个EDA软件,最后分析其结果,甚至根据结果去调整输入文本,循环运行EDA软件直至获得预期的结果。本书中的“文本”或“文本文件”是指netlist(网表)、Verilog文件、log文件等,不包括Word文档或PDF文档等包含格式信息的文件。
基于这些应用场景,本书会较全面地介绍Perl知识,以满足实际工作的需求。但一些内容,比如面向对象、嵌入C代码和二进制文件的处理等,这些在IC设计实践中很少用到的,本书没有涉及。
Perl语言的版本
本书的代码在Perl 5.10.1(CentOS 6.0)和Perl 5.34.0上均通过运行测试。只要所安装的语言版本不太老,都可以顺利运行本书的代码。
代码和勘误
本书所有带编号的代码均可从华章图书官网http://www.hzbook.com下载,或者向笔者发送电子邮件索取。笔者才疏学浅,尽管做了最大努力,书中仍难免有错,欢迎各位读者朋友指正。笔者的邮箱为jhteng@outlook.com。
本书面向的读者
本书主要面向Perl的初学者。如果你是IC设计行业的工程师(包括模拟IC设计、数字IC设计,版图设计和布局布线工程师等),希望你看到本书的实例时,会感到亲切。
如果你只了解一点Perl,但不熟悉它,或者不曾将Perl应用到IC设计过程中,又或者编写的代码只能自己使用,不知道该达成哪些规范来提高质量,那么本书会给你提供一些帮助。
本书目标
本书的目标就是使你学会Perl,并且能将Perl应用到IC设计实践中,提高工作效率。本书将介绍一些代码规范,使你的代码既正确又优雅,既利于他人阅读学习,也利于自己未来更新或扩充。
本书特点
- 零基础:对编程经验没有要求。
- 循序渐进:在介绍基础知识的过程中,逐步改进和完成一个处理命令行参数的模块,该模块可以应用到未来的实践中。
- 注重实践:本书遵循实际的IC设计过程,根据需求来完成相关的Perl编程工作。
本书内容
本书主要包含以下几章内容:
第1章 介绍Perl的基本知识。首先介绍准备工作,包括操作系统和Perl的安装,以及代码编辑软件的选择等;其次介绍如何逐步改进和完成命令行参数,包括变量、控制结构、正则表达式、子例程和模块等。
第2章 介绍Perl与操作系统的交互,包括文件/目录操作、执行shell命令和设计Perl程序的参数等。
第3章 介绍正则表达式。
第4章 对第1章和第2章完成的模块进行补充和改进,为后续第5~7章做准备。
第5章 介绍Perl在模拟IC电路设计中的应用—处理PVT仿真的程序。
第6章 介绍Perl在版图验证过程中的应用—处理版图验证的程序。
第7章 介绍Perl在数字IC电路设计过程中的应用—连接数字模块(Verilog)的程序,重点介绍Perl数据结构的灵活性。
第8章 介绍如何提升代码质量以及其他话题。
第9章 介绍特殊名称、常用函数和模块。
致谢
本书得以出版,首先要感谢陈刚先生,我曾经的上级主管。在2020年春节前夕,他建议我写一本书,总结一下自己的经验,分享给本行业的年轻设计人员。在编写过程中,他也时常鼓励我,还仔细审阅了书稿,并提出了一百多条改进意见。
我还要感谢我的同事黄飞鹏、方亮亮、董庆祥和张劼。黄飞鹏先生是模拟电路设计专家,他向我推荐了PVT自动化的实例,并给予了细致的说明和指导。方亮亮女士是数字电路设计专家,她向我推荐了自动连接Verilog的实例,也热心解答了我的关于数字电路设计方面的问题。董庆祥先生是模拟电路设计专家,他建议我花点篇幅介绍Perl的特点,我希望本书能达成他的期望。张劼先生是模拟电路设计专家,我经常向他请教各类电路知识,避免了一些电路设计方面的错误。
我还要感谢机械工业出版社的编辑杨福川先生、王颖女士、张梦玲女士和李美莹女士。杨先生是我之前译作的责任编辑,在得知我有意编写本书后,积极将本选题推荐给了王颖女士。王颖女士帮助我确定了此书的结构和内容框架,并告知我许多成书方面的注意事项。张梦玲女士在书稿定稿前期给予了许多细节上的指导。李美莹女士是本书的责任编辑,她全面仔细地审阅了全书,并给予了书稿编辑加工方面的指导。
我很荣幸邀请到王添平先生为本书作序。他是IC领域的资深专家,曾在多家国际知名IC公司任高级主管,在行业内辛勤付出近三十年,现任高云半导体公司CTO。他作为我的领导,对本书的出版也非常关心,经常给予我鼓励与支持。
最后,感谢我的家人,永远给予我宽容与鼓励。
滕家海
2021年6月