作者:Greg Daughtry 赛灵思公司产品营销总监 greg.daughtry@xilinx.com
用于共享工具命令语言脚本的开源库已发布在GitHub.com上
在过去五年里,赛灵思把战略重点放在设计方法和工具上,通过提供业界最先进、最全面的开发环境,解决生产力问题,加快设计周期,促使产品更快上市。
即便新一代Vivado ® 设计套件和综合全面的UltraFastTM 设计方法可以提高生产力,但使用当今的All Programmable 器件开展设计工作仍然面临诸多挑战。设计人员必须将数百个高度参数化的IP 核、数十万个可放置的对象和数百万个逻辑单元与赛灵思All Programmable FPGA、3D IC 和SoC 完美集成。随着设计人员不断拓宽复杂设计的疆域,需要应对的情况也千变万化。
随着今年4 月份Vivado 2014.1 版本的发布,赛灵思正在筹备一个用于共享工具命令语言(TCL)代码的开源库,这一举措无疑在进一步提升设计人员生产力方面又前进了一大步。这个名为“赛灵思TCL 库”的开源库能够显著简化查找和共享其他工程人员开发的TCL(发音为“tickle”)
脚本。借助Tcl,这些脚本能够扩展Vivado 设计套件强大的核心功能,进而提升生产力,简化使用。“Tcl 库”对用户社区开放,通过发布对他人可能有用的Tcl 代码,让所有设计人员受益。
日趋复杂的设计
Vivado 设计套件建立在开放的可扩展数据模型上。作为一种开源系统,要想提高生产力,其中一个关键就是提高工具的智能化水平,提供更多定制选项和分析功能,以便设计人员更全面了解并充分运用工具,实现最佳设计。
自2 0 1 2 年Vi v a d o 设计套件推出以来,用于执行各种规模任务的Tcl 脚本呈现出爆炸性发展。Tcl 是Vivado XDC 约束语言的基础,因此掌握和运用Tcl 对设计人员来说越发重要。
使用Tcl 命令可以交互式地开发和优化时序约束,节省编译时间,减少调试工作量。其核心命令可进行对象查询,并据以提供定制报告和完成极为精细的工具控制。使用Vivado 设计工具还可以开发自己的DRC 和Lint 检查,配合高度定制化的流程即可实现更优异的结果质量或是更快的运行时间。设计人员使用Tcl 还可以通过工程变更命令(ECO)操作进行针对性的设计变更。
TCL 带来的生产力改善,代码创建的便捷性和代码的易读性,使之成为共享有用代码的理想选择。到目前这种共享还主要处于自发阶段, 采用电子邮件和用户论坛方式。部分企业也已经在内部建立自己的TCL 库,供自己项目使用。
现在赛灵思通过自己全新的“赛灵思Tcl 库”,让Tcl 共享迈上新的台阶。
欢迎使用Tcl 库
赛灵思Tcl 库提供多种样例,用于示范如何编写定制报告,控制特定工具行为,进行定制网表变更,与仿真、综合、时序与功耗分析及lint 工具等第三方电子设计自动化(EDA)工具集成。
Tcl 库可从Vivado 集成设计环境(IDE)本地访问,便于用户直接从工具内部选择和安装称为“应用程序”(app)的Tcl 脚本集。安装完成后,这些应用程序的命令如同Vivado 设计套件内置的命令一样,可通过帮助命令查看其用法。Vivado 设计套件使用Tcl 的标准封装工具支持不同版本的应用程序,故即便有更新的版本发布,只需单击鼠标即可选择升级。
赛灵思Tc l 库的目的是使用与Linux 开发环境相同的方式,简化由用户社区开发和支持的优质Tcl 脚本的查找和使用。Tcl 脚本编写与选择IDE 按钮相比稍微高级一些。但它易于学习和掌握。有大量技术文档和用户指南详细介绍Tcl API 提供的具体命令,详情请访问 china.xilinx.com/support 。
下面详细介绍从赛灵思Tcl 库安装和使用Tcl 应用程序的方式。
安装和使用
在首次启动Vivado IDE 时,设计人员可以通过“Getting Started”页面上的图标访问赛灵思Tcl 库。设计人员也可以转到工具菜单(Tools Menu),选择“Xilinx Tcl Store”菜单选项。此时会弹出库对话框,提供可供安装的应用程序清单(图1)。
图1—Vivado IDE中的Tcl库对话框为安装应用程序和浏览命令提供方便。
浏览应用程序清单时, 可以看到每个应用程序下又有一个命令清单(TCL 中称为“PROCS(进程)”),列出了可供执行的命令。可以查看每个应用程序及每个应用程序中每个进程的介绍,了解其功能。点击安装按钮就可以安装和注册应用程序,随后可以如同VIVADO 设计套件本地命令一样显示和使用。应用程序安装完毕后,每次启动VIVADO 设计套件它都会自动加载,无需每打开一个新的界面都安装一次应用程序。
进程有命名规则,使用TCL 中名为“命名空间”的工具。命令的名称看似比正常的T C L 命令稍显复杂, 同时内嵌有“ : : ” 字符。例如XILINX::ULTRAFAST::CHECK_PLL_CONNECTIVITY 用于对赛灵思器件中的时钟修改模块进行连接检查。该命名法则的目的是确保TCL 代码的唯一性以及一个应用程序中的某个进程不会与另一个应用程序中的同名进程发生冲突。命名空间是TCL 的标准特性。
运行应用程序命令的方法是键入包括命名空间在内的进程的完整合法名称,并有选择地输入任何要求的命令行参数,就和其它TCL 命令一样。由于这些命令使用标准命名空间,也可选择导入命令到全局空间中。如果不和任何其他命令名称发生冲突,这个方法是适用的。这样可以略去命名
空间限定符,只使用进程名称。在上面的例子中,如果把ULTRAFAST 应用程序导入全局命名空间,无需命名空间限定符即可直接调用CHECK_PLL_CONNECTIVITY 命令。
可选择导入命令到全局空间中。如果不和任何其他命令名称发生冲突,这个方法是适用的。这样可以略去命名空间限定符,只使用进程名称。在上面的例子中,如果把ULTRAFAST 应用程序导入全局命名空间,无需命名空间限定符即可直接调用CHECK_PLL_CONNECTIVITY 命令。
使用赛灵思TCL 库的TCL 应用程序简单且方便。赛灵思的目标是鼓励世界各地的开发团队使用和共享TCL库,提升生产力。库中只显示任何给定应用程序的最新版本,设计人员只能安装或升级到所支持的最新版本。当然充分利用的最好方式是保证有丰富的有用代码库。赛灵思在库中植入
了一整套非常有用的实用工具和集成脚本,可供用户当作范本研究,掌握如何构建自己的可重用TCL 脚本。
向Tcl 库提供代码
有两种途径可向Tcl 库提供代码,让脚本供所有的Vivado 设计套件用户使用。第一个途径是修改现有的应用程序。第二个途径是开发新应用程序,然后提交新应用程序申请。要提供代码给Tcl 库,用户需要对用于版本控制的软件开发工具有一定熟悉,或至少有学习意愿。
每个应用程序都由一个人控制,一般是编写大部分代码的人,也称为“应用程序负责人”。赛灵思库在整体上由赛灵思控制,且赛灵思公司负
责维护把应用程序发布到公共域的流程,以保持各应用程序之间的基本一致性。赛灵思员工起着质量保障“守门员”的作用。
想要修改现有应用程序或添加新应用程序的“提供人”可与“守门员”和应用程序责任人合作,遵循与其他开源项目一样的流程,完成提交工作。在代码托管网站上有个维基(wiki)用于把这个流程形成文档。
所有代码提交都应满足基本要求。赛灵思尽量让随时可能发生变化的基本要求项目保持简洁,同时确保合理的用户体验。下面是用户需要遵循的基本应用程序要求:
• 遵循基本的编码方法指南,把进程与不使用或访问全局变量的命令行参数配合使用。
• 在进程内包含基本文档,用于描述进程的功能、使用的命令行参数和返回的结果。
• 确保代码通过语法检查和Vivado设计套件提供的lint 工具的检查。
• 对每个进程至少进行一次基本测试,确保代码的运行和行为基本符合预期。
GITHUB 上的TCL 库
赛灵思Tcl 库托管在名为GitHub.com的第三方网站上。该库使用版本控制工具来保证分布开发工作以可控方式进行。这个过程的关键就是Git,一种常见的开源分布式版本控制工具,常用于Linux。如果要访问Tcl 库以提交和测试代码,可以在GitHub.com上注册一个免费账号,安装和设置Git。GitHub 提供供Windows PC 机使用的Git 工具安装版本。Linux 机器一般已经安装有,或是可通过标准软件包安装。GitHub 提供辅导资料,帮助用户入门Git。
用户注册得到GitHub 账号后,就可以按下列步骤向Tcl 库提供代码:
1. 复制赛灵思Tcl 库主库。这样可以在用户的测试环境(Sandbox)中创建一个本地复本,便于用户在本地开发和测试,避免给其他应用程序造成影响。
2. 遵循按照应用程序名称及企业或GitHub 名称确立的指引,把自己的新代码放在正确的目录中。使用标准Git 添加命令。
3. 使用本地库中的Vi v a d o 设计套件, 调用注册代码和生成Catalog.xml 文件所需的命令。这是用户所需的三个文件之一。另两个是软件包索引文件和Tcl 索引文件。
4. 在另一个位置打开Vivado 设计套件,转到本地库,然后测试自己的应用程序。运行Linter 和本地测试,直至对所有运行情况满意为止。
5. 确认修改,并提供信息简要介绍所做的改动。
6. 发送申请允许提交代码到tclstore@xilinx.com 的电子邮件。说明是否想要创建新应用程序,准备如何命名该新应用程序。如果想要修改现有应用程序或是把代码提供给现有应用程序,应明确说明。另外需要取得应用程序负责人的许可。
7. 使用We b 浏览器转到G i t H u b .com,发出拉请求。这样会正式启动把用户提供的代码合并到库中的流程。应适当与“守门员”和应用程序负责人合作, 通过GitHub 和电子邮件解决任何问题。
8. 恭喜!帮助大家是一件快乐的事情。
图2 所示的是提交应用程序的工作流程示意图。
图2—赛灵思Tcl库提交应用程序的工作流程历经几个非连续步骤
细枝末节
赛灵思Tcl 库属于开源库,没有为商业化提供的代码或用提供的代码收费提供机制。提交给Tcl 库的应用程序可以通过开源项目中常用的BSD 许可证,供各类衍生作品免费使用。为便于提供的代码被大家接受和发布,向Tcl 库提供的代码应包含BSD 许可证的版本。如果有企业或用户不想把自己的知识产权发布到公共域,Vivado设计套件也可照搬发出拉请求前测试工作所采用的机制,为本地版本的Tcl 库提供支持。
此外由于该项目使用GitHub 进行托管,提交人在注册账号时必须同意GitHub 的服务条款,因为这属于第三方服务。
应用程序库中的应用程序由用户社区开发和支持。这意味着赛灵思技术支持部未接受过与该功能有关的培训,无法回答与Tcl 代码有关的问题。请直接把这些应用程序的支持性问题提交到赛灵思用户论坛上。如果发现代码段中存在的缺陷或问题,可以直接在GitHub.com 项目中备案并跟踪。由于这属于开源开发模式,我们鼓励用户修改这些问题,改善代码质量,为所有用户造福,就如同Linux 一样。
发展规划
Vivado 2014.1 版本推出Tcl 库只是一个开始。赛灵思今年将不断改进Tcl 库,落实其搜索应用程序和进程的能力,简化功能查找工作。赛灵思将
提供一种无需安装应用程序即可浏览和查看源代码的途径。此外赛灵思还考虑提供一种评价机制,用户可评定一星到五星等级,并可选择提供书面评语。这样便于人们为较受欢迎的代码留下反馈意见。
赛灵思还准备根据应用类别提供筛选功能,实现更好的分类。例如按仿真、综合、实现、项目和网表实用工具分类。随着库规模越来越大,赛灵思可能会增加分类数量,丰富应用程序门类,以体现提交的代码的多样性。
赛灵思希望尽量简化应用程序的提交工作,因此可能会探索让用户通过电子邮件提交Tcl 脚本的途径,从而尽量减少支持工作量,避免绕道GitHub。这个过程的无控性质与目前的安装方案不对接,故只是作为例子介绍。
世界各地有成千上万的用户在使用Vivado 设计套件,有数以百计的企业已经采用UltraFast 设计方法。赛灵思Tcl 库提供了一个新的开源项目,旨在让赛灵思、赛灵思合作伙伴和客户之间共享Tcl 脚本,从而可以进一步提高设计人员生产力。
参考信息和资料
申请GitHub 账号,查阅Git 和GitHub 上的教程,请访问: https://github.com/
赛灵思Tcl 库的代码库和介绍代码提交方法的维基文档,敬请访问: https://github.com/Xilinx/XilinxTclStore
赛灵思Tcl 库维基包含代码提交流程的详细介绍: https://github.com/Xilinx/XilinxTclStore/wiki/Xilinx-Tcl-Store-Home
UG 894《使用Tcl 脚本编写指南》内含Vivado 设计套件一般脚本编写功能的介绍:
china.xilinx.com/support/documentation/sw_manuals/xilinx2013_4/ug894-vivadotclscripting.pdf
UG835《Tcl 命令参考》内含Vivado设计套件提供的全部本地命令有关的信息: china.xilinx.com/support/documentation/sw_manuals/
xilinx2013_4/ug835-vivadotclcommands.pdf