序
尽管Tcl脚本自20世纪80年代初诞生以来已有30多年的历史了,但仍然经久不衰,在IC领域被广泛使用,很多EDA工具都将其集成其中。Vivado也不例外,在2012年正式发布时,我们就看到了Tcl的身影。这使得Vivado如虎添翼,功能愈发强大。能在图形界面下执行的操作几乎都有相应的Tcl命令。反过来,很多操作只能借助Tcl脚本完成而无法在图形界面下操作。借助Tcl脚本,工程师可以对设计进行深入分析,及时发现更深层次的问题。不得不说,Tcl俨然成为设计分析的利器。
遗憾的是,目前市面上鲜有Tcl方面的学习书籍,网络上的各种学习资源鱼目混珠、良莠不齐,且只注重语法或单一的常规命令,没有与Vivado结合起来讲解工程应用。在工作中,我遇到过很多FPGA工程师,他们迫切希望掌握这一利器,却因找不到合适的学习资源而深感无奈,或者已掌握Tcl基本语法知识,了解了一些基本命令,但却因不知在Vivado中如何应用而束手无策。这一现状深深地触动了我,促使我决定写一本与Tcl、Vivado都紧密相关的书。
早在Xilinx前一代开发工具ISE中出现Tcl时,我就开始关注Tcl,而当Vivado正式发布时,我就决定深入学习Tcl。随着时间的流逝,一晃8年过去了,可以不夸张地说,Tcl几乎成为我每天工作中必用的语言之一。借助Tcl脚本,我可以实现从设计输入到生成位流文件的全流程操作,不仅可以对网表进行编辑和深入分析,还可以扫描布局布线策略并生成相关报告。但Tcl能做的还远不止这些。让我感受最深的是我可以并行工作,例如扫描策略时,可以同时分析设计的其他网表文件,从而大大提高了工作效率。
同时,我开发了基于Tcl脚本的Vivado自动化策略扫描,并开发了基于Tcl脚本的自动化设计分析。这两个脚本被很多工程师使用,广受好评。工程师普遍认为这些脚本可以极大地缩短设计迭代和分析时间,有效提高工作效率,减轻压力和负担。我相信通过本书的学习,读者也可以开发出自己想要的带有特定功能的Tcl脚本。
2020年初,我开始着手撰写本书,在内容安排上,要求既包含Tcl相关知识,又包含如何在Vivado中使用Tcl。首先,本书是一本与编程语言相关的书籍,少不了大量的代码,为此,在代码排版上花费了一些工夫,保证读者能够体会到代码的美感;其次,本书又不是一本单纯讲解编程的书籍,重点是工程应用,我结合自己的工程实践总结出了大量的常规应用,并分门别类地加以讲解。读者要掌握Tcl脚本并将其应用在Vivado工程中,仍需大量的实践。希望本书能起到抛砖引玉的功效。
与很多EDA工具一样,Vivado将Tcl集成其中后,极大地丰富并增强了Vivado的功能。因此,若想把Vivado用好,掌握Tcl势在必行。着眼于此,本书分为两部分:第一部分为基础部分,以Tcl基础知识为主;第二部分为应用部分,以Tcl在Vivado中的应用为主。
就第一部分而言,涵盖了Tcl的三类置换(包括变量置换、命令置换和反斜杠置换)、表达式和数学运算、经典数据类型(包括字符串、列表和数组)、流程控制命令、过程、命名空间及文件操作等,分布在第1~9章,尽可能地涵盖常见命令,并给出具体代码示例,讲解使用方法。
就第二部分而言,涵盖了Tcl在Vivado中的典型应用,包括设计流程管理、设计资源管理、设计分析,并给出了具体的应用案例,例如,如何通过Tcl脚本实现从设计输入到生成位流文件的自动化操作;如何借助Tcl脚本实现策略扫描;如何应用Tcl脚本发现设计的潜在问题。这些内容分布在第10~13章。同时,我结合工作实践,给出了Tcl在Vivado中的其他应用,并在第14章中进行了详细阐述。
如何阅读本书
对于只想学习Tcl脚本的初学者而言,可以只阅读第一部分内容,也就是第1~9章。对于已掌握Tcl基础知识,并想进一步了解如何在Vivado中应用Tcl的读者而言,可越过第一部分,直接阅读第二部分内容,也就是第10~14章。本书给出了丰富的代码示例。每个示例都有行号标记,便于快速找到书中提到的位置。第1行为文件名,读者可根据需要找到相应的文件直接使用或二次编辑相应脚本。以“=>”开头的行表示该行为上一行命令的返回值,并且该行以斜体字表示。若在“=>”后紧跟“@”,则表示上一行命令的使用不合法,该行为相应的错误信息。由于本书是一本偏向应用的书籍,故文中的变量与实际代码一致,不再区分正斜体。
本书所有代码均在Vivado 2020.1版本中验证。读者不需下载安装其他Tcl编译器,可直接使用Vivado Tcl Shell或在Vivado Tcl Console中使用Tcl。
获取代码示例
如果需要获取代码示例,关注我的微信公众号TeacherGaoFPGAHub,回复关键字“Tcl”(没有引号)即可。
Tcl/Vivado已经成为一个整体,Vivado因Tcl而熠熠生辉,Tcl因Vivado而历久弥新。愿此书能帮助广大FPGA工程师顺利踏上征服Tcl的旅程!
高亚军
2020年12月27日