DC實驗報告流程

2021-09-18 23:34:42 字數 4950 閱讀 3960

實驗一dc(design compile)的基本使用流程

design compiler是synopsys綜合軟體的核心產品。它提供約束驅動時序最優化,並支援眾多的設計型別,把設計者的hdl描述綜合成與工藝相關的門級設計;它能夠從速度、面積和功耗等方面來優化組合電路和時序電路設計,並支援平直或層次化設計。

design compiler的功能

利用design compiler,設計者可以:

● 利用使用者指定的門陣列、fpga或標準單元庫,生成高速、面積優化的asic;

● 能夠在不同工藝技術之間轉換設計;

● 探索設計的權衡,包括延時、面積和在不同負載、溫度、電壓情況的功耗等設計約束條件;

● 優化有限狀態機的綜合,包括狀態的自動分配和狀態的優化;

● 當第三方環境仍支援延時資訊和布局佈線約束時,可將輸入網表和輸出網表或電路圖整合在一起輸入至第三方環境;

自動生成和分割層次化電路圖

其完整的流程見圖-1。

● 圖 1

1) 建立設計環境

1)在工作目錄下建立db(存放dc綜合生成的專案db檔案)、lib_syn(存放庫檔案)、log(存放綜合程式執行報告)、netlist(存放綜合網表)、rpt(存放綜合結果的資料報告)、script(存放指令碼檔案)資料夾,並將.synpsys_dc檔案拷到工作目錄下。

2)dc啟動時,會自動搜尋工作目錄下的.synpsys_dc檔案, 根據檔案中的內容來設定綜合環境。因此,在啟動dc前,可以先修改.

synpsys_dc中庫檔案的路徑(也可以在進入dc後設定)。

set search_path "$search_path ../ref/db ./scripts" ……指明庫所在的路徑

set target_library "sc_max.db" ……目標庫

set link_library "* sc_max.db" ……鏈結庫

set symbol_library "sc.sdb" ……特徵庫

在上述環境建立所需的各類庫中,一般由生產商提供目標庫,庫中的各類cell用於邏輯對映,鏈結庫則包括一些已經做好的設計和子模組,還包括了當前設計的目標庫,門級網表例項化元件和單元都來自於它。

2) 讀入設計(以下命令都可在dc中的裡執行)

1)rtl**的讀入

design compiler使用hdl compiler將rtl級設計和門級網表作為設計輸

入檔案讀入。通過analyze和elaborate命令讀入rtl級設計,通過read_file或read命令讀入門級網表。design compiler支援所有主要的門級網**式。

如果你用read_file或read命令讀入rtl設計,等於實現了組合3analyze和elaborate命令的功能。

2)指明設計頂層

current_design命令

利用這個命令可設定任何乙個記憶體中的設計為當前設計:

dc_shell> current_design any_design

current design is 』any_design』

3)鏈結庫檔案

要完成乙個設計,它就必須與涉及到的庫元件和設計鏈結。對於每乙個子設計,必然有乙個基準,將子設計或元件與鏈結庫相連。這個過程稱為設計鏈結或基準分解。

design compiler執行下列步驟來完成基準分解:

(1)決定當前設計和它的層次引用哪些庫元件和子設計;

(2)搜尋鏈結庫,查詢這些引用;

(3)將設計與查詢到的引用鏈結。

design compiler首先搜尋local_link_library引數定義的庫和設計檔案,然後再搜尋link_library變數中定義的庫和設計檔案。

在乙個分層的設計中,design compiler只考慮頂層設計的區域性鏈結庫,而忽略與子設計相關的區域性鏈結庫。

design compiler使用第一找到的基準。如果它查詢到了具有相同名稱的額外的基準,將會產生乙個警告資訊來識別這個忽視的、重複的基準。如果design compiler沒有找到基準,警告資訊建議該基準不能被分解。

圖2.6顯示了在鏈結庫、單元和基準之間的鏈結過程,在這個例子裡,design compiler在library_2工藝庫里找到了庫元件nand2;在設計檔案裡找到了子設計multiplier。

圖2.6 分解基準

你可以手動地或自動地進行設計的鏈結。

(1)手動鏈結

用link命令來手動地鏈結設計。在開始鏈結過程前,link命令移走現有的鏈結。

(2)自動鏈結

下列的dc_shell命令自動鏈結設計:

compile

create_schematic

group

check_design

report_timing, report_constraints, and other report_* commands

compare_design

當執行自動鏈結時,它並不移走現有的鏈結。自動鏈結過程只工作於未鏈結的元件

(4)設計唯一例項化

uniquify

3) 定義時序約束、面積約束和綜合環境約束

1) 設定時鐘約束

create_clock -period 10 [get_ports clk],其中「get_ports clk」為時鐘的**,「-period 10」為時鐘的週期。通過時鐘定義約束了暫存器到暫存器之間的延遲。見圖4。

圖 4set_dont_touch_network [get_clocks clk]

一般需要告訴綜合器不要對時鐘網路進行緩衝驅動,這一工作將在後續的版圖布局佈線中進行。

set_clock_uncertainty –setup 0.3 [get_clocks clk]

set_clock_uncertainty –hold 0.3 [get_clocks clk]

這兩句是設定時鐘的建立時間和保持時間。

set_clock_latency -rise 3 [get_clocks clk]

set_clock_latency -fall 3 [get_clocks clk]

這兩句是設定時鐘的上公升時間和下降時間。

set_input_delay -max 0.6 -clock clk [get_ports 「a」]

set_output_delay -max 0.8 -clock clk [get_ports 「b」]

這兩句是設定特定埠「a」(或「b」)的輸入延時(或輸出延時)。如圖5。

圖 52)設定面積約束

set_max_area 0,規定最大面積。

3)設定輸出負載

set_load 5 [get_ports out1]

這句定義了輸出負載為5,當不知道輸出負載的值為多少時,可以用以下命令。

set_load [load_of ssc_core_slow/an2/a] [get_ports out1] 或

set_load [expr] [get_ports out1]

前一句是指out1的輸出負載等同於a,後一句是指out1的輸出負載等同於a*2.2。

4)設定模組的輸入驅動強度資訊

set_driving_cell -lib_cell nd2 [get_ports in1],綜合工具需要知道輸入的驅動能力來計算輸入的變化時延,見圖6。

圖 65)設定綜合的操作條件

set_operating_condition best 或

set_operating_condition slow

6)設定佈線延時

set_wire_load_model 「tc6a120m2」,通過設定線載模型來設定佈線延時。

4) 編譯和優化

選擇編譯策略

你可以用來優化層次化設計的兩種基本編譯策略被稱為自頂向下和從下上。

在自頂向下的策略裡,頂層設計和它的子設計一起進行編譯。所有的環境和約束設定都根據頂層設計來定義。因此,它會自動的考慮內部模組的依賴性。

但對於大型設計,這種方法並不實用,因為所有的設計必須同時貯存在記憶體裡。

(1) 在從下到上的策略裡,分別對子設計進行約束和編譯。在成功編譯後,這些設計都被賦予乙個dont_touch引數,防止在隨後的編譯過程中對它們進行進一步的改變。然後這些編譯過的子設計組合成更高層次的設計,再進行編譯。

編譯過程一直持續到頂層設計被綜合。由於design compiler不需要同時將所有未編譯的子設計裝載進記憶體,這種方法允許你編譯大型設計。然而,在每乙個階段,你必須估計每個內部模組的約束,更有代表性的是,你必須不停地編譯、改進那些估計,直到所有的子設計介面都是穩定的。

每乙個策略都有其優點和缺點,這取決於你設計的特殊性和設計目標。你可以選擇任意乙個策略來進行整個設計,或者混合使用,對每乙個子設計採用最合適的策略。

(2) 優化設計

利用compiler命令啟動design compiler的綜合和優化程序。有幾個可選的編譯選項。特別的,map_effort選項可以設定為low、mediu或high。

初步編譯,如果你想對設計面積和效能有乙個快速的概念,將map_effort設定為low;預設編譯,如果你在進行設計開發,將map_effort設定為medium;當在進行最後設計實現編譯時,將map_effort設定為high。通常設定map_effort為medium。

1) 檢查設計層次關係並進行單元對映

check_design

compile

2) 修復hold時序並重新編譯

set_fix_hold [get_clocks clk]

compile –only_hold_time

五、匯出分析報告

使用report_lib命令來報告庫中的內容。report_lib命令能夠報告下列資料:庫單位;操作條件;線形負載模型和單元

1、 檢查整體設計匯出報告

2、 匯出設計面積報告

3、 匯出設計違例報告

4、 匯出setup時序違例的詳細報告

5、 匯出hold 時序違例的詳細報告

六、匯出設計

write_lib命令能夠以synopsys資料庫、edif和vhdl格式來儲存乙個編譯過的庫。

實驗報告電路實驗報告要求

三一文庫 報告范文 實驗報告 電路實驗報告要求 同學您好 電路實驗課已經結束,請按題目要求認真完成實驗報告,並要仔細檢查一遍,以免退回,具體要求如下 一 繪製電路圖要工整 選取合適比例,元件引數標註要準確 完整。二 計算題要有計算步驟 解題過程,要代具體資料進行計算,不能只寫得數。三 實驗中測試得到...

倉儲流程軟體模擬實驗報告

實驗報告 一 實驗目的 1 熟悉倉儲管理 入庫 在庫 出庫管理 的流程 2 掌握入庫作業流程 入庫訂單錄入 入庫作業排程 貨位分配 排程人力 裝置等資源 入庫作業 驗收 理貨 上架等指令 作業反饋 庫存查詢等 3 掌握在庫作業流程 移庫作業 流通加工 盤點作業 庫存凍結等 4 掌握庫存優化方法 ab...

實驗報告 高中化學實驗報告

1 1 稱取4gnaoh,5.85gnacl 2 用量筒量取適量蒸餾水 3 置於燒杯中攪拌溶解冷卻 4 用玻璃棒將液體引流到1l的容量瓶中 5 再用蒸餾水洗燒杯,再引流到容量瓶中 6 用膠頭滴管定容 7 蓋上容量瓶蓋子,上下搖晃,混合均勻即可2 1 驗漏 2 用標準液和待測液潤洗滴定管 3 取高錳酸...