后仿
相對于RTL仿真,門級仿真占用的計算資源雖然很多,但是在靜態時序檢查(STA)工具普遍應用之前,帶時序的動態門級仿真幾乎可以說是唯一的timing sign-off手段了。
那么在STA工具已經成熟的現在,門級仿真還有存在的必要嗎?為什么有些公司的設計流程中還包括門級仿真這個必需的步驟呢?
可能存在以下幾個原因:
檢查時序約束(SDC)的完備性— 防止約束的遺漏
檢查異步電路的時序—STA工具無能為力,異步處理部分在SDC約束文件中做的是fath_path處理,所以這部分時序是否滿足,STA工具并不會檢查也不會報出violation;
檢查網表的完備性—防止綜合、布局布線過程中的意外
為后續流程如功耗(Power)分析、壓降(IR Drop)分析提供波形—更準確
測試向量的仿真—只有門級網表才包含掃描鏈,DFT邏輯的插入是否導致功能出現問題;
門級仿真分為兩種:
一種是不帶時序反標的門級仿真(零延時仿真,綜合的網表就可以做,因為在布局布線之前,所以也叫前仿,這時由于hold沒有修,所以會出現不少時序違例的情況);
一種是帶時序反標(back-annotation)的門級仿真(布局布線之后的仿真,也叫后仿,這時的網表是后端做完布局布線,修補完timing的網表);
進行PR網表的后仿真時,我們需要告知仿真工具cell與cell之間的延遲,D端到Q端的延遲,這里就需要SDF文件!
前仿選項
+nospeicy
在仿真時忽略庫文件中指定的延時。
+delay_mode_zero
將標準庫單元中定義的延時替換為0。testbench中的 #延時也都被消除。
+notimingcheck時序檢查開關,比如setup/hold/width檢查等等,如使用了該option,則仿真時不檢查時序,行為類似于RTL仿真。
在PR未結束,sdf反標文件還沒準備好時,可用該選項忽略延時,可用于功能性的粗略檢查。
但真正跑后仿真時,不可使用該選項,否則仿真有效性大大降低。
后仿選項
+sdfverbose
顯示所有的sdf反標錯誤;
+no_notifier
可以關掉時序檢查產生的不定態。通過這個命令參數可以使時序檢查任務中檢測到時序違例后,不影響其參數列表中的notifier的值,從而避免了notifier變化引起udp輸出不定態的情況,該命令僅對notifier的值有影響,對于時序檢查任務檢測到的時序違例不產生任何影響;
+neg_tchk若要使用負延時檢查,在編譯設計時必須包含+neg_tchk選項。如果省略此選項,VCS將所有負延遲更改為0。
-negdelay
用于SDF文件中有負延遲,如果省略此選項,VCS將所有負延遲更改為0。
sdf文件反標
方法一
在makefile中調用,使用如下命令:
vcs+neg_tchk-negdelay-sdfmin|typ|maxfile.sdf
啟用SDF反標。在file.sdf中指定的最小值、類型或最大值中的一種,在實例instance_name上進行反標。
方法二 $sdf_annotate
使用$sdf_annotate將SDF文件反標到網表中:
$sdf_annotate("sdf_file"[,module_instance][,"sdf_configfile"][,"sdf_logfile"][,"mtm_spec"] [,"scale_factors"][,"scale_type"]);
sdf_file:指定指向SDF文件的路徑;
module_instance:調用$sdf_annotate模塊實例的范圍。
sdf_configfile:指定SDF配置文件。
sdf_logfile:指定SDF log文件,可以使用+sdfverbose顯示所有的sdf反標錯誤。
mtm_spec:指定哪一種延遲類型,通常有三種min:typ:max,它的可能值是"MINIMUM", "TYPICAL", "MAXIMUM", or "TOOL_CONTROL"(默認值)。在仿真器讀入SDF的時候,要指定使用哪一組。避免出現指定的組的時序信息不存在的情況。
scale_factors:指定min:typ:max的縮放因子,默認為三個正實數“1.0:1.0:1.0”。
scale_type:指定SDF文件中在縮放前使用的延遲值。它可能的值是“FROM_TYPICAL”、“FROM_MIMINUM”、“FROM_MAXIMUM”和“FROM_MTM”(默認);
在tb中加載sdf文件
`ifdefSDF initial begin $sdf_annotate("../../rtl/post_sim/file.sdf",tb,,"sdf.log",); end `endif
確認成功反標
打印出Doing SDF annotation ...... Done
其他
初始化寄存器的值
在vcs編譯選項里添加+vcs+initreg +random隨機化賦初值,可用于對初始狀態是x的寄存器。
導出VCD文件
VCD是不壓縮的文本格式,兼容性好,缺點是文件太大。因此后仿先寫出高壓縮比的FSDB文件,再轉成VCD。可指定轉換起止時間、結束時間。這樣一次后仿,就可以為不同的應用生成不同的VCD文件。
FSDB轉VCD的工具通常在Verdi的安裝目錄,用法:
fsdb2vcdxxx.fsdb-oxxx.vcd-bt100ns-et200ns
其中,-bt是begin time,-et是end time;
關閉某些寄存器的時序檢查notiming.list
后仿過程中可能有一些不必要或者不想檢查的時序,尤其是跨時鐘域的兩級同步的第一級DFF出現所謂的時序違例,這是一種假的時序違例所以通常不關心它們是否有時序違例。
instance{tb.U_TOP.reg}{noTiming};
VCS +optconfigfile+notiming.list
可以用上面方法加載這個文件,這樣在后仿過程中將不對這些寄存器做時序檢查,避免不必要的時序問題而引起X態傳遞。
Note:
1.后仿開始前,一定要把詳細的SDF反標報告打印出來仔細檢查。需要把錯誤全部解決掉,警告視情況要解決大部分。帶時序的后仿,一定要注意仿真器是否關閉了notimingcheck和nospecify的選項。如果有nospecify,那么SDF中的時序信息就反標不到仿真模型中(仿真模型的時序類型定義在specify block中);如果有notimingcheck,那么后仿過程中就不檢查時序違例,后仿就失去了最大的意義。
2.帶時序的后仿開始階段,建議dump一些波形出來,看看波形上的延時和SDF中的延時信息是否保持一致,這有助于對反標過程的理解和后仿整體進度的把握。
-
芯片
+關注
關注
454文章
50460瀏覽量
421971 -
仿真
+關注
關注
50文章
4048瀏覽量
133431 -
RTL
+關注
關注
1文章
385瀏覽量
59710 -
異步電路
+關注
關注
2文章
48瀏覽量
11088 -
時序約束
+關注
關注
1文章
115瀏覽量
13409
原文標題:后仿
文章出處:【微信號:芯司機,微信公眾號:芯司機】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論