https://zhuanlan.zhihu.com/p/29642469
(1)信號的跨時鐘域同步净当。包括單比特和多比特,對于單比特自然用兩級寄存器同步最為方便握侧。對于多比特蚯瞧,澈倨冢考察異步FIFO以及握手方法品擎。要理解亞穩(wěn)態(tài)的概念以及避免亞穩(wěn)態(tài)的方法。
(2)說到亞穩(wěn)態(tài)备徐,就不得不說setup time 和 hold time萄传。一定要掌握兩種時鐘約束和分析時鐘約束的方法。清楚四種路徑(輸入到輸出蜜猾,輸入到寄存器秀菱,寄存器到寄存器,寄存器到輸出)蹭睡,并能找到關(guān)鍵路徑衍菱。會計算最高的工作頻率。
(3)分析和修復(fù)setup time validation(降低時鐘頻率肩豁,組合邏輯優(yōu)化或拆分脊串,提高工作電壓) 和 hold time validation(插入buffer,更難修復(fù))
(4)能用verilog描述常用的電路結(jié)構(gòu)清钥,如:D觸發(fā)器琼锋,計數(shù)器,分頻(奇數(shù)倍分頻祟昭,偶數(shù)倍分頻缕坎,小數(shù)分頻(如1.5倍)),同步FIFO篡悟,異步FIFO,序列檢測器(FSM實現(xiàn))
(5)用verilog描述給出的代碼或者偽代碼
(6)找出verilog代碼中的錯誤谜叹,如信號未進行跨時鐘域同步匾寝,無else分支會產(chǎn)生不期望的鎖存器等等。
(7)阻塞荷腊,非阻塞賦值
(8)sv基礎(chǔ)旗吁,包括@signal觸發(fā)和wait(signal)的區(qū)別,事件觸發(fā)停局,隊列操作很钓,task同步調(diào)度(fork ...join,fork ...join_any,fork ...join_none的用法差異)
(9)掌握一些常用的協(xié)議,如I2C(能夠根據(jù)提示用verilog實現(xiàn))董栽,SRAM協(xié)码倦,AMBA(AHB),AXI
(10)異步復(fù)位在使用時應(yīng)當(dāng)注意什么?
異步復(fù)位锭碳,同步釋放
(11)請畫出異步復(fù)位同步釋放的電路結(jié)構(gòu):
(12) 在驗證環(huán)境中袁稽,C如何access和dut中寄存器,是如何聯(lián)系的擒抛?
Verilog 提供VPI接口推汽,可以將DUT的層次結(jié)構(gòu)開放給外部的C/C++代碼,而systemverilog提供了更好的接口:DPI.
(13)掌握一些常用的低功耗方法,如clock gating(能畫出電路結(jié)構(gòu)圖)歧沪,了解DVFS歹撒,多閾值電壓技術(shù),多電壓技術(shù)
(14)組合邏輯輸出需經(jīng)過寄存器過濾毛刺
數(shù)字IC驗證面試題:
面試準(zhǔn)備:
面試之前充分準(zhǔn)備自我介紹诊胞,針對外企可以準(zhǔn)備一份英文自我介紹暖夭,最好能夠用英文介紹自己做過的項目或課題。然后最重要的是充分準(zhǔn)備好你簡歷所寫的內(nèi)容撵孤,寫在簡歷上的東西一定是你吃透了的迈着。如果有項目的話最好把項目各方面可能會被問到的問題想到。另外一個容易被忽視的是邪码,好多人對選擇工作城市的理由上準(zhǔn)備很不充分裕菠,我自己就因為這個吃了很多虧。要能夠給出很合理且具有說服力的理由讓面試官相信你確實想要去那座城市工作和生活闭专,表現(xiàn)出自己的誠意奴潘。不然就會讓面試官懷疑你只是在收割offer.
技術(shù)面:如果你有項目經(jīng)歷的話,面試官最關(guān)心的是你對自己做過的項目有沒有吃透喻圃。所以面試前的準(zhǔn)備就顯得很重要萤彩,當(dāng)然,這是建立在你扎實的項目經(jīng)歷之上的斧拍。當(dāng)然雀扶,有些面試官如果對你的項目經(jīng)歷不感興趣,他/她可能會問你一些基礎(chǔ)知識。比如我就遇到過不懂驗證的面試官愚墓,當(dāng)場出一兩個基礎(chǔ)題(比如COMS相關(guān)予权,10進制計數(shù)器電路結(jié)構(gòu),只用兩輸入與非門實現(xiàn)兩輸入或門等等)浪册。大多數(shù)技術(shù)面的時候最后面試官一般會問你還有什么問題扫腺,面試前最好有所準(zhǔn)備,準(zhǔn)備一些有關(guān)職業(yè)發(fā)展村象,工作崗位等問題笆环。一般在技術(shù)面時不要提及薪資待遇,因為這是HR負責(zé)的部分厚者。
HR面:HR面一般在技術(shù)面通過之后躁劣,這個時候就可以細致地了解薪資福利等方方面面的問題啦,包括吃库菲,住账忘,行等問題都可以提問。
先簡單談?wù)勀悻F(xiàn)在在做的工作熙宇。
請談?wù)勀阍趯W(xué)校的學(xué)習(xí)和項目鳖擒。
請談?wù)勀銓VM驗證方法學(xué)的理解。
UVM驗證方法學(xué)是基于systemverilog語言形成的一個高效的驗證方法烫止。它的主要特點是提高了代碼的復(fù)用性蒋荚,使得驗證人員能通過代碼移植復(fù)用修改快速搭建驗證平臺,從而將主要精力放在具體測試用例的編寫上烈拒。另一方面厂僧,UVM封裝了很多好用的方法彤蔽,這使得驗證人員不必過多關(guān)注底層實現(xiàn)销凑,而且減少了驗證平臺的調(diào)試時間彤叉。
請談?wù)刄VM組件的關(guān)系捺球。
舉例談?wù)刄VM組件中的一些常用方法吕粗。
請談?wù)剉irtual sequencer與sequencer的區(qū)別债蜜,以及為什么要用virtual sequencer梨州?
如果只有一個驅(qū)動端agent祖秒,顯然是不需要使用virtual sequencer的诞吱。
如果有多個驅(qū)動端agent,但是多個激勵之間并無協(xié)調(diào)關(guān)系竭缝,virtual sequencer 也并無必要房维。
如果有多個驅(qū)動端agent,而且多個激勵之間存在協(xié)調(diào)關(guān)系抬纸,那么virtual sequencer就很有必要了咙俩。這個時候環(huán)境中需要包含一個甚至多個virtual sequencer了。
virtual sequence 和virtual sequencer的“virtual”有何含義呢?
Virtual sequencer 有三個屬性:
(1)Virtual sequencer控制其他的sequencer
(2)Virtual sequencer并不和任何driver相連
(3)Virtual sequencer本身并不處理item
并不像正常的sequencer那樣阿趁,將sequence item 通過sequencer port傳遞給driver膜蛔。Virtual sequencer通過一個指向subsequencer目標(biāo)的句柄來指定sequencer。這里的subsequencer就是和driver相連接的真實sequencer脖阵。所謂的virtual就是指真正的sequence并不是在Virtual sequencer里產(chǎn)生和傳遞的皂股。一個virtual sequencer可以通過它的subsequencer產(chǎn)生許多種不同類型的tranction。而virtual sequencer的作用就是在協(xié)調(diào)不同的subsequencer中sequence的執(zhí)行秩序了命黔。
- 為什么會有sequence,sequencer,以及driver呜呐,為什么要分開實現(xiàn)?這樣做有什么好處悍募?
最初的驗證平臺卵史,只需要driver即可,為什么還需要sequence機制搜立?
(1).如果事務(wù)在driver里定義以躯,會產(chǎn)生一個問題。比如事務(wù)種類繁多啄踊,豈不是每次啟動一個事務(wù)忧设,都要修改driver的main_phase代碼部分。
(2).如果定義多個driver颠通,那么會把UVM樹形結(jié)構(gòu)搞的亂七八糟址晕。所以,要從driver里剝離事務(wù)產(chǎn)生(具體包括事務(wù)定義顿锰、事務(wù)產(chǎn)生的步驟)的代碼部分谨垃。driver只負責(zé)事務(wù)驅(qū)動即可。
(3).補充一句硼控,驗證的case_list刘陶,是用sequence機制去實現(xiàn)的;并保證了UVM樹形結(jié)構(gòu)的單一性牢撼、統(tǒng)一性匙隔。使得可維護的能力大大加強。
上述解釋熏版,也是sequence和sequence_item不屬于uvm_componet的原因纷责。case相關(guān)的代碼改動,都在sequence和sequence_item里實現(xiàn)撼短。
- 你寫過assertion嗎再膳?assertion分為哪幾種?簡單描述下assertion的用法曲横。
Systemverilog斷言屬于驗證方法中的一種喂柒,斷言(assertions)就是對設(shè)計屬性(property行為)的描述,如果一個屬性不是我們期望的那樣,那么斷言就會失敗胳喷。assertions與verilog相比湃番,verilog是一種過程性語言。它的設(shè)計目的是硬件描述吭露,它可以很好的控制時序吠撮,但是描述復(fù)雜的時序關(guān)系,代碼較為冗長讲竿,assertions是一種描述性語言泥兰,設(shè)計目的為仿真驗證,可以有很多內(nèi)嵌的函數(shù)來測試特定的時序關(guān)系和自動收集覆蓋率數(shù)據(jù)题禀。
SVA分為并發(fā)斷言和即時斷言兩種鞋诗。并發(fā)斷言是基于時鐘周期的,在時鐘邊沿計算表達式迈嘹,它可以放在模塊(module)削彬,接口(interface),或程序塊(program)的定義中秀仲,以關(guān)鍵詞“property”來定義融痛,可以在靜態(tài)驗證工具和動態(tài)驗證工具中使用。即時斷言是基于事件的變化神僵,表達式的計算像verilog中的組合邏輯賦值一樣雁刷,是立即被求值的,與時序無關(guān)保礼,必須放在過程塊中定義沛励。
并發(fā)assertions:
property a2b_p; //描述屬性
@(posedge sclk) rose(b);
endproperty
a2b_a: assert property(a2b_p); //assert property SVA的關(guān)鍵字表示并發(fā)斷言
a2b_c: cover property(a2b_p); //覆蓋語句
請描述一下你所驗過的模塊的功能。
你對fifo熟悉嗎炮障?談?wù)勅绾闻袛鄁ifo的空滿狀態(tài)目派?
(1)嚴格的空滿判斷: w_ptr==r_ptr且讀寫回環(huán)標(biāo)志位相同時為空, w_ptr==r_ptr且讀寫回環(huán)標(biāo)志位不同時為滿铝阐。這在同步fifo中一般沒什么問題址貌,但是在異步fifo中一般要做悲觀的空滿判斷,以免在fifo空時讀獲fifo滿時寫徘键。
(2)保守的空滿判斷:方向標(biāo)志與門限。設(shè)定了FIFO容量的75%作為上限遍蟋,設(shè)定FIFO容量的25%為下限吹害。當(dāng)方向標(biāo)志超過門限便輸出滿/空標(biāo)志,其實這時輸出空滿標(biāo)志FIFO并不一定真的空/滿虚青。
- fifo有同步的和異步的它呀,它們有什么區(qū)別?
同步fifo讀寫時鐘相同,異步fifo讀寫采用不同的時鐘纵穿。
- 對于異步fifo下隧,如何處理空滿時的同步問題?還可以采用什么方法谓媒?
讀寫指針轉(zhuǎn)化為格雷碼后再進行同步淆院。
- 請談?wù)勻炞C的思想,驗證人員和設(shè)計人員思考問題的差異句惯。
驗證永遠是不充分的土辩,永遠是沒有最好的,用一個同事的話說拷淘,如果非要給驗證訂一個期限的話,我希望是一萬年指孤。
目前通用的做法是看coverage.
(1).看design spec
(2).了解相關(guān)協(xié)議
(3).編寫test plan及verification spec
(4).搭建驗證平臺
(5).依據(jù)testplan創(chuàng)建測試用例testcases
(6).仿真和debug,包括環(huán)境和design的bug,花費時間最多启涯。工具是VCS/verdi
debug的手段主要有:查看log,看波形
(7). regression 和覆蓋率
(8). code review
- 你們項目中都會考慮哪些coverage?
Line coverage, condition coverage,branch coverage, toggle coverage, statement coverage(FSM)
- coverage一般不會直接達到100%恃轩,當(dāng)你發(fā)現(xiàn)有condition未cover到的時候你該怎么做逝嚎?
編寫定向測試用例(direct case)
16.為什么要盡量避免絕對路徑的使用?如何避免详恼?
絕對路徑的使用大大減弱了驗證平臺的可移植性补君。避免的方法是使用宏和interface.
- 如何在driver中使用interface?為什么昧互?
由于driver是類挽铁,而在類中不允許直接使用interface,所以在類中使用的是virtual interface敞掘。然后再top_tb中通過uvm_config_db#(virtual)::set()…的方式將if set到driver 的vif.
- 你了解UVM的callback機制嗎叽掘?
callback機制最大的用處就是提高驗證平臺可重用性。它通過將兩個項目不同的地方使用callback函數(shù)來做玖雁,而把相同的部分寫成一個完整的env更扁,這樣重用時,只要改變相關(guān)的callback函數(shù),env可以實現(xiàn)完全的重用赫冬。
此外浓镜,callback還用于構(gòu)建異常的測試用例,通過factory機制的重載也可以實現(xiàn)這一點劲厌。
18.OVM和UVM有什么區(qū)別膛薛?
UVM = OVM + VMM(RAL)?
OVM沒有寄存器解決方案补鼻,也有factory機制哄啄,然而cadance推出RGM之后補上了這一短板雅任,但使用RGM需要額外下載,沒有成為OVM的一部分咨跌。OVM現(xiàn)在已經(jīng)停止更新沪么。
UVM幾乎完全繼承 OVM,同時又采納了synopsysVMM中的RAL寄存器解決方案锌半,同時吸收了VMM的一些優(yōu)秀的實現(xiàn)方式禽车。又mentor和candence2008年聯(lián)合發(fā)布。
19.UVM各component之間是如何組織運行的拳喻,是串行的還是并行的哭当?如果串行的,請問是通過什么機制實現(xiàn)各組件之間的運行調(diào)度的冗澈?
關(guān)于UVM的運行機制钦勘,學(xué)過UVM的應(yīng)該都很清楚了,無非是各組件之間的關(guān)系亚亲,以及Phase機制等等彻采。UVM其實質(zhì)是軟件,而軟件本質(zhì)上都是順序運行的捌归,dut硬件是并行運行的肛响。關(guān)于各組件之間的運行調(diào)度,僅僅從《UVM實戰(zhàn)》這本書上是得不到答案的惜索,時候我有翻看了SV綠皮書特笋,感覺從中找到了答案。測試平臺的調(diào)度是通過事件觸發(fā)驅(qū)動的(如@巾兆,
->event)
20.對一個加密模塊和解密模塊進行驗證猎物,如果數(shù)據(jù)先進行加密緊接著進行解密,如果發(fā)現(xiàn)輸入數(shù)據(jù)與輸出數(shù)據(jù)相同角塑,能不能說明這兩個加解密模塊功能姐沒有問題蔫磨?為什么?
看到這道題圃伶,當(dāng)時的反應(yīng)就是應(yīng)該首先分別對加密模塊進行驗證堤如,如果沒有問題,再一起進行驗證窒朋。但是面試官對這個問題貌似并不滿意搀罢,問我為什么直接驗就不行呢?我當(dāng)時一下子也說不出原因炼邀。
21.在對一個模塊仿真的時候發(fā)現(xiàn):如果輸入是一個地址addr魄揉,發(fā)現(xiàn)dut的輸出是一個相同的地址addr,但是參考模型的輸出是addr1.請分析可能是什么問題導(dǎo)致的拭宁?你會怎么去解決洛退?
我首先想到的是,要么dut設(shè)計出錯杰标,要么參考模型出錯兵怯。首先需要根據(jù)spec的定義檢查我們的參考模型有沒有問題,如果沒有問題腔剂,通過仿真對設(shè)計進行debug媒区,找designer確認問題和修復(fù)。但是面試官依然不滿意掸犬,她最后指出袜漩,我有沒有考慮到可能通過配置寄存器讓dut工作在不同模式,是不是dut工作在bypass模式湾碎,而參考模型工作在其他模式宙攻?當(dāng)時就得自己怎么就沒想到呢?有點自慚形穢介褥,可事后細想座掘,發(fā)現(xiàn)她的提問方式本身就有問題,提問時沒有給出足夠多的信息和引導(dǎo)柔滔,答不上來也是在情理之中溢陪。下來和也參加面試的同學(xué)討論的時候發(fā)現(xiàn),幾乎所有人都被問到了同樣的問題睛廊。
........