0

【转】应届生面试数字电路设计/FPGA开发工程师岗位总结—— 看得我啼笑皆非

看得我啼笑皆非,想起曾经自己找工作时遇到的奇葩面试官

流程和感情篇

今天9月29日,明天就是9月最后一天。找工作的阶段也基本算过去了。好久没有整理自己的收获了。今天就把自己找工作的一些感受和经验写下了。想到哪说到哪,写到哪算哪,规划和随性,近几日我选择随意一点,大家也可以找个舒服的姿势看看下面的东西,能有收获当然最好。

首先,先说点不用动脑子的,那就是找工作的流程以及心里变化,希望看到这些之后的学弟学妹能提前有一个好的心态。
流程:

① 秋招9月初就红红火火的拉开序幕了,(注:9月才开始上网查公司信息,网申是一件很蠢的事情,就比如当我们9月初登上大疆的校招官网发现人家已经截至网申了,开始就结束,对于一个才开始准备找工作,而且还没拿到offer的人来,那真的是想骂人。结论就是当你真的打算找工作,你最好在大三第二学期的6月份左右准备好你的简历,多去那些大公司的官网上转转)。个人建议把自己的简历好好写好好改,最好再找些专业人士给你看看,当然你们那些刚找完工作的学长学姐的建议凑合也能看。

② 上面说到9月初公司开始秋招意味着9月份开始就有公司来学校宣讲,以及开通网上网申通道。你需要做的就是先打开电脑,在电脑里新建一个excel,相信我这个很重要,名字你开心就好这个不重要,重要的是之后的操作。宣讲会一般去比较NB 的学校网上看,这些信息会有一个专栏,你现在要做的就是筛选你想去的,将他的信息放到的你的excel里(可以有以下信息摘录下来:a宣讲日期 b公司名称 c投递岗位名称 d岗位地点 e网申还是邮件投递 f状态 g宣讲地点 h面试地址 i面试时间 j公司规模以及你对这个公司的评价或看法)信息大体这么多久够了,每天早上第一件事就是更新你的excel。这样你就能比较清除的知道你今天要去哪,干什么。千万别用脑子记,因为一般你投递的公司的数量在60到100之间,当然100以上也是有可能的,只用脑子记,最后只会混成一团乱麻。

③ 当你准好一份excel后,你就可以有针对性的海投了(海投是必须的,但是你要是压根不想去的也别浪费自己和对方的时间)。然后就是跑宣讲会,现场做笔试题。这个阶段你需要做的心里准备就是:平心静气。因为任何事情都有一个流程,不要急说为啥还没有面试,当开始有面试的时候,你会发现你一天可能有好几场面试,甚至有可能,不,应该90%你可能会遇上面试时间冲突,需要你来调节。说这么多就想说一点:稳住别慌,我们能赢!。当然光有一个好的心态也不够,你需要将你在笔试中遇到不会的问题,回来及时查询整理,这时候我感觉你又需要一份word。来记录你遇到的问题,以及解决办法。这份word你同样也需要及时更新。同样这份word之后也有大用。早上这么多事情意味着你几点起不用多说,自己的时间自己安排

④ 写着写着发现说不下去了,一想原因,9月之前的工作没说,上文有说过,想到哪说到哪,排版,还是算了吧,你们也大可不必放在心上,当然如果要是马上准备找工作,我建议你就看看流程,字里行间透露出的的随意不是你现在该有的状态。严谨,才是一个理工科人该有的品德。

在找工作之前也就是7-8月份,你需要做的就是复习,复习什么呢,硬件会有个《FPGA&数字IC开发工程师》笔试100题自己找找,做一下。还有就是数电,数电已经很基础了,好好复习,必须扎实。感觉时间很富裕的可以再看看模电,会有用的,还有就是数字集成电路的基础比如场效应管画某个功能电路简单的那种。静态时序分析也得会比如:1判断建立时间保持时间满足 2计算该电路的最大工作频率 3 input delay 和output delay是什么(这个可以看我之前写的) 4如何让不满足的建立时间变满足,为什么,保持时间不满足,能否通过改变时钟频率让其满足。5建立时间保持时间的本质是什么,为什么会这样。大家都可以想一想,当然还有很多别的,总之多看书吧,骚年们!

⑤ 上面有说到复习,写简历,投递简历,笔试。也终于该说到面试了。面试,我提一下,我这里说的是技术面,市场类的我不知道,我也在网上有查过面试问题,后来发现,做技术的就是做技术的没有那么多弯弯绕绕。hr面的常见问题也和网上有很大区别,这个下面再说。

这里先说技术面:重点:简历的内容(如果有比红色更醒目的颜色,你告诉我,我更愿意用它)
项目 里的所有东西你必须要了然于心,你当初是如何想的,如何做架构的,如何实现的,具体的实现和方法,遇上的问题,如何解决的,给你带来的收获,你所用的资源分别有多少,你的电路的工作频率,如果让你优化,你如何优化。如果是团队合作,你是如何分配工作和合作的,合作的时候遇到的问题,如何解决的,你队友遇到了问题,你是如何做的。
技能 里面可能会写你掌握那种协议,凡是写的你要能画出他的时序图以及讲清楚你的实现思路和具体实现 清楚你的简历内容是必须的,不然简历的内容要是被问住了,你简历的真实性会大打折扣。

如果技术面有两面的话,第一面有可能重点在一些常见的电路知识上,你的项目可能只会稍微提一下,主要留在二面问。
常见的问题:

  1. 你是如何理解跨时钟域的,如何解决。
  2. 竞争冒险是什么,如何解决。
  3. 你对整个电路的流程的了解。
  4. STA。
  5. 使用异步FIFO需要注意的事项 异步FIFO最小深度的计算方法。
  6. 锁存器在电路中的作用,甚至可以说成在电路里的危害。
  7. 同步复位,异步复位电路的各自特点。
  8. FPGA方面:你对底层资源是否了解,详细阐述。 可能顺便会问问你项目中用的芯片型号,以及内部各种资源有多少。
  9. 手写几条简单的STA的约束当然这里说的是sysnopsys的xdc。
  10. 锁相环的组成。
  11. 用加法或者减法实现除法,乘法在此略。
  12. 三态门电路如何写,综合出来的电路图是什么样子。
    大体能想到的就这么多。大家可以自己查一下准备准备。

二面问题:
看你的面试官可以细到什么地步,反正整体就是问你的项目,感受就是问的很细。
举个例子,大家各自感受一下。我在简历中有写道我用Verilog 实现了一个sdram的控制器,常见的问题有某个功能需要的命令以及需要满足的时序要求。如果是full-page是否提供首地址就好,为什么。
但是有个面试官问我某个具体的命令对应的背后的电气特性,也就是当你在命令sdram做了一个操作的时候,sdram本身到底发生了什么。
还有就是一些在自己根本遇不到的问题,比如我是否可以只action而不写或者读。如果可以这又是为什么。
这就要求你对于你操作的东西不光要懂如何操作它,还要了解它的内部结构以及它是如何运转的。
hr面问题:
我是本科生,我只说本科找工作的。

  1. 你为什么不考研
  2. 你和研究生比你的竞争力在哪
  3. 你到现在遇到的最大挫折
  4. 你到现在做的的最大成就
  5. 你的工作地点,期望薪资
    个人感觉对于不考研的问题你需要表现出终身学习的想法,和比研究生会更努力的迫切。所谓知耻而后勇,当然这里可能用的不太恰当。

⑥面试的心态变化:

我记得我第一场面试的时候,在等候室我拿简历手都是抖得,见了面试官,在那一坐,我是谁,我在哪,我要干嘛。
之后第二场就好很多,还是会有紧张,但整体就能和面试官聊了,最起码在基本问题和简历的问题可以对答如流,而且还可以笑得出来。

再往后就是重复。不过在这要说的就是你的word也理应越变越厚。

然后就是拿到第一家公司的offer,在拿到第一份offer后整个人的心态会有一个比较大的放松,这个时候就有种跳出来成为局外人的感觉(当然,这指的是这个公司你也比较心仪)

再往后的面试就是能轻松很多,对你之后的面试更有帮助,你能发挥的更自如,表现的更自信,更有光芒,这个时候其实更多的是在和技术面试官的交流,和学习上,他会教会你好多以前更本不会想到要去关注的的东西。
再往后就是个面试官探讨该行业的发展前景,人生理想,心路历程。(个人感觉到这个时候其实就有点飘了,还是需要稳一手)

总结下来就是,在你面试你心仪的公司前找几个别的公司练手是很有必要的。

本来还把我的word整理分享一下,不过,今天写这份文档已经挺久了,word明天再说吧,先吃口晚饭去!

编辑 重设标签(回车键确认) 标为违禁 关闭 合并 删除
shawn 头像
想向站长提问,微信扫码立刻加入! shawn的FPGA圈.png
0

资料篇

今天就把我面试遇到了常见问题总结出来的东西分享到这

1. STA

a. STA这里我说的都是一些自己对sta的总结,哪里有不对或者不足请大家指正
b. step1先说建立时间和保持时间的概念:
c. 建立时间:数据在有效沿来临之前必须保持稳定的最小时间
d. 保持时间:数据在有效沿到达之后必须保持稳定的最小时间

如图所示,上述概念就在说这个,好像也并没有收获
SAT1.png

所以我画了下面这幅图

SAT2.png

结合这副图来说说静态时序分析
寄存器说白了就是数据暂时保存一个地方,而寄存器到寄存器之间的组合逻辑来实现电路的各种功能(这句话不太严谨暂且这么说),寄存器会在有效沿将数据采集并保存一个周期,但是现实和理想会有一点点区别,为了保证能准确采集到正确的数据,所以对数据提出了要求,这就是建立时间和保持时间的来历。
所以在一个电路中,从上一个寄存器将数据得到经过组合逻辑然后到下一个寄存器这中间的的路径延迟就会有要求(将上一级叫做launch下一级叫capture):1,你的组合逻辑不能太大,也就是当你的组合逻辑太大,数据路径延迟就会变大,你到达下一级的时间就会变大,当你到达时间太慢,慢到setup之后这是就不满足建立时间,你无法保证的你的寄存器采集的是正确的值。2,你的组合逻辑也不能太小,太小路径延迟就太小,数据过早的到达回使capture的上级寄存器的保持时间无法满足。

这里再说一点,建立时间和保持时间和PVT有关,和时钟频率无关。

结合这两点就可以回答很多问题。
e. 计算电路的最大工作频率:本质就是当你的最大延迟路径刚好满足时序要求的时候,即遍历,找到最大延迟路径,求出需要的时间在加上setup time 就是最小周期。
f. 判断电路是否满足静态时序分析。同上
g. 当建立时间不满足,可以通过改变时钟频率来解决吗? 显然是可以的,只需要降低频率就行
h. 当保持时间不满足,可以通过改变时钟频率来解决吗?不行,因为你是因为数据到达过早,你改变时钟频率无法解决数据过早到达的问题

2、跨时钟域

对以一位的异步信号可以使用“一位同步器进行同步”(使用两级触发器)俗称打拍。
原因:两级触发器可防止亚稳态传播的原理:假设第一级触发器的输入不满足其建立保持时间,它在第一个脉冲沿到来后输出的数据就为亚稳态,那么在下一个脉冲沿到来之前,其输出的亚稳态数据在一段恢复时间后必须稳定下来,而且稳定的数据必须满足第二级触发器的建立时间,如果都满足了,在下一个脉冲沿到来时,第二级触发器将不会出现亚稳态,因为其输入端的数据满足其建立保持时间。同步器有效的条件:第一级触发器进入亚稳态后的恢复时间 + 第二级触发器的建立时间 < = 时钟周期。
更确切地说,输入脉冲宽度必须大于同步时钟周期与第一级触发器所需的保持时间之和。最保险的脉冲宽度是两倍同步时钟周期。所以,这样的同步电路对于从较慢的时钟域来的异步信号进入较快的时钟域比较有效,对于进入一个较慢的时钟域,则没有作用 。

而对于多位的异步信号:1:可以采用保持寄存器加握手信号的方法(多数据,控制,地址);2:特殊的具体应用电路结构,根据应用的不同而不同;3:异步FIFO。(最常用的缓存单元是DPRAM)

3、FPGA底层资源

对XilinxFPGA,速度等级一般有“-1”、“-2”、“-3”等,数字越大,速度等级越高,芯片价钱也越贵。
对IntelFPGA,速度等级一般有“-6”、“-7”、“-8”,数字越小表示速度等级越高、价钱越贵。
FPGA内部三大主要资源:可编程逻辑单元、可编程I/O单元、布线资源
FPGA底层资源1.png

CLB在FPGA中最为丰富,由两个SLICE构成,SLICE分为SLICEL(L:Logic)和SLICEM(M:Memory),因此CLB可分为CLBLL和CLBLM两类;
有一部分Slice支持DistributedRAM和32位移位寄存器功能,被记为SLICEM,其他的记为SLICEL(一个CLB最多有一个SLICEM,每个CLB纵列至少有一个SLICEM,在DSP48E(XilinxFPGA内的硬件乘法器)纵列旁的两个CLB纵列,每一个CLB都有SLICEM)。
FPGA底层资源2.png

SLICEL和SLICEM内部都包含4个6输入查找表(LUT6)、3个数据选择器(MUX)、1个进位链(carrychain)和8个触发器(Flip-Flop);
FPGA底层资源3.png

FPGA的I/O资源被分布在若干个Bank中,每个Bank中有20个I/O Tile;
一个Tile包含2个IOB,2个ILOGIC,2个OLOGIC和2个IOEDLAY,用于对双端(差分)信号配对;
IOB包含输入、输出和三态驱动,可配置为不同的I/O标准;IOB直连一对I(O)LOGIC,I(O)LOGIC包含数据I/O的逻辑资源和三态控制,I(O)LOGIC也可以通过调用相关原语配置为I(O)SERDES,实现数据的串并行转换。

4、什么是竞争与冒险现象?怎样判断?如何消除?

在组合逻辑中,由于门的输入信号通路中经过了不同的延时,导致到达该门的时间不一致叫竞争。产生毛刺叫冒险。
如果布尔式中有相反的信号则可能产生竞争和冒险现象。
解决方法:一是添加布尔式的消去项,二是在芯片外部加电容。

5、锁存器的特点:

(1)对毛刺敏感(使能信号有效时,输出状态可能随输入多次变化,产生空翻,对下一级电路很危险),不能异步复位,因此在上电后处于不确定的状态。
(2)锁存器会使静态时序分析变得非常复杂,不具备可重用性。(首先, 锁存器没有时钟参与信号传递,无法做 STA;其次,综合工具会将latch 优化掉,造成前后仿真结果不一致)
(3)在FPGA中基本的单元是由查找表和触发器组成的,若生成锁存器反而需要更多的资源。根据锁存器的特点可以看出,在电路设计中,要对锁存器特别谨慎,如果设计经过综合后产生出和设计意图不一致的锁存器,则将导致设计错误,包括仿真和综合。因此,在设计中需要避免产生意想不到的锁存器。如果组合逻辑的语句完全不使用 always 语句块,就可以保证综合器不会综合出锁存器。
(4)但如果锁存器和触发器两者都由与非门搭建的话,锁存器耗用的逻辑资源要比D触发器少(D触发器需要12个MOS管,锁存器只需6个MOS管),锁存器的集成度更高。所以在的ASIC设计中会用到锁存器。但锁存器对毛刺敏感,无异步复位端,不能让芯片在上电时处在确定的状态;另外,锁存器会使静态时序分析变得很复杂,不利于设计的可重用,所以,在ASIC设计中,除了CPU这高速电路,或者RAM这种对面积很敏感的电路,一般不提倡用锁存器。

6、同步复位,异步复位的各自特点:

同步复位

优点:
a、有利于仿真器的仿真。
b、可以使所设计的系统成为100%的同步时序电路,这便大大有利于时序分析,而且综合出来的fmax一般较高。
c、因为他只有在时钟有效电平到来时才有效,所以可以滤除高于时钟频率的毛刺。

缺点:
a、复位信号的有效时长必须大于时钟周期,才能真正被系统识别并完成复位任务。同时还要考虑,诸如:clk skew,组合逻辑路径延时,复位延时等因素。
b、由于大多数的逻辑器件的目标库内的DFF都只有异步复位端口,所以,倘若采用同步复位的话,综合器就会在寄存器的数据输入端口插入组合逻辑,这样就会耗费较多的逻辑资源。

异步复位
优点:
a、大多数目标器件库的dff都有异步复位端口,因此采用异步复位可以节省资源。
b、设计相对简单。
c、异步复位信号识别方便,而且可以很方便的使用FPGA的全局复位端口GSR。
d、无时钟歪斜问题、低电源消耗、平均效能而非最差效能、模块性、可组合和可复用性

缺点:
a、在复位信号释放(release)的时候容易出现问题。具体就是说:倘若复位释放时恰恰在时钟有效沿附近,就很容易使寄存器输出出现亚稳态,从而导致亚稳态。
b、复位信号容易受到毛刺的影响。

6、异步FIFO 的最小深度计算
{FIFO深度 /(写入速率 - 读出速率)} = {FIFO被填满时间} > {数据包传送时间}= {写入数据量 / 写入速率}
例:A/D采样率50MHz,dsp读A/D读的速率40MHz,要不丢失地将10万个采样数据送入DSP,在A/D在和DSP之间至少加多大容量(深度)的FIFO才行?
100,000 / 50MHz = 1/500s = 2ms
(50MHz - 40MHz) * 1/500 = 20k既是FIFO深度。
这是我在网上找的原文有兴趣的可以自己点开看看。
https://blog.csdn.net/u011412586/article/details/10241585

7、减法器/加法器实现除法

使用减法器实现除法
a[31:0]/b[31:0]
1 a_temp[63:0] = { 32’d0 , a[31:0]};
b_temp[63:0] = {b[31:0] , 32’d0};
2 if(a_temp > b_temp)
a = a – b + 1;
else
a <<1 ; 末位补0;
3 循环32次
a_temp[63:32] 为余数 a_temp[31:0]为商。

使用加法器实现除法
对于乘法,a * b 相当于是 对 |a| 做|b| 次连加, 或者对 |b| 做 |a| 次连加,但是,这里我们必须要注意,a 和 b 都有可能是负数。
对于除法,a / b 相当于是让|b| 自己加自己,然后我们设置一个计数器,当|b| 加自己大于 |a| 的时候,计数器停。但是,这里有可能会带余数(除不尽),这里,假设我们考虑的是四舍五入的方法。

8、低功耗设计:

a,门控时钟 b,控制模块的工作电压 c,合理选择器件 d,使用格雷码。

9、锁相环的组成

锁相环通常由鉴相器(PD)、环路滤波器(LF)和压控振荡器(VCO)三部分组成

编辑 标为违禁 删除 链接 更多选项...
shawn 头像
登录/注册后进行回答