面试复盘

自我介绍:

自我介绍没有准备充分,具体可以将自己的教育经历讲述清楚,学过的相关课程,成绩排名,大致介绍自己的项目,将自己擅长的点侧重的说出来,引导面试官问;目前比较了解的比较深入的是MCDF的验证项目,就往这方面引导;本次面试由于没有对面试官进行引导,导致面试官主要将问题集中在了FPGA上;谈谈平时状态,为什么来实习,说说对公司对岗位的了解;

项目:
主要问了基于FPGA的千兆以太网图像显示设计;主要的问题体现在阐述项目的时候没有清晰的思路,没有把项目彻底清楚的讲明白;之后在准备面试之前一定要多练习将项目将清楚的能力,并且要准备好一个稿子;

Q1:eth_udp_rx_gmii模块接受到的是什么内容?怎么将行像素数据提取出来?缓存的是报文数据还是mac帧;

Q2:以太网有几层?各个层的功能是什么?

Q3:PC和FPGA板是怎么连接的?

Q4:在哪里解帧?

Q5:gmii/rgmii是物理层和数据链路层(mac层)的接口协议

Q6:物理层负责串并转换,解扰码

Q7:以太网网的突发?

Q8:带宽?千兆1000M

Q9:FPGA的选型?怎么考虑项目所需要的逻辑资源?

Q10:如果有异步时钟怎么处理?

Q11:前段有没有考虑静态时序

Q12:静态时序分析要满足哪些时序要求?

Q13:怎么通过STA将时钟速率跑上去?

Q14:什么是竞争冒险?怎么解决?

Q15:pll故障:失锁?什么造成的?会是什么现象?

复盘解答:

Q15:pll故障:失锁?什么造成的?会是什么现象?

当环路已处于锁定状态时,如果输入参考信号的频率和相位发生变化,通过环路的控制作用,压控振荡器的频率和相位能不断跟踪输入参考信号频率的变化而变化,使环路重新进入锁定状态,这种动态过程称为环路的“跟踪”过程。

而环路不处于锁定和跟踪状态,这个动态过程称为“失锁”过程。

什么造成的?1.当参考信号和被测信号的频率差大于捕获范围时(频率偏差过大);2.PLL输入时钟抖动超过规范。(将缓冲控制电压作为电源电压可以减小抖动)3.同步开关噪声(SSN)过大4.电源噪声:在VCCA上的过大的噪声可以引起高输出抖动,并引起失锁。5.PLL的输入时钟突然停止或有毛刺

会是什么现象? PLL可以捕获并锁定被测信号的频率和相位

Q14:什么是竞争冒险?怎么解决?

在一个组合电路当中,当某一个变量经过两条以上的路径到达输出端的时候,由于每条路径上的延迟时间的不同,到达终点的时间就会有先有后,这一现象称作竞争

在具有竞争现象的组合电路中,当某个变量发生变化的时候,比如说从 1 跳到 0,或者说从 0 跳到 1,如果真值表所描述的逻辑关系或者功能遭受到短暂的破坏,在输出端出现一个不应有的尖脉冲毛刺,这种现象就叫 冒险

冒险是由竞争造成的,而竞争是因为电路中的时延不同

怎么解决:1.输入端加入选通信号(高电平),针对 A+(~A) 的 1 型冒险,避开毛刺;2.输入端加入封锁脉冲信号(低电平),针对 A·(~A) 的 0 型冒险,避开毛刺。3.采用可靠性编码比如格雷码,每次只变化1位;

Q11-13:STA

静态时序平时接触的比较少,在面对200M的时钟时,对设计进行STA是必要的,需要梳理好STA的基础知识,并为项目做STA!

STA是一种验证方法,前提是同步逻辑设计;静态时序分析工具是通过路径计算延迟的总和,并比较相对于预定义时钟的延迟;仅关注时序间的相对关系而不是评估逻辑功能;目的是找出隐蔽的时序问题,根据时序分析结果优化逻辑或约束条件,使设计达到时序闭合主要识别的时序故障有:建立保持时间,恢复移除时间;最小和最大的跳变;时钟脉冲宽度和时钟畸变;等静态时序分析工具可以输出分析报告,根据分析报告进行优化逻辑设计,直到设计满足要求;

时序约束是指在逻辑综合、布局布线或静态时序分析时,在工具中指定信号的频率/周期、占空比、时延等约束条件;目标是根据约束条件来分析设计是否满足要求;

时序闭合:设计满足时序约束条件;

关键路径指同步逻辑电路中,组合逻辑时延最大的路径;对设计性能起决定性影响的时序路径;常用的时序优化方法包括pipeline,retiming;

典型时序路径:输入引脚->输出引脚;输入引脚->寄存器;寄存器->寄存器;寄存器->输出引脚;

T=tco+tdelay+tsu

若时钟周期大于T,触发器正常工作;

若时钟周期小于T,不满足建立时间,触发器可能会经历亚稳态

所以最高的时钟频率为f=1/T;

在综合过程中,时序约束被用于指导和控制逻辑综合,确保最终的电路满足设计时序要求.

修保持时间的方法简单,修建立时间的方法复杂困难,

修改建立时间的方法相对较为复杂,可以降频,优化电路路径、调整寄存器的位置

修改保持时间的方法相对较简单,可以通过增加延时元件或添加插入缓冲区等方式实现

修复建立时间违例:

在考虑建立时间违例的极限情况,我们需要保证数据到达的时间,至少比时钟边沿到达的时间,早一个setup time,而前一个寄存器的采样,又比后一个寄存器的采样,早一个周期,因此我们可以列出式子如下:

tclk-q + tlogic+tsetup<=tskew+T

tsetup <= T - tlogic - tclk-q + tskew

tclk-q是数据从前一个寄存器的clk到q的时间,tlogic是寄存器间的组合逻辑,tskew是前后寄存器时钟边沿到达的时间差

因此,解决建立时钟违例的方法,就是使等式的右边尽可能的大一些。
方法在于,比如增加tskew,clock通路上插入buffer减少寄存器之间的组合逻辑降低时钟频率以增加T更换DFF器件以降低tclk-q等

建立时间的检查可以确保移动最慢的数据也能及时到达并满足建立的标准,因此,它又被称为最大分析(max analysis)

修复保持时间违例:

在考虑保持时间违例的极限情况,我们需要保证数据改变的时间比时钟沿到来的时间,至少晚一个holdtime。数据改变所需的时间,对于前一个寄存器而言,是指第二个时钟边沿到来时的数据移动的时间,对于第二个寄存器而言,也是指第二个时钟边沿到来的时间,因此我们可以列出式子如下:

tclk-q + tlogic>=tskew+thold

thold <= tclk-q+tlogic-tskew

我们可以增加tclk-q的值换一些更慢的DFF,也可以增加tlogic的时间,减少skew也可以解决holdtime violation的问题。

但是,修hold time violation比修setup time violation更简单,因为只需要在组合逻辑路径上插入buffer,我们就可以很迅速的解决hold time violation问题。

保持时间的检查可以确保即使是移动最快的数据也不应该干扰其他数据,同时期望数据保持稳定。因此,数据路径计算最小延迟,被称为最小分析(min analysis)

裕度(slack)

裕度是指:满足电路最低建立时间、保持时间以外的额外的冗余量,因此:我们通常情况下希望,首先,电路是不能有违例的,其次,冗余量越大越好。

建立slack = 数据建立要求 - 最后一个到达的信号

保持slack = 最早到达的信号 - 数据稳定的要求

Q10:如果有异步时钟怎么处理?

无法判定两个时钟间相位时,则可以称这两个时钟为异步时钟;

在不同的时钟信号下,两个模块之间进行数据传输,为了确保系统的稳定性和正确性,需要进行跨时钟域同步处理;

常见方法:

单bit:两级触发器同步,只适用于慢到快;如果是快到慢,会相对复杂;

多bit:采用异步fifo,异步双口ram;增加握手信号;格雷码转化;

Q9:FPGA的选型?怎么考虑项目所需要的逻辑资源?

1.FPGA厂商的选择

2.芯片系列的选择

3.芯片资源:逻辑单元、DSP、BRAM、I/O等数量、LUT、GT高速收发器、PLL锁相环、片上晶振;

在选型时,因为FPGA设计还未开始,很难确定FPGA器件的规模。通常的做法是,针对本次设计中想要用的FPGA器件系列,重新编译之前的某些功能模块,以便获得一个大致正确的规模估计。如果设计中使用了IP,这些IP核也需要编译后,加入到总面积估算中。再将需要加入的新功能进行设计估算。两方面加起来后,在此基础上预估再增加20%-30%,基本上可以满足之后的设计需求。甚至有时,现有的嵌入式逻辑分析仪也需要耗费内部存储模块,调试过程的资源消耗可能也需要考虑在内。若FPGA留有余量:避免时序收敛对设计的影响,减少开发周期,快速进入板上调试阶段;则对设计后期修改或产品版本更新所增加的逻辑单元,就能比较容易的被接纳;设计在FPGA上正常运行后,如果FPGA上有大量未使用的资源,此时可以考虑换区一个比较小的器件以降低成本,这时候要注意的就是引脚在移植代码时的修改问题。

4.封装信息:第一个就是可用的I/O口的数量。第二个就是封装的尺寸。I/O数量是一个必要的条件,先要根据这个条件筛选出可以用的芯片。然后在筛选出来的芯片中,再根据封装类型,尺寸和pitch尺寸选择合适的芯片。在封装尺寸符合要求的情况下,尽量选择有利于PCB设计和生产的封装。

5.运算速度:芯片的速度等级取决于芯片内部的门延时和线延时,这两个因素与晶体管的长度L和容值C有关,但最终取决于芯片的生产工艺。芯片的速度等级不是专门设计出来的,而是在芯片生产出来后,通过实际测试标定出来的;速度快的芯片在芯片总产量中的比率很低,所以一般价格也就相应地高。

6.功耗

7.成本

8.Eda工具的使用,以及厂家的技术支持包括ip核资源;


Q2,3,5,6,7:

对以太网的了解只局限于简单的使用,对底层的逻辑不清楚,需要加强对以太网的学习

1.应用层:

应用层是网络服务与最终用户的接口。该层的主要功能是直接向用户提供服务,完成用户希望在网络上完成的各种工作。该层的各种应用程序协议有HTTP(超文本传输协议)、FTP(文本传输协议)、TFTP(简单文本传输协议)、SMTP(简单邮件传输协议)、SNMP(简单网络管理协议)、DNS(域名系统)、TELNET(远程终端协议)、HTTPS(超文本传输安全协议)、POP(邮局协议版本3)、DHCP(动态主机配置协议)。

2.表示层:

表示层是对来自应用层的命令和数据进行解释,对各种语法赋予相应的含义,并按照一定的格式传送给会话层。该层的主要功能是数据格式的处理,协商和建立数据交换的格式,解决个应用程序之间的再数据格式表示上的差异;数据的编码,处理字符集和数字的转换;压缩和解压缩,减少数据的传输量;数据的加密和解密,提高网络的安全性。压缩解压格式有JPEG、ASCII、EBCDIC等。

3.会话层:

会话层负责建立、管理和终止表示层实体之间的通信会话。该层的具体功能有会话管理,允许用户在两个实体设备之间建立、维持和终止会话,并支持它们之间的数据交换;会话流量控制,提供会话流量控制和交叉会话功能;寻址,使用远程地址建立会话连接;出错控制,接收来自传输层的数据,并负责纠正错误。会话层的安全协议有SSL(安全套接字层协议)、TLS(安全传输层协议)。

4.传输层:

传输层提供建立、维护、拆除传输连接功能,起到承上启下的作用。该层具体功能有向用户提供可靠的端到端的差错和流量控制,保证报文的正确传输,同时向高层屏蔽下层数据通信的细节,即向用户透明地传送报文。传输层的协议有TCP、UDP。

5.网络层:

网络层进行逻辑地址寻址,实现不同网路之间的路径选择,控制子网的运行。网络层的具体功能是数据链路层的数据在这一层被转换为数据包,然后通过路径选择、分段组合、顺序、进/出路由等控制,将信息从一个网络设备传送到另一个网络设备。网络层的协议有ICMP(互联网控制信息协议)、IGMP(组管理协议)、IP(IPV4、IPV6)(互联网协议)、安全协议、路由协议等。

路由器

路由(routing)是指分组从源到目的地时,决定端到端路径的网络范围的进程 。路由工作在网络层的数据包转发设备。路由器通过转发数据包来实现网络互连。在我国绝大多数路由器运行TCP/IP协议。路由器通常连接两个或多个由IP子网或点到点协议标识的逻辑端口,至少拥有1个物理端口。路由器根据收到数据包中的网络层地址以及路由器内部维护的路由表决定输出端口以及下一跳地址,并且重写链路层数据包头实现转发数据包。

6.数据链路层:

数据链路层建立逻辑连接、硬件地址寻址、差错校验,将比特组合成字节进而组合成帧使用链路层地址(以太网使用MAC地址)来访问介质,并进行差错检测。数据链路层的地址解析协议:ARP、PARP(反向地址转换协议)。

以太网交换机

以太网交换机是基于以太网传输数据的交换机,以太网采用共享总线型传输媒体方式的局域网。以太网交换机的结构是每个端口都直接与主机相连,并且一般都工作在全双工方式。交换机能同时连通许多对端口,使每一对相互通信的主机都能像独占通信媒体那样,进行无冲突地传输数据。

交换机在端口上接受计算机发送过来的数据帧,根据帧头的目的MAC地址查找MAC地址表然后将该数据帧从对应端口上转发出去,从而实现数据交换。

                        

7.物理层:

物理层建立、维护、断开物理连接,在设备之间传输比特流,规定了电平、速度和电缆针脚。物理层的主要功能是利用传输介质为数据链路层提供物理连接,实现比特流的透明传输

集线器的英文称为“Hub”。“Hub”是“中心”的意思,集线器的主要功能是对接收到的信号进行再生整形放大,以扩大网络的传输距离,同时把所有节点集中在以它为中心的节点上。它工作于“物理层”。集线器与网卡、网线等传输介质一样,属于局域网中的基础设备;

pc机与fpga通过网口RJ45连接,在物理层发生数据交互

从数据传输角度来看,控制器(FPGA)和 PHY 侧芯片实现以太网传输的数据链路两端,有 3 种主要的接口形式。这 3 种接口形式主要是 MII,GMII 和 RGMII。

集线器(HUB)是一种网络共享媒体,所谓网络共享媒体,即在单一时间点内, 仅能被一部主机所使用。

以太网是不可靠的,这意味着它并不知道对方有没有收到自己发出的数据包,但如果他 发出的数据包发生错误,需要进行重传。以太网的错误主要是发生碰撞,碰撞是指两台机器 同时监听到网络是空闲的,同时发送数据,就会发生碰撞,碰撞对于以太网来说是正常的。 假设一个局域网内有 A,B,C,D 四台网络设备,示意图如下。

1.监听媒体使用情况 (Carrier Sense):A 主机在发送网络封包前,需要先对网络媒体 进行监听,确认没有其他设备在使用后,才能够发送出讯框;

2. 多点传输 (Multiple Access):A 主机所送出的数据会被集线器复制多份,然后传送 给所有连接到此集线器的其他网络设备。也就是说,A 主机送出的数据,B、C、D 三个计算机都能够接收的到。但由于目标是 D 设备,因此 B 与 C 会将此讯框数据丢弃,而 D 设备则会抓下来处理;

3. 碰撞侦测 (Collision Detection):该讯框数据附有检测能力,在 A 主机发送给数据过程中,若其他主机例如 B 计算机也刚好在同时间发送讯框数据时,那么 A 与 B 送 出的数据碰撞在一块(出车祸),此时这些讯框就会损毁,那么 A 与 B 就会各自随 机等待一个时间,然后重新通过第一步再传送一次该讯框数据。

要保证以太网的重传,必须保证 A 收到碰撞信号的时候,数据包没有传完,要实现这一 要求,A 和 B 之间的距离很关键,也就是说信号在 A 和 B 之间传输的来回时间必须控制在一 定范围之内。

最小数据帧的设计原因和以太网电缆长度(以太网的最大长度限制为 2500m)有关,为的是让两个相距最远的站点能够感知到双方的数据发生了碰撞

最早的以太网是通过 Hub 或集线器来工作的,在任意时刻只能有一台主机发送,这种共享方式发送效率很低,而现代高速交换机则让每个连接交换机的主机工作在独占模式, 带宽独享,可以同时收发,而且现在早已不是早期的10Mbps的带宽,而是1000M、10000M, 即使发送大包也不会影响别的主机,影响的只是交换机的接收和发送队列,既然发送大包效率要比小包效率搞,而且特定的应用也有发大包的需求,网卡、交换机、路由器网络接口可以实现更大的 MTU,可以达到>9000 字节的大小,我们称这种远大于标准以太帧尺寸的帧为巨型帧

Q1,4:

没有清晰的将模块给面试官讲清楚,即使自己确实明白,但是在准备的时候也要锻炼表达清楚的能力,甚至可以为介绍项目准备一个稿子

IDLE          = 9'b000000001,

RX_PREAMBLE   = 9'b000000010,

RX_ETH_HEADER = 9'b000000100,

RX_IP_HEADER  = 9'b000001000,

RX_UDP_HEADER = 9'b000010000,

RX_DATA       = 9'b000100000,

RX_DRP_DATA   = 9'b001000000,

RX_CRC        = 9'b010000000,

PKT_CHECK     = 9'b100000000;

通过状态机配合各个状态的计数器完成转态跳转;

当检测到gmii_rx_valid由低电平调至高低平时,IDLE 跳转至 RX_PREAMBLE;

为以太网帧的每一个部分都设置对应的寄存器,对传入的帧分部分进行缓存;

当状态跳转到RX_DATA时,对应的计数器是cnt_data,状态跳转条件是(cnt_data == rx_data_length - 1'b1)rx_data_length由ip帧头中的ip帧长度通过计算得到;

//payload_valid_o <= 1'b1;payload_dat_o   <= rx_data_dly2;

输出端口数据,并且将valid拉高;不需要对报文进行缓存

本文为复盘贴 不为大家提供技术参考 上面记的东西会比较杂乱 成体系的技术笔记会在其他帖子发布 如果有大佬发现错误或者有经验分享欢迎评论私信 有25届毕业的研究生欢迎交流学习心得

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐