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