摘要:介绍实现单片机与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系列器件 项 目 XC9536 XC9572 XC95108 XC95144 XC95216 XC95288 寄存器/个 36 72 108 144 216 288 可用门数/个 800 1600 2400 3200 4800 6400 宏单元数/个 36 72 108 144 216 288 fPD/ns 5 7.5 7.5 7.5 10 10 tSU/ns 3.5 4.5 4.5 4.5 6.0 6.0 tCO/ns 4.0 4.5 4.5 4.5 6.0 6.0 fCNT/MHz 100 125 125 125 111.1 111.1 fSYSTEM/MHz 100 83.3 83.3 83.3 66.7 66.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 %26;amp;%26;amp;ADDRESSREG[0]= =0)) LAMCU_DATA <=CONREG1; //从地址为0的CONREG1寄存器读数据 else if(!CS%26;amp;%26;amp;(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与单片机接口的项目中。
编辑:冀凯 引用地址:用CPLD实现单片机读写模块
上一篇:基于MicroBlaze软核的FPGA片上系统设计
下一篇:基于GAL器件的步进电机控制器的研究与设计
- 热门资源推荐
- 热门放大器推荐
小广播
热门活动
换一批
更多
最新半导体设计/制造文章
更多精选电路图
更多热门文章
更多每日新闻
- Allegro MicroSystems 在 2024 年德国慕尼黑电子展上推出先进的磁性和电感式位置感测解决方案
- 左手车钥匙,右手活体检测雷达,UWB上车势在必行!
- 狂飙十年,国产CIS挤上牌桌
- 神盾短刀电池+雷神EM-i超级电混,吉利新能源甩出了两张“王炸”
- 浅谈功能安全之故障(fault),错误(error),失效(failure)
- 智能汽车2.0周期,这几大核心产业链迎来重大机会!
- 美日研发新型电池,宁德时代面临挑战?中国新能源电池产业如何应对?
- Rambus推出业界首款HBM 4控制器IP:背后有哪些技术细节?
- 村田推出高精度汽车用6轴惯性传感器
- 福特获得预充电报警专利 有助于节约成本和应对紧急情况
更多往期活动
11月17日历史上的今天
厂商技术中心