三星面试面经

三星面试面经

一开始是自我介绍,然后介绍一下自己做的项目,画了一下系统框图,主要对项目的整体框架准备得不太充分,画得不太具体,被面试官问到了许多漏洞,应该事先好好准备一下,然后突出一下自己做的部分,虽然自己做的有点low。

然后就是笔试写代码部分,可能是一直在调试,好久没写代码的缘故,其实就是基础不太扎实,问了两个很简单的问题都答得不是太好,自我感觉是跪了,
第一题问的是状态机的实现方式,做的是一个序列检测器,应该先画一个状态转移图然后再去写代码,感觉自己逻辑关系都没有搞清,就去实现,所以代码写的不是很好,有些漏洞,而且也没有加入idle的状态,所以被面试官说的不够严谨,他们要招的是一个RTL级的verilog代码编写者,显然我这方面水平不行。然后还要一道是占空比为1:1的5分频,由于之前写的都是偶数分频的程序,并没有写过奇数倍分频的程序,所以这个思想也要掌握下,
以下贴出的是网上的代码:感觉也可以用于其他奇数倍的分频

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
module div_5(clkin,rst,clkout); 
input clkin,rst; 
output clkout; 
reg[2:0] step1,step2; 
always @(posedge clkin) 
if(!rst)  
step1<=3'b000
else 
begin 
case(step1)  
3'b000:step1<=3'b001;
3'b001:step1<=3'b011;
3'b011:step1<=3'b100
3'b100:step1<=3'b010
3'b010:step1<=3'b000
default:step1<=3'b000
endcase  
end 
always @(negedge clkin) 
if(!rst) 
step2<=3'b000
else 
begin 
case(step2) 
3'b000:step2<=3'b001
3'b001:step2<=3'b011
3'b011:step2<=3'b100
3'b100:step2<=3'b010
3'b010:step2<=3'b000
default:step2<=3'b000
endcase 
end 
assign clkout=step1[0]|step2[0]; 
endmodule

sanbufen

然后问了下C语言的题,感觉自己好久不看C语言,好多都不太会,有一题char与const char类型的比较,另一道题涉及指针以及函数的题,也觉得答得不是太好。
最后就问了下建立时间和保持时间,以及如何解决建立时间的问题,虽然之前看过一些时序分析的文档,但是也没有答得很好,只是讲了一下,感觉面试官应该不太满意,回来后查了一下应该就是将时钟速率降低,但是也不能降得太低。

人生中的第一次面试就在这样匆匆忙忙中结束啦,回来的地铁上还接到了导师的电话,晚上又谈了下项目,虽然这次面试结果不太好,但是还是有很多体会的。主要有以下几点:

  1. 对自己的项目介绍要充分有条理,包括框图的介绍,以及自己的工作完成情况。
  2. 对基础代码的书写要规范,感觉大公司很重视这一点,平时也要培养自己代码规范的习惯。
  3. 平时要积累一些数字电路方面的知识,以及时序约束方面的知识。

    最后说一点题外话吧,在实验室呆久了,容易不太了解外面的世界,也可能自身对自己要求不是很高,所以一直觉得自己还可以,有点漂,这次面试也是一个契机,是时候该沉下心来好好看一看书啦,以前总是在做项目,其实项目中的好多问题也是很基础的问题,所以回归基础应该是重中之重。