後仿速記

最近又跟別人一起debug後仿的幺蛾子,簡單梳理一遍,供日後索引。

我們跑功能後仿的目的主要有以下幾種:

1. 驗證網表功能的正確性。

2. 驗證STA收斂後網表的時序正確性。

3. 功耗分析;

4. IRDROP分析;

 

我們最早可以在芯片綜合出第一版網表、formal verification pass之後,就開始第一輪後仿的調試。

這時的後仿使用DC之後ICC之前的網表,不具備clock tree信息,更別提反標時序信息了。所以這時的後仿僅用於調通芯片的後仿flow、初步驗證網表功能的正確性、以及非常粗略的各IP模塊功耗預估(因爲沒有clock tree信息,這時clock上的功耗會偏低很多)。

這一輪需要在vcs仿真的編譯選項中加入+notimingcheck,使用的stdcell.v文件頭加+functional+聲明,從而關閉stdcell中的delay,全部用0延時。

(以前也有一些foundary提供的庫文件,我們會手動加上一個非常小的0.001ns的delay)

如果RTL設計中存在不受復位控制的同步邏輯,還需要用DC或PT從網表中抽取所有寄存器類型和列表,對寄存器Q/QN/QB端做”force -deposite xxx.Q 初值“操作,防止不受復位控制導致的X態傳遞。使用到SRAM的邏輯,如果代碼風格好,不太需要對SRAM Q端做操作。如果代碼風格不太好,那麼穩妥起見,SRAM的Q/QA/QB也給force一下初值會比較安全。

如果同步邏輯佔比例較多,那麼最好force 0/force 1/force random值的case都跑一下,對功能覆蓋的更全面。有些代碼風格不太好的邏輯,會因爲隨機初值導致意料之外的錯誤發生。這種靠前仿是查不出來的(前仿加隨機的initreg0/1/x/z也許可以),除了後仿就只能靠代碼review/強制統一代碼風格來保證了。

加force需要在vcs編譯選項中加-debug_all, -P celllist.tab, 要在simv後面加-ucli -do force.do, force.do中執行source force.ucli和run兩行tcl命令。

當然vcs編譯選項中也有自帶的initreg和initmem選項,不過這倆對於網表是否還會起作用呢?這個我還沒有試過哈:)

 

綜合出來的網表給到後端、後端跑完第一輪之後,返回網表和starrc提取出的各corner spef文件,有這些作爲輸入,就可以開始第二輪後仿調試了。

這時的後仿已經有完整clock tree信息以及反標時序信息,但STA未必收斂,可能還帶着很多violation。所以這時的後仿也僅用於調通芯片反標後仿flow、驗證反標信息的正確性,並且可以大致看一下clock tree上的功耗。

在pt中讀入icc輸出網表和starrc輸出spef文件,通過"write_sdf"命令寫出各corner對應的*.sdf文件。該文件作爲驗證的輸入。

編譯的選項摘抄了一下(http://blog.sina.com.cn/s/blog_bc93ac450102x0gh.html):

這一輪因爲反標延時的violation大概率還有很多,所以VCS中依然打開+notimingcheck。同時需要添加+neg_tchk -negdelay等選項。

 

針對功耗分析,驗證至少會構造2個定向測試用例,一個最大功耗模式,一個最小功耗模式。把後仿產生的fsdb文件轉成vcd。vcd作爲pt的輸入,可以得到芯片在各corner下的功耗數據。

用最大功耗模式下的vcd作爲Redhawk的輸入,可以得到芯片的IRDROP分析數據。

 

STA clean後,會跑最後一輪後仿,進行最終的功能check、反標時序check、得到最終的功耗和IRDROP數據。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章