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