EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
在功能上,单片机与大规模cpld有很强的互补性。单片机具有性能价格比高、功能灵活、易于人机对话、良好的数据处理能力潍点;CPLD/FPGA则具有高速、高可靠以及开发便捷、规范等优点。以此两类器件相结合的电路结构在许多高性能仪器仪表和电子产品中仍将被广泛应用。本文就单片机与CPLD/FPGA的接口方式作一简单介绍,希望对从事单片机和CPLD/FPGA研发的朋友能有所启发。 " {+ [* q2 n7 u- H7 G, H
6 D) W. Q) k( q( q) |' R" N 单片机与CPLD/FPGA的接口方式一般有两种,即总线方式与独立方式,分别说明如下:$ B. h) p# N* p! A
* z% d" w% D4 b8 E7 ]
一、总线方式 2 E3 C+ u m& g6 t( @/ x% K
3 D3 l! {: D. l
单片机以总线方式与CPLD/FPGA进行数据与控制信息通信有许多优点。
+ \+ E/ {- Z, d9 d4 ]
0 J; n: _9 X: p9 o4 ^8 b# n1 F ; (1)速度快。其通信工作时序是纯硬件行为,对于MCS-51单片机,只需一条单字节指令就能完成所需的读/写时序,如: 6 p* I) F/ `' ~& w( {# y
# P6 A+ ^7 c' B+ v$ O1 |& }4 d
MOV @DPTR,A ;MOV A,@DPTR. {3 d- x% e- V4 `4 a8 I3 `
1 @% G3 Q" _8 \9 M* C (2)节省CPLD芯片的I/O口线。如果将译码器DECODER设置足够的译码输出,并安排足够的锁存器,就能仅通过19根o口线在FPGW与单片机之间进行各种类型的数据与控制信息交换。
! o6 ?* n! l- Z1 ? 9 y$ F* |) ~* ]+ Y& F6 u5 f
, a' B. ?$ x# w9 J4 G/ E
(3)相对于非总线方式,单片机编程简捷,控制可靠。 ) E# i& X) l t" `0 s5 H6 ~) i2 z
7 C5 h" v$ T9 X! U. O2 S" { (4)在CPLD/FPGA中通过逻辑切换,单片机易于与SRAM或ROM接口。这种方式有许多实用之处,如利用类似于微处理器系统的DMA的工作方式,首先由CPLD/FPGA与接口的高速A/D等器件进行高速数据采样,并将数据暂存于SRAM中,采样结束后,通过切换,使单片机与SRAM以总线方式进行数据通信,以便发挥单片机强大的数据处理能力。
- g' V( U" s# G' W& S% |; h2 D' A* W$ ~7 t6 s% k/ V0 }. o, U
单片机与CPLD/FPGA以总线方式通信的逻辑设计,重要的是要详细了解单片机的总线读写时序,根据时序图来设计逻辑结构。图一是MCS-51系列单片机的时序图,其时序电平变化速度与单片机工作时钟频率有关。图中,ALE为地址锁存使能信号,可利用其下降沿将低8位地址锁存于CPLD/FPGA中的地址锁存器(LATCH_ADDR[NextPage]
7 Z9 D: B! Q* d% f/ e* Y7 NES)中;当ALE将低8位地址通过P0锁存的同时,高8位地址已稳定建立于P2口,单片机利用读指令允许信号PSEN的低电平从外部ROM中将指令从P0口读入,由时序图可见,其指令读入的时机是在PSEN的上升沿之前。接下来,由P2口和P0口分别输出高8位和低8位数据地址,并由ALE的下降沿将P0口的低8位地址锁存于地址锁存器。若需从CPLD/FPGA中读出数据,单片机则通过指令“MOVXA,@DPTR”使RD信号为低电平,由P0口将图二中锁存器LATCH_IN1中的数据读入累加器A;但若欲将累加器A的数据写进CPLD/FPGA,则需通过指令“MOVX ·DPTR,A”和写允许信号WR。这时,DPTR中的高8位和低8位数据作为高、低8位地址分别向P2和P0口输出,然后由WR的低电平并结合译码,将累加器A的数据写入图中相关的锁存器。7 r7 N7 a( W0 L# T
7 K8 \, q& J( z/ M 二、独立方式
4 @: x3 k1 a, O, \1 W! v$ @0 f' G8 x* ?' J
与总线接口方式不同,几乎所有单片机都能以独立 接口方式与CPLD/FPGA进行通信,其通信的时序方式可由所设计的软件自由决定,形式灵活多样。其最大的优点是CPLD/FPGA中的接口逻辑无需遵循单片机内固定总线方式的读/写时序。CPLD/FPGA的逻辑设计与接口的单片机程序设计可以分先后相对独立地完成。事实上,目前许多流行的单片机已无总线工作方式,如89C2051、97C2051、Z84系列、PICI 6C5X系列等。* g1 |: j( E7 \! w: d5 ~
$ |$ I0 ]4 u; P% ?
这是一个CPLD/FPGA与MCS-51系列单片机接口的VHDL电路设计。MCS-51以总线方式工作,例如,由8031将数据#5AH写入目标器件中的第一个寄存器LATCH_OUT1的批令是:
* T# w8 x% h3 j% G/ p( y# X7 ^+ J% M7 a3 f$ x/ y0 }
MOV A,#5AH ' o5 v. a3 m( O# D$ ~2 f! R
MOV DPTR,#6FF5H
$ x- ~. b! f' m2 m9 U4 Z MOVX @DPTR,A, g" X, I- ~' C
9 U8 I% Q, i+ }. P 当READY为高电平时,8031从目标器件中的寄存器LATCH_IN1将数据读入的指令是:
! Y6 L1 N- _1 V1 y4 d1 c$ d" }9 g# v. E( |9 e6 O
MOV DPTR,#9F7EH
" R/ C! J- C% P; z! i# ]( ^ MOVX A,@DPTR . L/ K! S! s3 ]0 R& t8 [
$ e1 C: y& R/ k1 m& ^
以上介绍了MCS-51单片机与CPLD/FPGA接口逻辑设计的两种接口方式,希望对从事单片机和CPLD/FPGA研发的朋友能有所启发。 ES)中;当ALE将低8位地址通过P0锁存的同时,高8位地址已稳定建立于P2口,单片机利用读指令允许信号PSEN的低电平从外部ROM中将指令从P0口读入,由时序图可见,其指令读入的时机是在PSEN的上升沿之前。接下来,由P2口和P0口分别输出高8位和低8位数据地址,并由ALE的下降沿将P0口的低8位地址锁存于地址锁存器。若需从CPLD/FPGA中读出数据,单片机则通过指令“MOVXA,@DPTR”使RD信号为低电平,由P0口将图二中锁存器LATCH_IN1中的数据读入累加器A;但若欲将累加器A的数据写进CPLD/FPGA,则需通过指令“MOVX ·DPTR,A”和写允许信号WR。这时,DPTR中的高8位和低8位数据作为高、低8位地址分别向P2和P0口输出,然后由WR的低电平并结合译码,将累加器A的数据写入图中相关的锁存器。
- K& [6 k6 t& n2 W) q- F
! ?& H0 u. t3 Q3 ? 二、独立方式
( Q" }8 Z0 D+ g+ H9 {% z7 f/ n3 J4 H5 I* |* I! v+ `1 x% g
与总线接口方式不同,几乎所有单片机都能以独立 接口方式与CPLD/FPGA进行通信,其通信的时序方式可由所设计的软件自由决定,形式灵活多样。其最大的优点是CPLD/FPGA中的接口逻辑无需遵循单片机内固定总线方式的读/写时序。CPLD/FPGA的逻辑设计与接口的单片机程序设计可以分先后相对独立地完成。事实上,目前许多流行的单片机已无总线工作方式,如89C2051、97C2051、Z84系列、PICI 6C5X系列等。
3 Z+ Q) X- c) y1 V8 }& \ . U# ~+ M- M# u1 Y' L5 n& i
这是一个CPLD/FPGA与MCS-51系列单片机接口的VHDL电路设计。MCS-51以总线方式工作,例如,由8031将数据#5AH写入目标器件中的第一个寄存器LATCH_OUT1的批令是: 1 M7 c& h0 v& o6 R0 Q% U, C j5 o
0 ^4 ~, d( m0 ]/ s1 u
MOV A,#5AH
3 q6 j& z3 R8 u7 D" O MOV DPTR,#6FF5H
- m- ~5 f% j% U3 x( q$ h MOVX @DPTR,A$ g L/ H* S9 Y4 r
% O( K. P! {; B/ |3 Y/ {
当READY为高电平时,8031从目标器件中的寄存器LATCH_IN1将数据读入的指令是:
B! H7 ] }+ B7 U4 e5 }( s5 O, s
1 y; K H) c4 {" L& \" v1 I0 }% v MOV DPTR,#9F7EH
* c, X9 i" l4 k3 ]7 m, ] MOVX A,@DPTR + l: U0 k* [. Y- \4 \5 w1 p
|