现在的位置: 首页CPLD介绍及应用正文

用CPLD实现单片机读写模块

1 概述
  CPLD(复杂可编程逻辑电路)是一种具有丰富的可编程I/O引脚的可编程逻辑器件,具有在系统可编程、使用方便灵活的特点;不但可实现常规的逻辑器件功能,还可实现复杂的时序逻辑功能。把CPLD应用于嵌入式应用系统,同单片机结合起来,更能体现其在系统可编程、使用方便灵活的特点。CPLD同单片机接口,可以作为单片机的一个外设,实现单片机所要求的功能。例如,实现常用的地址译码、锁存器、8255等功能;也可实现加密、解密及扩展串行口等单片机所要求的特殊功能。实现嵌入式应用系统的灵活性,也提高了嵌入式应用系统的性能。

2 Xilinx公司的可编程逻辑器件
  Xilinx公司的XC9500系列可编程逻辑器件是一款高性能、有特点的可编程逻辑器件。从结构上看,它包含三种单元:宏单元、可编程I/O单元和可编程的内部连线。它的主要特点是:
    ① 高性能。在所有可编程引脚之间pin-pin延时5ns;系统的时钟速度可达到100MHz。
    ② 容量范围大。Xilinx公司的XC9500系列可编程逻辑器件的容量范围为36~288个宏单元;可用系统门为800~6400个。
    ③ 5V在系统可编程。可以编程10000次。
    ④ 具有强大的强脚锁定能力。
    ⑤ 每个宏单元都有可编程低功耗模式。
    ⑥ 没有用的引脚有编程接地能力。

3 CPLD同单片机接口设计
  CPLD同单片机接口设计中,单片机采用Atmel公司的AT89C52,CPLD采用Xilinx公司的XC95216。AT89C52通过ALE、CS、RD、WE、P0口(数据地址复用)同XC95216芯片相连接。
  注:fCNT=16位计数器最高工作频率;fSYSTEM=整个系统的最高工作效率。
     ALE:地址锁存信号。
     CS:片选信号。
     RD:读信号。
     WR:写信号。
     AD0~AD7:数据地址复用信号。
  本例的设计思想是,在XC95216设置两个控制寄存器,通过单片机对两个控制寄存器的读写来完成对其它过程的控制。
  XC95216设置的两个控制寄存器,可以作内部寄存器,也可以直接是映射为I/O口。

4 CPLD同单片机接口设置结果
  本例中,使用Xilinx公司提供的Fundation ISE 4.2i+Modelsim 5.5f软件实现设计。实现设计的源文件模块如下:
    module mcurw(MCU_DATA,ALE,CS,RD,WE,CONREG1,CONREG2);
    inout[7:0]MCU_DATA;//单片机的地址数据复用信号
    output[7:0]CONREG1,CONREG2;//内部控制寄存器
    input ALE; //单片机的地址锁存信号
    input CS; //单片机的片选信号
    input RD; //单片机的读信号
    input WE; //单片机的写信号
    reg[7:0]LAMCU_DATA; //内部控制寄存器
    reg[7:0]ADDRESSREG; //内部地址锁存寄存器
    reg[7:0]CONREG1; //内部控制寄存器
    reg[7:0]CONREG2; //内部控制寄存器
    assign MCU_DATA=RD?8′bzzzzzzzz:LAMCU_DATA;
    initial //寄存器初始化
    begin
    LAMCU_DATA<=0;
    ADDRESSREG<=0;
    CONREG1<=0;
    CONREG2<=0;
    end
    always@(negedge ALE)
    begin
    ADDRESSREG<=MCU_DATA; //地址锁存
    End
    always@(posedge WE)
    begin
    if(!CS &&ADDRESSREG[0]= =0))
    LAMCU_DATA<=CONREG1; //从地址为0的CONREG1寄存器读数据
    else if(!CS&&(ADDRESSREG[0]= =1))
    LAMCU_DATA<=CONREG2;  //从地址为1的CONREG2寄存器读数据
    else LAMCU_DATA<=8′bzzzzzzzz;
    end
    else
    LAMCU_DATA<=8′bzzzzzzzz;
    End
    Endmodule
  首先,在ALE信号的下降沿,锁存MCU_DATA的数据到ADDRESSREG内部地址锁存寄存器。然后,在WE信号的上升沿,把MCU_DATA(0XAA)的数据锁存到寄存器CONREG1。
  首先,在ALE信号的下降沿,锁存MCU_DATA(0X00)的数据到ADDRESSREG内部地址锁存寄存器。然后,在RD信号的低电平期间,把MCU_DATA(0XAA)的数据锁存到寄存器CONREG1。
  对CONREG1寄存器的读、写过程完全满足进序要求,CONREG2的读写过程同CONREG1一样,也完全满足时序要求,实现了期望的功能。

结语
  本文实现CPLD与单片机接口设计是笔者设计的高速采样设备的一部分,经实际验证完全正确。简单地修改该模块,笔者已成功地将其应用于多个CPLD或FPGA与单片机接口的项目中。

在线咨询