三星面试面经
一开始是自我介绍,然后介绍一下自己做的项目,画了一下系统框图,主要对项目的整体框架准备得不太充分,画得不太具体,被面试官问到了许多漏洞,应该事先好好准备一下,然后突出一下自己做的部分,虽然自己做的有点low。
然后就是笔试写代码部分,可能是一直在调试,好久没写代码的缘故,其实就是基础不太扎实,问了两个很简单的问题都答得不是太好,自我感觉是跪了,
第一题问的是状态机的实现方式,做的是一个序列检测器,应该先画一个状态转移图然后再去写代码,感觉自己逻辑关系都没有搞清,就去实现,所以代码写的不是很好,有些漏洞,而且也没有加入idle的状态,所以被面试官说的不够严谨,他们要招的是一个RTL级的verilog代码编写者,显然我这方面水平不行。然后还要一道是占空比为1:1的5分频,由于之前写的都是偶数分频的程序,并没有写过奇数倍分频的程序,所以这个思想也要掌握下,
以下贴出的是网上的代码:感觉也可以用于其他奇数倍的分频
12345678910111213141516171819202122232425262728293031323334
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类型的比较,另一道题涉及指针以及函数的题,也觉得答得不是太好。
最后就问了下建立时间和保持时间,以及如何解决建立时间的问题,虽然之前看过一些时序分析的文档,但是也没有答得很好,只是讲了一下,感觉面试官应该不太满意,回来后查了一下应该就是将时钟速率降低,但是也不能降得太低。
人生中的第一次面试就在这样匆匆忙忙中结束啦,回来的地铁上还接到了导师的电话,晚上又谈了下项目,虽然这次面试结果不太好,但是还是有很多体会的。主要有以下几点:
- 对自己的项目介绍要充分有条理,包括框图的介绍,以及自己的工作完成情况。
- 对基础代码的书写要规范,感觉大公司很重视这一点,平时也要培养自己代码规范的习惯。
平时要积累一些数字电路方面的知识,以及时序约束方面的知识。
最后说一点题外话吧,在实验室呆久了,容易不太了解外面的世界,也可能自身对自己要求不是很高,所以一直觉得自己还可以,有点漂,这次面试也是一个契机,是时候该沉下心来好好看一看书啦,以前总是在做项目,其实项目中的好多问题也是很基础的问题,所以回归基础应该是重中之重。