数字化时代,数字电路应用越来越广,手机,电脑,电视,汽车,无处不在。没有数电,就没有今日之世界,
大学里面的数电比较基础,留给我最深的印象就是与门,非门,然后可以由集成电路设计一个红绿灯了。到了工作中,就不是那么简单了。现代数字电路大致分为MCU,DSP,FPGA这三大支,各有特色。
MCU中最鼎鼎有名的就是8051单片机,最早接触时是看到有同事用它做一个编码器,当时感觉很高级,长见识了,就这样一个小小的芯片能够实现复杂功能,最令我高兴的是可以修改无数次。后来听说当时七楼的用的是16位的单片机,更感高级,觉得有必要学习,否则就落后于这个时代了。网上8051的资料多如牛毛,开始逢资料便下载,后来见了入门两个字便不再看,再后来就留那么一两本以便查阅。我是个懒惰的人,开始看汇编,后来发现除了汇编还可以用C写代码,于是就不再看汇编了。
有段时间,喜欢在淘宝上逛,权当坐在家里逛街。买了个虚拟示波器,双通道,100k,还带红外检测,到手一看,居然只有P89LPC935+OP+CP2102三个芯片,赠送的VB程序很简单,单片机程序更简单,真是佩服啊。麻雀虽小,五脏俱全,现在的单片机把AD,DA都集成进去了,简单的设备完全可以SOP了。
MCU中另外一大支便是ARM了,最新潮流,如果不使用OS,就是高速单片机,如果用好,据说WINDOWS 8就支持ARM,这几天在看TI的Cortex M3,虽然跑不了linux,但一般的设备属于下里巴人,用不到文件系统和网络,如果只是串口的话,跑个UCOS还是可用满足的,入门比FPGA容易,开发速度要快不少。
DSP是TI一家独大,可以在一个指令周期内完成乘加运算,特别适合做算法,做浮点数运算也是其强项,总之就是适合数字信号处理。其芯片驱动负载的能力据说也较强。我感觉本质上MCU和DSP属于一类,虽然有哈佛,诺依曼等架构,但本质都是通过一条条指令,串行实现功能,比较符合人的思维。
FPGA是另外一种类型,可编程逻辑芯片,可以自定义其内部逻辑关系,所有的运算都可以并行执行,可用VHDL或Verilog描述其结构,当然也可以嵌入一个微处理器,我熟悉的只有NIOS。在OPENCORE上,有不少免费的核可以使用,51,8086等都有。我见过有高手甚至在一块FPGA开发板上跑WINDOWS 3.1。我认为除去易用性,价格等因素,只从逻辑功能上说,FPGA可以包含MCU,DSP所有逻辑功能,但是门槛高了点。
头一次接触FPGA是有人在我们这个调试一个设备,临走送我一块自己做的ACTEL的开发板。可能是电路板JTAG布线有问题,直接用并口烧录有问题,专用烧录器我不想买,直到现在,还闲置着。
入门的第一块板子是周立功公司的EASY FPGA030,主要是看重只卖¥99,拿到手之后发现周立功的资料还是做得不错的,下载了一堆视频,入门宝典等等,终于会使用Libera这个软件了。编译,布线,仿真,烧录,一个个对话框,一个个进度条,20行的代码电脑恨不得要5分钟才处理完,只是当时才入门,并不觉软件效率低,而是觉得这个软件好高级啊。后来就拿这块板子做了个数字总线转换系统,芯片容量太小了,初始化变量的语句都不敢写,幸好默认就是0,片内资源几乎全部用光。
再后来我发现有同事有块红色飓风的FPGA开发板闲着,据说当时买了上千的钱,便借来学习了。ALTERA果然很强大,EP1C12的片内资源是A3P030的数十倍,Quartus的速度是Libera的好几倍。自从发现片上逻辑分析仪很好很强大,从此就很少使用ModelSim仿真了。Altera的资料也很多,不过对于简单应用,不涉及厂家自定义的部分,Verilog就足够了,于是我就全面从ACTEL转向Altera了。
在做一个设备时,需要用到sin这个函数,用Verilog实现C语言的sin函数对我而言是个难题,问了一圈人,有一个人说可以嵌入一个8051的核来实现,于是就花了不少时间研究SOPC了。挑资料多的做,Altera资料最多的便是NIOS这种核了,下了一堆资料,看了好久,终于可以实现"Hello World!"了。
不带浮点的NIOS要想处理sin这样的浮点函数还是比较费事的,虽然它内部怎么实现我不知道,但在100MHz下,每秒只能运算3K次,显然这样的速度远远满足不了我的要求,于是想到了DSPBuilder了。在下了一堆资料后,忽略了一个问题,现在我所使用的这种技术,已经变成了阳春白雪了。5.0的不支持中文,9.1的和Matlab始终匹配不好,10.0的我找不到和谐文件。安装一套MATLAB就要4G空间,安装QUARTUS要8G空间,系统都重装过好几回,最后装9.0的总算可以了。
换个方向实现就是CORDIC算法+AVALON总线 自定义sin专用协处理器,看了半天,感觉这个技术应该可以管很久了,值得花时间学习。这方面的资料不多,NIOS还有《NIOS II那些事》这样的入门资料,也有《NiosⅡ嵌入式软核SOPC设计原理及应用》、《NiosⅡ软件架构解析》这样的图书,AV总线,SOPC等基本只有ALtera的datasheet可以参考,高处不胜寒。
再换个方向就是换个开发环境,读到施国勇编著的《数字信号处理FPGA电路设计》中比较详细地写FPGA实现CORDIC,第六章和实验六专门写了CORDIC原理与实现,ISE中有专门的这个IP可用,看样子Xilinx算法还是做得好一些,就省得那么麻烦了。Altera的功能Xilinx都有,逻辑分析仪,matlab,嵌入式软核,都差不多,但protel 99se支持Xinlin就要明显多些,软件以及配套Xilinx应该更胜一筹。不过JTAG调试器就贵不少了。等谁有Xilinx开发板,我也借来玩玩。
再换个方向就是在模拟前端就处理好这些数据,到了数字部分的处理就容易很多了,不过这个就不属于这篇范围了。
这几种技术也在相互融合,取长补短,TI最新的ARM已经和DSP双合一了,甚至可用简单配置端口了,Altera的飓风三已经可用嵌入ARM了,ACTEL没有自己的软核,早就和ARM合作了,Xilinx的SYS GEN这些也将DSP融合一起了。以后的技术肯定还会发展,肯定会越来越方便。估计不久的将来,数字、模拟一体的可编程芯片也会商品化的。
数字电路种类繁多,但摆脱不了算法+语法,就如打架在于准狠。算法是王道,MCU,DSP,FPGA,PLC等等就如十八般兵器,不管倚天剑和屠龙刀,只要用的好,都可以制胜,实现算法,满足需求。但刀剑使用得好了,艺高人胆大,算法可以以各种方式实现,买东西还得货比三家,何况实现方式。精通一种数字电路技术,才能实现算法,精通多种数字电路,才能比质比价,多快好省。精通数字电路、模拟电路、数字信号处理、操作系统,加上行业积累,呵呵,电工的追求都是这样的吧。 |