目前,随着芯片规模的不断扩大,以及芯片设计复杂度的不断提升,芯片设计工程师在设计芯片时面临的挑战也越来越多,故而对用于芯片设计的电子设计自动化工具(EDA)的要求也越来越高。一款简单易用的工具可以大大节省芯片从设计到制造的时间,因此,各大EDA供应商也正在不断努力地提供各种解决方案以帮助芯片设计工程师更方便、更简易地进行各种芯片设计,但新的挑战和问题仍层出不穷。另外,不同的芯片设计工程师也有他们各自使用设计工具的偏好和习惯。

而现有的EDA软件工具缺乏足够的灵活性来实现高度可编程性,以满足用户不断变化的需求。因此,为用户通过编码提供定制化的EDA解决方案已经是大势所趋。

EDA软件的编程语言

EDA工具作为一种软件产品,也需要使用编程语言来实现。EDA软件一般使用多种编程语言来开发。其中,最核心的编程语言包括系统编程语言C或C++,以及脚本语言Perl、Tcl/Tk以及Python等,它们各自扮演着不同的角色。可以说,它们是构建EDA软件工具的底层基石。

其中,C/C++语言由于具有执行效率高、支持面向对象编程(OOP)等特性,常用于开发EDA工具的核心算法和数据结构。

而Tcl和Python则在EDA软件开发中常用作脚本语言进行设计。脚本语言是用户进行个性化图形界面、定义快捷方式和执行其它自定义任务的最有效方法。相较于C/C++等系统编程语言,脚本语言具有较高的生产力和较短的开发时间,但其性能可能没有C/C++理想。

在众多脚本语言中,Tcl已经主导EDA流程多年,包括如Synopsys Design Compiler中的dc_shell和Synopsys PrimeTime中的pt_shell用户界面都是基于该脚本工作。

Tcl全称为Tool Command Language,它由John K. Ousterhout于1988年开始开发,是一种基于字符串的命令语言。每一个Tcl脚本被看作是一系列命令的组合,用换行符或分号来分隔。每一条命令语句由一个命令和一系列参数组成。它具有语法简单、易上手等特点。

但Tcl严格意义上来说不是一个真正的编程语言,它在脚本编写方面也有一定的限制,不适合开发大型复杂的应用程序。另外,它的开发者生态系统不够完善,且在不断萎缩,开发者社区的规模也在缩小,缺乏大量的第三方库和工具支持。因此Tcl缺乏及时应对当今新的创新需求的能力。

另一种脚本语言——Python——正在EDA领域迅速普及,已经成为EDA解决方案的首选定制语言。Python由吉多·范罗苏姆于1980年代后期开始研发,是目前被广泛使用的一种解释型、高级和通用的脚本编程语言。

Python的迅速风靡是因为其具有以下几大优势:一是它支持多种编程范式,包括结构化、过程是、反射式、面向对象和函数式编程。二是,它的语法简单,写代码如写英文一样,可读性高,清晰易懂;三是它的代码可以直接运行而不需要编译,可以在运行中修改类的属性;三是Python还可以调用其他语言所编写的模块,如Jave、C语言等;此外,它还拥有一个巨大、广泛且功能强大的标准库,覆盖了诸多领域。

在TIOBE编程语言社区近期公布的2024年9月语言流行度指数排行榜中,Python位列首位,而Tcl已不在榜单中。

打开网易新闻 查看更多图片

图1:2024年9月编程语言排行榜

(图源:TIOBE)

脚本语言Tcl Vs Python

从上述描述可以看出,Tcl和Python是两种不同的脚本语言,两者在许多方面有着很大不同:一是编程语言,Tcl的语法简单,易于学习和使用。Python的语法也较为简洁、易读易懂,适合快速开发,但对初学者可能会有一些难度。

二是Tcl非常适用于快速开发脚本和小型应用程序;而Python则较为适合大型应用程序开发。三是在生态上,Tcl的生态系统不完善,缺乏大量的第三方库和工具支持。而Python则拥有大量的第三方库和工具支持,可以方便地开发各种任务。此外,Python也可以通过扩展库和C/C++模块扩展其功能和性能。

相比之下,在半导体芯片规模日趋庞大的趋势下,Python的应用也将越来越多。

新思科技PrimeTime将Tcl和Python无缝共存

新思科技(Synopsys)作为全球领先的EDA厂商,也意识到了Python将给EDA行业带来的巨大变化,因此积极支持将其作为一种定制语言。如上所述,新思科技Design Compiler中的dc_shell-t>和PrimeTime中的pt_shell>都是基于Tcl语言,但Python的流行,让新思科技也在积极寻找一条从Tcl到Python的无缝连接的‘道路’。新思科技通过将Python和Tcl的应用程序界面、用户体验和文档等方面都保持一致性,以确保Python能够与已存在的Tcl脚本无缝共存,且无需更改Tcl shell和安装文件。

新思科技的PrimeTime®静态时序分析工具就是一个很好的实例。众所周知,在门级电路设计过程中,为得到一个最佳的电路设计,在结构逻辑、电路布局布线等方面,静态时序分析起着关键性的作用。静态时序分析既要检验门级电路的最大延迟、以保证电路在指定的频率下能够满足建立时间的要求,同时又要检验门级电路的最小延迟、以满足保持时间的需求。芯片的设计只有通过了静态时序分析才能真正完成,甚至在从逻辑综合开始后的每一个设计步骤的结果都需要满足或部分满足时序的要求。

而PrimeTime®静态时序分析就是一款为时序、信号完整性、功耗和变化感知分析提供单一、黄金标准、值得信赖的签核解决方案。它工作在设计的门级层次,可以进行建立和保持时序检查、重新覆盖和去除检查、时钟脉冲宽度检查以及时钟门锁检查等。

PrimeTime静态时序分析需要分为以下几个步骤:一是建立设计环境。在这初始步骤中,工程师需要建立搜索路径和链接路径、读入设计和库、链接顶层设计以及建立运作条件、连线负载模型、端口负载、驱动和传输时间等;二是说明时序声明,也就是约束条件。在这一步,需要对时钟周期、波形、不确定性和滞后时间进行定义,说明输入、输出端口的延;三是说明时序例外情况,即多周期路径、不合法路径,另外还需说明最大和最小延时、路径分割和失效弧;最后就是进行分析和报告生成,也就是对时序进行检查,生成约束报告和路径时序报告。

如上所述,PrimeTime的初始脚本语言为Tcl,完成上述步骤都是基于Tcl脚本语言。但随着Python应用的越来越多,新思科技已经将PrimeTime和Python完美匹配。用户可以使用新命令从Tcl shell中执行Python代码。另外,snps模块中也提供了所有的Python功能,可以在PrimeTime启动期间通过import命令访问该模块。用户还可以导入自己的Python文件。

此外,交互式shell和图形用户界面(GUI)主窗口中也提供了Python控制台。用户可以使用set_app_var sh_language python命令或从GUI的下拉菜单中选择Python语言来启用该控制台。

当然,PrimeTime也完全支持在其脚本编辑器中直接编写或修改Python代码。

反之,在Python中,用户也可以通过snps.cmd对象上的方法访问命令。大多数命令接受一个或多个参数,可以是位置参数(按特定顺序)或关键字参数(按任意顺序)。而后,Python命令返回以下对象类型之一:int或float,即数值返回类型、snps.collection:数据库对象的序列(普通的Tcl集合)以及snps.value:所有其他返回值(Python字符串类型、容器或dict)。

用户可以将Python命令中的值返回给Tcl,在Python代码中查询或设置Tcl变量,以及在Python中执行Tcl脚本或任意代码。所有Python stdout/stderr消息都能在PrimeTime日志文件中显示。用户还可以将此输出重定向到自定义文件或变量。与Python命令等效的Tcl将记录在trace_log中,并且所有错误消息都适用于Python和Tcl绑定。这样可以确保从Tcl到Python的无缝过渡,同时保留对用户遗留代码的访问。

芯片设计复杂度的不断提升,让EDA软件设计工具所面临的问题和挑战也越来越多、越来越严峻。EDA软件工具需要具备更多的灵活性、可扩展性以及可定制化等特点,才能符合用户不断变化的设计需求。通过底层的脚本语言来实现定制化或是一个不错的选择,而不同脚本语言之间的兼容也是EDA供应商所面临的问题,新思科技的的PrimeTime使Tcl和Python语言实现无缝共存就是一个很好的个例。

未来,新思科技将为其许多其他的工具和解决方案增加对Python的支持,让用户能从不同脚本语言的完全兼容性中受益,并应对不断出现的新的设计挑战。