Three Month
文章 15
標籤 11
分類 4
工研院面試心得

工研院面試心得

約720字 大概需要2分鐘

前言:

最近下定決心碩畢先去工作,所以我換了實驗室,決定把verilog摸熟。而新的指導教授看了我的需求,所以願意讓我碰fpga,但因為我又沒玩過fpga,所以就幫我丟履歷去工研院面試,之後進工研院實習時學習fpga和TVM。因為這也是我第一次面試實習,所以我也花不少時間準備面試。

過程:

當時來了一個硬體考官和軟體考官。我當時主要報我在管院的工作經驗,和我修深度學習,VLSI和計組時寫的作業。我覺得我在報這些作業時,考官似乎不太在乎,反而更加關心我知不知道深度學習訓練時,硬體的底層運作,還有verilog,c和oop的熟練度。

因為c和c++並不是容易的語言,所以我跟面試官說我不敢說我c/c++很熟練。而verilog我真的還回去了,所以我也說我verilog不熟練。因為考官看我硬體課修的偏少,所以考官有加考verilog。那時就考了blocking和non blocking的電路差異,像說下列兩段程式碼。

1
2
3
4
//blocking
always @(posedge clk)
temp = a & b;
out = temp | c;
1
2
3
4
//non-blocking
always @(posedge clk)
temp <= a & b;
out <= temp | c;

網路上很顯然會講說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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/////////////////////////////////////////////////////////////
// Created by: Synopsys DC Expert(TM) in wire load mode
// Version : R-2020.09
// Date : Fri Jun 16 20:50:55 2023
/////////////////////////////////////////////////////////////


module test ( clk, a, b, c, out );
input clk, a, b, c;
output out;
wire N1;

DFFQXL out_reg ( .D(N1), .CK(clk), .Q(out) );
AO21X1 U3 ( .A0(b), .A1(a), .B0(c), .Y(N1) );
endmodule

後記:

面試時雖然沒問太難的知識,但同時也讓我發現我能力上的缺陷,所以我最近也有在HDLBits上刷題verilog,並做成筆記。此外,面試官也建議我簡報的字體可以放大一點,同時也盡量展現修課時寫的code。整體來說,這次的面試算是很好的經驗,希望未來如果實習有上的話,可以學到更多的東西。

本文作者:Three Month
本文連結:https://threemonth03.github.io/2023/06/17/2023-06-17-%E5%B7%A5%E7%A0%94%E9%99%A2%E9%9D%A2%E8%A9%A6%E5%BF%83%E5%BE%97/
版權聲明:本文使用 CC BY-NC-SA 3.0 CN 協議進行許可
×