工研院面試心得
前言:
最近下定決心碩畢先去工作,所以我換了實驗室,決定把verilog摸熟。而新的指導教授看了我的需求,所以願意讓我碰fpga,但因為我又沒玩過fpga,所以就幫我丟履歷去工研院面試,之後進工研院實習時學習fpga和TVM。因為這也是我第一次面試實習,所以我也花不少時間準備面試。
過程:
當時來了一個硬體考官和軟體考官。我當時主要報我在管院的工作經驗,和我修深度學習,VLSI和計組時寫的作業。我覺得我在報這些作業時,考官似乎不太在乎,反而更加關心我知不知道深度學習訓練時,硬體的底層運作,還有verilog,c和oop的熟練度。
因為c和c++並不是容易的語言,所以我跟面試官說我不敢說我c/c++很熟練。而verilog我真的還回去了,所以我也說我verilog不熟練。因為考官看我硬體課修的偏少,所以考官有加考verilog。那時就考了blocking和non blocking的電路差異,像說下列兩段程式碼。
1 |
|
1 |
|
網路上很顯然會講說blocking assignment是只有一個DFF,接在combinational logic的後面,而non-blocking assignment是有兩個DFF,分別接在兩個gate後面。但那時我一直不解的是,從語法上來看,blocking assignment的temp應該也是在clk上升時,temp才會跟著改變,而只有一個DFF的電路應該是沒辦法實現這件事。因為這個小細節,害我的回答不是非常確定。
後來我問了其他大佬們,才知道simulation還可以分成function simulation和gate-level simulation,這兩個模擬的結果有時也有差異。
根據友人的幫忙,下圖為rtl的模擬,會發現blocking
assignment的temp是隨著clk更新的。
如果改觀察合成出來的netlist,會發現blocking assignment的netlist反而是combinational logic,發現和rtl的模擬還是有段差距,算是補齊我的盲點。
1 |
|
後記:
面試時雖然沒問太難的知識,但同時也讓我發現我能力上的缺陷,所以我最近也有在HDLBits上刷題verilog,並做成筆記。此外,面試官也建議我簡報的字體可以放大一點,同時也盡量展現修課時寫的code。整體來說,這次的面試算是很好的經驗,希望未來如果實習有上的話,可以學到更多的東西。