驗證其實是一個“證偽”的過程,從流程到工具,驗證工程師的終極目的都只有一個:發(fā)現(xiàn)所有BUG,或者證明沒有BUG,以保證芯片功能性能的正確性和可靠性。
驗證環(huán)節(jié)對于一顆芯片的重要性也是不言而喻的:
·從項目周期來說,功能驗證在芯片的整個設(shè)計周期中占用時間最多,大概要占到70%左右。
·從項目成本來說,驗證一顆芯片大概會占硬件開發(fā)總成本的50%。
接下來就來聊聊IC驗證的流程和工具。
理解DUT
驗證工程師需要深入理解芯片Spec,包括但并不限于:了解架構(gòu)、數(shù)據(jù)流向、基本功能、接口、IP、協(xié)議、寄存器定義等。
對Spec了解越詳細,之后的驗證工作就能夠越充分。
使用工具:查看Spec使用最基礎(chǔ)的Office軟件即可
制定驗證計劃
對于芯片項目的Boss或者負責(zé)人來說,一份完整的驗證計劃需要包含:驗證策略方法、人力資源調(diào)配、項目進度評估、風(fēng)險評估等多項內(nèi)容。
對于驗證工程師來說,就應(yīng)該考慮功能測試點、驗證層次、驗證方法和驗證覆蓋率等技術(shù)層面為主的內(nèi)容,還需要在搭建驗證環(huán)境之前充分review驗證計劃。
制定驗證方法策略
一般會按照大的功能模塊或數(shù)據(jù)流向?qū)UT進行劃分,比如需要確定是在module/sub system/chip system哪個level去做驗證。
搭建驗證平臺
根據(jù)驗證方案來編寫驗證環(huán)境,一般會使用uvm平臺,python腳本輔助來搭建環(huán)境,并通過冒煙測試來確定驗證平臺是否完善。
從時間線上來說,搭建驗證平臺可以和提取驗證點并行進行。
提取測試點
測試點被驗證工程師認為是“驗證的圣經(jīng)”,因為這是諸多工作開展的出發(fā)點和落腳點。一些公司會把這個步驟稱作VO(verification objective),也有的公司叫做Test Point。
驗證工程師在分解測試點時需要注意完備性、低耦合以及無歧義,然后將測試點羅列在Excel表格中。
理想情況下,驗證工程師拿到測試點list和DUT之后,就可以寫testcase進行驗證了。
另外,在環(huán)境搭建、驗證執(zhí)行、用例調(diào)試、覆蓋率分析等階段也會不斷對測試點進行修正和增補。
執(zhí)行驗證
根據(jù)提取出來的測試點,添加testcase在驗證平臺上去進行測試,這是一個需要反復(fù)迭代、反復(fù)優(yōu)化的過程。
這個過程中會使用到vcs/xrun進行仿真、makefile編輯腳本、verdi/ncsim查看波形,并且要盡可能確保每個測試點的功能是否實現(xiàn)正確。
收集驗證覆蓋率
需要收集功能覆蓋率和代碼覆蓋率,增補用例,以確保覆蓋率達到100%。一般可以通過imc或Verdi來查看覆蓋率報告。
一些規(guī)模比較大的IC設(shè)計公司,會設(shè)置專門的崗位來收集驗證覆蓋率。
完成驗證報告
驗證報告通常需要包含checklist、覆蓋率分析、難點覆蓋情況等內(nèi)容。
上述環(huán)節(jié)概述了驗證工程師比較主要的工作流程。
但其實驗證是貫穿著整個IC設(shè)計流程的,在芯片開發(fā)過程中只要發(fā)現(xiàn)問題或缺陷,就需要進行修正和改進,直到設(shè)計符合預(yù)期的要求為止。
從提取驗證點、編寫驗證方案到搭建驗證環(huán)境再到具體驗證執(zhí)行環(huán)節(jié)的Debug,每一步都需要經(jīng)驗的加持。
入行兩三年的工程師和十年經(jīng)驗的工程師,在細節(jié)方面的把控是完全不同的。
而驗證,恰好是一個細節(jié)為王的崗位。這也就是為什么ic驗證工程師越老越吃香的原因之一。
工作特性要求驗證工程師要做的并不僅僅只是用EDA工具進行仿真驗證,而是從系統(tǒng)架構(gòu)到應(yīng)用層面對自己所負責(zé)驗證的模塊進行深入了解。
既要能夠如驗證計劃要求的那樣工作在最高層,也要能夠在最底層植入錯誤進行自我檢查。
現(xiàn)在每個摳細節(jié)的一小步,都是積累經(jīng)驗一大步。與ICer共勉!