芯片驗證為什么那么重要?
IC行業(yè)是智力密集、技術(shù)密集型的行業(yè),更是高投入、高風(fēng)險的行業(yè),做一款芯片僅僅是開模的費用就是百萬起。
為了保證芯片功能的正確性和完整性,就需要驗證工程師給設(shè)計或者實現(xiàn)過程提供迭代的關(guān)鍵意見。
驗證在芯片設(shè)計環(huán)節(jié)乃至全產(chǎn)業(yè)鏈中的位置都是舉足輕重的。
驗證崗位兼?zhèn)?a class="article-link" target="_blank" href="/tag/%E7%A1%AC%E4%BB%B6/">硬件和軟件技能點,對于學(xué)歷專業(yè)相對比較友好,入行之后的進(jìn)步空間和學(xué)習(xí)上限仍然很充足。
但是最近芯易君卻發(fā)現(xiàn)了一個大問題!
不少同學(xué)學(xué)了幾個月,知識點掌握了、工具會用了、項目做過了、代碼也能寫,但是卻根本不會面試!
面試官隨機提出的問題,只能含含糊糊答出一部分,根本經(jīng)不起深問和推敲。
正值“彎道超車”的好時機!大家不妨先刷一波高頻、經(jīng)典的面試題。
IC修真院為大家送上干貨!特此整理20道數(shù)字IC驗證常見面試/筆試題目,并附上參考答案。
01選擇題
1. 下列關(guān)于代碼覆蓋率描述錯誤的是?
A.代碼覆蓋率包括語句覆蓋率
B.代碼覆蓋率包括條件覆蓋率
C.代碼覆蓋率包括功能覆蓋率
D.代碼覆蓋率到達(dá)百分百說明代碼bug已消除
2. 關(guān)于亞穩(wěn)態(tài)的描述錯誤的是?
A.多用幾級寄存器打拍可以消除亞穩(wěn)態(tài)。
B.亞穩(wěn)態(tài)是極不穩(wěn)定的,理論上來講處在亞穩(wěn)態(tài)的時間可以無限長。
C.亞穩(wěn)態(tài)穩(wěn)定到0或者1,是隨機的,與輸入沒有必然的關(guān)系。
D.如果數(shù)據(jù)傳輸中不滿足觸發(fā)器的建文時間Tsu和保持時間Th,可能產(chǎn)生亞穩(wěn)態(tài)。
3. Verilog語言中,下面哪些語句不可被綜合?
A.#delay語句
B.initial語句
C.always語句
D.用generate語句
4. 下列關(guān)于verilog的描述正確的是?
A.Y=a+b; 屬于阻塞賦值語句,執(zhí)行該語句時,先計算 a+b的值,然后更新 y值,在此過程中,不能運行其他語句
B.Generate, for, function語句可綜合
C.如果A=1‘b1,B=1`b0,F=A&~B|B&~A||B,則F=1’b1
D.如果A=4‘hb,則^A=1’b1
5. 判斷電路是否存在競爭冒險的方法有哪些呢?
A.代數(shù)法
B.卡諾圖法
C.實驗法
D.觀察法
答案與解析:
1.?CD。解析:代碼覆蓋率和功能覆蓋率是獨立的兩種覆蓋率,代碼覆蓋率100%只能表明代碼經(jīng)過了充分的執(zhí)行,但是代碼中是否有bug以及bug是否會被發(fā)現(xiàn),取決于驗證環(huán)境中的監(jiān)測點是否監(jiān)測了關(guān)鍵信號以及對這些信號的判斷是否正確。
2.?A。解析:亞穩(wěn)態(tài)不能被消除,只能降低其對后級電路的影響。
3. A。解析:產(chǎn)生的代碼所有綜合工具都不支持的結(jié)構(gòu) time,defparam,$finish,fork,join,initial,delays,UDP,wait。4.?ABCD。
5. A。
02簡答題
6.?簡述UVM的工廠機制
Factory機制也叫工廠機制,其存在的意義就是為了能夠方便的替換TB中的實例或者已注冊的類型。一般而言,在搭建完TB后,我們?nèi)绻枰獙B進(jìn)行更改配置或者相關(guān)的類信息,我們可以通過使用factory機制進(jìn)行覆蓋,達(dá)到替換的效果,從而大大提高TB的可重用性和靈活性。
要使用factory機制先要進(jìn)行:
將類注冊到factory表中;
創(chuàng)建對象,使用對應(yīng)的語句 (type_id::create);
編寫相應(yīng)的類對基類進(jìn)行覆蓋。
7. OPP(面向?qū)ο螅┑奶匦裕?/strong>
封裝:通過將一些數(shù)據(jù)和使用這些數(shù)據(jù)的方法封裝在一個集合里,成為一個類。
繼承:允許通過現(xiàn)有類去得到一個新的類,且其可以共享現(xiàn)有類的屬性和方法?,F(xiàn)有類叫做基類,新類叫做派生類或擴(kuò)展類。
多態(tài):得到擴(kuò)展類后,有時我們會使用基類句柄去調(diào)用擴(kuò)展類對象,這時候調(diào)用的方法如何準(zhǔn)確去判斷是想要調(diào)用的方法呢?通過對類中方法進(jìn)行virtual聲明,這樣當(dāng)調(diào)用基類句柄指向擴(kuò)展類時,方法會根據(jù)對象去識別,調(diào)用擴(kuò)展類的方法,而不是基類中的。而基類和擴(kuò)展類中方法有著同樣的名字,但能夠準(zhǔn)確調(diào)用,叫做多態(tài)。
8. 阻塞賦值與非阻塞賦值的區(qū)別?
阻塞賦值的操作符號用等號(=)表示,當(dāng)前語句的賦值阻塞其他語句的賦值;
非阻塞賦值的操作符號用小于等于號(<=)表示,當(dāng)前語句賦值不阻塞其他語句的賦值。
9. 動態(tài)數(shù)組和聯(lián)合數(shù)組的區(qū)別?
動態(tài)數(shù)組:其內(nèi)存空間在運行時才能夠確定,使用前需要用new[]進(jìn)行空間分配。
關(guān)聯(lián)數(shù)組:其主要針對需要超大空間但又不是全部需要所有數(shù)據(jù)的時候使用,類似于hash,通過一個索引值和一個數(shù)據(jù)組成: bit [63:0] name[bit[63:0]];索引值必須是唯一的。
關(guān)聯(lián)數(shù)組可以用來保存稀疏矩陣的元素。當(dāng)你對一個非常大的地址空間尋址時,該數(shù)組只為實際寫入的元素分配空間,這種實現(xiàn)方法所需要的空間要小得多。
此外,關(guān)聯(lián)數(shù)組有其它靈活的應(yīng)用,在其它軟件語言也有類似的數(shù)據(jù)存儲結(jié)構(gòu),被稱為哈希(Hash)或者詞典(Dictionary),可以靈活賦予鍵值(key)和數(shù)值(value)
10. SV中的interface的clock blocking的功能?
Interface是一組接口,用于對信號進(jìn)行一個封裝,捆扎起來。如果像 verilog中對各個信號進(jìn)行連接,每一層我們都需要對接口信號進(jìn)行定義,若信號過多,很容易出現(xiàn)人為錯誤,而且后期的可重用性不高。因此使用interface接口進(jìn)行連接,不僅可以簡化代碼,而且提高可重用性,除此之外,interface內(nèi)部提供了其他一些功能,用于測試平臺與DUT之間的同步和避免競爭。
Clocking block:在interface內(nèi)部我們可以定義clocking塊,可以使得信號保持同步,對于接口的采樣和驅(qū)動有詳細(xì)的設(shè)置操作,從而避免TB與 DUT的接口競爭,減少我們由于信號競爭導(dǎo)致的錯誤。采樣提前,驅(qū)動落后,保證信號不會出現(xiàn)競爭。
11. 建立時間和保持時間違例的解決方法?
建立時間違例
時鐘路徑插入緩沖器;
更換延遲小的觸發(fā)器;
增加時鐘周期。
保持時間違例
優(yōu)化時鐘,讓時鐘更早到來;
觸發(fā)器插入緩沖器;
更換延遲大的觸發(fā)器。
12.?亞穩(wěn)態(tài)是什么,怎么消除?
產(chǎn)生原因:數(shù)據(jù)傳輸不滿足觸發(fā)器的建立時間和保持時間
發(fā)生場合:主要發(fā)生在異步信號檢測,跨時鐘域信號傳輸以及復(fù)位電路中;
消除辦法:
對異步信號進(jìn)行同步處理;
采用fifo對跨時鐘域通信進(jìn)行數(shù)據(jù)緩沖設(shè)計;
對復(fù)位電路采用異步復(fù)位,同步釋放。
13. 怎么編寫測試用例?
主要是編寫sequence,然后在body里面根據(jù)測試功能要求寫相應(yīng)的激勵,然后再通過ref_model和checker判斷功能是否實現(xiàn)?
14. 如果有很多測試用例,如何讓它們自動執(zhí)行?
可以寫腳本讓它們自動執(zhí)行,例如makefile...
15.?fifo的異步與同步
異步fifo:讀寫時鐘不同;
同步fifo:讀寫時鐘相同。
16.?驗證的思想
驗證就是在設(shè)計規(guī)范的要求下,對已知功能目標(biāo)下的DUT進(jìn)行檢查,然而實際的使用場景是設(shè)計規(guī)范無法全面覆蓋的,驗證工程師只能在有限的資源與時間下對設(shè)計代碼進(jìn)行最大限度的檢查以盡可能多地消除流片之后的bug。
17.?代碼覆蓋率、功能覆蓋率和斷言覆蓋率的區(qū)別
代碼覆蓋率——是針對RTL設(shè)計代碼的運行完備度的體現(xiàn),包括行覆蓋率、條件覆蓋率、FSM覆蓋率、跳轉(zhuǎn)覆蓋率、分支覆蓋率,只要仿真就可以收集,可以看DUT的哪部分代碼沒有動,如果有一部分代碼一直沒動看一下是不是case沒有寫到。
功能覆蓋率---與spec比較來發(fā)現(xiàn),design是否行為正確,需要按verification plan來比較進(jìn)度。用來衡量哪些設(shè)計特征已經(jīng)被測試程序測試過的一個指標(biāo)
首要的選擇是使用更多的種子來運行現(xiàn)有的測試程序;
其次是建立新的約束,只有在確實需要的時候才會求助于定向測試,改進(jìn)功能覆蓋率最簡單的方法是僅僅增加仿真時間或者嘗試新的隨機種子。
驗證的目的就是確保設(shè)計在實際環(huán)境中的行為正確。設(shè)計規(guī)范里詳細(xì)說明了設(shè)備應(yīng)該如何運行,而驗證計劃里則列出了相應(yīng)的功能應(yīng)該如何激勵、驗證和測量
斷言覆蓋率:用于檢查幾個信號之間的關(guān)系,常用在查找錯誤,主要是檢查時序上的錯誤,測量斷言被觸發(fā)的頻繁程度。
18. sv里面動態(tài)數(shù)組、關(guān)聯(lián)數(shù)組、隊列各自的優(yōu)缺點,應(yīng)用場景。
【特點】
動態(tài)數(shù)組:可以在仿真時分配空間或者調(diào)整寬度,這樣仿真中就可以使用最小的存儲空間。
關(guān)聯(lián)數(shù)組:用來保存稀疏矩陣的元素,當(dāng)一個非常大的地址空間進(jìn)行尋址時,sv只對實際寫入的元素分配空間,比定寬數(shù)組和動態(tài)數(shù)組所占用的空間要小得對。
隊列:結(jié)合了鏈表和數(shù)組的優(yōu)點,可以在隊列的任意位置增加或者刪除元素,這類操作在性能上比動態(tài)數(shù)組小得多,可以通過索引對任意元素進(jìn)行訪問。
【應(yīng)用場景】
動態(tài)數(shù)組:隨機事務(wù)不確定位寬大小;
關(guān)聯(lián)數(shù)組:需要建立一個超大容量數(shù)組,用關(guān)聯(lián)數(shù)組來存放稀疏矩陣的元素;
隊列:增加元素或者刪除元素方便。
19. 數(shù)據(jù)類型怎么轉(zhuǎn)換,靜態(tài)強制類型轉(zhuǎn)換和動態(tài)強制轉(zhuǎn)換有什么區(qū)別?
靜態(tài)轉(zhuǎn)換:轉(zhuǎn)換時指定目標(biāo)類型,并在需要轉(zhuǎn)換的表達(dá)式前加上單引號即可;
動態(tài)轉(zhuǎn)換:使用函數(shù) $cast
區(qū)別:靜態(tài)類型轉(zhuǎn)換操作不對轉(zhuǎn)換值進(jìn)行檢查,具有一定的危險性;而動態(tài)類型轉(zhuǎn)換在運行時將進(jìn)行檢查,如果轉(zhuǎn)換失敗會產(chǎn)生運行時錯誤。