PT教程 - 應用系列 - ECO修復Timing(理論+實踐+腳本分享)


本文轉自:自己的微信公眾號《集成電路設計及EDA教程》

《PT教程 - 應用系列 - ECO修復Timing(理論+實踐+腳本分享)》

 

這篇推文講一下數字IC設計中的post mask ECO和premask ECO,並講解一下在ICC中Apply ECO的流程。

 

理論:

前面介紹了在ICC中Apply ECO的方法與流程,但是ICC並非Timing Signoff的一個工具,在ICC中做完布局布線之后,需要到PT中做STA,在Formaliry中做形式驗證等等,如果存在違反需要進行ECO。

 

流程及腳本分享:

這里以修復hold為例,介紹一下PT ECO的方法並分享一下腳本。

首先在PT中進行STA,在任意一個scenario下面,如果存在timing的違反,最好將違反的path報告導出為一個文件,且不分行,這樣便於用進程進行處理(如果同一個路徑的報告換行的話格式會有點混亂,不便於處理)。可以用上面的redirect命令導出。

修復hold的方法一般就是在endpoint插入buffer或者delay cell。

下面是PT調用的修復hold的進程:

 

修復完成后需要再報告一下看是否還存在違反,如果還有違反就再次執行該進程:

sta_fix_hold_file ../../backend/pt/sta_rpts/hold_vio.timing “icc”

 

 

下面給出該tcl代碼,並對該程序進行講解:

#sta_fix_hold_file是進程的名字,要想調用該進程可以用如下格式:

#sta_fix_hold_file file_name(即PT產生的timing violations報告) icc/astro(設置PT產生ECO tcl腳本是用於astro的還是icc的)

# buf_lst后邊是buffer或者delay cells的list,這些cells可被用於修復hold。

proc sta_fix_hold_file {file_name {tool icc} {buf_lst {DEL1V1_8TH40DEL1V2_8TH40 DEL2V1_8TH40 DEL2V2_8TH40 DEL3V1_8TH40 DEL3V2_8TH40 DEL4V1_8TH40 \

DEL4V2_8TH40 BUFV0_8TH40 BUFV12RQ_8TH40BUFV12_8TH40 BUFV16RQ_8TH40 \

BUFV16_8TH40 BUFV1_8TH40 BUFV20RQ_8TH40BUFV20_8TH40 BUFV24RQ_8TH40 \

BUFV24_8TH40 BUFV2_8TH40 BUFV32RQ_8TH40 BUFV32_8TH40BUFV3RQ_8TH40 \

BUFV3_8TH40 BUFV40RQ_8TH40 BUFV40_8TH40BUFV4RQ_8TH40 BUFV4_8TH40 \

BUFV6RQ_8TH40 BUFV6_8TH40 BUFV8RQ_8TH40BUFV8_8TH40}}} {

 

   set f [open $file_name r]

   gets $f line

   set end_path [lindex $line 0]

#regexp 命令(regexp expstring)用於判斷正規表達式exp 是否全部或部分匹配字符串string,匹配返回1,否則0。

   while {![regexp {^Endpoint}$end_path]} {

   gets $f line

   set end_path [lindex $line 0]

   }

#TCL 提供了seek,tell和eof 等命令使用戶可以非連續訪問文件。

#eof fileId

#如果到達fileId 標識的文件的末尾返回1,否則返回0。

#string 命令具有強大的操作字符串的功能,其中的option 選項多達20 個。下面介紹其中常用的部分。

#string compare ?-nocase? ?-length int? string1 string2

把字符串string1 和string2 進行比較,返回值為-1、0 或1,分別對應string1 小於、等於或大於string2。如果有 -length 參數,那么只比較前 int個字符,如果 int 為負數,那么這個參數被忽略。如果有 -nocase 參數,那么比較時不區分大小寫。

 

   while {![eof $f]} {

   gets $f line

   set end_path [lindex $line 0]

 

   if { [string compare $end_path""] && ![regexp {^---} $end_path] && ![regexp {^1}$end_path] } {

     puts "###fix holdviolation###current hold violated end point =============> $end_path"

     fix_eco_timing -type hold-method insert_buffer -to $end_path -buffer_list $buf_lst

   }

  }

#注意有個!{regexp {^1} $end_path},這是因為在生成報告的末尾會有個1,不能將其視為hold的違反。

  close $f

  if {$tool == "astro"}{

    write_astro_changes -formatscheme  eco_fix_hold.cmd

  } elseif {$tool =="icc"} {

    write_changes -format icctcl-output  eco_fix_hold.tcl

  } else {}

}

 

#使用范例,先報告PT中的hold違反:

report_timing -delay_type min \

     -start_end_pair \

     -slack_lesser_than -0 \

     -path_type end \

     -nosplit >../../backend/pt/sta_rpts/hold_vio.timing

軟件產生的報告是這樣的(下面給的圖片中slack沒有小於-0的,所以用slack小於0.12的為例,主要關注報告的格式。由於系統精度與顯示的問題,注意一定要在0前面加上負號,因為某些slack非常小的正數由於精度的問題,會四舍五入成0.00):

 

#調用進程修復hold違反

sta_fix_hold_file ../../backend/pt/sta_rpts/hold_vio.timing"icc"

# ../../backend/pt/eco_fix_hold.tcl

#修復完成后在PT中檢查是否還存在hold的違反

check_timing

update_timing

report_timing

#report_timing -delay_type min

report_constraint -all_violators -min_delay

 

在PT產生ECO腳本之后,便可以在ICC中take ECO了。

 

更多資料歡迎移步微信公眾號《數字集成電路設計及EDA教程》

 

網易雲課堂視頻課程

  

鏈接:https://study.163.com/course/introduction/1005909004.htm

Calibredrv教程-提高流程自動化

##  為了方便大家交流討論  ##

##  建了一個QQ群  ##

## 集成電路設計及EDA教程  ##

## 加群請備注:EDA  ##

##  群二維碼如下  ##

# 本公眾號有個紅包和資料福利微信群  #

#  集成電路設計及EDA教程福利群  #

#  為了避免亂七八糟的人加進來  #

#  可以先加我微信,我拉你進群  #

#  加我微信 請備注下面問題的答案  #

#       ASIC的全稱       #


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM