华为芯片与器件设计工程师(实习)一、二面

首先说一下这个是海思专场,虽然是武长地区的,但是我申请的岗位是深圳的,二面业务主管也说了,这个会同意安排,实习地点暂定

一面(技术)

一面相对简单一些,一开始上来面试官让介绍一下自己,五分钟时间讲自己的求学经历(可能是想针对这些经历发问吧),然后问了一下项目做过哪些逻辑,如果让你接触一个新的接口逻辑,你怎么去理解这个逻辑并实现还问有没有做过异步的逻辑,异步处理的几种方法(FIFO、握手、格雷码、多拍缓存),其次问到控制信号和数据信号传给下游异步器件,是怎么保证控制信号和数据信号经过异步处理后时序还是对齐的(这个没有答上来,她问我也是做过这样的没有,我之前还真没做过)。

随后为了看看我真的写过代码没有,就给我了一道题,大概像下面这样

1.always@(posedge clk or negedge rst_n)begin
		if(!rst_n)	din_dly	<=	0;
		else din_dly	<=	din;
		end
2.always@(posedge clk)begin
		din_dly	<=	din;
		end
3.always@(posedge clk )begin
		if(!rst_n)	din_dly	<=	0;
		else din_dly	<=	din;
		end

主要考察的是复位这里,1为异步复位,2为无复位,3为同步复位,同步复位不能在无时钟的时候正常复位,复位键应该是与其他信号无关联的。

二面(业务主管面)

二面问的范围比较广吧,一开始也是介绍自己,然后就先问有关C语言的,让你写一下20个随机数的排序(对于那些C++研发大佬而言随便写,我还是卡了一下),我用的最简单的冒泡排序,写完后问我还知道那些排序方法(快排,堆排序,插入排序,我只答了这几个,辛亏没有让我说原理,估计我只说得出快排的了),然后就是问我二叉树是什么,作用是啥(我说用在堆排序,哈弗曼编码,图的遍历)。随后问我学过什么与芯片这边有关联的东西,我说了一些课程,他问我对MIPS了解多少,我说我学过,然后问了MIPS有多少级流水线,这个我没有答上来,引用网上的回答吧:

经典的MIPS流水bai线分五级
(1)IF取指du(insturction fetch),从指令高速缓存(I-cache)获取下一条指令
(2)RD读取寄存器zhi(read register),读取该指令的dao源寄存器域指定的CPU寄存器的内容。
(3)ALU算术逻辑单元(arithmetic/logic unit)在一个时钟周期内完成算术或者逻辑操作。
(4)MEM访问内存(memory),该阶段指令可以读写数据高速缓存(D-cache)中的内存变量。
(5)WB写回寄存器(write back),将操作结果值写道寄存器堆中。

问我对计算机网络的了解,OSI的七层模型,我没有答全,主要是上层的顺序凌乱了,贴百度的图吧。
华为芯片与器件设计工程师(实习)一、二面_第1张图片

还问了TCP/IP的三次握手,太久没有看这方面的书了,只能继续百度(这个部门是做网络通信芯片的,类似路由器和交换机中的芯片,和博通公司有些类似):

第一次握手:建立连接时,客户端发送syn包(seq=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(seq=k),即SYN+ACK包,此时服务器进入SYN_RECV状态。
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据,在上述过程中,还有一些重要的概念:
(1)未连接队列
在三次握手协议中,服务器维护一个未连接队列,该队列为每个客户端的SYN包(seq=j)开设一个条目,该条目表明服务器已收到SYN包,并向客户发出确认,正在等待客户的确认包。这些条目所标识的连接在服务器处于 Syn_RECV状态,当服务器收到客户的确认包时,删除该条目,服务器进入ESTABLISHED状态。
(2)Backlog参数
表示内核为相应套接字排队的最大连接个数。SYN-ACK重传次数
三次握手协议
三次握手协议
服务器发送完SYN-ACK包,如果未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户确认包,进行第二次重传,如果重传次数超过系统规定的最大重传次数,系统将该连接信息从半连接队列中删除。注意,每次重传等待的时间不一定相同。
(3)半连接存活时间
是指半连接队列的条目存活的最长时间,也即服务器从收到SYN包到确认这个报文无效的最长时间,该时间值是所有重传请求包的最长等待时间总和。有时我们也称半连接存活时间为Timeout时间、SYN_RECV存活时间。

面试官说背景知识也很重要,不能只是会写代码,给我推荐了两本书:
计算机组成与设计硬件/软件接口,
计算机体系结构:量化研究方法(第5版)
后一本更加深奥一些。

听说我是做过FPGA的RTL设计,所以问我FPAG的资源有多少,FPGA的实现原理

FPGA采用了逻辑单元阵列LCA(Logic Cell Array)这样一个概念,内部包括可配置逻辑模块
CLB(Configurable Logic Block)、输入输出模块IOB(Input Output Block)和内部连线(Interconnect)三个部分。 现场可编程门阵列(FPGA)是可编程器件,与传统逻辑电路和门阵列(如PAL,GAL及CPLD器件)相比,FPGA具有不同的结构。FPGA利用小型查找表(16×1RAM)来实现组合逻辑,每个查找表连接到一个D触发器的输入端,触发器再来驱动其他逻辑电路或驱动I/O,由此构成了既可实现组合逻辑功能又可实现时序逻辑功能的基本逻辑单元模块,这些模块间利用金属连线互相连接或连接到I/O模块。FPGA的逻辑是通过向内部静态存储单元加载编程数据来实现的,存储在存储器单元中的值决定了逻辑单元的逻辑功能以及各模块之间或模块与I/O间的联接方式,并最终决定了FPGA所能实现的功能,FPGA允许无限次的编程。

LUT的应用(LUT指显示查找表(Look-Up-Table),本质上就是一个RAM。它把数据事先写入RAM后,每当输入一个信号就等于输入一个地址进行查表,找出地址对应的内容,然后输出。):网上查到的是什么灰度映射,其它就没有了。

还有一个题我也没有答出来,他问我数据依赖怎么解决原来 CPU 为程序性能优化做了这么多 ,只能先贴一个这个链接了解相关的知识了,至于数据依赖导致执行的速度变慢,这个我还没有查到好的答案。

你可能感兴趣的:(面试)