最近, 由于项目合作关系,结识了某软件公司的CEO, 和他交流过程中,聊到一个话题, 那就是现在IC(集成电路)公司的硬件工程师与软件工程师的配备比例,他给出的一些大公司(如Q, B 等芯片fabless巨头)的数字是1比3, 从而得出结论:软件工程师的COST太大, IC公司应该转换思路, 将软件业务外包, 降低成本.
关于这个问题, 我没有明确的答案, 是应该外包, 还是不外包.
从几个角度去分析一下:
1. 核心技术角度: IC公司的软件工程师往往需要参与到芯片设计过程中, 虽然说现在SOC的设计对于这些IC巨头来讲,都已经越来越透明, 但涉及到关键核心技术, 相信所有的IC公司,都是不愿意让一个外包的软件公司参与进来的.
2. 工程师专业技术角度: IC公司的产品种类繁多, CPU/CORE, CONNECTIVITY, 音频, 视频, 模拟, 外包软件公司最多只能从软件层面去看待问题, 但要涉及到每个方面的较深入的问题, 不是凭只懂得软件, 不懂得底层系统知识的工程师能胜任的.
3. 软件层面的专业角度: 当前进入了移动互联时代, iOS, Android占居了主流, Windows 最近也在通过免费升级来推广Win 10. 都是OS, 但都是各自的编程模型, 对于底层软件工程师来讲, Windows 驱动架构渐渐从WDM迁移到了WDF, Linux也一直不断在更新版本.
同样, 无论是Windows 还是Linux, 其就包含了各种设备的框架, 如PCTV方面, Windows是 AVStream/BDA, Linux为 V4L/DVB, Graphic方面, Windows的从GDI到WDDM的演进更新, Linux的DRM/KMS;而且有些设备是需要综合各方面的知识的, 比如, Graphic除了Graphic还需要HDMI, DisplayPort, USB Audio需要USB, Audio, Linux ALSA等等.
相信还有其它因素, 导致IC公司软件外包的进程并不顺利.
但这并不是说外包并非没有市场, 从市场细分的角度, IC公司的软件外包服务, 往往其针对性较强, 只能专注于其中某一块业务.
最近从事的一个项目有这样一个过程:
该项目需要视频数据的传输
第一阶段: 只要视频数据有变化, 就将全帧的数据发送, 导致的问题是, 在高速LINK上, 是可以的, 但在低速LINK上, 就会出现, 不是在看视频, 而是在看图片变化
第二阶段: 针对于第一阶段低速LINK上的问题, 只发送数据变化的那一块区域的数据, 接收方在接收到变化区域的数据后, 再将其与前一帧相结合, 将所有的更新区域结合完后, 一方面送播放, 另一方面, 该结合好的结果, 需要作为下一次数据更新的前帧
第三阶段: 第二阶段接收方的变化区域与前帧结合, 以及为新的区域变化准备前帧, 都是通过CPU在处理, 响应速度不够理想, 改变成由DMA来处理
第四阶段: 即使使用了DMA, 还是会因为视频数据太大, 导致帧率会随着分辨率的不同, 及变化区域的不同而变化, 所以, 考虑变化区域与前帧结合, 以及准备前帧的两项工作, 省略其中的准备前帧的工作, 这就导致只有一块内存, 但好处是节省了时间, 将帧率提高
第五阶段: 即使将准备前帧的工作省略,只使用一块内存, 效果还是不够理想, 这时考虑到尝试一下硬件的OVERLAY功能, 虽然硬件具备该OVERLAY功能, 但效果不理想, 于是, 该阶段的工作只能算是尝试性的
第六阶段: 将问题分开处理, 高速LINK下, 就使用全帧, 接收方就省略了变化区域与前帧结合的CPU/DMA处理时间, 画面流畅了, 同时,也由于CPU/DMA 的LOAD降低, 音频数据也有时间去处理了, 解决了音频数据丢失从而有噪声的问题;而在低速LINK下, 就采取抽行抽列的办法, 来弥补低速LINK速度不够的问题.
第七阶段: 软件压缩与解压缩
第八阶段: 硬件压缩与解压缩
IC公司硬件工程师设计,流片的芯片是不能直接交给客户使用的, 必须要有reference design, 在这个时间就是金钱的时代, 客户恨不得, 你给的TURNKEY 方案不需要改直接就能量产, 越早量产, 越早抢占市场, 一步胜, 步步胜.
IC公司软件工程师的重要性,就在这个时代体现了.