第一部分: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来实现多个仿真、编译工程的自动构建和健康度报告
– 敏捷思想:
每日构建
文章评论(0条评论)
登录后参与讨论