本文移植於tutortecho 2020年9月19日 撰寫
收到面試邀請後我就來到新竹公道路上的 Qualcomm 大樓面談
一開始兩位面試官先問了我以前做過的 Systemverilog 驗證環境使用了甚麼技巧
那是我工作第一年做的驗證環境
是一個專門驗證 DSP 的環境
其中整合了 LDPC encoder,decoder
以及實現各種 noise model
幾乎是自己手刻出 UVM 的各種 component
所以有許多方式面試官覺得不以為然
我自己也覺得不以為然
覺得那時候真的可以做得更好啊
不過基於公司機密我也沒有透漏太多細節
之後其中一位面試官請我實作一個 memory response 的 passive agent 的 driver
其中並沒有任何的 handshaking
就是 driver 收到 read request 之後
delay 5 個 cycles 之後發 response 以及 data 回去
driver 的 command 可能是 burst (連續)
而每個 command 都要各自延後5個 cycles 才能發 response
弄清楚題意之後
大致上就是將 command_phase 和 data_phase 拆來實作
使用一個 queue 在 command 從 command_phase 傳遞到 data_phase
並且在 run_phase 中 fork join 這兩個 function
因為我沒有真的設計過這個題目
所以我現場想的方法被嫌corner case太多
所以這裡就紀錄面試官教的方法就好
command_phase 拿到第一筆 req 之後開始不斷地 enqueue 進去
儘管沒有 req 就放空的 command 進去
data_phase 則是拿出第一筆並且 delay 5 cycles 之後不斷地 dequeue 出來
如果之後拿的是 command 就直接回(空的就不回)
這樣整體 data_phase 的時間就晚了 5 cycle
除此之外 還被考了一些 UVM 基本的概念
比如說正常一個 agent 有甚麼 component
virtual sequence 是什麼
p_sequencer, s_sequencer 是什麼
如何執行 sequence
另外還有 constraint 的設定方式
要如何將一個 100 bit 的訊號使用constraint
去隨機產生出 50 bit 的1 還有 50 bit 0
進階一點就是如何產生 25 個 2’10 其他則為0
還有考 a++, ++a, a = a +1在 hardware(flip flow) 上的行為模式
沒有修過 compiler 的我回答不太出來
另外還有一些 CPU 的觀念
例如 pipeline 切的級數對應到的優缺點
還有使用C語言 function pointer 來實現多形的方式
還有一個問題我其實會但是因為語法問題沒有讓面試官了解我是會的
回家看 code 之後才發現是我沒有講清楚
就是 monitor 和 scoreboard 使用 TLM 之間的通訊方式以及連接方式 (在env)
之前在實作的時候有嘗試使用 uvm_analysis_imp 的macro 才能在 scoreboard 實做 write function
後來覺得還要在 write 裡自己加 fifo 太麻煩
所以直接使用 uvm_tlm_analysis_fifo 然後就省去那個 macro
難怪面試官問我是怎麼指定這個 port 是哪個 port 的時候我一直想不出來
因為我根本就沒有用 write function
我直接把 tlm_analysis_fifo 在 env 接上
然後在 scoreboard 直接使用 fifo.get(trans)
有點可惜沒有講清楚阿
這也證明我對於 UVM 還太欠學
後來問我了一些我寫在履歷上的事蹟
好像也沒問很多工作內容的細節
可能 Qualcomm 本身玩專利的也對這些機密特別敏感而不提及
老實說 UVM 的東西我還期待可以考更多
不過他們看我語法不是很熟好像就點到為止
但是我比較想要跟面試官討論驗證的觀念啊!
喔對了
我有提到我去繼承 uvm_sequence_item
他們對於這個行為非常好奇所以一直叫我舉實際的例子
但是我除了工作上的例子之外沒有遇過其他種情境
工作又不想透漏
最後我還是講了一點無傷大雅的工作內容
就是公司官網都查得到的內容
成功說服他們為何要繼承了…
整體而言我算是被電得相當慘
雖然面試官說今天考得很硬
但其實就是我太嫩了阿
不過未來我一定要當一位比較厲害的驗證工程師
話說晚上就收到了下一次的面試邀請
發表留言