CPLD按英语说是复杂可编程逻辑器件,对于一个硬件工程师来说,能应用cpld技术是一个十分强大的能力。它的应用可在根本上解决许多数字电路设计的问题,能大幅度改变设计思想,大幅度提高工作效率,甚至可以把以前的数十颗普通分立芯片的功能用一个芯片实现。它还有一个十分优秀的优点,在硬件原理设计和布线的时候,不用考虑引脚的顺序,可从布线方便的角度安排需要的信号位置,使得布线难度大幅度降低。由于布线难度下降,直接带来布线优化的好处。本文就cpld初学者面对的问题做一个简单描述。希望对有志于学习cpld的硬件工程师有所启发。
我的老师大学毕业时,还没有cpld呢,可现在是他在指导我做fpga设计工作。
1:首先进行的准备是有针对性的学习cpld物理构造和资源
先不要着急去买开发板,不要着急写逻辑。了解硬件本身更加重要。Cpld是一个很大的范畴,初学者会淹没在众多厂家、众多资料的海洋中。针对这个问题,笔者建议大家有所针对的进行知识获取,推荐大家以altera的max ii系列cpld为突破口,首当其冲的就是EPM240这颗芯片。把它吃透,则max ii系列的其它都很好理解了,构造都一样,只是资源增加而已。其它厂家的也好用了,因为它们都是大同小异的。之所以选择emp240是因为它应用已经很广泛,市场上容易买到,而且价格便宜,批量买只有8元/片左右。
Emp240顾名思义具有240个宏单元。简单理解就是有240个触发器,或者理解成240个bit的存储单元。这样都好理解,以后对工程应用就容易估算容量了。对于工程来说,一般这么做,首先依据需求设计引脚的数量,然后再在开发环境中进行逻辑编写、软仿真,这样,在硬件完全没有开始之前,就能把逻辑部分全部设计完,只差物理验证一步了。仿真分2布,写逻辑时用quartus自带的仿真即可。逻辑写完之后,最好用model sim。Model sim是专门的仿真软件,功能十分强大,但对初学者来说,最好先不要介入这个领域。先把cpld用上是最主要的。
好了,这样就把目标缩小到一个点上了。需要花功夫把240的相关资料吃透,把quartus用熟。到这里,一分钱都不用花。时间用在3个点上:1、240的构造和资源,2、quartus软件使用,3、verilog hdl语言学习。
设计中,如果你的逻辑需要100个单元,编译后会发现用掉120个单元,这是cpld内部布线需要。作为实际应用,必须要留20%以上的富余量,比如编译结果指示用220个单元,这时就不要用240了,应该使用570,因为240的富余量不够。
一个小技巧,针对EPM240和570来说,常用的封装是T100的,就是TQFP100,这2个芯片的封装是向下兼容的,因此,设计时,即便决定使用240,也要按570去画板子。焊接是兼容的,同时万一240不够了,可以改焊570。
2:向应用cpld走近一步,用开发板练习。
有了上面的基础,可以投资买开发板了,一般卖板子的都配套好软件和编程器了。针对240的开发板可能很少,可能570的好买。注意买cpld的开发板,不要急于用fpga的,学会cpld之后,再用fpga就容易多了。要一步一步来。570的开发板,带仿真器,带软件,带练习光盘,一整套下来估计200-300元人民币。这个资金对你要学会的技术来说,微不足道。
开发板光盘有许多例子程序,可以先跑跑看,很容易就上手了。对于初学者来说,cpld技术是一个很大的领域,切记不要急于求成,上来就弄个fpga去加载视频编解码算法,那会十分困难。建议先从最简单的开始,用240替代设计中使用的一些74芯片、完成部分软件功能等,熟能生巧。这个技术绝不是短时间就能达到多高水平的,必须有积累过程。一开始就啃难度高的,会对信心造成打击,长时间没有进展,是让一个硬件工程师最为抓狂的事。
对于前期学习准备比较充足的工程师来说,完全可以不买开发板,直接在工程中应用。现在的互联网太方便了,只要你的cpld外围没有接错,由于引脚分布是可编程的,PCB板导致不能用的可能性就大大降低了,鼓励直接自己画PCB去应用。这样掌握得更快。
3:cpld与cpu的接口
这个问题十分重要,因为cpld大部分扮演的是cpu的扩展,替cpu完成外部引脚资源扩展、输入输出时序管理、部分软件功能实现。很少有让一个cpld单独工作的。
Cpld与cpu的接口就十分突出,对于要学cpld的工程师来说,用的cpu可能仅限于51单片机或者arm7系单片机。这种接口算是比较简单了,还是应该循序渐进,从简单的入手,比如用单片机3个io去cpld,由cpld完成74hc138功能,这就是一个简单接口。再进一步,用cpu的p0口和一个io脚接到cpld,用cpld完成373、244、273等功能,这就进了一步,有时序的概念了。最后,用cpu的数据口、晶振、wr、rd、ale等信号接入cpld,把cpld做成几个字节的ram,读写实验。这一关过去之后,cpld与单片机的接口就再无秘密可言了。
与51单片机的接口注意必须深刻理解cpu的工作时序,地址与数据口如何复用,ale信号如何锁存地址等。与arm7的接口相对简单,因arm7比较灵活,对外部接口的管理功能强。
初学者使用cpld的时候,建议在所有io脚的连线中都串联一个51欧电阻,这样会方便测量,更重要的是能保护cpld的io口,更深入的说,能改善高速信号的振铃、信号反射,提高信号完整性。
4:cpld与fpga的简单介绍
Cpld比较简单,fpga更加复杂,在cpld基础上,增加了PLL、硬件乘法器、ram块等硬件资源。更有的fpga直接集成了dsp的硬核。Altera的max ii系列cpld,其内部应用了走线池,因此严格地说它已经属于fpga了。
目前主要的cpld和fpga厂家是altera和xilinx,还有actel等规模稍小。Altera主要面对商用和工业用,其产品性价比稍好,市场应用最为广泛。Xilinx初期定位在宇航级产品,因此,它的芯片具有更好的性能。后来xilinx也面对商业用户了,因此形成了与altera分庭鼎立的情况,两个这么大的厂家,芯片的系列十分类似。建议初学者使用altera的。当然,使用xilinx也无所谓。
Altera的开发环境是quartus,笔者使用的是8.1版,已经老了,但是够用,且不出问题,姑且使用。Xilinx的开发环境是ISE。这些环境本身已经提供了比较完整的仿真功能。但有一个功能更加强大、更加独立的仿真环境是model sim,它分前仿真和后仿真,由于altera和xilinx的主导作用,因此model sim提供了这两家的芯片的完整支持。‘前仿真’属于逻辑仿真,所有瞬态时序同步发生,用于初期测试逻辑功能是否正确。‘后仿真’则带有延迟特性,这与芯片内部构造和编译后的内部走线密切相关。这个后仿真,一般情况下就等同于在实际板子上跑的结果。如果在PCB上跑出现问题,则此问题就比较难解决。
软件分两种规范,一个是verilog hdl,一个叫vhdl。前者基本就是c语言的底子,因此对于工程师来说,很容易上手,所以用verilog的人非常多。Vhdl则更加严谨,其语言规范需要一段时间熟悉。如果要长期以hdl语言为伍,则推荐学习vhdl,它的结构更加严谨,能避免比较复杂的问题的发生。听一个在华为的硬件工程师说,华为要求必须熟练一个语言的同时要能看懂另一个语言。