跳转至

面试实战

关于面试的问题(面试官会针对你的简历提出细节的问题),你要保证你足够熟悉你简历中实现过的项目。


2025.2.28 苏州-识光SOPHOTON-主营激光雷达成像芯片

  1. 关于UART和IIC以及SPI通信协议的区别和联系问题:

  2. 关于简历中项目的问题:

  3. 数字示波器中,adc和dac芯片,使用什么协议与FPGA开发板进行连接的?在DAC芯片中,是怎么产生模拟波形的?比如如何产生的三角波数据,现场计算产生的三角波波形周期是多少? dac芯片使用的时tlc5620芯片,其与fpga通信不需要iic或者spi协议,他的芯片中,其输入引脚有vcc和gnd以及data、参考电压、ldac、load以及四个输出端口。在设计的时候,控制输出信号波形通过直接通过fpga串行传输给dac的data端以及将ldac和load的时序控制好即可,同时需要关注通常情况下ldac会置底,load端口在数据串行数据加载完后从高置底一个周期后拉高,芯片输出的波形数据才会更新。

    使用dac芯片实现一个dds信号发生器的方法,首先需要请阅读一下该芯片的精度,我用的是开发板自带的dac芯片,分辨率精度是8为,那么我是使用一个计数器,从0计数到255也就是2的8次方减一。当到达255的时候输出最高电压5v,当计数到0的时候,输出0v。以此类推实现一个dds信号发生器的锯齿波、三角波等简单的波形。 与此同时,还需要关注芯片支持的最高频率,对我们的系统时钟进行分频处理得到芯片输入时钟。再深一步就是考虑处理时序的建立时间、保持时间等,这些信息也是需要参考芯片手册的信息进行实现

    关于波形的周期问题,我们的系统时钟为50mhz,数据从0计数到255需要256个时钟周期,在从255计数到0也需要256个时钟周期,所以我们的一个波形时钟周期为T=20ns*(256+256)

  4. IIC是怎么通信的 iic是半双工协议,有两根线,scl和sda,通过器件地址进行选择不同的器件通信,在空闲状态下sda保持高电平,开始时在scl时钟上升沿,sda从高电平拉底到低电平及表示开始传输,接着发送一个字节数据(包括7为器件地址和1位的读写标识0表示写入数据,1表示读取数据),然后接收方会返回一个响应信号(ASK),接着会发送寄存器地址以及返回一个响应信号,最后发送数据值以及响应信号即可完成数据写入。在写入的过程中,sda数据在scl为低的时候改变,在scl为高的时候进行保持,从机设备正确接收到指令或数据后,会通过拉低SDA为低电平,向主机设备发送单比特的应答信号,表示数据或指令写入成功。若从机正确应答,可以结束或开始下一字节数据或指令的传输,否则表明数据或指令写入失败,主机就可以决定是否放弃写入或者重新发起写入。

    在数据的读取时,与写入时序相似,每次发送一个数据时必须需要接收方的一个响应信号即拉低sda作为应答。

  5. spi是怎么通信的 spi协议是全双工协议,一般有四根线需要连接,分别是时钟线、片选信号线、读数据线、写数据线。通过拉低需要通信的片选信号线进行选择不同器件传输交换数据

  6. 在以太网模块中,phy芯片的作用:

    phy芯片主要是在数据链路层中将并行数字信号转换成串行模拟信号,

  7. 在摄像头的项目中,sccb与iic协议的具体区别有哪些?

    首先他是一个与iic协议告诉相似的协议,主要的时序区别在读时序中,sccb不能进行连续读操作,必须在一次读操作完成之后发起总线停止信号,然后再开始信号才行(也就是称为称为“三相读”)。除次之外,iic协议在每次发送一个字节的数据后必须收到接收方的应答信号,而sccb协议则不在意需要应答信号,在datasheet中,应答信号部分被标记成don't care 的字样。如果我们只需要使用sccb协议写入寄存器值,可以直接使用iic协议写时序完成,如果需要使用sccb协议进行读数据的时候,需要在iic协议中添加一个总线停止信号才行。

  8. 在fpga实现以太网通信的过程中,你认为那个部分是自己最难实现的

​ 我认为当然时他的时序部分比较困难,主要在rgmii模块中,因为我们的千兆以太网算是一个高速接口,那么对数据的稳定性要求会十分严格,在rgmii模块中需要进行很多BUF的原语操作,例如时钟信号的、数据信号的、控制信号的BUF,另外,还需要克服跨时钟域处理的工作,这个主要会发生在mac层中,需要跨越系统时钟与phy时钟,需要通过FIFO将数据先写入在读取的操作。除此之外,就是数据的组包和解包的过程,这个工作发生在整个模块的搭建过程中,例如在fpga端需要发送一个信号到从机中,需要先将数据经过udp层、ip层、mac层以及rgmii层进行数据的组包,需要我们了解每一层接收到的数据结构以及每一帧每一位数据代表的含义和功能。最后,在mac层我耗费的时间是最多的,因为其中需要涉及到一个crc校验的工作,查阅了一些资料后,因为hdl代码编写比较啰嗦,直接使用了别人的代码。

  1. 你使用的dac实现dds的时候是怎么与fpga进行通信的?

我使用的tlc5620dac芯片,他的dac芯片,关于tlc5620dac芯片,他是一个并行输入,串行输出的芯片,并且他与fpga通信也很简单,不需要使用到iic或者spi协议,编写dac驱动模块时,只有clk需要进行分频到1mhz、复位使能时load置为高电平锁存数据使得输出电压保持不变,通常ldac会置底保持数据的更新,有4个串行输出电压通道以及一个data数据控制信号

  1. 介绍一下uart协议

uart通信协议也叫做通用异步串行收发器,有rx和tx两根线,没有时钟线,数据传输时两根线交叉连接即可。在数据传输过程中因为没有时钟,数据通过设置的波特率和起始位(低电平)和停止位(高电平)数据包进行数据对齐。其中涉及到发送数据包的帧结构以及波特率、波特率、波特等概念

总结:面试还得好好刻意去刷一些八股文面试题目,基础的东西一定好好了解透彻,不然虽然你做出来了,但是你没办法将它讲出来。最后好好将之前写的笔记进行读一遍,回忆一下,并且再看一遍野火fpga的基础教程视频


2025.3.7 瑞派宁-主营辐射探测与图像处理

这一家公司问的内容相比与上一家公司的内容,技术性内容相对来说会少了一些,多加了一部分未来的规划,对自己的评价以及给了很多自己自由发挥的回答。这一家公司基础性问题问的不多,基本上是根据自己简历中的项目随意问了一些。

  1. 描述一下简历中静脉血管检测的项目
  2. 描述一下简历中其他的项目
  3. 在以太网传输过程中,帧间隔是多少