ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

英伟达芯片设计实习面试:跨时钟域与低功耗的硬核拷问

英伟达芯片设计实习面试:跨时钟域与低功耗的硬核拷问 1. 投递与笔试在2月的窗口期进场先说结论英伟达的暑期实习尤其是芯片设计方向的坑位从来不是临到夏天才去抢的。2021年这一轮时间线大概是从2月中下旬开放申请3月初开始陆续发笔试3月中旬到4月密集面试5月发offer。如果你等到三四月才开始改简历基本只能捡漏或者压根没坑。我当时投递的岗位是ASIC设计方向的暑期实习生base上海。英伟达国内的芯片设计团队主要做GPU相关的ASIC验证、物理设计、DFT这三大块数字前端设计的坑相对少更多是验证岗。所以如果你一心想做design简历上最好体现架构层面的思考而不仅仅是RTL coding。投递渠道方面官网投递和内部推荐都行。比较务实的是找已经在英伟达工作的学长学姐内推简历进面概率会高一些而且可以提前打听到组里的具体方向。我当时走的是官网直接投递简历投出去大概两周收到线上笔试通知。笔试的形式是牛客网在线评测题型以选择题和简答题为主没有写代码大题。不过别以为选择题简单它考察的颗粒度非常细。我记得比较清楚的几类题数字电路基础同步FIFO深度计算、异步FIFO的格雷码转换、亚稳态的MTBF估算。低功耗设计时钟门控、操作数隔离、DVFS的基本概念会问“多电压域里电平转换单元应该放在哪一侧”。静态时序分析setup/hold violation的修正方法给一个简易电路图让你算最大时钟频率。总线协议AXI的通道组成、outstanding交易的概念、WLAST信号的作用。这些题你看着面熟但如果不翻书直接做细节上很容易翻车。比如异步FIFO那道题它问的不是“为什么用格雷码”而是“格雷码在多比特跨时钟域时为什么还需要同步器单比特同步器的亚稳态窗口怎么估算”。角度很刁钻。笔试之后大概一周我收到了面试邀约邮件。从那一刻开始节奏就完全不由你掌控了。2. 第一轮技术面被追问到体无完肤的Verilog和跨时钟域第一轮面试官是一位做ASIC验证的工程师整个面试更像是在“查户口”把你简历里每一个技术点都盘一遍。他先让我自我介绍然后直接从简历上的一个项目切入。我简历上写了一个基于AMBA总线的DMA控制器设计项目。面试官上来就问“DMA的通道仲裁你用的是什么算法”我说是轮询仲裁。他接着问“如果两个通道同时请求其中一个通道的优先级需要动态提高你的仲裁器要怎么改”这个问题还好我讲了一下加权轮询的思路他点了点头。然后真正的挑战来了。他说“你画一下你的DMA在跨时钟域传输数据时FIFO是怎么设计的”我画了一个异步FIFO的基本结构写指针和读指针分别由各自的时钟驱动。他又问“你格雷码同步的时候是两级触发器还是三级”我说两级。他接着问“如果两个指针的格雷码在多比特变化时同步器采样到中间态你怎么处理”这个问题其实是个陷阱因为格雷码设计的目的就是保证多比特跳变时只有一比特变化但如果FIFO深度不是2的幂或者读写指针在边界复位时没有对齐照样会出问题。我当时的回答是保证FIFO深度是2的幂复位时读写指针指向同一位置并且格雷码完全一致这样多比特同步器的风险就被规避了。面试官听完沉默了两秒然后说“你说的对但还有一个更深的坑——如果你把读指针同步到写时钟域时用的是两级触发器而读指针的格雷码刚好在同步器建立时间窗口内跳变你这个FIFO直接炸了。你怎么知道它没炸”这一问直接把我问住了。后来我才明白他真正想考察的是你是否考虑过异步FIFO的“同步器失效”问题以及你知不知道用“指针提前比较”或者“FIFO状态寄存器冗余采样”这类进阶方案。这轮面的东西非常杂包括但不限于低功耗的时钟门控电路、UPF文件里set_clock_gating_style怎么配、DFT里scan chain的插入会不会影响时序收敛。面试官没有问一道“八股”题全是从你的项目里挖细节。这种面试风格的好处是你没法靠背题过关坏处是如果你项目不是自己实打实做的根本撑不过半小时。第一轮面了大概七十分钟面完我整个人是虚脱的。但后来复盘的时候我意识到这种“追问式面试”其实是在模仿芯片设计流程里最常见的场景你在review别人的代码别人在review你的代码。每个信号为什么这样命名、每个状态为什么这样编码、每段逻辑为什么选择这种实现方式都必须有理有据。3. 第二轮技术面硅后验证工程师的“玄学”拷问第二轮面的面试官是一位做硅后验证post-silicon validation的工程师整个过程像在和一个极客聊天但聊天的内容相当硬核。他先寒暄了两句问我对GPU架构了解多少我坦诚地说了解不深主要接触过CPU和SoC方向的东西。他笑了笑说“没关系我们就聊你会的。”然后他从我的简历里挑了一个SPI通信模块的项目开始问SPI协议的细节。“SPI的四种模式你清楚吗CPOL和CPHA怎么组合如果从机上升沿采样主机应该在什么时刻输出数据”这种问题还算常规我答得很顺。但接下来他画风一变“如果你的SPI主机在发送数据时从机的片选信号提前拉低了你应该怎么检测这个异常”我说用状态机监测片选信号的下降沿如果PSEL在传输过程中拉低就置一个错误标志。他说“那你这个监测逻辑本身会不会引入新的时序问题片选信号是异步信号你怎么同步它”我愣了一下说用两级同步器。他追问“同步器会引入两个周期的延迟你的状态机能够容忍这个延迟吗如果不能你怎么办”这一问直接暴露了我的薄弱环节我的项目里片选信号是系统内部模块控制的同步信号我从来没处理过真正意义上的异步片选。我当时硬着头皮说可以在片选信号打一拍之后再用边沿检测同时放宽状态机的超时判断窗口。面试官没否定也没肯定只是说了一句“你回去想一想如果片选是异步信号你这一拍打下去状态机里的逻辑还成立吗”后来我回去翻书才意识到他问的其实是“异步信号同步化之后原有的协议时序余量是否依然满足”的问题。这个思路在验证领域特别重要你不仅要让功能正确还要让功能在时序约束下依然正确。接下来他问了一个让我印象极深的问题“你们做验证的时候怎么保证你的testbench不会引入functional bug”我问什么意思他说“如果DUT有个bug但你的testbench模错了你会不会观察到test pass反过来如果testbench给了错误激励DUT明明是对的你是不是要花一周查bug”这就是验证的“可信度”问题面试官在考察我是否理解验证自身也需要被验证。我当时的回答是通过断言assertion和覆盖率模型来验证testbench的正确性同时用一个小样本的已知向量做smoke test。他听完点点头说了一句“你至少没有瞎写”。这一轮整体氛围比第一轮轻松但问的问题更偏系统级思维。面完之后我的感觉是英伟达的面试官并不指望你对所有东西都有深入研究但他们会精确地探测你的知识边界并且很在意你面对未知问题时的反应方式。4. 第三轮综合面英语自我介绍和“不刷题”的算法题第三轮面试当天我收到了一个电话面试官说临时换人了原本约好的工程师有其他会议。新面试官上来第一句就是英文“Can you briefly introduce yourself in English?”我当时心里一紧因为我准备的英文自我介绍是面向HR的通用版本跟技术面试完全对不上。硬着头皮用英文说了大概两分钟讲了我的教育背景、实习经历、还有对GPU的兴趣。面试官听完切换回中文说“好我们接下来聊点实际的。”这轮主要考的是代码和算法。但这里有个很重要的信息英伟达芯片设计岗的算法题并不会让你在力扣上刷那种“最长回文子串”之类的题他们更关心你能不能把手上的逻辑需求转化成可综合的硬件描述代码。面试官给了一个题目“设计一个任意长度整数序列的脉冲计数器要求能够在单个时钟周期内输出连续脉冲的数量。给你两个输入一个脉冲信号一个复位信号你怎么做”我第一反应是用一个状态机加累加器每个周期判断脉冲是否有效是则加一。面试官说“那你这个计数器在时钟频率很高的时候会不会成为关键路径如果脉冲连续不断你的累加器每一拍都在更新这个逻辑链很长你怎么优化”我说可以分成两级累加第一级对相邻两拍做预判第二级再合并。他追问“如果脉冲长度超过你预判窗口的两倍呢”我说那就用树形结构做并行累加。这轮面的重点不是你能不能写出代码而是你能不能意识到代码背后的硬件开销。你写的每一行Verilog最后都会变成门电路所以面试官会一直逼你思考这样写综合出来是什么时序能收敛吗面积会不会爆炸面到后期面试官又问我“你平时有没有关注过PCIE或者NVLink这类高速接口协议”还好我平时对计算机体系结构的东西感兴趣知道NVLink是英伟达自己的高速互连方案就大致讲了一下NVLink的点对点拓扑、多路GPU的混合立方体结构以及相对PCIE在多GPU通信上的带宽优势。他听完没有深入追问但通过这个问题我能感觉到英伟达的人非常希望你能对“GPU之外的数字系统互联”有基本概念。5. 第四~五轮连面GPU架构师和HRBP的“冰火两重天”到了第四轮和第五轮面试变成了“背靠背”的连续面试中间几乎没有休息时间。上午面完一个架构师下午紧接着就是另一个主任工程师加HRBP。这种安排明显是在模拟真实工作节奏——在芯片公司一个普通工程师一天内可能要连续开五六个会每个会议都在解决不同层面的问题。第四轮面试官是一位做GPU架构的资深工程师问的问题从全局到局部都有。他先问“如果让你设计一个深度学习加速器的数据通路你会怎么选型是很多小的PE阵列还是一个大的向量引擎”这是个开放题没有标准答案。我说我会看两个指标一个是计算单元的利用率另一个是数据移动的能耗占比。如果算力要求高PE阵列更容易摊薄控制逻辑的开销如果算力要求中等、灵活性要求高向量引擎更合适。面试官追问“那你觉得GPU在这两者之间是怎么折中的”这我倒是能说上话因为GPU本身就是大量SIMT核心加Tensor Core的组合本质是PE阵列和向量引擎的混血。他笑了笑说“你算是对GPU有点感觉的人。”接下来他问了一个我至今记忆犹新的问题“你觉得你在前几轮面试里哪些问题答得不好”我坦诚说了跨时钟域同步器失效那个问题。他点点头说“你能说出来说明你想过这个问题了。那你现在再想想如果你用三个触发器做同步器亚稳态还存不存在”我说同步器并不能消除亚稳态只是让亚稳态在同步器内部自行收敛避免传播到后面的逻辑。他继续问“所以你把同步器输出直接接到状态机里状态机还会不会采到非法状态”我说可能所以状态机编码最好用格雷码或者独热码外加非法状态恢复。他听完说“你说得对但大多数面试者答到‘两级触发器’就停了你能想到非法状态恢复说明你确实遇到过实际硬件问题。”这一句话让我心情瞬间轻松了不少。第五轮是HRBP面试聊的内容就比较人性化了你为什么选英伟达你对工作强度有什么预期你更喜欢跟什么样的人合作有没有遇到过组内意见冲突的情况这轮考试的不是技术而是“文化匹配度”。英伟达在国内芯片团队规模不大团队文化偏硅谷风格比较看重主动沟通和自我驱动能力面试官整体语气比较随和没有给压力。有一个问题我记得很清楚“如果你进来之后发现你身边的人都比你聪明你会怎么办”我当时回答“我就踏实做自己手里的事不懂的时候多问慢慢跟上他们的节奏。”HRBP点点头没有追问但我后来入职后回想这个问题其实是在试探你的ego自我意识大不大。芯片行业太容易出“各怀绝技但有沟通洁癖”的人团队协作能力往往比单点技术能力更重要。6. 面试后的反思那些Offer之外的价值面完整轮面试我最大的感受是英伟达的面试流程非常体系化每一轮都对应着核心岗位的一个侧面——第一轮看你基本功扎不扎实第二轮看你的验证思维成不成熟第三轮看你的代码素养和硬件意识第四轮看你的架构视野第五轮看你的团队匹配度。它不像某些公司的面试从头到尾只考八股文或者干脆只看你的刷题量。有几个细节我在面试之后才真正想明白这里写出来供后来者参考。第一个是“编码风格”这件事。英伟达的工程师特别在意代码的可读性和可维护性。第一轮面试官问过我“你写状态机的时候输出逻辑是放在时序逻辑里还是组合逻辑里”我答放在时序逻辑里避免组合逻辑毛刺。他说“可以但你要知道如果状态机输出要接入异步FIFO的写指针你放在时序逻辑里也会有问题。”我当时没接住现在复盘才发现他想引导我理解“状态机输出与跨时钟域信号之间的时序配合”。第二是“低功耗设计”不是加分项而是默认要求。英伟达做GPU和SoC功耗是核心竞争力。面试里问时钟门控、DVFS、多电压域这类问题不是面试官心血来潮而是他们日常工作中天天接触的东西。如果你投芯片设计岗却对低功耗一窍不通大概率过不了技术面。第三是“面试准备要针对企业技术栈”。我在面试前花了大量时间复习RISC-V指令集结果面试官几乎没问。真正被反复追问的是总线协议、跨时钟域、低功耗设计、验证方法学。后来我跟已经入职的学长聊他说英伟达数字设计岗最看重的就是总线、存储、同步、功耗这四件事。这个信息对2021年之后投英伟达实习的同学非常有参考价值。最后聊聊语言。英伟达上海团队的工作语言是中文为主但英语邮件和英语文档是少不了的。2021年那场面试只有一轮要求英文自我介绍但我在后期收到的Offer邮件、入职材料都是全英文的。如果你的英文阅读能力不过关可能会在处理文档的时候焦虑。我最终拿到了这轮暑期实习的Offer后来因为Offer时间冲突没有去入职。但说实话这段面试经历给我接下来的求职道路带来的帮助不亚于一次真实实习它逼我把同步器、FIFO、低功耗这些知识点从“背结论”变成了“懂原理”也让第一次意识到“面试官不是来考你的是来帮你发现你还没掌握的东西”。如果你也在准备英伟达芯片设计的实习面试我的建议是多花时间在总线协议、跨时钟域和功耗优化上少刷那些和硬件无关的算法题然后做好被追问到怀疑人生的准备。
返回列表