日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > > 艾思后端實(shí)現(xiàn)

在EDA工具里邊使用函數(shù)是非常方便的一個(gè)操作方式,高效、可控、并且不留”殘?jiān)?。這里,大家一起來看一下TCL里的過程(proc)的使用方法。

TCL里的過程,等效于C語(yǔ)言里的函數(shù)(function)
一個(gè)標(biāo)準(zhǔn)的proc一般具有如下的特點(diǎn)

		

proc proc_name {argument} { ...... return return_value }

在使用的時(shí)候,直接輸入過程名即可執(zhí)行。
先來看一個(gè)下面的例子,



這是一個(gè)標(biāo)準(zhǔn)的過程,get_area就是這個(gè)過程名,直接執(zhí)行它就可以了,這個(gè)過程名的作用就是得到整個(gè)設(shè)計(jì)里邊的cell 的面積,源碼示例如下

		

proc get_area {} { set area 0 foreach_in_collection c [get_flat_cell *] { set area [expr [get_attribute $c area] + $area] } puts "cell area is: $area" return $area } define_proc_attributes get_area \ -info "get_area"

可以看到,除過計(jì)算面積意外,這里還有一個(gè)returndefine_proc_attributes ,通過下面的操作來感受一下它們的意義



這個(gè)操作,就是使用 [] 來獲取命令的返回值,這個(gè)是和shell里邊的 `` 功能是一樣的。

再來看看以下define_proc_attributes,這個(gè)命令可以定義你的proc的釋義等。使用help proc_name來喚出來proc的解釋



這個(gè)get_area僅僅就是計(jì)算所有cell面積的一個(gè)過程,如果只想計(jì)算某種特殊名稱的cell 面積呢?沒問題,使用argument輕松完成。
先看一下命令使用上的變化


可以看到,這里使用了pattern 這個(gè)參數(shù),但是帶來的便利性是巨大的,用戶可以自行篩選結(jié)果,而不用去修改下邊的proc本身。代碼示例如下:

		

proc get_area {args} { parse_proc_arguments -args $args opt set pattern "" if {[info exists opt(-pattern) ]} { set pattern $opt(-pattern) } set area 0 foreach_in_collection c [get_flat_cell *${pattern}*] { set area [expr [get_attribute $c area] + $area] } puts "Pattarn \"${pattern}\" cell area is: $area" return $area } define_proc_attributes get_area \ -info "get_area for specified pattern" \ -define_args { {-pattern "instance name pattern" AString string required } \ }

可以看到,在proc get_area 里邊,加入了如下的擴(kuò)充

		

parse_proc_arguments -args $args opt

這個(gè)即使參數(shù)解析的命令,通過這個(gè)命令,可以很方便的將外界的參數(shù),轉(zhuǎn)化為proc內(nèi)部的數(shù)組(array)opt 用戶通過調(diào)用這個(gè)數(shù)組,來實(shí)現(xiàn)參數(shù)的傳遞

此外,在定義過程屬性的命令里邊,也多了一些信息

  
		

-define_args { {-pattern "instance name pattern" AString string required } \ }

這個(gè)命令就是在定義argument的具體需求,具體格式釋義如下面表格

arg_name option_help value_help data_type attributes

縮略語(yǔ) 描述 示例
arg_name 選項(xiàng)的名稱 -pattern
option_help 選項(xiàng)的描述 “instance name pattern”
value_help 選項(xiàng)值的描述 AString
string 選項(xiàng)值的類別 string
attribute 選項(xiàng)的屬性 required

這里的選項(xiàng)值的類別選項(xiàng)的屬性 都是需要符合工具的定義,必須要按照工具定義的來,類別一般分為:string/int/ boolean等,屬性一般有:required/required等等。如果用戶的輸入和定義的不匹配,工具會(huì)報(bào)錯(cuò)。
更進(jìn)一步,再來一個(gè)使用ref_name進(jìn)行二次過濾,運(yùn)行結(jié)果如下



proc的代碼如下

		

proc get_area {args} { parse_proc_arguments -args $args opt set pattern "" if {[info exists opt(-pattern) ]} { set pattern $opt(-pattern) } set area 0 if {[info exists opt(-ref) ]} { foreach_in_collection c [get_flat_cell *${pattern}* -f "ref_name=~*$opt(-ref)*"] { set area [expr [get_attribute $c area] + $area] } puts "Pattarn \"${pattern}\" with ref \"$opt(-ref)\" cell area is: $area" } else { foreach_in_collection c [get_flat_cell *${pattern}*] { set area [expr [get_attribute $c area] + $area] } puts "Pattarn \"${pattern}\" cell area is: $area" } return $area }

細(xì)心的同學(xué)們可能已經(jīng)注意到了,這里使用了-ref這個(gè)新的argument,但是依然支持不帶-ref的命令行操作
這是因?yàn)橄旅娴拇a的操作:

		

define_proc_attributes get_area \ -info "get_area for specified pattern" \ -define_args { {-pattern "instance name pattern" AString string required } \ {-ref "ref name pattern" AString string optional } \ }

這里的**-ref …optional**就是這個(gè)作用,可以使用,也可以不使用,非必須的argument。
在文章的最開始提到proc還有一個(gè)不留“殘?jiān)钡淖饔?,說的是proc里邊的變量都是局部變量,每次執(zhí)行的時(shí)候才會(huì)用到,但是不會(huì)影響當(dāng)前的會(huì)話,利用這個(gè)特點(diǎn)可以放心的執(zhí)行,又不用擔(dān)心環(huán)境被破壞。用戶只需要使用當(dāng)前proc的返回值就可以了。

		

foreach t { place CTS route_opt } { puts "area for $t is [get_area -pattern $t]" }

執(zhí)行結(jié)果如下,可以看到,每次的返回值都回基于輸入而產(chǎn)生不同,相互之間不影響



從上邊的例子中,同學(xué)們已經(jīng)能感知到proc的強(qiáng)大威力了吧!在真正的工作中,可以使用這些特點(diǎn),構(gòu)建自己的強(qiáng)大proc,從而可以更為方便的運(yùn)行命令。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
關(guān)閉