Tcl與Design Compiler (十二)——綜合后處理

?本文如果有錯,歡迎留言更正;此外,轉載請標明出處?http://www.cnblogs.com/IClearner/? ,作者:IC_learner

概述

  前面也講了一些綜合后的需要進行的一些工作,這里就集中講一下DC完成綜合了,產生了一些文件,我們就要查看它生成的網表和信息,下面就來介紹DC綜合完成之后要進行哪些工作:

?                  

也就是說,DC一般完成綜合后,主要生成.ddc、.def、.v和.sdc格式的文件(當然還有各種報告和log)

.sdc文件:標準延時約束文件:

?                  

里面都是一些約束,用來給后端的布局布線提供參考。

?

Scan_def.def文件:DFT、形式驗證可能用到

?              

里面包含的是一些掃描鏈的布局信息,需要注意的是,必須在生成ddc網表文件之前生成.def(也就先生成.def文件),以便將def文件包含在ddc文件中。

?

.sdf、.v文件

標準延時格式和網表格式文件,用于后仿真。

?

下面是輸出(生成)文件的一些命令:

?          ?    

?

1.綜合網表處理與生成

(1)綜合網表的處理:

  完成綜合并通過時序等的分析后,我們需要把設計和約束以某種格式存儲好,作為后端工具的輸入。

  把設計以VHDL或Verilog格式存檔時,需要去掉或避免文件中有assign指令,因為該指令會使非Synopsys公司的工具在讀入文件時產生問題。該指令也可能會在反標( back-annotation)流程中產生問題。此外,要保證網表中沒有特別的字符。例如,寫出網表時,有時網表中會有反斜線符號“\”,對于這個符號,不同的工具有不一樣的理解。

·assign:

多端口連線(multiple port nets)會在網表中用assign指令表示,如下圖所示:

?          

上面的設計中有冗余的端口(包括內部端口,又稱層次引腳)。如果我們將設計展開(flatten), DC可能把它們優化掉,即去掉這些端口。但是如果我們不展開設計,將得到下面的結果:

    Output ??Reset_AluRegs,Latch_Instr,....

    assign???Reset_AluRegs=Latch_Instr;

多端口連線,即一條連線連接多個端口,三種類型:直通連線(Feedthroughs),即從輸入端直接到輸出端;連線驅動多個端口(也就是上面的那個情況);常數連線驅動多個端口。

  在默認的情況下,如遇到上述的情況,DC寫出網表時,會在網表產生assign指令。如果設計中有多端口連線,應該在編譯過程中將它們去掉。去掉多端口連線使用下面的命令:

  set_fix_multiple_port_nets ?-all ?-buffer_constants ?[get_designs ?*]

?

·特殊符號:  

  特別字符是指除數字,字母或下劃線以外的任何字符。當DC寫出網表時,如果遇到信號Bus[31],它會插入反斜線符號“\”,將其變為\BUS[31]。但是總線Bus[31:0」中的一個信號還用Bus[31],沒有用反斜線符號,也就是說設計里面可能會遇到即使用到了Bus[31]又用到Bus[31:0]這種情況(比如一組總線網A方向走,而同時又有這組總線的最高位充當某個控制信號)。這時方括弧不是名字的一部分,它們是位分隔符。這時候,同一個信號用了兩種符號串表示(也就是Bus[31]和Bus[31:0]中的第31位是同一個信號,但是卻有不同的字符串表示,這是不好的,一些工具可能解讀出錯)。最好的辦法是把設計中的反斜線符號去掉,用有效的字符代替非有效(特別)的字符。

  用change_names命令可將設計中的特別字符去掉。change_names命令的其中一選項是“-rules",后面可跟用自定義的命名規則或Verilog命名規則。在DC中用define_name_rules命令來規定自定義的命名規則。例如我們可以用該命令來指定可以使用哪些字符,禁止使用哪些字符,名字的長度等。一般來說,Verilog命名規則可以處理幾乎所有的特殊字符。

  執行change_names命令后,它會把不允許使用的字符用允許使用的字符來代替。VHDL語言中,多維數組(multi-dimensionalarrays)使用方括弧作為字下標的分隔符(word subscript delimiters)。為了避免使用反斜線符號,先使用change_names命令把字下標的分隔符轉換為下劃線。如下所示:

?                 

                       

?

(2)相關文件的生成

  經過處理之后的網表就可以生成了,除了了網表之外,我們還可以生成時序、面積報告等,相關命令如下所示:

?              ? 

一個是生成.ddc文件,里面包含了很多信息。一個是生成.v的門級網表。一個是生成標準約束文件,以供后面進行布局布線提供參考。

  最后,進行網表處理和生成文件的綜合命令如下所示:

?               

?

?

                    

?

?               

?

?

2.時序檢查與報告的生成

  最后,我們要講檢查設計報告、連接設計報告、DC綜合過程中的信息報告、時序檢查報告、面積檢查報告等進行生成,方便我們進行檢查:

    # Get report file

    redirect ??-tee ??-file ??${REPORT_PATH}/check_design.txt ?????{check_design ???????????????????};

    redirect ??-tee ??-file ??${REPORT_PATH}/check_timing.txt ?????{check_timing ???????????????????};

    redirect ??-tee ??-file ??${REPORT_PATH}/report_constraint.txt {report_constraint -all_violators};

    redirect ??-tee ??-file ??${REPORT_PATH}/check_setup.txt ??????{report_timing -delay_type ?max ?};

    redirect ??-tee ??-file ??${REPORT_PATH}/check_hold.txt ???????{report_timing -delay_type ?min ?};

    redirect ??-tee ??-file ??${REPORT_PATH}/report_area.txt ??????{report_area ????????????????????};

?這里使用的重定位的命令redirect,意思是將后面{}中命令的執行結果保存到文件中(命令的具體用法前面有講到,也可以通過man redirect進行查看)

?

(1)時序報告的查看:

  下面主要介紹時序報告的檢測,畢竟timing is everything。關于時序報告的查看,前面也講得很清楚了,這里再來具體講述一下。  

  Design Compiler中,常用report_timing命令來報告設計的時序是否滿足目標(Check_timing:檢查約束是不是完整的,在綜合之前查看,要注意不要與這個混淆)。

時間報告有四個主要部分:

·第一部分是路徑信息部分,如下所示:

?                   

主要報告了工作條件,使用的工藝庫,時序路徑的起點和終點,路徑所屬的時鐘組,報告的信息是作建立或保持的檢查,以及所用的線負載模型。

?

·第二部分是路徑延遲部分                  

  這個路徑延遲部分是DC計算得到的實際延遲信息;命令執行后,對于下圖中的路徑,得到的一些路徑信息,有了單元名稱(point通過該單元的延時Incr),經過這個單元后路徑的總延時等信息:

?                

上圖的解釋:

  路徑的起點是上一級D觸發器的的時鐘端。

  input external delay:(由于上一級D觸發器的翻轉(路徑的起點也就這里)、芯片外部組合邏輯而經歷的)輸入延時約束(set_input_delay),也就是數據到達芯片的數據輸入管腳的延時建模,這個延時是1ns;r表示上升延時,f表示下降延時

  clock network delay(idle):時鐘信號從芯片的端口到內部第一個寄存器的延時是0.5ns;

  Data1(in):芯片輸入端口到芯片內部真正數據輸入端之間的線延時,是0.04ns。(可以認為是管腳的延時)

  U2/y : 這里,前面0.12表示u2這個器件的翻轉/傳輸延時,意思是從這個器件的數據輸入端(包括連線),到輸出端y的延時是0.12ns。后面的1.66的意思是從路徑起點到u2的y輸出的延時是1.66ns.

  ...

  最后u4/D這里就是終點了,D觸發器的數據輸入端;當然終點也可能是芯片的輸出端口。

  報告中,小數點后默認的位數是二,如果要增加有效數(字),在用report_timing命令時,加上命令選項“-significant_digits"。報告中,Inc:是連線延遲和其后面的單元延遲相加的結果。如要分別報告連線延遲和單元延遲,在使用report_timing命令時,加上命令選項"-input_pins"。

?

·第三部分是路徑要求部分,如下圖所示:

?                

這個路徑要求部分是我們約束所要求的部分;值-0. 06從庫中查出,其絕對值是寄存器的建立時間。值2.17為時間周期加上延時減去時鐘偏斜值再減寄存器的建立時間(假設本例中的時鐘周期是2 ns)。

?

·第四部分是時間總結部分,如下圖所示:

?                

DC得到實際數據到達的時間和我們要求的時間后,進行比較。數據要求2.17ns前到達(也就是數據延時要求不得大于2.17ns),DC經過計算得到實際到達時間是2.15ns,因此時序滿足要求,也就是met,而不是時序違規(violation)。時間冗余(Timing margin),又稱slack,如果為正數或‘0',表示滿足時間目標。如果為負數,表示沒有滿足時間目標。這時,設計違反了約束(constraint violation)。

?

(2)timing_report的選項與debug

  在進行靜態時序分析時,report_timing是常用的一個命令,該命令有很多選項,如下所示(具體可以通過man進行查看):

?                

?

  我們可用report_timing的結果來查看設計的時序是否收斂,即設計能否滿足時序的要求。我們也可以用其結果來診斷設計中的時序問題,對于下面的報告,

?          

外部的輸入延遲為22 ns,對于時鐘周期為30 ns的設計,顯然是太大了。設計中,關鍵路徑通過6個緩沖器,需要考慮這些緩沖器是否真的需要;OR單元的延遲為10. 72ns,似乎有問題。關鍵路徑通過四個層次劃分模塊,從模塊u_proc,經模塊u_proc/u_dcl,經模塊u_proc/u_ctl,到模塊u_int。前面我們說過,DC在對整個電路做綜合時,必須保留每個模塊的端口。因此,邏輯綜合不能穿越模塊邊界,相鄰模塊的組合邏輯并不能合并。這4個層次劃分模塊使得DC不能充分使用組合電路的優化算法對電路進行時序優化,是否考慮需要進行模塊的重新劃分。

?

(3)設計違規檢查

?              

當然有時候并不是真正的設計違規,有可能是約束設計過緊,有可能是設計的輸入延時太緊導致violation,比如前面那個實戰中,綜合得到的結果是可以滿足要求的,但是由于約束不當而導致DC爆出違規。

?

(4)查看分組優化結果:

  主要是查看路徑分組之后,路徑的時序情況是什么樣的,如下所示:

?              

?

本節的基本內容就是這樣了,本節就沒有什么實戰之類了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/541667.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/541667.shtml
英文地址,請注明出處:http://en.pswp.cn/news/541667.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java短類的compareTo()方法和示例

簡短的類compareTo()方法 (Short class compareTo() method) compareTo() method is available in java.lang package. compareTo()方法在java.lang包中可用。 compareTo() method is used to check equality or inequality for this Short object against the given Short obj…

四則運算網頁版

一.設計思想: 1)寫出一個菜單界面,有兩個選項一個是分數,一個是整數。 2)而這兩個標簽后面則是轉向其更詳細的菜單,題目數量,有無括號,運算的項數等等詳細功能,再點擊這兩…

Java RandomAccessFile seek()方法與示例

RandomAccessFile類seek()方法 (RandomAccessFile Class seek() method) seek() method is available in java.io package. seek()方法在java.io包中可用。 seek() method is used to sets the file pointer position calculated from the starting of this file at which the …

Javascript開發技巧(JS中的變量、運算符、分支結構、循環結構)

一、Js簡介和入門 繼續跟進JS開發的相關教程。 <!-- [使用JS的三種方式] 1、HTML標簽中內嵌JS&#xff08;不提倡使用&#xff09;&#xff1a; 示例&#xff1a;<button οnclick"javascript:alert(你真點啊&#xff01;)">有本事點我呀&#xff01;&#…

android 顏色范圍,Android系統顏色的適用范圍

###All Clickable Views:ripple effect (Lollipop only) — “colorControlHighlight”###Status Bar:background (Lollipop only) – “colorPrimaryDark”###Navigation Bar:background (Lollipop only) – “android:navigationBarColor”###EditText:underline (unfocused)…

bytevalue_Java Short類byteValue()方法及示例

bytevalue短類byteValue()方法 (Short class byteValue() method) byteValue() method is available in java.lang package. byteValue()方法在java.lang包中可用。 byteValue() method is used to return the value denoted by this Short object converted to type byte (by …

分布式交換機配置備份和還原

1.備份和還原vSphere Distributed Switch配置 1.1導出 vSphere Distributed Switch 配置 可以將 vSphere Distributed Switch 和分布式端口組配置導出到某一文件。該文件保留有效的網絡配置&#xff0c;使這些配置能夠傳輸至其他環境。 步驟&#xff1a; 1) 在 vSphere Web Cli…

html自動執行函數,JS 自執行函數原理及用法

js自執行函數&#xff0c;聽到這個名字&#xff0c;首先會聯想到函數。接下來&#xff0c;我來定義一個函數&#xff1a;function aaa(a,b){return sum a b}定義了一個名為aaa的函數&#xff0c;在里面可以計算兩個數的和。如果想執行它&#xff0c;就必須得調用它&#xff0…

java reverse_Java Integer類reverse()方法與示例

java reverse整數類reverse()方法 (Integer class reverse() method) reverse() method is available in java.lang package. reverse()方法在java.lang包中可用。 reverse() method is used to returns the value generated by reversing the order of bits in binary 2s comp…

華為鴻蒙系統好在哪,華為鴻蒙2.0可以替代安卓嗎,華為鴻蒙2.0優勢在哪

在華為開發者大會上&#xff0c;華為消費業務CEO 余承東&#xff0c;正式發布鴻蒙OS2.0&#xff0c;并宣布華為鴻蒙OS將全面啟用全場景生態&#xff0c;并將于2020年12月發布手機版。余承東還表示&#xff0c;明年&#xff0c;華為的智能手機將全面升級&#xff0c;以支持鴻蒙操…

Java GregorianCalendar add()方法與示例

GregorianCalendar類的add()方法 (GregorianCalendar Class add() method) add() method is available in java.util package. add()方法在java.util包中可用。 add() method is used to add the given quantity to the specified GregorianCalendar field (fi). add()方法用于…

JVM(三)——對象的訪問定位

JVM&#xff08;三&#xff09;——對象的訪問定位創建完對象&#xff0c;到了使用對象的時候&#xff0c;通常聲明一個同類型的引用指向該類型的對象&#xff0c;由這個引用來操作對象的字段、方法等。 Object obj new Object();復制代碼我們的Java程序需要通過棧上的 refere…

html5滑動刪除置頂,html5向左滑動刪除特效

html5向左滑動刪除特效* {padding: 0;margin: 0;list-style: none;}header {background: #f7483b;border-bottom: 1px solid #ccc}header h2 {text-align: center;line-height: 54px;font-size: 16px;color: #fff}.list-ul {overflow: hidden}.list-li {line-height: 60px;bord…

Java Double類hashCode()方法及示例

雙類hashCode()方法 (Double class hashCode() method) hashCode() method is available in java.lang package. hashCode()方法在java.lang包中可用。 hashCode() method is used to return hashcode of the Double-object. hashCode()方法用于返回Double對象的哈希碼。 hashC…

Java DataOutputStream size()方法及示例

DataOutputStream類的size()方法 (DataOutputStream Class size() method) size() method is available in java.io package. size()方法在java.io包中可用。 size() method is used to return the size of this stream or in other words, we can say it returns the value of…

html怎樣讓列表向下移動,Html無序列表ul控件實現行上下移動.

new document // 創建一個ulvar ul document.createElement("ul");ul.id "oList";// 創建divvar div document.getElementById(mergeCase);// 把ul放置到div中div.appendChild(ul);// 遍歷所有的li條目function trace(){var strTest "";for …

創建laravel項目

下載項目到本地 git clone https://github.com/251068550/LaraBlog.gitcompoer安裝 cd LaraBlog composer install如果composer install安裝很慢&#xff0c;推薦安裝國內鏡像 執行 composer config -g repo.packagist composer https://packagist.phpcomposer.com 配置.env文件…

Java ArrayList removeRange()方法與示例

ArrayList類removeRange()方法 (ArrayList Class removeRange() method) removeRange() method is available in java.util package. removeRange()方法在java.util包中可用。 removeRange() method is used to remove the elements whose range is between st_in(start index)…

Spring注釋事務失效及解決辦法

如果帶上事務&#xff0c;那么用annotation方式的事務注解和bean配置&#xff0c;事務會失效&#xff0c;要將service bean配置到xml文件中才行 在主容器中&#xff08;applicationContext.xml&#xff09;&#xff0c;將Controller的注解排除掉 <context:component-scan …

html5畫分形圖形,2.5 繪制透明圖形 - HTML5 Canvas 實戰

對于需要圖形分層的應用&#xff0c;經常需要處理透明度。本節&#xff0c;我們將學習如何使用全局透明度設置圖形的透明度。圖2-5 繪制透明圖形繪制步驟按照以下步驟&#xff0c;在一個不透明的矩形之上&#xff0c;繪制一個透明的圓&#xff1a;1. 定義2D畫布上下文&#xff…