VCS使用SDF文件進行后仿反標


概述

從概念上來說,數字驗證包含兩方面的內容,一個是驗證功能,另一個是驗證時序。對應的仿真模型(不論是model,standard cell等)也不外乎這兩個部分,功能部分由邏輯,udp元件或gate構成,時序部分則包括了時序反標和時序檢查兩小塊。

平時我們所說的功能驗證,也就是前仿真,實現了對功能進行驗證的目的,時序被默認為理想情況,不包含延遲信息。門級仿真,也稱為后仿真,除了功能驗證外,最主要就是用來檢查時序是否滿足,有沒有時序違例的情形。

門級仿真根據網表不同,又可以分為綜合后仿真,以及pnr后仿真。前者是用綜合后的網表進行仿真,這時由於hold沒有修,所以會出現不少時序違例的情況,真正timing clean的網表是后端做完布局布線,修修補補完timing的網表,我們稱為pnr網表。

進行pnr網表的后仿真時,我們需要告知仿真工具cell與cell之間的延遲,D端到Q端的延遲,這里,我們就要請出主角SDF文件,閃亮登場!

  • 什么是SDF文件?

SDF(Standard delay file)文件是把布局布線過程中器件延時和線延時的信息保留下來,據此就可以在路徑時序分析時將整條路徑的時序計算出來,再判斷時序約束條件就能知道是否滿足時序要求了。

  • 如何反標SDF文件?

反標SDF文件有兩種方法,一種作為elaboration的選項指定,另一種是在bench中調用系統函數$sdf_annotate來完成。

  • 作為elaboration的選項

-sdfmin|typ|max:instance_name:file.sdf

如vcs-sdf min:top.i_test.:test.sdf

  • 使用系統函數$sdf_annotate

$sdf_annotate (“sdf_file”[, module_instance] [,“sdf_configfile”][,“sdf_logfile”][,“mtm_spec”] [,“scale_factors”][,“scale_type”]);

這里除了sdf_file必須給出外,其他參數可以使用默認值,如:

$sdf_annotate(“test.sdf”);

要說明下參數scale_type,sdf文件中時序信息都會由3個數字組成,分別對應是minimum,typical,maximum三種情形下的延遲(當然,有時候會只有minimum和maximum的情況,那么typical的延遲沒有就省略)

scale_type的可取值為:

  • FROM_MINIMUX
    選擇SDF文件中mininum timing

  • FROM_TYPICAL
    選擇SDF文件中typical timing

  • FROM_MAXIMUM
    選擇SDF文件中maximum timing

  • FROM_MTM
    系統默認

如何確認成功反標呢?

反標完成后,可以從log中看到這樣一句話:
在這里插入圖片描述
例子

這樣我們就反標完成了,接下來讓我們通過后仿波形,驗證下設計中延遲和sdf文件中延遲是否一致。

我們在i_test中例化了一個DLY4類型的名為i_delay的cell。
在這里插入圖片描述
從庫文件中我們能夠找到DLY4這個cell
在這里插入圖片描述
可以看到DLY4這個cell里面包含了一個buf,功能是將輸入A 延遲一點時間輸出到Y,這個module里面包含了specify塊,里面定義了A到Y的延遲。

那么,我們在后仿過程中會使用這里specify的延遲么?

先不回答這個問題,我們繼續往下看~

看下SDF文件中對DLY4如何定義的?
在這里插入圖片描述
從SDF文件中,我們可以看到對於上升沿而言,A到Y的延遲分別是0.225(min),0.226(max)

將SDF反標進后仿網表,通過仿真我們來驗證下A到Y的延遲值
在這里插入圖片描述
至此,我們完成了一個cell的反標,並驗證了后仿波形中信號的實際延遲和sdf中定義的相一致。

再回到剛才提出的問題,在反標SDF后,specify塊中定義的延遲值不再有用,取代的將是SDF文件中的延遲。

存在跨異步如何處理

1. 抽取SDF時,排除。
除去相應單元的 D setup time 和 D hold time。
2. 不導入SDF文件,仿真不帶SDF的netlist
+nospecify
Suppresses module path delays and timing checks in specifyblocks.
+notimingcheck
Suppresses timing checks in specify blocks.

+no_notifier
Disables the toggling of the notifier register that you specifyin
some timing check system tasks.
3. VCS提供了很好的方法:
vcs +optconfigfile+vcs_cfg
================vcs_cfg 的內容==========
instance {tb_top.U_TOP.U_CORE.U_Async} {noTiming}
=============================================
或者 vcs +optconfigfile+async.list
async.list內容:
instance {tb_top.U_TOP.U_CORE.U_Async} {noTiming}

注:0. 直接在vcs選項后添加optconfigfile及vcs_cfg即可;
1. vcs_cfg可以針對module、instance、tree起作用;
2. vcs_cfg可以添加的選項有noTiming、noSpecify、noIopath;

轉載:http://blog.sina.com.cn/s/blog_9c9b95910102yqqu.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM