当前位置:首页 > > 艾思后端实现


循环命令for:

for {初始化变量} {变量测试语句}  {变量操作}  {循环语句}

这里需要注意的是,所有的循环命令后面跟的测试、初始化语句以及循环语句等等,都是使用 大括号包含起来,这也是大括号的一个重要的用途。

这里列出来的变量操作,指的是在循环语句结束时的变量操作。简单的for 语句示例如下,循环运行直到测试条件不再满足:

测试命令if:

测试表达式,为真则执行命令,更加完备的格式是if-elseif-else 方式。当然,和其他高级语言一样,使用非完备格式从语法上讲,是没有任何问题的,但是设计者应该有策略保证表达式不被满足的情形。

If是初始测试,elseif是不满足的初始测试情况下再次测试,随后的else是以上条件都不满足时,执行的默认命令,示例如下:

更加格式化的测试命令switch:

switch {测试策咯} {测试选项} {变量}  {测试结果的分支执行语句}

Tcl里边的switch是可以和if-elseif-else完全作对等替换的,switch的好处是,结构化更好,对于简单的分支执行语句的可视化很好。tcl这里给出多一个命令测试命令供用户选用:

这里的测试策咯有三种:-exact, -glob 和-regexp,默认是使用-exact来做匹配,示例如下:

Switch和if-elseif一样,碰到第一个满足条件就执行,然后直接退出测试结构,语句执行完成。

在switch里边还有两个特殊字符。“--” 和“-“,看下面的实例:

第147行的“--“是测试策咯和选项的结束标志,tcl就会认为”--“后面跟的就是变量,使用”--”可以明确区分测试选项部分和变量部分。

第149行的“-“是一种更为简便的写法。意思是执行的命令和下一句一致,所以能看到,最终的结果,是采用了第150行的命令进行执行,并非真实的执行了第150行的命令。


循环控制命令

break:在循环体内,结束当前循环,并且终止循环体的剩余循环操作

continue:在循环体内,结束当前循环,立刻开始循环体的下一个循环操作

可以通过它们,去干预内部循环细节,这个可以增加脚本的灵活性,break的示例如下:

注意观察第24,25行,这里的打印,是在break语句干预下,所引起的循环操作变化。整个循环语句的最终结果如下,可以看到,由于break的介入y的值被锁定到3:

类似的,使用continue,会有另外一副画面:

细心的读者,可以从第62、63行可以看出continue的命令运行方式了吧:当前循环立刻结束,立刻启动下次循环。

使用continue的最终结果,也稍有不同,大家再体会一下

循环往复的while:

while {测试命令} {循环脚本},

和if、for比较,while的强大之处是它的无限往复功能:只要条件满足,永远都会执行循环脚本,当且仅当测试条件不满足,才会结束while,脚本向下继续运行,如果是在等待某个机制的情形下,while可以很好的满足这种需求,间接的,这也可以演化成一种交互式的操作;其次也可以作为迭代的一种控制。使用好while,可以让脚本运行效率更高,具体示例如下

当x=3的时候,while的判断不成立,这时候才会运行while后面的语句。


列表循环foreach:

foreach {变量名} {列表} {循环脚本},

这时候foreach会把列表里的每一个值带入到变量里边,然后运行循环脚本,当然,循环脚本里边不一定必须要出现变量名:

还有更高级的用法是:

foreach {列表变量} {列表}  {列表变量} {列表}  {循环脚本}

foreach会把列表里的变量进行罗列,然后逐一进行赋值直到没有列表的内容全部被赋值结束。

仔细看下面的这个示例,foreach把列表变量{I j}和{k l m},先展开成为独立的变量,而后尽量与后面的列表完成一一匹配,目标是打印完所有的赋值后,结束foreach,这里的示例如下:

后端应用实践:

实际的工作中,foreach是一个常用的命令,再加上对文件读取访问,可以使用简单的tcl脚本实现比较复杂的操作,例如:读入timing report ->  使用foreach对文件内容进行解析 ->  满足某种条件下的触发操作命令:

在PT里边,可以使用命令生成max_delay类型的violation结果,

这时候,可能需要抽取出所有violation对应的startpoint,下边的这个脚本就可以快速的实现这个功能:

最后的得到的结果如下,抽取结果的打印格式是:startpoint endpoint slack


可以看到,工具命令结合tcl的控制语句,可以快速读入report 结果,然后进行处理,从而得到数据库里的需要的信息。

这里涉及到了一个新的课题,就是文件内容的访问,这正是下期讲座的讨论主题之一,敬请期待。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭