
写这篇面经的时候距离我拿到2021年英伟达暑期实习芯片设计方向的offer已经过去了一段时间。当时我在网上搜了一圈发现专门写芯片设计方向实习面试的内容并不多大多是软件岗的经验分享所以这篇稿子我一直想补上。英伟达的芯片设计岗面试风格和互联网公司的软件工程师面试差别非常大更偏向硬件基础、时序直觉、体系结构认知和现场分析问题的方式。这篇内容我尽量按时间线展开把每一轮问过的问题、我的答题思路、以及事后复盘发现的问题都写清楚适合正在准备数字IC、芯片验证、或者对GPU硬件开发感兴趣的同学参考。需要注意这是2021年的经历招聘流程和岗位划分现在可能已经调整但技术考点和面试官的考察逻辑绝大多数还是稳定的。如果你正在准备2025年或更后面的实习面试这份面经依然有很强的参考价值。1. 先想清楚英伟达芯片设计暑期实习到底在招什么人1.1 岗位方向不等于只有数字前端很多同学看到“芯片设计”四个字第一反应就是写Verilog、做前端逻辑设计。但英伟达这类GPU公司的芯片部门岗位拆分其实非常细数字前端只是其中一环。我在投递时仔细看过岗位描述同一类“芯片设计暑期实习”下面可能包含逻辑设计、功能验证、DFT可测性设计、物理设计、时序收敛、CAD工具开发甚至架构研究等多个方向。建议投递前把JD逐条读一遍确认对方在招什么方向的人。举个典型的例子我当时投的是“ASIC Design Intern”但面试过程中也问到了不少验证和低功耗的知识。原因很简单芯片设计是一个链条前端设计定RTL验证团队要验证功能DFT要插扫描链后端要做place and route任何一环脱离上下文都做不好。面试官不指望实习生什么都精通但希望你清楚自己的工作在整颗芯片流程里处于什么位置。这一点在面试中表达出来会比单纯背知识点加分很多。1.2 面试官最看重的四种能力我和几位一起实习的同学交流过大家总结下来英伟达的技术面试官在实习生身上最看重的其实是四种能力而不是某一道题的标准答案。第一是基础是否扎实。时序分析、亚稳态、跨时钟域、同步FIFO这些概念必须像条件反射一样熟悉。面试官问setup time不是想听你背出定义而是希望你能推导出公式能说出违例了怎么修。第二是代码能力是否真实可落地。Verilog和SystemVerilog的语法只是表层更要紧的是知道什么代码能综合、什么代码只用于仿真、阻塞赋值和非阻塞赋值到底有什么区别。面试官很容易从一段手撕代码里看出你是真写过电路还是只背过语法。第三是体系结构有没有概念。GPU公司天然关心并行计算、Cache层次、访存带宽、流水线冒险这些内容。这不是要求你把《计算机体系结构》整本书背下来而是面对一个实际问题时你能知道瓶颈大概出现在哪里。第四是沟通方式是否清晰。远程面试时从你怎么描述一个项目到你怎么在白板上边画图边讲思路都在被考察。芯片设计是团队协作非常紧密的工种说不清自己的方案后面就很难一起工作。2. 从投递到offer完整流程与每一轮复盘2.1 投递时间线和面试环节概览我是2021年1月底投的简历3月中旬收到网上测试链接3月下旬完成第一轮技术面试4月初连续安排了两轮面试4月中旬拿到口头offer之后HR电话确认了入职时间和实习薪酬。整体节奏不算特别快但每一轮之间的间隔很短所以准备不能松懈。网上测试部分我没有遇到特别偏门的题目主要是数字电路基础、逻辑题和一点点验证思维的选择题。真正有区分度的是后面的几轮视频面试。我整理了一个大概流程表方便后面准备的同学有个心理预期轮次形式大致时长考察重点简历筛选网申无项目匹配度网上测试在线答题60分钟左右数字基础、逻辑第一轮技术面视频电话45分钟项目细节、基础概念第二轮技术面视频在线编辑器60分钟Verilog手撕、时序第三轮技术面视频白板60分钟体系结构、开放设计HR面视频30分钟软素质、入职时间每一轮具体面试官可能不一样有些组还会在中间加一轮笔试或加面但大体框架就是这样。2.2 第一轮技术面电话里的基础问题第一轮更像是简历扫描加基础能力确认。面试官先让我做了三分钟自我介绍接着直接盯着简历里的项目问。我那段时间的主要项目是一个简单的RISC-V处理器流水线和一个带AXI接口的外设模块不算复杂但面试官问得很细。他问的问题包括流水线里的数据冒险你是怎么处理的如果使用forwarding还解决不了该怎么办AXI接口的握手信号需要满足什么关系如果两个模块时钟频率不一样数据交互怎么做什么是亚稳态怎么消除这些问题现在看起来很常规但当时的我确实有几处答得不够干脆。比如讲异步FIFO深度时我在电话里从“大概取32”开始解释面试官追问“这个32是怎么来的”我一下就卡住了。他没有批评我只是换了个方式提醒你回去可以想想设计一个FIFO时深度到底由什么决定。现在回头看这就是典型的面试官在帮你补全知识面而不是非要考倒你。2.3 第二轮技术面手撕代码和时序分析第二轮是真正的硬仗。面试官和我远程视频共享了一个简单的在线编辑器页面要求我在里面直接写Verilog没有任何自动补全和编译工具。最开始是一道边沿检测题输入一个异步信号输出它上升沿和下降沿的单周期脉冲。这类题比较简单但要注意写清楚时序逻辑和组合逻辑的边界。我用了两级寄存器打拍到din_d组合输出用din与上not din_d。在实际写代码前我先把输入输出、时钟复位和波形大概画出来讲给面试官听这一步很关键相当于给自己梳理思路也让面试官看到你不是凭空写代码。接着面试官问了一个经典的奇数分频问题能不能用Verilog实现一个占空比50%的三分频电路。这个问题如果只靠上升沿计数输出占空比肯定不是50%必须结合下降沿产生辅助时钟再做组合。我在白板上画了计数器和两个辅助信号的波形然后给出RTL实现思路。面试官更关注的不是代码能不能编译而是你是否理解为什么需要双边沿逻辑。最后一道题是手写同步FIFO并分析深度应该怎么确定。这个属于数字IC面试的经典大模块涉及读写指针、满空判断、计数器逻辑等。我写完基础代码后面试官问了一句假设对方模块一次突发写入64个数据同时读侧每拍能读1个但会偶尔暂停FIFO深度该怎么取我当时答得比较粗糙只说了要看写速率和读速率的差值。后来复盘才把公式理清楚深度要大于突发写入量同时减去突发期间读侧能够读走的数据量还要留余量。这个问题在后面的章节我会详细说。2.4 第三轮技术面体系结构和开放设计第三轮面试更像技术探讨而不是标准答题。面试官工程师背景很深上来没让我自我介绍直接在白板上画了一个简单的五级流水线问我数据冒险和分支冒险分别怎么处理如果分支预测失败应该在哪个阶段冲刷流水线。我按标准思路答了forwarding、stall和分支预测缓冲面试官听完点点头接着抛了一个更开放的问题假如要设计一个多线程并行计算单元有4个线程同时在跑但DRAM只有一个控制器你会怎么分配带宽这个问题没有标准答案考验的是你会不会从访存冲突、线程调度、Cache命中率这些维度去分析。我当时用了“给高优先级线程更高权重同时用硬件调度器把访存请求做合并”的思路面试官又追问如果两个线程同时访问同一块地址怎么办。我说可以用多Bank存储避免冲突也可以让仲裁器合并相同地址的访问。虽然没有分条列出优缺点但面试官看起来更看重分析过程。这类问题准备的方法只有一个平时多问自己“如果让我设计一个模块我会先想什么”。2.5 HR面看似轻松但别掉以轻心到了HR面技术内容基本不问了但也不是纯聊天。HR问了我的专业排名、实习出勤时间、能不能接受远程入职、之前有没有面过其他公司、目前有哪些口头offer。这些问题听上去随意其实会影响最后的offer审批和定级所以不要随口乱报。她还问了一个经典的软素质问题如果项目负责人给了你一个截止日期但你发现实际时间根本不够提前汇报会显得不靠谱你会怎么办我当时的回答是先拆解工作任务找出并行和串行部分把自己能压缩的时间先压缩再尽早和负责人同步风险和需要的资源。HR比较认可这种“带着方案反馈问题”的态度。我在后来的实习中也发现提前同步风险确实比拖到最后一刻再解释要靠谱得多。3. 高频考点与典型题目拆解3.1 时序与亚稳态所有数字面试的第一关无论你面试哪个芯片设计岗setup time和hold time几乎是必问的基础题。面试官会逐步深入先问定义再问检查方法再问违例怎么修。我的建议是把公式的物理含义真正搞明白而不仅仅是背下来。简单归纳一下setup time是数据需要在时钟有效沿到来之前保持稳定的时间hold time是时钟有效沿之后数据还需要保持稳定的时间。如果数据变化太晚setup违例如果数据变化太早hold违例。修复setup违例的思路通常是降低时钟频率、减少组合逻辑级数、在关键路径上插流水线寄存器或者在EDA工具里做逻辑优化。修复hold违例则更多靠后端在数据通路上插buffer延迟数据到达时间这一点前端工程师不一定直接操作但要理解为什么hold修复和时钟频率没有直接关系。亚稳态是所有跨时钟域问题的起点。当触发器的建立保持时间不满足时输出可能进入一个既不是0也不是1的中间状态而且这个状态需要额外时间才能稳定。两级同步器并不是消灭亚稳态而是通过额外的寄存器给亚稳态至少一个时钟周期来恢复从而降低下一级采样到异常值的概率。面试中还可能追问MTBF平均无故障时间这个概念只需理解即可同步器级数越多、时钟频率越低MTBF越长但不存在绝对安全。3.2 跨时钟域单bit、多bit和FIFO跨时钟域CDC是芯片设计面试的重灾区因为实际芯片里几乎不可能只有一个时钟域。面试官问到CDC通常会从最简单的单bit开始。对于单bit信号最常用的方法是两级同步器。但面试官会追问如果信号是快时钟域的单周期脉冲传到慢时钟域两级同步器可能采样不到怎么办这时候就要用脉冲展宽或者握手的方式。把快域的脉冲信号先拉高并保持一段时间慢域采样到后再反馈一个ack信号快域看到ack后拉低。这个握手流程如果能在白板上画出来基本就能过关。对于多bit信号不能直接每个bit都加两级同步器因为不同bit到达对端的时间可能偏差导致采样到中间状态。异步FIFO就是最常见的安全方案。面试官常问为什么异步FIFO的读指针和写指针要转成格雷码因为格雷码相邻地址只有一位变化即使在临界采样时采到旧值也最多造成“超前判断”或“滞后判断”不会读错数据。但格雷码也有边界问题比如指针在最大值和最小值之间回绕时高位的变化可能导致读指针数量判断出错所以异步FIFO还要额外处理空满标志才够安全。我在面试中遇到过一个进阶问题同步FIFO的深度怎么计算。这个问题的最佳切入点是精彩突发量。假设写侧一次连续写入B个数据写时钟频率是F_w读时钟频率是F_r读侧每拍最多读1个但可能有暂停那么深度至少要大于B减去写突发期间读侧能读出的数据量。最保守的深度就是B本身。现场做题时把公式写出来比直接背“深度等于突发量”要显得专业得多。更多时候面试官想看你能不能想到最坏情况。3.3 Verilog/SystemVerilog代码题背后的考察逻辑我在二轮技术面里写过边沿检测这类简单题目考察的是“写代码时会不会把时序和组合逻辑混在一起”。很多同学喜欢在一个always块里同时描述两种逻辑或者靠赋值顺序解决竞争问题这在小例子里能用但在大芯片项目里绝对是隐患。面试官想听到的是你用非阻塞赋值描述时序逻辑用阻塞赋值或assign描述组合逻辑并且能解释为什么。比较常见的代码题还有状态机比如检测101序列、交通灯控制、独热码编码等。关键是先画状态转移图再定义状态编码再写三段式状态机。三段式的好处是输出和状态跳转分开代码清晰时序也好收敛。如果面试官问“为什么状态机编码用独热码”你可以回答允许一个时钟周期内状态位直接切换组合逻辑更小功耗更低缺点是状态位多面积大。但要注意这些都要根据模块规模权衡。SystemVerilog在实习面试里倒不会要求写太多复杂语法但会问interface和class的了解程度。这通常和验证相关因为现在大量RTL验证都用UVM搭环境interface用来封装一组信号避免模块端口写成一长串class用来生成激励和计分板。哪怕你不是投验证岗也建议懂一点因为面试官可能突然问“如果你做前端设计怎么和验证团队配合”。3.4 低功耗设计GPU公司问得最多的话题之一英伟达做GPU功耗是产品竞争力的核心所以面试官对低功耗知识的兴趣明显高于普通芯片公司。这个问题常以“你做过哪些低功耗设计”或者“看看这个模块怎么降功耗”的形式出现。最常见的答案是时钟门控clock gating。基本原理很简单当模块没有计算任务时把要送到寄存器的时钟关掉动态功耗就能按比例下降。标准单元库里通常会有专门的ICG单元因为直接把时钟与逻辑门容易产生毛刺导致寄存器误触发。这里有个容易忽略的知识点ICG单元用锁存器加与门结构来保证时钟开启时不会被毛刺干扰。面试官不会要求你画mos管级电路但你需要知道为什么不能随手写一个assign clk_gated clk enable。再深入一点就是操作数隔离、门控数据通路、多电压域、电源门控、DVFS动态调频调压等概念。面试里如果被问到“降低功耗但不牺牲太多性能的方法”我会这样答先用工具识别功耗热点再看哪些模块可以在空闲时被时钟门控关键路径上的寄存器尽量保持高性能非关键模块用较低电压运行。DVFS的价值在于能够根据负载动态切换工作点而不是永远跑在最高频率上。回答时体现出“性能和功耗是折中”的意识比直接罗列术语更有用。3.5 体系结构与GPU基础没做过项目也能刷出来的认知芯片设计岗面试里出现计算机体系结构的问题其实很合理。就算你只做某个模块也要知道它在GPU这个大系统里承担什么角色。面试官问过我最基础的Cache映射方式我当时答了直接映射、组相联和全相联的区别并提到组相联能降低冲突miss但会稍微增加比较逻辑和面积。面试官接着问Cache在GPU里为什么比CPU更复杂我给了两个方向一是GPU要服务大量并行的线程缓存需要更高带宽二是纹理缓存等特殊缓存有访存局部性优化需求。SIMT单指令多线程和SIMD单指令多数据的区别也是高频题。我总结下来GPU里的warp就是一个调度单位一个warp里的线程执行同一条指令但各自有自己的寄存器和数据路径。如果分支发散不同线程走不同分支必须做mask处理效率就会下降。面试时能说清楚这个概念面试官基本就会确认你对并行计算有基本认识。另一道开放题考生常碰到的是如果两个数组求和GPU为什么可能比CPU快可以从并行度、访存带宽和延迟隐藏来分析。CPU依赖流水线和乱序执行GPU则靠大量线程切换来掩盖访存延迟。你能提到“用线程并行掩盖延迟”而不是简单回答“GPU核多”就已经超过了很多人。准备这些内容不需要深入CUDA编程但建议看一点NVIDIA官方的架构说明文档建立基本概念。4. 我在面试中踩过的坑以及怎么补救4.1 简历上的每个数字都要经得起追问我面试中第一次明显卡壳就是被问到项目里的FIFO深度怎么确定。因为简历上写了一句话“设计了一个深度为32的异步FIFO用于跨时钟域数据传输”。面试官并没有问我32这个数字对不对而是问为什么是32为什么不是16或者64。我当时只答了“因为看突发量大概选了32”这个回答其实跟没答一样。事后整理才发现FIFO深度应该由写侧最大连续写入量、读侧最大连续读取量、读写频率差、以及流水线停顿情况共同决定。如果当时我能拿出一张简单表格列清楚两个时钟频率、一次burst长度、读侧反压概率就能给出一个合理的计算过程。所以我的建议是简历上每一个数字你都要能说出它的来源、计算过程、以及如果条件变化会怎么偏移。这比多背一道题更重要。4.2 手撕代码不是拼手速是拼交流二轮手撕状态机时我犯了个小错误一上来就直接写代码没有先和面试官确认输入输出。结果写到一半自己发现状态转移没画清楚又回头改浪费了不少时间。后来面试官说了一句让我印象很深的话“在公司里你写代码前也要先和同事对齐接口定义不然返工成本更高。”这其实是很多人的通病总觉得面试手撕代码就应该是闷头写完。但面试官更愿意看到的流程是先确定模块接口——比如输入信号、输出信号、时钟复位——再画出功能波形或状态图最后才落到代码。如果一开始没想清楚“遇到不合法输入怎么办”半路再改设计代码自然会乱。我后来再遇到手撕代码题都会先用两分钟把接口和边界条件说清楚再动手写效率反而高了很多。还有一个细节是远程面试的在线编辑器没有语法高亮和补全所以写代码时命名尽量短一点缩进保持一致。面试官会通过共享屏幕观察你的编码习惯乱糟糟的代码即使功能对了也很难给人留下好印象。4.3 追问链才是真正的知识网络面试结束后我习惯把所有被追问过的问题记下来。后来发现面试官非常喜欢沿着“应用场景”向下追问而不是问你“是什么”。例如如果问了“异步FIFO怎么设计”下一问往往是“为什么用格雷码”再下一问是“格雷码能完全消除亚稳态吗”再往下可能是“满空信号怎么判断会不会出现假满假空”。这条追问链其实是很好的学习工具。每次被问倒就说明知识链条里存在一个断点。不要只在网上搜个答案就完事而是把问题记成卡片比如“为什么要用两级同步器”“快时钟到慢时钟怎么传单脉冲”“多bit跨时钟域为什么不能每个bit单独打两拍”。当你能看着一条链路从头讲到位就说明这个知识真的内化了。4.4 远程面试的技术细节2021年因为特殊情况大部分面试都是远程视频。远程面试和线下有一点很不一样你没有办法从面试官的表情里获得及时反馈只能靠语音和共享屏幕。所以有两件事很重要。第一调好设备和网络。提前一天测试摄像头、麦克风、在线编辑器避免面试开始后才发现共享屏幕权限没开或者浏览器不支持。面试中断一次整个思路都会断掉。第二讲题时不要对着屏幕念答案要习惯对着摄像头说话。我当时也会在草稿纸上画图但会先问一句“我可以共享画板或者直接在白板上画吗”让面试官有参与感。还有一个细节是英文自我介绍要提前准备即使面试官看到中文简历也可能会让你用英文讲一段项目。不需要多流利但要把专业术语说准确。5. 如果你想复现这条路两个月准备路线5.1 准备阶段怎么排期我自己的准备周期大约是两个月前松后紧真正见效的其实是最后三周。如果你现在还有时间我建议把准备过程拆成三段每周都有明确产出。第一段花三周梳理基础重点看数字电路时序、跨时钟域、Verilog语法。这个阶段不要只看书每看完一个知识点就在纸上画一张图或者写一段小代码比如自己实现一个同步FIFO、一个异步FIFO、一个状态机。第二段花两周做项目复盘和模拟面试把简历里的项目写成逐字稿包括项目背景、个人分工、关键指标、踩过的坑再找人互相模拟提问。第三段花一周刷题和查漏补缺主要练手撕代码、回顾错题、整理追问链。面试前三天只做轻量复习不要再给自己增加新知识保持脑子清醒更重要。5.2 平时怎么练项目表达很多人明明做过不错的项目面试时却讲得像流水账。这里分享一个我一直在用的表达框架背景—问题—方案—验证—取舍。一句话说清楚背景一两句话说明要解决什么问题接着讲你选了什么方案为什么选这个方案最后给出验证结果比如面积、功耗、时序或者仿真波形。最关键的是“取舍”这一步面试官非常喜欢问“你这个方案有什么缺点”。如果能在第一遍讲项目时主动说出缺点反而会让面试官觉得你有工程判断力。举个例子如果你做过一个带状态缓存模块的加速器面试官问为什么不直接用SRAM你可以说SRAM速度快但是面积大而且需要额外的时钟门控策略所以我先用寄存器堆实现等流量模型验证后再决定是否换SRAM。这种回答展示的不仅是知识点而是工程决策能力。5.3 关于转正和后续发展最后说一个很多同学关心的点暑期实习有没有转正机会。我在英伟达实习时身边的同学普遍很认真因为实习结束时部门通常会根据项目完成度、工程协作能力和基础能力做综合评估表现好的会拿到return offer。即使最后没有转正这段实习经历对秋招也是极大的加分项尤其是“在GPU公司完整参与过一个芯片模块的流程”这件事写在简历里比单纯说“熟悉Verilog”要有说服力得多。但我也建议不要把转正当成唯一目标。暑期实习更像是一次低成本试错你可以亲身感受芯片设计流程的真实状态判断自己到底喜欢前端、验证、还是后端方向。很多知识在面试时只停留在概念阶段实习后才能真正理解比如为什么芯片流片一次这么贵为什么验证时间比设计时间还长为什么一个RTL改动需要走那么多流程。这些体验比一个offer本身更值钱。最后分享一个我至今都在用的方法。每次面试结束不要急着放松先把面试官追问过的问题整理成一条追问链。比如“异步FIFO用什么同步”背后是“多bit跨时钟域怎么处理”再往下是“格雷码有什么缺陷”“空满标志怎么判断才安全”。把这条链补全你的知识才是真的长在身上。准备面试的过程其实就是在给自己画知识地图地图越细下一次被问倒的概率就越低。祝你也能拿到心仪的offer。