前言
如果想参考本人的背景情况可见这篇概述
============================ 正文开始 ==============================
【时间线】
- 9.9 晶晨一面
之前把简历给了一个在里面的师兄,然后在大家都做了笔试时我没收到通知,我以为我又凉了,结果后期直接收到了面试邀约的邮件……
PS:红字表示我当时没答出来的问题,蓝字表示面试官/我的解答。
面经分享
1. 一面·技术面【30分钟】
电话面试,面试官人很好。
- 自我介绍
- CDC方法
- 低功耗设计方法
- 单口RAM实现同步FIFO的设计方法 -这个问题不太常见,但是工程上好像常用到,我知道一种方法,后面面试官补充了一个更好的方法,具体见【PS】
- 提问环节
a)加班程度 -先是被反问了一波能接受的加班程度,后面他公司时弹性工作制,不忙的时候10-8-5左右,忙的时候可能周六要过来,但最晚每天9点后公司就没什么人了。加班时间在不忙的时候可以换成调休
b)各个城市base的业务是不是不一样? -感觉分部门,成都这边最大的部门是视频编解码,面试官是视频图像处理的,还有一个部门是SOC的。图像处理部门成都这边人比较少(不到10人),但是上海那边人有十多个(暗示缺人)
c)后期面试安排 -应该只有一个HR了
【PS】:(假设数据都是8bit)
我的方法: 单口RAMx2 + regx1,我们规定:奇数地址对应数据存入RAM0,偶数地址对应输入写入RAM1。具体读写情况分为两大类:
[情况一]:同时读写 + 读写地址同为奇/偶。以读写地址同为奇为例,我们要同时完成2件事:
- 将当前的wr_data先存入reg,并拉高reg_vld以表示reg中有未存入对应RAM的数据;
- 从RAM0中取出当前rd_addr对应的rd_data。
假设下一时刻仍为同时读写,则此时的wr_addr和rd_addr应同为偶,则此时我们要同时完成3件事:
- 将此时wr_addr(偶)的wr_data写入reg,并拉高reg_vld;
- 将reg中存有的上一时刻的奇数wr_addr(奇)对应的wr_data写入RAM0中;
- 将此时rd_addr(偶)对应的rd_data从RAM1中读出。
[情况二]:并非同时读写。以只读不写 + reg_vld为高 + rd_addr为奇为例,因为这个模拟的是同步fifo,所以reg中此时存入的肯定为地址为偶的暂未存入RAM1的wr_data(因为fifo中的wr_addr和rd_addr肯定是顺序累加的 + reg中存有有效数据只会发生在wr_addr对应的RAM此时也在被读的时候),则此时我们需要干两件事:
- 将reg中的wr_data写入RAM0,并且将reg_vld拉低;
- 将rd_data从RAM1中读出。
若reg_vld没有拉高,则在只读的时候,只用访问对应的单口RAM将rd_addr对应的rd_data取出即可。同理,只写不读也是同理,这里不再赘述。
面试官的方法: 16bit单口RAMx2 + 16bit regx2,外界数据照常写入/读出,但是在我们设计的这个同步FIFO内部,以2个CLK为一个单位,进行一轮reg与RAM的读写交换。
以同时读写为例,我们将源源不断的wr_data顺序存入wr_reg,并在每个第偶数个时钟周期,将wr_reg中的2个8bit数据作为16bit的数据包,整体写入RAM;同理,在外界需要读 + rd_reg都是已经被读过的数据时,表明此时的rd_reg需要更新,我们将在每个第奇数个周期从RAM中取出16bit(2个8bit数据)数据放在rd_reg中,供外界读出。
2. 结果
十一期间HR电话问我考虑的怎么样了,我说等海思她说愿意等我,不过因为几乎没有考虑所以没有微信给HR说,HR也没跟我说过,就当拒了。
============================ 正文结束 ==============================