FPGA萌新上路
我是芯片公司做这个岗位的。一句话概括:我们是算法和硬件之间的“翻译官”。
纯软件算法工程师产出的是模型文件(如.pth)或服务代码。我们产出的是一套详细的硬件实现规格说明书,以及经过裁剪、量化、优化后的算法参考代码(通常是C模型),硬件工程师会根据这个来设计电路。
日常不写Verilog,但必须懂。因为要和写Verilog的同事吵架(bushi),要沟通。比如,你设计了一个巧妙的稀疏化算法,但硬件同事说这个稀疏模式不规则,硬件实现效率极低,成本太高。那你就要回去改算法,找到一种既保持性能,又让硬件好实现的稀疏结构。
技术要求最根本的不同点:对“计算”和“存储”的理解深度。软件岗关注算法逻辑本身,我们关注算法在硅片上的物理实现成本。你需要知道一次矩阵乘在硬件里是映射成几百个乘加器并行算,还是分时复用几个计算单元;知道数据从DDR搬到芯片里要几百个时钟周期,所以要极力避免频繁搬运。
想入行的话,硬件知识建议按这个顺序补:1. 数字电路基础(逻辑门、触发器、时序)。2. 计算机组成(CPU/GPU基本结构,内存层次)。3. FPGA原理和开发流程(不用学到能独立做项目,但要知道从RTL到比特流的过程)。4. 重点学习“硬件友好的算法设计”,比如量化、剪枝、神经网络架构搜索(NAS)的硬件感知方向。网上有些开源项目,比如用TVM为特定硬件做编译优化,可以跟着做做,体会很深。
