日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Tcl与Design Compiler (十二)——综合后处理

發布時間:2025/3/8 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)查看分組優化結果:

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

?              

?

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

總結

以上是生活随笔為你收集整理的Tcl与Design Compiler (十二)——综合后处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。