TA的每日心情 | 开心 2019-11-20 15:00 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
1 i0 C% |8 x' A' x) e
( l7 T& ^% {; G, Q CPLD是英语复杂可编程逻辑器件的缩写,对于一个硬件工程师来说,能应用cpld技术是一个十分强大的能力。它的应用可在根本上解决许多数字电路设计的问题,能大幅度改变设计思想,大幅度提高工作效率,甚至可以把以前的数十颗普通分立芯片的功能用一个芯片实现。它还有一个十分优秀的优点,在硬件原理设计和布线的时候,不用考虑引脚的顺序,可从布线方便的角度安排需要的信号位置,使得布线难度大幅度降低。由于布线难度下降,直接带来布线优化的好处。本文就cpld初学者面对的问题做一个简单描述。希望对有志于学习cpld的硬件工程师有所启发。
$ l7 u6 y$ p7 U* F4 w' M, ?2 z0 F& D) X: n
1:首先进行的准备是有针对性的学习cpld物理构造和资源
/ K4 l |" L/ ?" K: A: k- a8 z$ t: P+ O
先不要着急去买开发板,不要着急写逻辑。了解硬件本身更加重要。Cpld是一个很大的范畴,初学者会淹没在众多厂家、众多资料的海洋中。针对这个问题,笔者建议大家有所针对的进行知识获取,推荐大家以aLTEra的max ii系列cpld为突破口,首当其冲的就是emp240这颗芯片。把它吃透,则max ii系列的其它都很好理解了,构造都一样,只是资源增加而已。其它厂家的也好用了,因为它们都是大同小异的。之所以选择emp240是因为它应用已经很广泛,市场上容易买到,而且价格便宜,批量买只有8元/片左右。& Z& W+ @3 U$ t' x. q+ X0 {
- L0 L8 G4 E9 ~, H7 t
Emp240顾名思义具有240个宏单元。简单理解就是有240个触发器,或者理解成240个bit的存储单元。这样都好理解,以后对工程应用就容易估算容量了。对于工程来说,一般这么做,首先依据需求设计引脚的数量,然后再在开发环境中进行逻辑编写、软仿真,这样,在硬件完全没有开始之前,就能把逻辑部分全部设计完,只差物理验证一步了。仿真分2布,写逻辑时用qUARTus自带的仿真即可。逻辑写完之后,最好用model sim。Model sim是专门的仿真软件,功能十分强大,但对初学者来说,最好先不要介入这个领域。先把cpld用上是最主要的。, ?$ I! N+ I: s {1 B6 M
5 c! D5 T- F( ]' p' N: F0 S6 S 好了,这样就把目标缩小到一个点上了。需要花功夫把240的相关资料吃透,把quartus用熟。到这里,一分钱都不用花。时间用在3个点上:1、240的构造和资源,2、quartus软件使用,3、verilog hdl语言学习。# u- d! k# @6 L, n
* x5 s3 i5 m$ L, F* f8 n+ A
设计中,如果你的逻辑需要100个单元,编译后会发现用掉120个单元,这是cpld内部布线需要。作为实际应用,必须要留20%以上的富余量,比如编译结果指示用220个单元,这时就不要用240了,应该使用570,因为240的富余量不够。. S3 _% P9 Q! j: p' S. z5 K) A
, F, n: P ]" x1 ?8 H- `: l. n
一个小技巧,针对EPM240和570来说,常用的封装是T100的,就是TQFP100,这2个芯片的封装是向下兼容的,因此,设计时,即便决定使用240,也要按570去画板子。焊接是兼容的,同时万一240不够了,可以改焊570。. O+ {" @2 \2 i) X+ f
; S- k. X# v0 x1 \2:向应用cpld走近一步,用开发板练习
/ r0 V, Y$ p' {4 N4 U# X( V6 P. v2 s0 z
有了上面的基础,可以投资买开发板了,一般卖板子的都配套好软件和编程器了。针对240的开发板可能很少,可能570的好买。注意买cpld的开发板,不要急于用FPGA的,学会cpld之后,再用fPGA就容易多了。要一步一步来。570的开发板,带仿真器,带软件,带练习光盘,一整套下来估计200-300元人民币。这个资金对你要学会的技术来说,微不足道。2 `! W6 E% p$ `3 P+ X: d, j2 Q
5 T ?; x% u( o) b9 J
开发板光盘有许多例子程序,可以先跑跑看,很容易就上手了。对于初学者来说,cpld技术是一个很大的领域,切记不要急于求成,上来就弄个FPga去加载视频编解码算法,那会十分困难。建议先从最简单的开始,用240替代设计中使用的一些74芯片、完成部分软件功能等,熟能生巧。这个技术绝不是短时间就能达到多高水平的,必须有积累过程。一开始就啃难度高的,会对信心造成打击,长时间没有进展,是让一个硬件工程师最为抓狂的事。 u) u6 X; x9 `1 J! i
! |# s, V2 `; h+ e5 R7 f. n5 N8 p, Y 对于前期学习准备比较充足的工程师来说,完全可以不买开发板,直接在工程中应用。现在的互联网太方便了,只要你的cpld外围没有接错,由于引脚分布是可编程的,PCB板导致不能用的可能性就大大降低了,鼓励直接自己画pcb去应用。这样掌握得更快。
Y4 c/ M# {% `3 |% |4 J* A, A" t) r4 {8 K2 E3 J' |
3:cpld与cpu的接口! P0 U4 b: v6 O
4 M. U9 w$ \' g, t3 R+ F
这个问题十分重要,因为cpld大部分扮演的是cpu的扩展,替cpu完成外部引脚资源扩展、输入输出时序管理、部分软件功能实现。很少有让一个cpld单独工作的。
* v( }/ D5 X s) @" Q$ W2 N) O# d& \7 n7 F$ x H9 K- _
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与单片机的接口就再无秘密可言了。4 U. ^# K5 a9 \
7 y4 Y6 `3 `+ x. t
与51单片机的接口注意必须深刻理解cpu的工作时序,地址与数据口如何复用,ale信号如何锁存地址等。与arm7的接口相对简单,因arm7比较灵活,对外部接口的管理功能强。4 t( q# D1 Y( W' L
}9 z! T4 L( J 初学者使用cpld的时候,建议在所有io脚的连线中都串联一个51欧电阻,这样会方便测量,更重要的是能保护cpld的io口,更深入的说,能改善高速信号的振铃、信号反射,提高信号完整性。
+ d( M/ @3 X9 {/ i4 C/ z. K' d0 w C9 c, ?& Q+ f6 _# ^
4:cpld与fpga的简单介绍
6 Q& x) V9 @( _& B9 ]
8 g3 n$ |+ S0 r Cpld比较简单,fpga更加复杂,在cpld基础上,增加了PLL、硬件乘法器、ram块等硬件资源。更有的fpga直接集成了DSP的硬核。Altera的max ii系列cpld,其内部应用了走线池,因此严格地说它已经属于fpga了。- ]% X5 i+ q. m* Q8 v6 o
# P* M" ?' J9 m8 ^8 L" v( M! s
目前主要的cpld和fpga厂家是altera和xilinx,还有actel等规模稍小。Altera主要面对商用和工业用,其产品性价比稍好,市场应用最为广泛。Xilinx初期定位在宇航级产品,因此,它的芯片具有更好的性能。后来xilinx也面对商业用户了,因此形成了与altera分庭鼎立的情况,两个这么大的厂家,芯片的系列十分类似。建议初学者使用altera的。当然,使用xilinx也无所谓。
n2 w5 G w( C& [, T& b0 X0 I$ \* X: h0 {
Altera的开发环境是quartus,笔者使用的是8.1版,已经老了,但是够用,且不出问题,姑且使用。Xilinx的开发环境是ISE。这些环境本身已经提供了比较完整的仿真功能。但有一个功能更加强大、更加独立的仿真环境是model sim,它分前仿真和后仿真,由于altera和xilinx的主导作用,因此model sim提供了这两家的芯片的完整支持。‘前仿真’属于逻辑仿真,所有瞬态时序同步发生,用于初期测试逻辑功能是否正确。‘后仿真’则带有延迟特性,这与芯片内部构造和编译后的内部走线密切相关。这个后仿真,一般情况下就等同于在实际板子上跑的结果。如果在pcb上跑出现问题,则此问题就比较难解决。
' C# U- B. o* G* h& X+ U" P/ H1 |; P2 _' A1 B. t! n2 E [4 S
软件分两种规范,一个是verilog hdl,一个叫vhdl。前者基本就是c语言的底子,因此对于工程师来说,很容易上手,所以用verilog的人非常多。Vhdl则更加严谨,其语言规范需要一段时间熟悉。如果要长期以hdl语言为伍,则推荐学习vhdl,它的结构更加严谨,能避免比较复杂的问题的发生。听一个在华为的硬件工程师说,华为要求必须熟练一个语言的同时要能看懂另一个语言。 |
# o9 Q) C1 Y ^; |, j5 _ |
|