數字asic流程實驗(六) 靜態時序分析&等效性檢驗&后仿真
1.靜態時序分析
PrimeTime(以下簡稱PT)是Synopsys的一個全芯片、門級靜態時序分析工具,是當今大型芯片設計的設計和分析流程的重要組成部分。
時序分析手段可分為動態時序分析(Dynamic Timing Simulation)和靜態時序分析(Static Timing Analysis)
動態時序分析是通常的仿真,因為不可能產生完備的測試向量,覆蓋門級網表中的每一條路徑。因此在動態時序分析中,無法暴露一些路徑上可能存在的時序問題。動態時序驗證在驗證功能的同時驗證時序,需要輸入向量作為激勵。隨着規模增大,所需要的向量數量以指數增長,驗證所需時間占到整個設計周期的50%,且這種方法難以保證足夠的覆蓋率,因而對片上系統芯片設計已成為設計流程的瓶頸。
靜態時序分析是采用窮盡分析方法來提取出整個電路存在的所有時序路徑,計算信號在這些路徑上的傳播延時,檢查信號的建立和保持時間是否滿足時序要求,通過對最大路徑延時和最小路徑延時的分析,找出違背時序約束的錯誤。
動態時序分析的優點為:
較為精確,可以進行功能驗證
缺點為:
分析速度慢,需要輸入矢量,可能會遺漏關鍵路徑
靜態時序分析的優點為:
分析速度快,對所有路徑檢查,不會遺漏關鍵路徑
缺點為:
不能驗證功能
本次實驗實驗采用PrimeTime進行靜態時序分析,再通過Modelsim進行后仿真驗證電路功能,從而實現對電路的全面檢驗。
通過編寫TCL腳本的方式操作PrimeTime,本次實驗對布局布線(layout)前的門極網表電路(由DC綜合得到)和布局布線后的門極網表電路(由ICC布局布線后導出)進行靜態時序分析。
DC綜合后的門級網表的靜態時序分析TCL腳本的內容如下:
set search_path "../../lib/logic"
set link_path "* slow.db" #讀入標准元件庫
set active_design cic_filter
read_verilog "../../dc/outputs/cic_filter_post_dc.v" #讀入DC綜合后的門級網表
current_design $active_design
#定義設計環境和設置設計約束的參數必須與DC綜合腳本文件內容一致!!!
set_wire_load_model -name "smic18_wl10"
set_wire_load_mode top
create_clock -period 156 -waveform {0 78} [get_ports clk] -name clk
create_generated_clock [get_pins div/clk_div] -source [get_ports clk] -divide_by 64 -name clk_div
set_ideal_network [list clk clk_div] -no_propagate
set_clock_latency 2.5 clk
set_clock_transition 0.3 clk
set_clock_uncertainty 1.5 -setup clk
set_clock_uncertainty 0.3 -hold clk
set_drive 0 [list clk rst_n]
set_driving_cell -lib_cell NAND2X1 in
set_load 2 [all_outputs]
set_input_delay 35 -clock clk [list in rst_n]
set_output_delay 35 -clock clk_div [all_outputs]
report_constraint -all_violators
report_timing -to [all_registers -data_pins]
report_timing -to [all_outputs]
#exit
#start_gui
ICC布局布線后導出的門級網表的靜態時序分析TCL腳本的內容如下:
set search_path "../../lib/logic"
set link_path "* slow.db" #讀入標准元件庫
set active_design cic_filter
read_verilog "../../icc/outputs/cic_filter_post_layout.v" #讀入ICC布局布線后的門級網表
current_design $active_design
#set_wire_load_model -name "smic18_wl10"
#set_wire_load_mode top
#read_sdf "/home/yhd/yjx/shiyan/icc/shiyan_post_layout.sdf"
read_parasitics "../../icc/cic_filter.spef.max" #讀入寄生參數文件
#定義設計環境和設置設計約束的參數必須與DC綜合腳本文件內容一致!!!
create_clock -period 156 -waveform {0 78} [get_ports clk] -name clk
create_generated_clock [get_pins div/clk_div] -source [get_ports clk] -divide_by 64 -name clk_div
set_propagated_clock [get_clocks clk]
set_drive 0 [list clk rst_n]
set_driving_cell -lib_cell NAND2X1 in
set_input_delay 35 -clock clk [list in rst_n]
set_output_delay 35 -clock clk_div [all_outputs]
set_load 2 [get_ports out]
report_constraint -all_violators
report_timing -to [all_registers -data_pins]
report_timing -to [all_outputs]
#exit
#start gui
1.打開虛擬機,在/home/crazy/Desktop/experiment/pt/pt_pre_layout 下右鍵Open in terminal
2.在terminal中依次輸入
ic
pt_shell -f pt_pre_layout.tcl
執行TCL腳本
3.檢查結果是否存在報錯(如果出錯會terminal中會打印0並輸出報錯信息),如果存在報錯則根據報錯信息返回修改腳本,或修改Verilog並重新進行DC綜合
此外還需要確保所有的slack均大於0
4.同理至/home/crazy/Desktop/experiment/pt/pt_post_layout 下運行腳本並觀察結果,如果出現報錯則返回修改腳本或重新進行ICC布局布線步驟
2.等效性檢驗
Formality是Synopsys的形式驗證工具,你可以用它來比較一個修改后的設計(如ECO)和它原來的版本,或者一個RTL級的設計和它的門級網表,再或者綜合后的門級網表和做完布局布線及優化之后的門級網表在功耗上是否一致。
所謂形式驗證,就是通過比較兩個設計在邏輯功能上是否等同的方法來驗證電路的功能。這種方法的優點在於它不僅提高了驗證的速度,可以在相當大的程度上縮短數字設計的周期,而且更重要的是,它擺脫了工藝的約束和仿真testbench的不完全性,更加全面地檢查了電路的功能。
同樣通過編寫TCL腳本的方式操作Formality,本次實驗分別對DC綜合前的Verilog電路與綜合后的門級網表、ICC布局前后的門極網表進行等效性檢驗。
對DC綜合前的Verilog與綜合后的門級網表進行等效性檢驗的TCL腳本內容如下:
start_gui
set search_path "../../src/ ../../dc/outputs" #設置搜索路徑
#讀入Verilog電路
create_container ref
read_verilog cic_filter.v
read_verilog divider64.v
set_top cic_filter
set_reference_design ref:/WORK/cic_filter
#link $ref
read_verilog -c impl -netlist cic_filter_post_dc.v #讀入DC綜合后門級網表
read_db ../../lib/logic/slow.db #讀入標准元件庫
set_top cic_filter
set_implementation_design impl:/WORK/cic_filter
current_design $impl
verify #執行比較
對ICC布局前后的門極網表進行等效性檢驗的TCL腳本內容如下:
create_container ref
read_verilog -netlist "../../dc/outputs/cic_filter_post_dc.v" #讀入DC綜合后門級網表
read_db "../../lib/logic/slow.db" #讀入標准元件庫
set_top cic_filter
set_reference_design ref:/WORK/cic_filter
read_verilog -c impl -netlist "../../icc/outputs/cic_filter_post_layout.v" #讀入ICC布局布線后門級網表
read_db "../../lib/logic/slow.db" #讀入標准元件庫
set_top cic_filter
set_implementation_design impl:/WORK/cic_filter
current_design $impl
verify #執行比較
1.打開虛擬機,在/home/crazy/Desktop/experiment/fm/fm_pre_layout 下右鍵Open in terminal
2.在terminal中依次輸入
ic
fm_shell -f fm_pre_layout.tcl
執行TCL腳本
3.檢查結果是否存在報錯(如果出錯會terminal中會打印0並輸出報錯信息),如果存在報錯則根據報錯信息返回修改腳本,或修改Verilog並重新進行DC綜合
4.同理至/home/crazy/Desktop/experiment/fm/fm_post_layout下運行腳本並觀察結果,如果出現報錯則返回修改腳本或重新進行ICC布局布線步驟
3.后仿真
現開始進行Modelsim后仿真,對Modelsim操作不熟悉的可以參考第三章的前仿真流程。
1.新建Modelsim工程,並將ICC布局布線后導出的門極網表、ICC布局布線后導出的時序描述文件、前仿真所使用testbench、代工廠提供的smic18.v拷貝到工程目錄下
2.將門極網表,testbench,smic18.v導入到Modelsim中並編譯
3.Simulate ----> Start Simulation,在Design標簽下,展開work后選中testbench,在Optimization Options標簽的Options表情下選擇Disable optimizations(-O0)。接着,在SDF標簽下點擊Add,添加時序描述(.sdf)文件,並在Apply to Region中填寫/testbench/cic,最后在SDF Options中勾選兩個選項
4.開始仿真,將Out信號添加到Wave窗口觀察,可以看到量化后的正弦波信號,說明布局布線后的電路功能正確。由於實際工藝的非理想性,對比前仿真的波形可以在后仿波形中看到明顯的毛刺
至此后仿真完成。數字asic流程實驗全部結束,感謝你的閱讀。
4.參考資料
《PrimeTime User Guide》
https://www.jianshu.com/p/7eac9841f814
https://blog.csdn.net/weixin_43755290/article/details/105097210