在芯片公司的嵌入式工作的日子
几年前,机缘巧合进入了芯片行业,之后兜转两家芯片公司,过程参与了图形处理芯片和电源管理芯片的开发,如今虽然已经跳出芯片行业,从事产品应用的开发,但这段过程也积累的很多心得体会,这里回顾下,对过去的经历总结,夯实基础,如果看到的人有所收获,那就更好不过了。这里分阶段说明整个芯片流程开发中,嵌入式相关的主要工作。
准备阶段 -- 根据产品调研,确定芯片整体规格和模块规格,这里可以简单说下,对于整体规格,主要是运行频率,容量(RAM/FLASH),外部接口(UART, SPI, I2C),模块支持(定时器), 中断支持,特殊模块(算法加速器,图形加速器)等, 这个数据主要来源有前代产品经验,市场预期评估以及竞品分析,在结合应用场景和成本控制需求,定义到合理的范围,芯片的工艺,功率和成本考量,决定了一定要取舍。 研发阶段 -- 将准备阶段的规格书,转换成设计需求文档, IC设计会根据设计需求文档实现模块相应的设计文档(这个就是芯片参考手册的原型), 之后就要配合IC设计在FPGA上进行数字原型验证,IC工程师在开发中是可以数字仿真的,但耗时间十分长,如果有应用逻辑参与的测试,或外部触发条件,组合逻辑等,数字仿真时间不可接受,一般都是通过提供FPGA的固件来由嵌入式工程师测试,这里说下我总结的测试数字模块功能性的主要选项: 模块的寄存器复位值,读/写, 时钟使能/复位对寄存器影响
中断功能触发,标志位置位/清零
单模块的功能性测试,这个就具体模块具体分析,如UART就要测试不同波特率,数据位,停止位的组合,有可能还支持不同引脚的映射,这里组合就更多了,一般都是实现循环逻辑,通过上位机命令切换配置,然后重复测试。对于Timer,就是定义不同的模式,看看触发时间精度,当然一般配合外部I/O在示波器上进行检查。
在比较后期阶段,往往还会添加不同模块组合功能测试,如配合DMA,低功耗,不同执行空间在应用环境下,当然有可能,也会实现一些应用demo,在组合的复杂环境下进行模块测试。 这个阶段也是整个芯片过程中嵌入式工作最繁琐,也是最重要的阶段 要查缺补漏,把芯片功能相关的尽可能覆盖全,当然,此阶段随着对模块的功能深入了解,对于准备阶段的需求也要有同步的更新纠错,有可能需求和设计不合理,虽然满足要求,但后期应用过于复杂,也有需求余量过于狭窄,后期对于可靠性带来风险,查缺补漏是整个设计阶段都要时刻注意的问题。 测试出问题了,就需要配合IC设计分析原因和解决,解决完成后至少还要完整一轮测试(对于A的修改有可能影响B,在我测试过程中甚至IC工程师解决A问题改了A和B,导致B本来正常的也出错),因为这步骤基本循环很多轮,我一般遇到问题, 解决完成后,已经测过的此轮不重测,等此轮跑完后,在覆盖新一轮测试,如此重复,直到执行没问题为止。芯片整个研发流程,嵌入式的工作是芯片成品质量和后期应用的基石,很难保证没有错误,但尽可能的覆盖十分重要,不然后期会带来很多麻烦。 流片阶段 -- 在流片阶段,一般3个月以上空档期,这段时间主要的工作分为三类 1.驱动库开发和完善,类似于ST的HAL和LL库等(我参与的两个都是单片机项目),一般在研发阶段,我都习惯按照驱动库的接口来实现测试代码(当然有一部分只能寄存器访问, 驱动库只是芯片功能的一部分), 那么在这个阶段就基本补充下缺少的接口,完善下错误检查等,相对轻松些,二阶段工作量大一些,但也避免了重复劳动。 2.芯片参考手册, 之前我说过,在研发阶段,IC工程师会根据芯片需求文档,进行模块设计文档的实现,这一步就要把模块分章节组合起来,同时删减设计实现细节,修改为应用相关的配置和操作说明,最后就是成品的芯片参考手册。
页:
[1]
2