一部硬件开发流水账
扫描二维码
随时随地手机看文章
转眼大学毕业已经17年了,我也从一个毛头小伙子成为快到不惑之年的中年人。期间感叹还是颇多的,就将这些年自己从事的开发经历流水账般写出来,希望对年轻人有启示作用。
找工作
我是1991年毕业的,那时候是国家分配和自己找工作相结合。还记得,当年自己怀着忐忑不安的心情拿着毕业材料去现在的单位面试,由于我们单位当时是最早从事终端开发的厂家,而且发展形势相当不错,所以我当时非常紧张。经过一番成绩审核和测试,终于被这家单位接收,那心情和考取大学差不多,尽管只是被分配到了一个分厂的小部门。
图像部的一年工作
报到后才知道,那个小部门的全体员工出去旅游了,刚走,要两个星期才能回来。那两周真漫长,我不知道该做些什么,每天只是打扫卫生、泡泡茶。到后来,简直手脚都不知该怎么放了,只能看着其他部门的人干活。由于我是最后一个进单位的,也没赶上培训,自然不认识别的新员工,只好自己一个人封闭起来看看书。
终于等到部门的人回来了,我那个开心就用不提了。和所有刚参加工作的人一样怀着满腔的热情,恨不得工作的第一天就能甩开手臂大干一场,以实现自己的人生理想。可是现实很残酷,首先,工作中所用到的技术要比专业书上的更深入,和学校讲的理论、做的题目是不一样的;其次,单位不会让一个新来的大学生直接来解决问题;再次,做产品是讲团队精神的,需要各个方面的人配合,不像在学校里一个人就足以思考、解决一道题。
把这些问题考虑清楚后,我开始认真地做每件事,做好项目的辅助工作,即使上街买个元器件也是兴高采烈的,就这样我慢慢地融入了集体。另外单位宿舍晚上可以继续学习,所以入门也比较快,经过半年时间锻炼,我已经可以做简单的设计、调试和维修了。也曾多次出差,随师傅、师兄到合作单位谈一些技术问题。当时师傅的要求非常严格,出差到北京即便是休息日也不容许我们随便上街。
我们做的是“字幕机”(就是将计算机上显示的字幕和视频图像叠加在一起,那时候视频输出是摄像机、录像机和LD),可以接触大量的录像带,但是师傅并不容许我们看,每天的娱乐节目是7点钟看新闻联播,其他时间就是看书或者研究“字幕机”,喜欢看书学习的习惯一直保持到现在。最开心的莫过于大半年后,让我做的一个“色键”项目,“色键”也有称为“扣像”,就是将一幅图像中的某种颜色去除,可以实现虚拟演播室。这个项目当时得到了清华的一个老师指点,但具体的实现和调试基本上是我自己独立完成的,直到那时才觉得自己是真正有点用了。
初到终端部门
由于住在公司宿舍,我很快就和宿舍的其他人员熟悉了。晚上通常一块到办公室看书或者和大家一起讨论产品,这样开始知道了终端产品。一个偶然的机会,终端的一个项目负责人和我说他们产品上有个硬件问题,让我看看,我花了点时间很快就做好了,正好那时候我们部门由于产品调整开始有些变化,1992年底我就被调到了终端产品部。我马上系统地学习了终端方面相关知识,特别是硬件方面的具体原理和实现思路,晚上也去办公室看资料,遇到不明白的地方就用仪器测量,或者改动电路做试验,所以掌握的还是比较快,但是由于原有人员的离开,遇到问题只能自己去摸索,还是比较郁闷的。
到终端部门没多久就遇到了几件事情,首先是产品在用户处出现联机不稳定的情况:上班开机总是联机正常的,但是半小时以后就出现乱码。我怀着忐忑不安的心情去出差了。由于在公司时我没有发现这个问题而且又是第一次出差,紧张程度可想而知了。幸好自己还算冷静,可能运气也好,我还是找到了问题所在:原来是一个晶体的热稳定性不好,开机的时候机器是冷的,晶体工作正常,但是半小时后机壳里的温度上升了,振荡频率就出现了漂移,联机就会出现乱码。这个问题的解决给了我很大的信心。[!--empirenews.page--]
另外一个事情就是显示死机的问题,我们在终端上做了一些图形演示的程序,在做高温老化的时候发现有些机器的屏幕画面会停,这时候机器不响应任何信息,这是个偶然的现象。由于在用户处不用演示程序,所以没有提出这个问题。但是我觉得这一定是有原因的,通过做大量的试验发现,这些屏幕基本上都停在一幅固定的画面上,如果实验做的时间长,死机的机器的数量会增加。为了解决这个问题,我天天泡在车间的高温房里面,正好那时是冬天穿得又多,而高温房的环境温度有40℃,在里面用示波器测量信号点,一测就是半小时,浑身汗流不止,很多天下来都没有结果。由于不影响使用,别人都说放弃吧,可是我还是坚持了下来。经过几周的实验终于发现的问题,原来是硬件的NMI不可屏蔽中断影响了那个显示画面,那个显示画面所作的图形比较复杂,所以占用CPU的时间比较长,而NMI是定时要来的,以实现屏幕滚动,原来的NMI的时间定的比较长,特别在高温房里这个时间比常温下又长了点,这样NMI来的时候就打断了这个演示画面,导致演示画面的程序“飞”了,引起“死机”现象的发生。解决这个问题可以调整NMI时间或者改动软件部分,由于软件已经定版,最后采用减小NMI时间的方法解决了这一问题。
我另外遇到的一个比较棘手的问题是所谓的“带电RAM参数丢失”。有些用户的特殊设置、键盘用法、造的一些汉字和短语都需要保存在一个一直有电的SRAM中。在终端掉电的时候这些参数一直保持在这个SRAM中,下次开机的时候这些参数可以直接应用。这是一个非常方便和实用的功能。但是在用户使用的时候发现有的终端带电RAM里的参数会无规律地丢失,这样用户需要重新设置参数才能使用,非常不方便。为了解决这个问题我们还专门开会进行讨论,从设计逻辑上看不出任何的问题,所以在很长的时间里没有头绪。我查了相关的资料同时到车间里去做实验,得出的结论是和开关机时间长短没有什么关系,和电源以及开关机的方式有关。如果是在电源输出正常后再开终端基本上就没有这个问题,而终端作为电源的负载一直打开时,偶尔会出现这个问题,软复位是没有问题的。通过这些实验就比较好分析了,那就是和开关机的电源上升、下降已经复位有关,开关电源在上升的过程中可能有跌落的情况,同时主板上的各个电路的工作电压可能不同,而简单的RC复位也可能导致复位的抖动,这个在开机或关机的时候当总线不受控的时候,可能会有一个时序符合写RAM的要求,这样带电RAM中的数据就被更改了,根据这个分析,我将原来的带电RAM从0段调整到0X2000H段,同时用了电压检测的复位电路,让系统在4.5V后20ms开始复位,这时候主板电源已经稳定,这样解决了这个问题。
这些问题的解决大大提高了我的信心,我开始作为一个独立的硬件设计人员来从事终端方面的工作了。在这期间我研究了同行产品的设计思路,用最合适的方法来实现功能,提高了产品的竞争力。之后,我又系统学习了产品可靠性原理、电磁兼容性、安全、结构、设计安装工艺等方面的知识,特别是EMC方面,通过理论的学习和实际的不断测试和修改得到了很大的提高。那段时间经常去52所作测试,有时候一个辐射点的超标需要修改相当长的时间才能通过。慢慢地在整机设计方面有了比较好的基础。在随后的3年里我在一个终端平台上通过一些技术变革和产品的功能更新,设计出两款系列产品。
FPGA学习之路
1994年末,一个偶然的机会,领导让我去学习一下FPGA。FPGA是什么呢,我当时一头雾水一点概念也没有。去档案室查资料才发现有3盒软盘的安装软件和一大堆的英文参考资料,原来是美国XILINX公司FPGA的安装软件。XILINX的FPGA是什么呢,查了资料后才知道是可编程门阵列。由于以前做过PAL和GAL电路,所以我就将它当成了一个大GAL。但是在安装开发环境的时候出问题了,安装的环境包括输入、逻辑仿真、编译、时序仿真、下载等环节。由于之前没有这些概念所以我不知道怎么安装,而那时XILINX的代理MEMC在上海也没有办事处,没有人可以问,只能不断地尝试。将包含开发工具的30张软盘装在我的486机器上,简单地跑一下流程试一下各部分的功能就花了一周时间。
那时的操作系统是Windows3.1。安装成功之后,我就迫不及待地做试验,第一个试验是用FPGA实现一个秒表显示,当8段码上按秒正确地显示出0~9数字时真是激动不已、无以言表。这期间,我还自学了VHDL语言,由于VHDL是基于自顶向下的方法来设计的,所以整个设计模块化很强,很易于理解,比原理图输入的自底而上的方法更简洁,便于阅读和共同设计。FPGA本质是一个灵活的可编程的硬件电路,给设计者一个想象和开拓的空间,不像ASIC电路是固定功能的。
当我不断地做试验实现了新功能的时候,那种喜悦的心情真是每天都有。那时候经常是一个人在一个小房间里学习探索,加班到深夜是经常的事。由于那时在国内使用XILINX FPGA的人还不是很多,上网也不像现在这么方便,所以最大困难是有了问题只能自己去思考、摸索。我感觉最有成就感的是不满足于完成电路的功能而是重点研究FPGA的内部结构,手工控制布局、布线效果以及提高资源的利用率,使用高级工具在芯片内部进行布局和布线调整,在CELL内部进行逻辑的设计改变,而不是死板地从源文件开始改动,这样大大缩短了时间周期,提高了芯片使用效率。
通过不断摸索,我在1995年中的时候将XILINX的XC5204应用到我们的终端产品上,大大提高了终端的集成度,降低了成本。这时候我已经不满足集成简单的逻辑电路和时序电路了,进一步尝试将标准的ASIC电路的部分功能集成到FPGA内部。通过一段时间的分析和沟通,我们分析出了HITACHI公司的显示控制器HD6445的内部结构,成功地将这个电路集成到了FPGA的内部,同时将PS2键盘控制器84C43和UART一起集成到了FPGA中,使得整个主板的芯片数量从62个减少到12个,大大提高了集成度、减低了成本,提高了可靠性,生产和维护的工作量也大大减少。这时采用的FPGA是XILINX公司低成本的XCS20,终端产品型号是CJ320H。这个产品除了应用FPGA技术外,还首次采用了FLASH芯片,使得程序可以在线下载而不需要打开机器来换程序片,同时保存参数更加可靠。还采用了带扩频功能的时钟电路,大大降低了整机的电磁辐射问题。[!--empirenews.page--]
在终端上的FPGA开发完成后,为了进一步降低成本,我将FPGA芯片做成了HARDWIRE芯片,这是一种将FPGA中所用到的门电路固定下来,拿掉不需要的门电路的一种技术。由于电路的版图和连接方式发生变化,所以相应的时序变化很大,通过时序仿真保证了设计的正确性。当时在国内这项技术的应用还非常少。由于这些新技术的应用使得CJ320H终端整体性能处于同行业领先的地位,相应的市场竞争力也得到明显提高。我主持设计的CJ320H中西文图形终端获得1998年度江苏省科技进步二等奖。在CJ320H之后又陆续推出了CJ320S、CJ380等系列终端。本人在1999年获得常州市政府重奖和常州市杰出科技青年称号。在成功使用XILINX FPGA后,我又研究了LUCENT、ACTEL、ALTERA、LATTICE等公司不同架构的FPGA和CPLD,根据不同的终端电路应用特点使用了这些公司的可编程器件,开发出了国光CJ6812系列终端产品,自己也在可编程电路方面积累了一些经验。
继续努力
2006年,我又开始主持字符终端向ARM9平台转化的开发。这个平台的开发成功使得字符终端又上了一个新的台阶。在开发几款字符终端的同时,根据技术发展和变化设计了图形终端的硬件平台。高平台的图形终端相当于精简计算机,它在硬件上不像PC那样具有很多扩展卡,一般只有一个内存条,甚至这些内存条是ONBOARD的,没有光驱,只有一个硬盘接口,一般采用DOM或DOC作为硬盘,显卡一般是集成在北桥中,运行的操作系统有CE、XPE、LINUX。2002年初的时候,由于NS的GX1的功耗比较低性能也不错被广大的瘦客户机厂家所采用,我也采用这个平台设计了我们公司的图形终端。在2003年的时候,我觉得用VIA C3来设计图形终端具有性价比高的优点,于是又花力气设计了C3+PLE133平台。分别设计了ATX电源接口的分体式和单电源的一体式产品,特别是后一个产品将VGA到液晶转换设计集成到主板上,配合公司自己研发的造型结构,推出了造型新颖的一体化产品。去年,又基于AMD的LX系列设计出了分体式和一体式产品。今年,我们公司开始批量生产基于INTEL852平台的产品。从做产品的角度上讲是永无止尽,因为随着新技术的不断推出,可以应用这些技术来设计新的产品或应用。
一个合格的技术人员要不断地研究新的技术,将这些新技术应用到自己的产品上,使产品更具有竞争力。对于一个产品设计者,关键的不是把产品做出来,而是怎样去做好这个产品。一款产品最终要放到市场上去检验,只有比别人做得好,才有机会成功。
一分耕耘,一分收获。这些年,我研发的这些产品为公司取得了较大的经济效益,其中的两个产品获得江苏省科技进步三等奖,还有一些产品获得常州市的一些奖项。
目前,我还在开发一线从事具体的开发工作。我觉得做技术的人要踏实,要有信心和目标,在具体研发的过程中要不畏困难,办法总比困难多,不管多难的问题,只要坚持,总归会得到解决。