利用TCL实现用户约束文件的解析

2018-05-25 06:44董志丹
电子与封装 2018年5期
关键词:命令声明约束

李 卿,惠 锋,董志丹

(无锡中微亿芯有限公司,江苏无锡 214072)

1 引言

随着 FPGA(Field-Programmable Gate Array)的发展,对其工作频率和处理速度的要求越来越高。器件处理速度的提高意味着逻辑设计时对时钟信号方面的要求和处理也变得更严格,需要通过附加约束来控制逻辑的综合、映射、布局和布线,以减少逻辑和布线的传输延时,从而提高工作频率。因此,用户约束在电子设计自动化(Electronic Design Automation,EDA)工具使用中不可或缺,是自主研发EDA工具的重要组成部分。由于用户约束规则复杂繁多、灵活多变,如何简单、有效地实现约束文件的解析至关重要,本文提出一种采用TCL(Tool Command Language)语言来实现用户约束文件的解析方法。

TCL是一种基于字符串的解释型命令语言,是一种简明、高效、可移植性好的编程语言,具有可扩展、支持重用、简单易学等特点。TCL语言作为应用的粘合剂,能够无缝地将很多应用集成在一起,并且每一条TCL语句都可以理解成命令参数形式[1]。它适合与C集成,C程序调用TCL的解释器来运行脚本;C函数也可作为TCL过程。由于其功能强大且简单易学,故TCL常被用于快速原型开发、脚本编程、GUI(图形用户界面)、测试等[2]。

2 TCL简介

TCL是一种解释执行的脚本语言,支持变量、循环、过程等使用的编程元素。其功能强大,基础结构和语法非常简单,与其他开发语言相比,TCL语言需要学习的知识少,编写的代码量也少,易于学习和掌握。TCL还是一种跨平台语言,适用于多个开发平台之间的代码移植,在Windows平台下开发的程序代码在多数情况下可以直接移植到Linux平台下。另外,TCL和它的大多数扩展都是免费开源软件,在互联网上很容易下载到,极大地方便了开发者的使用[3]。

TCL主要包含两部分:脚本语言和为之而设计的解释器。TCL语言命令的基本语法如式(1)所示,其中Command代表内置的命令名称或TCL进程,arg1、arg2、arg3等代表命令的参数,参数与命令或参数之间用空格符分开,参数都是字符串,通过回车换行或者分号来结束一条命令[4]。

TCL解释器是一个C语言函数库,它提供了丰富的C语言调用接口,可以很容易地嵌入至C语言的程序中,从而实现在C应用程序中执行TCL的命令或脚本,具体流程如图1所示[5]。此外,TCL提供了丰富的功能扩展函数,允许用户编写新的命令解释程序,加入TCL的解释器中。

图1 TCL执行流程

3 设计实现

由于用户约束规则复杂、多变,为达到设计的简洁性、灵活性、可扩展性,采用C与TCL交互的方式实现。在TCL文件中,首先根据用户约束规则声明所有的约束规则,然后定义该约束的解析规则,最后读取用户约束文件并根据解析规则进行逐行解析。TCL解析结果通过调用命令处理过程反馈给C应用程序,进而应用至布局、布线等流程,按照用户约束设计实现FPGA的整个设计流程,如图2所示。

图2 设计流程

在TCL代码中实现约束文件的解析主要分为声明约束规则、定义解析规则、解析用户约束,下面分模块进行阐述。

3.1 声明约束规则

用户约束规则复杂繁多,为了便于后续的扩展和移植,首先根据约束规则声明该规则,当约束规则更改或添加新的约束规则时只需要修改或添加声明即可,非常简洁方便。声明约束规则的格式如式(2)所示:

其中declare为关键字,是自定义的TCL处理过程,在该过程中获取声明的约束名、约束参数、约束条件,并定义该约束应执行的解析处理过程,执行流程如图3所示。

图3 declare处理流程

以创建时钟为例,其用户约束语句一般如下所示:

create_clock-period 100-name clk[get_ports PCLK]

根据其规则,声明的约束规则如下所示:

declarecreate_clock{

{-period Float{$par>=0} }

{-name String }

{-waveform List{type_Float{length($length>=2&&($length%2)==0)}}}

{port_pin_listList }

{-add Flag }

}{param(-period)&& (param(-name)||param(port_pin_list))}

各字段的解释如表1所示。

表1 约束规则说明

3.2 定义解析规则

根据已声明的约束规则,定义相应的解析规则,当解析用户约束文件时,根据该规则逐条进行解析。首先获取用户约束语句中的约束名称与参数,并根据该约束名称查找已声明的约束规则;然后逐个遍历参数,获取其参数名与参数值,并根据值类型、值约束条件校验该参数值是否合法,若合法则保存该参数名与参数值键值对;当遍历完所有参数,根据声明的约束条件校验整条语句是否合法,若合法则调用回调函数将结果返回至C程序。整个处理流程如图4所示。

3.3 解析用户约束

采用TCL打开用户约束文件并逐行读取约束语句,根据定义的解析规则解析该约束语句,并将解析结果通过调用命令处理过程返回至C程序中,进而应用至布局、布线等流程。其流程如图5所示。

图4 定义解析规则

图5 解析用户约束

4 测试结果

本文所述的用户约束文件解析方法已应用至自主研发的EDA工具中。例如:图6为用户约束文件,图7、图8为解析结果在GUI中的显示,通过对比发现,解析结果全部正确。

图6 用户约束文件

图7 GUI显示解析结果(创建时钟)

图8 GUI显示解析结果(位置约束)

5 结论

利用TCL实现用户约束文件的解析,首先声明约束规则,然后定义解析规则,非常适用于规则繁多、复杂多变的文件解析,当约束规则更改或者添加新的约束规则时只需要修改或添加相应的声明、解析规则即可,非常灵活方便,具有很强的可扩展性与可移植性,便于后期的维护工作。

参考文献:

[1]赵丽.基于TCL脚本的自动化测试工具的研究与实现[J].信息化研究,2009,35(11).

[2]陆天宇,孔啸.基于TCL语言的CAE流程自动化系统设计[J].制造业自动化,2012,01(上):3-7.

[3]马飞,刘琦,尹娜,包斌.Tcl/Tk语言FPGA逻辑IP库实现方法研究[J].电子测量技术,2014,37(1).

[4]John K,Ousterhout Ken Jones.Tcl/Tk入门经典[M].第2版.北京:清华大学出版社,2010.

[5]杨怡玲,王换招,管旭东.利用Tcl/Tk实现X Windows下的GUI[J].微电子学与计算机,1999,1.

[6]李杰.IP核验收平台搭建与图形用户界面开发[D].哈尔滨:哈尔滨工业大学,2015.

猜你喜欢
命令声明约束
本刊声明
本刊声明
只听主人的命令
“碳中和”约束下的路径选择
约束离散KP方程族的完全Virasoro对称
本刊声明
本刊声明
移防命令下达后
这是人民的命令
适当放手能让孩子更好地自我约束