Design Compiler(一)

江左子固發表於2024-10-06

1.png (88.73 KB, 下載次數: 161)

下載附件 儲存到相簿

2019-2-2 17:20 上傳

邏輯綜合的行為是將數位電路的暫存器傳輸級描述(RTL,RegisterTransfer Level)“綜合”成門級網表(Gate-Level Netlist)。Design Compiler將RTL和根據設計需求編寫的約束檔案作為輸入綜合出門級網表,在效能、面積和功耗之間進行trade-offs。後端Place&Route工具(ICC、Innovus)將門級網表作為輸入生成GDSII檔案用於晶片製造。

邏輯綜合 = 翻譯 +最佳化+ 對映。其中,read_verilog將RTL翻譯成GTECH,compile進行綜合,也就是最佳化和對映成工藝相關的門級網表。

2、當你拿到一個ddc格式的檔案,你是否能夠知道這是一個已經綜合過的設計?

False

綜合前和綜合後的設計都能夠儲存為.ddc格式。一般儲存在unmapped和mapped資料夾下。

3、使用DesignCompiler進行邏輯綜合出現下述log,請問gtech.db和standard.sldb包含哪些資訊?

gtech.db和standard.db是synopsys提供的預設庫,分別包含了GTECH邏輯單元和基本的DesignWare IP模組。在使用read命令時,這些庫都被自動地載入。

4、Design Compiler綜合過程中,target_library是如何被使用的?
target_library使用在"compile"過程中,用來生成工藝相關的門級網表。Design Compiler儘量選擇面積最小的邏輯閘去滿足設計功能和時序的要求。

如果不透過“settarget_library *”指定目標工藝庫,預設值是your_library.db,同時工具會報出warning

5、Design Compiler 綜合過程中 “link”命令完成了什麼功能?

link是Design Compiler ”resolve”設計中例化模組的過程。DesignCompiler透過變數“link_library”指定例化模組庫的位置,和target_library一樣,預設為your_library.db。建議顯式地使用link命令,否則工具可能帶著“unresolved references”進行綜合,產生沒有意義的結果,同時浪費時間。

6、link_library = “ * $target_library”中的 "*"指的是什麼?
DC memory 。Design Compiler 首先會在DC memory中尋找匹配的例化模組。

7、Design Compiler 邏輯綜合中 search_path變數的作用是什麼?
DC在search_path指定的目錄底下尋找設計程式碼和庫檔案。建議在search_path中使用相對路徑,增強指令碼環境的可移植性

8、Design Compiler 邏輯綜合流程中,下述指令碼的意義是?

避免某些設計者只使用run 指令碼綜合設計,不仔細檢視log和reoport。基於錯誤的link或者check_design結果run完整個綜合流程會浪費大量不必要的時間。

9、將綜合前的設計儲存為.ddc的格式檔案有什麼好處?
read命令將rtl(unmapped)翻譯成GTECH格式。對於一個較大的設計,rtl to ddc需要花費很長的時間。當我們需要對設計重新進行compile時,只要讀取儲存的unmapped的設計(.ddc)就能節省很多時間。如果rtl已經被更新,還是要重新讀入rtl.

10、請問在DesignCompiler綜合過程中,下述命令的作用是什麼?

DesignCompiler 完成了ASIC設計流程中的rtl to netlist過程,後續需要有第三方工具完成netlist toGDSII的實現。而第三方工具對於netlist有字元語法上的限制,所以需要使用change_names 命令,才能讓第三方工具正確識別netlist。

11、下面哪個是關於target_library和link_library變數正確的表述?

a)所有在設計中例化的宏模組都應該在target_library中設定

b) 在compile期間,DC從link_library中選擇最小的邏輯閘去滿足時序要求

c) link_library用於resolve例化模組,target_library用於在compile

d) link_library自動載入.ddc檔案

C

a) 應該是 link_library

b) 應該是 target_library

d) 應該是 link

12、在設計中,port和pin有什麼異同?
相同點:port和pin都是一個input/output;

不同點:port是當前設計的input/output;

pin是當前設計中例化模組的input/output。

如果當前設計被另外的設計例化,則port會變成pin

13、在Design Compiler中如何正確地使用set_max_area約束命令?
如果是面積約束過於嚴格,或者直接設為0,Design Compiler將執行面積最佳化,直到無法最佳化為止。面積最佳化可能會增加runtime,但是不會影響時序最佳化。 時序約束優先順序總是高於面積約束。 如果run time是一個需要在乎的問題,請將面積約束設為實際設計要求的值。如果不關心run time,可以將其設定0。

14、Design Compiler是如何劃分時序路徑進行時序分析的?

DesignCompiler將設計劃分為一個個timing path,每一條路徑都有一個startpoint(input port、觸發器的clock pin)和一個endpoint(output ports、觸發器的data pin)

DesignCompiler會計算每一條路徑的延時,然後比較arrive time和require time來判斷這條路徑是否滿足時序要求。

15、Design Compiler如何在邏輯綜合的時候考慮到時鐘樹的影響?

DesignCompiler可以使用 set_clock_uncertainty命令來建模時鐘的skew + jitter + margin。如果不設定的話,預設值為0

16、Design Compiler如何在邏輯綜合階段考慮時鐘延遲的影響?

時鐘的network latency是指時鐘輸入埠到觸發器的時鐘端延遲;

時鐘的source latency是指實際的時鐘源到時鐘輸入埠延遲。

在pre_layout階段,使用set_clock_latency (-source)來建模;

在post_layout階段,使用set_propagated_clock來建模。

17、什麼是virtual clock,有什麼用處?
未連線到任何port或pin的時鐘

用作輸入或輸出延遲的參考點

18、為什麼模組級設計推薦暫存器輸出?
方便後級模組時序約束和時序預算

19、input path、output path和reg-to-reg path分別被什麼sdc語句約束?
input path :set_input_delay

output path :set_output_delay

reg-to-reg : create_clock

20、Design Compiler綜合中,set_max_capacitance命令的用處是什麼?
max_capacitance屬於“邏輯DRC”,它限制了埠的扇出電容。預設情況下,邏輯DRC的優先順序高於時序和麵積約束。max_capacitance是由工藝廠的庫決定的。

本文摘錄自微信公眾號 “數字晶片實驗室” 歡迎關注

21、如何透過tcl指令碼找出lib庫最大的max_capacitance ?

22、Design Compiler 在綜合時如何估計pre_layout的cell和net延時?

Design Compiler使用非線性延遲模型生成查詢表, 用於計算cell延遲。

基於扇出和工藝廠提供的線負載模型(set_wire_load_model)計算net延遲。

23、Design Compiler 的Topographical Mode相比Wire LoadModels有什麼優勢?
線負載模型(WLM)是基於工藝廠的資料統計,而不是特定於自己的設計。在深亞微米(UDSM)設計中,互連寄生引數對路徑延遲有很大的影響
,WLM是不夠準確的。

TopographicalMode使用placement演算法來估計線延時,提供和實際物理佈局更好的時序相關性。

TopographicalMode 除了邏輯庫之外,還需要物理庫(Milkyway)

24、使用DesignCompiler,在compile或optimize之後應該執行的分析操作是什麼?
report_constraint –all_violators,如果這個報告表明沒有違規行為,不需要進一步的時序和邏輯DRC分析。 如果有違規,可以使用report_timing執行更詳細的分析。

25、Milkyway庫包含了哪些資訊,DesignCompiler中如何指定Milkyway庫?

物理Milkyway庫(例如std,ip和pad)包含cell的物理佈局描述,用於執行placement。 technology file定義了該工藝金屬層,物理設計規則,電阻,電容單位等。TLU-plus檔案定義深亞微米RC寄生模型。 這些檔案由工藝廠商提供。

在Design Compiler中,由下列命令定義:

26、Floorplan是透過什麼指標來設定晶片的大小和形狀的?
AspectRatio(height/width),預設比值為1

Utilization(利用率)決定了cell的密集程度,提高利用率將減少core大小,預設利用率為0.6

27、DC Topographical mode如何讀入設計的實際物理佈局資訊?
1、 source PhysConstr.tcl

2、 extract_physical_constraints <def_file>

28、為什麼用於綜合的verilog不建議使用for迴圈?
DC無法最佳化for迴圈的邏輯,只是單純進行展開和複製,這可能降低電路的面積和效能

29、Milkyway庫中的“Layout” vs. “Abstract” 檢視有什麼不同?

Milkyway庫中包含相應的Abstract檢視和 Layout檢視, Abstract檢視用於Place & Route減少工具處理的資料量。

Abstract檢視不包含底層器件細節,僅包含以下內容:

  • cell的輪廓(placement工具將每個cell放置在core中的site上。Placement工具只需要知道的是cell的大小和形狀(輪廓)。)

  • 引腳位置和層(引腳通常是金屬連線的區域。routing工具使用這些引腳位置來佈線

Metal blockages(cell中某些不能佈線的金屬層區域,因為這些區域已經被該cell使用。上面的示例佈局太簡單,不需要Metal blockages。 Metal blockages更常見於IP宏模組

30、針對上圖,分別使用report_timing、report_timing-max_paths 2、report_timing -nworst 2-max_paths 2會輸出哪些slack ?

report_timing:由於4條路徑都屬於同一path group,因此report_timing只會報出一條路徑,即時序最差的路徑(Slack =-0.3)

report_timing-max_paths 2在每個endpoint都會報出一個最差的slack ,即(Slack = -0.3、Slack = -0.15)

report_timing-max_paths 2 -nworst 2在每個endpoint允許報出兩個最差的slack,即(Slack = -0.3、Slack = -0.25)

31、分析上述時序報告,該進行什麼樣的最佳化操作?
file:///C:/Users/wping/AppData/Local/Temp/msohtmlclip1/01/clip_image019.png

請注意,相對於12.5ns的時鐘週期,input delay為8.4 ns

  • 幾乎為70%!

實際上,該值要小得多,可以考慮將input delay減少到更合理的數字。

32、如何生成上圖所示的時鐘,假設觸發器的setup為0.03ns,Tmax最大允許延時為多大?
file:///C:/Users/wping/AppData/Local/Temp/msohtmlclip1/01/clip_image020.png

create_clock –period 1.6 –waveform {0 0.4 0.6 1.4 }
–name My_CLK
[get_ports Clk]

Tmax = 0.6

  • 0.4 –0.03 = 0.17ns

33、怎樣理解上述原理圖和約束?
file:///C:/Users/wping/AppData/Local/Temp/msohtmlclip1/01/clip_image021.png

指定外部邏輯(JANE’s_DESIGN)使用的時間,然後Design Compiler計算內部邏輯(MY_DESIGN)允許的時間。

file:///C:/Users/wping/AppData/Local/Temp/msohtmlclip1/01/clip_image022.png

如何約束上述設計?如果FF2和FF3的setup要求為0.2 ns:

最大延遲TNmax =

最大延遲TXmax =

create_clock–period 3.6 –waveform {0.0 1.2} [get_ports Clk]
set_input_delay –max 1.3 –clock Clk –clock_fall [get_ports A]

Tn,max = 3.6 – 1.2 – 1.3 - 0.2 = 0.9ns
Tx, max = 3.6 – 0.2 = 3.4ns

34、如何約束上圖多輸入路徑?假設觸發器setup要求為0.14ns,兩條路徑中哪一條更加嚴格?
file:///C:/Users/wping/AppData/Local/Temp/msohtmlclip1/01/clip_image024.jpg

file:///C:/Users/wping/AppData/Local/Temp/msohtmlclip1/01/clip_image025.png

create_clock-period 2
[get_ports Clk]

set_input_delay-max 0.3 –clock Clk –clock_fall

[get_ports A]

set_input_delay-max 1.2 –clock Clk –add_delay
[get_portsA]

M1:TNmax= 2 – 1 – 0.3 – 0.14 = 0.56ns

M2:TNmax= 2 – 1.2 – 0.14 = 0.66 ns

35、如何約束上圖多輸出路徑?假設觸發器setup要求為0.1ns,兩條路徑中哪一條更加嚴格?
file:///C:/Users/wping/AppData/Local/Temp/msohtmlclip1/01/clip_image027.jpg

create_clock-period 4 [get_ports Clk]

set_output_delay–max 2.5 –clock Clk [get_ports B]
set_output_delay –max 0.7 –clock Clk - clock_fall –add_delay [get_ports B]

file:///C:/Users/wping/AppData/Local/Temp/msohtmlclip1/01/clip_image028.png

T1:TSmax= 4 – 2.5 = 1.5ns

T2:TSmax= 2 – 0.7 = 1.3 ns

36、用什麼命令來設定設計驅動和負載約束?
set_driving_cell、set_load

37、如何約束上述包含非同步時鐘的設計?
file:///C:/Users/wping/AppData/Local/Temp/msohtmlclip1/01/clip_image030.jpg

file:///C:/Users/wping/AppData/Local/Temp/msohtmlclip1/01/clip_image031.png

如果設計中的所有時鐘都是非同步的,可以使用以下指令碼:

file:///C:/Users/wping/AppData/Local/Temp/msohtmlclip1/01/clip_image032.png

38、上述設計,時鐘週期為10 ns。 加法器需要近6個時鐘週期。經過六個時鐘週期使能觸發器。如何不施加多週期約束,會發生什麼?
file:///C:/Users/wping/AppData/Local/Temp/msohtmlclip1/01/clip_image033.png

DesignCompiler預設所有路徑都是單週期路徑。不施加多週期約束,工具會盡量讓64bit加法器滿足10ns約束!

39、Design Compiler綜合過程中,上述命令的用處是?
file:///C:/Users/wping/AppData/Local/Temp/msohtmlclip1/01/clip_image035.jpg

單時鐘設計,因此所有路徑都在同一path group中。在I/O上的非常糟糕的約束可能影響設計最後的綜合效果。我們可以自定義path group,使得每個path group的WNS path都能夠得到最佳化,不至於其中一個WNS的path阻礙另一個path group的最佳化。

report_timing也會分別報告每個pathgroup的時序

file:///C:/Users/wping/AppData/Local/Temp/msohtmlclip1/01/clip_image036.png

file:///C:/Users/wping/AppData/Local/Temp/msohtmlclip1/01/clip_image037.png

40、group path中的 –weight選項有什麼實際用處?
DesignCompiler以降低cost function為最佳化方向,–weight用於給特定path group設定優先順序或權重

例如:path group 1:

slack =-2ns,weight=5,則cost function = 10

path group 2:

slack =-3ns,weight=1,則cost function = 3.Design Compiler最佳化的方向是降低兩個pathgroup的cost function之和

41、group path中的 –critical選項有什麼實際用處?
file:///C:/Users/wping/AppData/Local/Temp/msohtmlclip1/01/clip_image038.png

–critical選項用於最佳化critical range範圍內的路徑,critical range不應超過時鐘週期的10%。最佳化次關鍵路徑可能有助於關鍵路徑。

預設情況下,所有路徑的critical range均為零。

42、下列關於DesignWare庫的描述正確的是?
a、compile_ultra之前需要額外設定庫變數

b、推斷綜合各種各樣的算術和關係運算子

c、推斷綜合各種各樣的標準IP,例如 FIFO,移位暫存器,分頻器

d、以上都是

B.compile_ultra自動設定庫變數; 非算術/關係IP不能由DC推斷,它們必須在RTL程式碼中例項化

43、下列關於optimize_registers的描述正確的是?
a、拆分/合併暫存器 - 不最佳化組合邏輯

b、可以增加pipeline中的暫存器級數

c、可能會增加違規,以減少暫存器數量

d、可能生成更快和更小的流水線設計

D.optimize_registers:不改變暫存器級數; 可能會增加

暫存器數量; 將利用正slack以減少暫存器數量;將執行增量編譯,以進一步最佳化組合邏輯

44、透過增加Design Compiler delay最佳化的的優先順序將不會修復任何邏輯DRC違規 - True or False?

False
Design Compiler將修復邏輯DRC違規,只要不增加負slack

45、在單時鐘設計中,預設情況下,Design Compiler不會自動建立任何path group - True or False?

False: DesignCompiler為時鐘建立至少一個path group。 如果有任何不受約束的路徑,

這些路徑會被分組為名為default的path group

46、預設情況下,path group內的最佳化會停止在關鍵路徑的最佳化上 - True or False?
True
當關鍵路徑無法進一步最佳化時,、預設情況下,次關鍵路徑不會

最佳化。 Design Compiler進入下一個path group的最佳化。

47、為什麼建議最佳化次關鍵路徑?
透過最佳化次關鍵路徑,可能能夠改善相關的關鍵路徑,最終會減少違規路徑,更容易透過Place&Route物理設計工具來修復

48、預設情況下被忽略最佳化的次關鍵路徑如何能夠得到最佳化
a)將它們放在自己的path group中

b)將criticalrange應用於create_clock

c)將weight應用於其path group

d)以上所有

A.
critical range適用於pathgroup,而不是時鐘約束;

應用weight沒有指示Design Compiler來最佳化否則被忽略的路徑 - 它只是對已經考慮最佳化的路徑施加更多的最佳化權重

49、透過將-weight選項應用於path group,它可能會惡化另一條路徑上WNS - 對錯嗎?True or False?

True,如果DesignCompiler可以降低整體的cost function的話

50、Topographical mode相比WLM模式,通常提供更好的速度/面積結果- True or False?

False。 Topographicalmode導致與實際佈局更好的時序相關性,不一定是更好的速度和/或面積結果。

51、在Topographical mode中包括物理約束
a)獲得更好的速度/面積最佳化

b)生成一個readyfor clock tree synthesis的設計

c)是可選的,但建議用,以提高與實際物理佈局更好的時序相關性

d)以上所有

C.雖然Topographicalmode確實執行了placement引擎,但這僅適用於

時序計算的目的。只有能夠儲存網表,用於Place&Route物理設計工具。

52、綜合後,已經完成對映的網表為什麼不能夠包含assign語句,assign語句可能是由什麼引起的?
佈局工具可能無法處理Verilog網表中assign語句

網表中assign語句可能是由多埠網路和三態網路導致

53、Design Compiler怎麼fix多埠網路導致的網表中含有的assign語句問題?
file:///C:/Users/wping/AppData/Local/Temp/msohtmlclip1/01/clip_image039.png

確保最終網表不包含assign語句,在綜合時,分隔多埠網路:

file:///C:/Users/wping/AppData/Local/Temp/msohtmlclip1/01/clip_image040.png

file:///C:/Users/wping/AppData/Local/Temp/msohtmlclip1/01/clip_image041.png

54、Design Compiler怎麼fix三態網路導致的網表中含有的assign語句問題?

DesignCompiler使用assign語句描述三態網路,我們需要將三態網路宣告轉換為wire宣告

file:///C:/Users/wping/AppData/Local/Temp/msohtmlclip1/01/clip_image042.png

相關文章