邏輯綜合基本步驟

邏輯綜合基本步驟

綜合是將RTL轉換成門級網表(gate-level netlist)的過程。綜合過程分為轉換(translation),優化(optimization)、映射(mapping)。綜合工具先通過read命令將RTL代碼轉化成通用的布爾等式,即GTECH(generic technology)。然后執行compile命令,根據設計者施加的延時,面積等約束,對網表進行優化。最后將RTL網表映射到工藝庫上,成為一個門級網表。門級網表輸入到布局布線工具,由它產生GDSll文件,驗證正確后,交付芯片生產商制造。

綜合以時序路徑為基礎進行優化。DC在對設計做綜合時,其過程包括了進行靜態時序分析(static timing analysis STA)。DC使用內建的時序分析器把設計分解成多條時間路徑,然后根據設計的約束對路徑進行優化。如果某條路徑的延時大于約束的值,則時序違例。也可以用Prime Time作靜態時序分析。PT是獨立的時序分析器,主要用于整個芯片門級電路的靜態時序分析。

輸入文件:

RTL文件

工藝庫(.db)

約束文件

輸出文件:

門級網表,用于布局布線,時序后仿

標準延時文件SDF。用于時序仿真(后仿)

各種報告:timing report,area report, constrained report, clock report,Violation report等文件

一些庫的介紹說明:

a) 工藝庫(target_library):工藝庫是綜合后電路網表要最終映射到的庫,讀入的HDL代碼首先由synopsys自帶的GTECH庫轉換成Design Compiler內部交換的格式,然后經過映射到工藝庫和優化生成門級網表。工藝庫他是由Foundary提供的,一般是.db的格式。這種格式是DC認識的一種內部文件格式,不能由文本方式打開。.db格式可以由文本格式的.lib轉化過來,他們包含的信息是一致的。

b) 鏈接庫(link_library):link_library設置模塊或者單元電路的引用,對于所有DC可能用到的庫,我們都需要在link_library中指定,其中也包括要用到的IP。此處還要將search_path加進來,這樣才能找到.db文件,否則只會搜索當前目錄。

c) 符號庫 (symbol_library):symbol_library是定義了單元電路顯示的Schematic的庫。用戶如果想啟動design_analyzer或design_vision來查看、分析電路時需要設置symbol_library。符號庫的后綴是.sdb,加入沒有設置,DC會用默認的符號庫取代。

d) 綜合庫 synthetic_library:它包含了一些可綜合的與工藝無關的 IP。 dw_foundation.sldb 是Synopsys 提供的名為 Design Ware(important)的綜合庫,它包含了基本的算術運算邏輯、控制邏輯、可綜合存儲器等 IP,在綜合是調用這些 IP 有助于提高電路性能和減少綜合時間。

例: set synthetic_library dw_foundation.sldb

設計約束

約束的目的是模擬芯片真實的工作條件,并查看綜合后的門級網表能否在此條件下正確工作。綜合過程除了要滿足時序要求,還要考慮面積,功耗等因素。

常用約束命令:

時鐘約束:creat_clock,set_input_delay,set_output_delay,create_generated_clock

設計環境約束:set_driving_cell,set_load,set_wire_load_model,set_operating_conditions,

設計規則約束:set_max_fanout,set_max_capacitance,set_max_transition

報告命令有:report_clock,report_design,

清除約束命令有:reset_path,reset_design

設置面積目標命令:set_max_area

時鐘約束

時鐘約束決定了路徑的最大延時。

創建時鐘

creat_clock -period 10 -n clk [get_ports CLK]

考慮時鐘抖動(jitter)偏差(skew)

set_clock_uncertainty 0.1 clk //單位ns

考慮時鐘轉換時間(transition)。只需在版圖前考慮,版圖之后不考慮。

set_clock_transition 0.25 clk

考慮時鐘延時(latency)。


set_clock_latency -source 3 [get_clocks CLK]

set_clock_latency 1 [get_clocks CLK] //pre layout

set_propagated_clock [get_clocks CLK] // post layout

輸入端口延時

set all_in_ext_clk [remove_from_collection [all_inputs] [get_ports CLK]]

set clk_to_q 6

set_input_delay -max $clk_to_q -clock CLK $all_in_ext_clk

輸出端口延時

set_output_delay -max $clk_to_q -clock CLK [all_outputs]

設計環境約束

路徑延時由門單元(cell)延時和線(wire)延時決定。門單元延時由非線性延時模型(non-linear delay model)算出。半導體廠商提供的工藝庫中有一個二維表格,根據門單元的輸出負載輸入轉換時間找到門單元的延時和輸出轉換時間。線延時一般用線負載模型算出(wire load model)。

設計環境約束是為了精確的計算輸入/輸出路徑延時。對于輸入路徑,需要知道輸入轉換時間,對于輸出路徑,需要知道輸出負載。

輸入路徑

用set_drving_cell命令說明輸入端口由一個真實的外部單元驅動。

set_driving_cell -lib_cell FD1 -pin Q [get_ports IN1]

輸出路徑

使用set_load命令說明輸出端口上的外部電容負載

set_load 5 [get_ports OUT1] //在輸出端口上指定一個常數負載值

set_load [expt [load_of my_lib/AND/A] *3 ] [get_ports OUT1] //將工藝庫中門單元引腳的負載加載到輸出端口上

假設設計者不知道輸入驅動單元和輸出負載,可用下面規則產生負載預算(budget)

驅動單元為驅動能力弱的單元驅動

使用set_max_capacitance限制每一個輸入端口的輸入電容

估算輸出端口的驅動模塊數量

設計規則約束

設計規則由半導體廠商提供的工藝庫決定。這些規則按優先級排序包括,最大電容負載,最大轉換時間,最大扇出。如果設計中單元的驅動負載超過設計規則給定的最大電容負載,半導體廠商不能保證芯片能正常工作。

set_max_capacitance設置一個節點的最大電容。

從工藝庫找出設計中預期驅動器的最大允許電容負載

set DRIVE_PIN TECH_LIB/invla27/Y

set MAX_CAP [get_attribute $DRIVE_PIN max_capacitance] // 假設為3.6

在驅動器增加一些富裕量使DC不會滿載

set CONSERVATIVE_MAX_CAP [expr $MAX_CAP / 2.0] // 值為1.8

set_max_capacitance $CONSERVATIVE_MAX_CAP [get_ports IN1]

set_load 1.2 [get_ports IN1]

DC可以給輸入端IN1施加的最大內部負載是 1.8-1.2 = 0.6pF

set_max_transition設置一個節點的最大轉換時間

max_transition的值一般不要超過預期驅動器的最大允許轉換時間。

set_max_fanout設置一個節點的最大扇出值。注意這里的值不是值扇出數目,而是扇出負載的值。

例如,set_max_fanout 6 [get_ports IN]

get_attribute INV1/A fanout_load // if 0.25

get_attribute INV2/A fanout_load // if 3

則IN這個節點可以接24個INV1,或者兩個INV2

復雜時序約束

多時鐘同步設計

設計中所有的時鐘信號都來自同一個時鐘源。例如對200M時鐘進行2分頻,4分頻,分別送給A,B兩個模塊。A,B模塊有信號互相傳輸,對B模塊約束時,可先定義虛擬時鐘,用虛擬時鐘對輸入輸出信號進行約束。

creat_clock -period 10 -name CLKA

creat_clock -period 20 -name CLKB [get_ports CLKB]

set_input_delay -max 12 -clock CLKA [get_ports IN1]

set_output_delay -max 12 -clock CLKA [get_ports OUT1]

異步設計

異步電路時鐘來自于不同時鐘源,時鐘之間是不同頻率或同頻不同相的關系。對于穿過異步邊界的任何路徑,我們不需要對此做任何優化,因為不同時鐘的之間的相位關系是不確定的。使用set_false_path命令對這些路徑做優化。

set_false_path -from [get_ports CLKA] -to [get_ports CLKB]

該命令除了約束異步路徑,還用于約束“偽路徑”,物理上存在,但沒有數據傳輸。用report_timing_requirements -ignored命令報告無效路徑。要去掉任何不要的例外,可使用reset_path命令。

多時鐘周期

假設時鐘周期為10ns,加法器的延時約為6個時鐘周期,則加法器允許的最大延時是:

60-T_setup-T_uncertainty-T_clk_q

加法器的最小延時是:

T_hold+T_uncertainty

約束腳本如下:

create_clock -period 10 [get_ports CLK]

set_multicycle_path -setup 6 -to [get_pins C_reg[*]/D]

set_multicycle_path -hold 5 -to [get_pins C_reg[*]/D]

意思是在在第5個時鐘周期時檢查保持時間,在第0個時鐘周期時檢查建立時間。


門控時鐘

門控是低功耗設計的有效方法,常用帶鎖存器的門控電路:

DC能自動辨認門控時鐘電路,綜合時,根據下面的約束在門控時鐘電路中增加/刪除邏輯以滿足使能信號的建立和保持時間要求

set_clock_gating_check -setup 0.5 -hold 0.5 [current_design]

分頻電路和多路傳輸電路的時鐘約束

對于帶時鐘選擇的電路,可使用set_disable_timing命令或set_case_analysis命令:

create_clock ext_clk -period 10

create_clock test_clk -period 100

set_dont_touch_network [get_clocks ext_clk]

set_dont_touch_network [get_clocks test_clk]

set_disable_timing CLOCK_GEN/U1 -from 1 - to y

也可以使用set_case_analysis命令

set_case_analysis 0 [get_pins U1/sel]

對于分頻器產生的時鐘,使用create_generated_clock命令。

create_clock -period 50 [get_ports ext_clk]

create_generated_clock -name int_clk -source [get_pins CLOCK_GEN/U2/CP] -divide_by 2


原文鏈接:https://www.csdn.net/tags/OtDaEgzsNzAwNzUtYmxvZwO0O0OO0O0O.html

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,739評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,634評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,653評論 0 377
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,063評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,835評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,235評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,315評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,459評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,000評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,819評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,004評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,560評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,257評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,676評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,937評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,717評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,003評論 2 374

推薦閱讀更多精彩內容