一、理论学习:掌握基础与核心知识
1. 数字IC设计基础
- 重点内容:
- 数字逻辑设计(组合逻辑、时序逻辑)
- 时钟域跨越(CDC)、亚稳态、Metastability
- 时序约束和分析(Setup/Hold 时间、时钟抖动、时钟树综合)
- 状态机设计(同步 FSM、异步 FSM)
- 学习资源:
- 《数字设计和计算机体系结构》——David Harris
- 《CMOS VLSI Design: A Circuits and Systems Perspective》——Weste & Harris
- 网课推荐:Coursera 或 Udemy 上的 "Digital Design" 和 "VLSI Design" 课程
2. 硬件描述语言(HDL)
- 重点内容:
- Verilog/SystemVerilog:掌握基本语法、设计模块、时序逻辑、阻塞/非阻塞赋值
- VHDL:掌握基础语法(了解为主,根据公司项目需求学习)
- 学习资源:
- 《Verilog HDL》——Samir Palnitkar
- 《SystemVerilog for Design》——Stuart Sutherland
- HDLBits(https://hdlbits.01xz.net/):在线练习 Verilog
3. EDA 工具使用
- 重点内容:
- 综合(Synthesis)工具:Synopsys Design Compiler、Vivado
- 仿真工具:ModelSim/QuestaSim
- 时序分析工具:PrimeTime
- 学习方法:
- 官方文档和基础教程
- 从小项目入手,边做边学
- 熟悉工具中常见的 TCL 脚本
4. 前端设计流程
- 重点内容:
- RTL 编写 → 仿真 → 综合 → 静态时序分析(STA)
- DFT(Design for Testability)概念
- 学习资源:
- 《ASIC Design Methodology》——Michael Keating
- 网络博客或视频教程(搜索关键词:ASIC Flow)
5. 后端设计(了解即可)
- 重点内容:
- 布局布线(Place & Route)
- 信号完整性、IR Drop 分析
- 测试封装
- 学习资源:
- 《CMOS Physical Design Techniques》——David A. Hodges
- 知乎和 GitHub 上的 VLSI 后端流程教程
二、实践技能:动手能力培养
1. 小项目实践
- 项目类型:
- 8位/16位简单 CPU 设计
- SPI/I2C/UART 等通信协议的实现
- FIR/IIR 滤波器设计
- 学习方法:
- 将项目细分为模块
- 使用 Verilog/SystemVerilog 实现
- 通过 ModelSim 进行仿真验证
2. 开发板实战
- 推荐开发板:
- Xilinx Artix-7 系列(入门款)
- Intel Cyclone 系列(FPGA 开发)
- 实战项目:
- 使用开发板实现流水灯、计数器、VGA 输出等
- 接入外设(如 SPI Flash、ADC/DAC)
3. 开源项目学习
- 推荐项目:
- RISC-V 内核设计(RocketChip 或 PicoRV32)
- LiteX 项目(基于 FPGA 的 SoC)
- 方式:
- 阅读源码,尝试修改小模块
- 参与 GitHub 社区讨论
三、项目经验积累
1. 构建完整项目
- 选择方向:
- 通信协议实现(如 Ethernet、PCIe)
- 图像处理模块(如简单的图像滤波器)
- 实践流程:
- 编写 RTL 代码
- 设计 testbench 进行仿真验证
- 使用 FPGA 开发板综合测试
2. 加入开源社区或比赛
- 比赛推荐:
- 华为或 Cadence 的 FPGA 比赛
- Google Summer of Code(GSoC)
- 开源社区:
- GitHub 上的 RISC-V、LiteX 项目
3. 实习或兼职项目
寻找与 ASIC/FPGA 相关的实习机会,从真实项目中学习行业经验。
四、职业发展规划
1. 职业方向选择
- ASIC 前端设计:
- 专注 RTL 编写、综合和 STA
- 深入研究架构设计和低功耗设计
- FPGA 设计:
- 熟悉 FPGA 工具链(Vivado、Quartus)
- 擅长快速原型开发
- 验证工程师:
- 专注 SystemVerilog、UVM 验证
- 学习 Formal Verification 和 Coverage
2. 必备软技能
- 高效学习能力:定期整理笔记,持续关注行业动态
- 团队协作:掌握 Git 等工具,学会与团队合作开发项目
- 技术交流:参加技术论坛或行业峰会(如 DAC、HotChips)
3. 长期规划
- 1~3年:扎实基础,参与完整项目开发
- 3~5年:熟悉多种设计流程,成为模块负责人
- 5年及以上:向系统架构设计师或技术专家发展