学海荡舟手机网

主页 > 实用文摘 > 教育文摘_22 > > 详细内容

用CPLD实现单片机读写模块_EDAPLD论文

摘要:介绍实现单片机与xilinx公司xc9500系列可编程逻辑器件的读写逻辑功能模块的接口设计,以及xilinx公司的xc9500系列可编程逻辑器件的开发流程。

    关键词:复杂可编程逻辑电路 微处理器 在系统编程 现场可编程门阵列

1 概述

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

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

2 xilinx公司的可编程逻辑器件

xilinx公司的xc9500系列可编程逻辑器件是一款高性能、有特点的可编程逻辑器件。它的系统结构如图1所示。从结构上看,它包含三种单元:宏单元、可编程i/o单元和可编程的内部连线。它的主要特点是:

①高性能。在所有可编程引脚之间pin-pin延时5ns;系统的时钟速度可达到100mhz。

②容量范围大。xilinx公司的xc9500系列可编程逻辑器件的容量范围为36~288个宏单元;可用系统门为800~6400个。

③5v在系统可编程。可以编程10000次。

④具有强大的强脚锁定能力。

⑤每个宏单元都有可编程低功耗模式。

⑥没有用的引脚有编程接地能力。

xilinx的xc9500系列可编程逻辑器件的主要性能如表1所列。

3 cpld同单片机接口设计

cpld同单片机接口原理如图2所示。

cpld同单片机接口设计中,单片机采用atmel公司的at89c52,cpld采用xilinx公司的xc95216。该cpld芯片结构及性能见图1和表1。at89c52通过ale、cs、rd、we、p0口(数据地址复用)同xc95216芯片相连接。

表1 xilinx xc9500t系列器件

项  目xc9536xc9572xc95108xc95144xc95216xc95288
寄存器/个3672108144216288
可用门数/个80016002400320048006400
宏单元数/个3672108144216288
fpd/ns57.57.57.51010
tsu/ns3.54.54.54.56.06.0
tco/ns4.04.54.54.56.06.0
fcnt/mhz100125125125111.1111.1
fsystem/mhz10083.383.383.366.766.7

注:fcnt=16位计数器最高工作频率;fsystem=整个系统的最高工作效率。

ale:地址锁存信号。

cs:片选信号。

rd:读信号。

wr:写信号。

ad0~ad7:数据地址复用信号。

本例的设计思想是,在xc95216设置两个控制寄存器,通过单片机对两个控制寄存器的读写来完成对其它过程的控制。

xc95216设置的两个控制寄存器,可以作内部寄存器,也可以直接是映射为i/o口。

图2 xc9516同单片机接口原理图

4 cpld同单片机接口设置结果

本例中,使用xilinx公司提供的fundation ise 4.2i+modelsim 5.5f软件实现设计。实现设计的源文件模块如下:

/**************************

//mcu和xc95216接口程序

//目的:mcu读写xc95216

/**************************/

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

使用modelsim 5.5f仿真结果如图3和图4所示。图中ale、cs、rd、we、mcu_data是测试激励源信号,代表at89c52接口信号;conreg1和conreg2的内部寄存器;addressreg是内部地址锁存寄存器。

图3 conreg1写过程 图4 conreg1读过程

    图3是conreg1写过程。首先,在ale信号的下降沿,锁存mcu_data的数据到addressreg内部地址锁存寄存器。然后,在we信号的上升沿,把mcu_data(0xaa)的数据锁存到寄存器conreg1。

图4是conreg1读过程。首先,在ale信号的下降沿,锁存mcu_data(0x00)的数据到addressreg内部地址锁存寄存器。然后,在rd信号的低电平期间,把mcu_data(0xaa)的数据锁存到寄存器conreg1。

从图3和图4可以看出,对conreg1寄存器的读、写过程完全满足进序要求,conreg2的读写过程同conreg1一样,也完全满足时序要求,实现了期望的功能。

结语

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