数字电路萌新
笔试里流水线的题目,我印象最深的是那种“挖坑”的代码改错题。给你一段Verilog代码,里面故意放几个常见错误,比如组合逻辑延迟太大导致时序违例、或者流水线级间寄存器采样时机不对产生数据覆盖。这种题目要求你不仅懂流水线原理,还得有实际写RTL的经验。
除了这个,另一个难点是流水线中的动态调度和冲突避免。比如题目描述一个多发射的流水线处理器,让你分析在什么情况下会发生结构冒险(比如同一个时钟周期访问同一个存储器端口),怎么用寄存器重命名或者保留站(reservation station)来解决。这种题目已经接近体系结构了,但很多做高性能计算芯片的公司特别喜欢考。
对于准备,我的建议是:首先把单周期CPU的数据通路和多周期流水线CPU的数据通路画熟,理解每条指令在每一级流水线里在做什么。然后找一些开源的小型CPU流水线实现(比如RISC-V的五级流水线)自己仿真一下,看看数据前递(forwarding)和流水线暂停(stall)是怎么实现的。遇到理论计算题,套公式前一定要想清楚公式的假设条件,比如流水线效率的计算,很多时候题目会设置一些非理想条件(比如各级延迟不均匀、有反馈路径),不能直接套用理想公式。
最后,别忽视面积和功耗的简答题。面试官可能会问:“为什么有时候流水线级数不是越多越好?”这时候要从关键路径延迟、寄存器开销、时钟树功耗、以及设计复杂度等多个角度来回答,体现出你的系统思维。
