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

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

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

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

		

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

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



這是一個標(biāo)準(zhǔn)的過程,get_area就是這個過程名,直接執(zhí)行它就可以了,這個過程名的作用就是得到整個設(shè)計里邊的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"

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



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

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



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


可以看到,這里使用了pattern 這個參數(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 里邊,加入了如下的擴充

		

parse_proc_arguments -args $args opt

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

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

  
		

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

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

arg_name option_help value_help data_type attributes

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

這里的選項值的類別選項的屬性 都是需要符合工具的定義,必須要按照工具定義的來,類別一般分為:string/int/ boolean等,屬性一般有:required/required等等。如果用戶的輸入和定義的不匹配,工具會報錯。
更進(jìn)一步,再來一個使用ref_name進(jì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這個新的argument,但是依然支持不帶-ref的命令行操作
這是因為下面的代碼的操作:

		

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**就是這個作用,可以使用,也可以不使用,非必須的argument。
在文章的最開始提到proc還有一個不留“殘渣”的作用,說的是proc里邊的變量都是局部變量,每次執(zhí)行的時候才會用到,但是不會影響當(dāng)前的會話,利用這個特點可以放心的執(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的強大威力了吧!在真正的工作中,可以使用這些特點,構(gòu)建自己的強大proc,從而可以更為方便的運行命令。

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