• 第一部分:FPGA 工程师的成长

  第一阶段:入门 -> 熟练

   • 克服心理恐惧
  
– 代码这么写可以编译通过
– 下载程序不会烧毁电路板
   • 建立思维定势
  
– “事非经过不知易”
  • 学会了便是“自古华山一条路”
  • 没用过便是“乱花渐欲迷人眼
  
  第二阶段:提高 -> 精通

  • EDA工具——从感性认识到理性认识
– 站在EDA工具的角度理解FPGA开发流程
  • EDA工具各个流程的意义,各个阶段的输入输出
  • EDA工具输出的报告:Infor和warning
  • HDL语言——积累设计模式
  
– 跨时钟域处理电路
– 有限状态机电路
– 特定领域的数据通路电路
– 片上总线
  • FPGA芯片——从逻辑特性到物理特性
  
– 搞定时序分析和约束
– 看懂RTL视图和Technology视图
  第三阶段:从业 -> 专业

  • 从产品需求出发认识你的芯片
  
– 芯片之内
  • 深刻理解FPGA底层结构与应用场合的对应关系
  
– 芯片之外
  • FPGA外围支持电路以及高速接口
  • FPGA与软件接口的设计和调试
  • 做出你的产品
  
– 公司业务
– 项目流程
– 领域知识
  个人的成长+成功的项目

  • 给刚刚从业的FPGA工程师的几点忠告
  
– 珍视你的第一份工作
  • 从工作中学习,在工作中成长
  • 记工作日志,写博客
  
– FPGA工程师学点软件,学点“不可综合语句”
  • 数据的分析和可视化
  • 工具之间的“胶水”
  
– 使用Linux OS
  • 脚本
  • 免费工具
  • 开源精神
  • 第二部分:FPGA开发中的敏捷实践

  • FPGA开发本质上是敏捷的
  
– 相对于芯片开发:灵活 + 快速 = 敏捷
  • 可以随时更新– 更短的迭代周期
  • 可以上板验证 – 更快的反馈速度
  • 敏捷开发的思想需要结合FPGA的自身特点
  
– 相对于软件开发:
  • 上板调试代价更高 – 仿真验证的必要性
  • 距离真实世界更近 – 开发验证、调试工具的必要性
  
» 验证、调试工具不是最终产品的一部分
» 开发工具、积累工具,合理重用
  • 刻意地模仿芯片或者软件开发都是不可取的
  案例分享

  • 案例一:用Virtual JTAG加速上板验证
  
– 问题1:
• 缺少外部芯片的仿真模型。
  – 解决1:
• 用VJ虚拟出一个“串口控制台”,通过接口逻辑层,向外部芯片发送“写”和“读”命令。验证接口逻辑层,积累操作外部芯片的脚本。
• 通过这一接口,把最终产品中需要用状态机来实现的控制电路,暂时替换为可以用PC机软件来实现的脚本;把FPGA上
的硬件调试转化为了PC端软件调试,加速了调试过程。
– 敏捷思想:
• 把项目中的风险,在早期的迭代中加以解决。
  
  – 问题2:
• 外部设备行为复杂,测试向量覆盖率不够、仿真速度慢。
  – 解决2:
• 用VJ设计一个真实行为捕获模块,丰富测试向量。
• 用VJ虚拟未实现的关键逻辑模块,上板测试调试。
  – 敏捷思想:
• 反思回顾,发现开发瓶颈,持续改进方法、工具。
• 提早集成、提早测试。
  • 案例二:FPGA开发中引入回归测试和持续构建
  
  – 问题1:
• 软件的驱动层(C)和FPGA的接口层(V)需要测试和调试
• FPGA需要回归测试来保证持续开发的质量
  – 解决1:
• 用SystemVerilog DPI连接C和Verilog
• 用CppUtest测试框架搭建FPGA回归测试环境
  – 敏捷思想:
• 回归测试
  
  – 问题2:
  • 多人协作开发中代码的质量保证
• FPGA需要自动构建来实现及时发布
  – 解决2:
• 用Tcl脚本实现项目编译、仿真的自动化
• 用Hudson CI来实现多个仿真、编译工程的自动构建和健康度报告
  – 敏捷思想:
• 每日构建
  FPGA 快速系统原型设计中的敏捷实践.pdf (786.7 KB)
  内容摘自《FPGA 快速系统原型设计权威指南》书籍
    来源:网络