第八章 CPLD器件应用.docx

上传人:b****7 文档编号:23844003 上传时间:2023-05-21 格式:DOCX 页数:20 大小:736.09KB
下载 相关 举报
第八章 CPLD器件应用.docx_第1页
第1页 / 共20页
第八章 CPLD器件应用.docx_第2页
第2页 / 共20页
第八章 CPLD器件应用.docx_第3页
第3页 / 共20页
第八章 CPLD器件应用.docx_第4页
第4页 / 共20页
第八章 CPLD器件应用.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

第八章 CPLD器件应用.docx

《第八章 CPLD器件应用.docx》由会员分享,可在线阅读,更多相关《第八章 CPLD器件应用.docx(20页珍藏版)》请在冰豆网上搜索。

第八章 CPLD器件应用.docx

第八章CPLD器件应用

第八章CPLD器件应用

随着生产工艺的逐步提高以及CPLD开发系统的不断完善,CPLD器件容量也由几百门飞速发展到百万门以上,使得一个复杂数字系统完全可以在一个芯片中实现。

HDL语言的使用,以及强大的EDA综合仿真工具,使CPLD的开发形象、快捷,特别是MAX+PLUSⅡ10.0和QUARTUSⅡ2.0以上版本,图形输入和文本输入可以方便地结合在一起,错误定位使用方便,极大地加快了开发速度。

因此CPLD在数字系统、微机系统、控制系统以及通信系统中或得广泛应用。

8-1CPLD在数字系统中的应用

CPLD器件由于本身是一种纯数字器件,因此中小规模数字器件完成的设计可以完全由一片CPLD器件所取代。

CPLD在数字系统中的典型应用主要有数字中的设计、数字频率计的设计、A/D及D/A转换时序设计、键盘扫描与去抖动设计等。

下面以0.1Hz-50MHz的频率计为例介绍CPLD器件在频率计设计中的应用。

1、设计内容:

频率采样、16进制转换成BCD码、数码管显示。

2、开发系统:

MAX+PLUSⅡ10.0

3、使用的器件:

ACEXEP1K100QC208-3

4、实验系统:

CPLDEE-4实验开发系统

(1)频率采样:

由于测量的范围较宽,因此分成两种处理方式:

频率大于等于1000Hz的采用直接计数方式,即在一秒内对被测频率所计的数即得频率值。

等频率小于1000Hz时采用脉宽测量的方式,即首先将被测信号进行二分频,使得被测信号的正负脉宽相等,然后利用正脉宽对1MHz的标准频率进行采样,频率值f=100MHz/采样值,这样可以得到小数点后两位的值。

如图8.1所示:

图8.1频率测量示意图

图8.2频率计模块示意图

图8.2中详细描述了各个模块的功能及连接关系。

其中信号inclk为系统时钟,这里采用40MHz,fin为被测信号,其范围为0.1Hz至50MHz,二分频后的FS作为测量的输入时钟,开关k实现计数方式与脉宽测量方式的切换。

模块fsurveya实现计数方式测量,原理是将系统时钟inclk分频,得到高、低电平分别2秒的方波,在高电平时对被测信号计数,在低电平时将计数值输出。

其HDL描述如下:

模块fsurvb完成脉宽测量方式,为了提高测量精度采用1MHz作为计数时钟,因此首先将系统时钟inclk分频得到1MHz的时钟,在FS为高电平时计数,低电平时将测量数据输出,其HDL描述如下:

模块div10mc完成脉宽测量数据到频率的转换,公式为频率值f=100MHz/采样值,HDL描述如下:

在模块div10mc中为了完成除法运算,调用了标准的32位除法运算器模块divide32,divide32模块的HDL描述如下:

模块sel完成计数方式测量与脉宽测量方式得到的数据之间的切换,其中K为高电平时选择计数方式数据,K为低电平时选择脉宽测量方式数据,HDL描述如下:

模块decode7s主要任务完成7段共阴极数码管的译码及驱动,其中8位BCD码由mout[31..0]输入,7SA[6..0]、7SB[7..0]分别为两个扫描显示的段输出,sela[3..0]、selb[3..0]为八个扫描显示的位选择。

7sc[6..0]、7sd[6..0]为两个静态显示数码管的段输出,显示“HZ”字样。

整个设计采用高位灭零的显示方式。

HDL描述如下:

由于分频系数太大,软件仿真很困难,因此采用CPLDEE-4实验开发系统进行硬件仿真,仿真结果满足设计要求。

8-2CPLD器件在人机接口中的应用

人机接口电路在微机系统中应用非常广泛,其主要接口是键盘和显示器,在CPLD系统的开发中人机接口电路也是一个重要的环节。

数码管的显示(包括静态和串行扫描显示)前面已经讨论的比较详细,本节内容主要讨论矩阵排列方式的键盘的扫描、按键去抖动、键码识别等内容。

下面介绍4X4矩阵扫描、去抖、键码识别及显示。

主要原理是先将系统时钟inclk(22MHz)分频至5ms作为键查询时钟keyclkout,keyclkout十分频后得到50ms时钟chuclkout作为触发时钟,在该时钟高电平的期间送出列扫描数据,然后将行数据送到去抖电路进行去抖后读入,根据行、列数据之间的关系确定键值。

键盘布局如图8.3所示,去抖电路如图8.4所示:

在该电路中采用5ms的时钟接收输入数据,如果连续三次数据为零,则可以确认数据是稳定的并可以接收。

图8.3键盘电路示意图

图8.4键盘去抖电路

以上是一个比较通用的抖动消除电路,它由D触发器与RS触发器构成。

要求信号稳定的时间由D触发器的个数来决定。

这个单元电路被命名为tinglmove,并被作为元件在下面的VHDL程序中引用。

下面是完整的键盘串行扫描显示电路的VHDL语言描述:

LIBRARYieee;

USEieee.std_logic_1164.all;

USEieee.std_logic_arith.all;

USEieee.std_logic_unsigned.all;

ENTITYkey2IS

PORT(inclk:

INstd_logic;--输入时钟信号

inkey:

INstd_logic_vector(0to3);--输入按键信号

outkey:

OUTstd_logic_vector(0to3);--输出键盘扫描信号

outled:

OUTstd_logic_vector(7downto0)--LED显示

);

ENDkey2;

ARCHITECTUREartOFkey2IS

COMPONENTtinglmove--去抖电路引入

PORT(a,clk:

INstd_logic;

b:

OUTstd_logic);

ENDCOMPONENT;

SIGNALkeyclk:

std_logic_vector(16downto0);

SIGNALchuclk:

std_logic_vector(2downto0);

SIGNALkeyclkout,chuclkout:

std_logic;--键盘去抖脉冲,串行扫描产生脉冲

SIGNALchuout:

std_logic_vector(0to3);--扫描信号

SIGNALinkeymap:

std_logic_vector(0to3);--按键去抖后的信号

SIGNALkeyout:

std_logic_vector(0to7);--

BEGIN

roll:

FORiIN0TO3GENERATE--生成四个去抖单元电路

movskipX:

tinglmovePORTMAP(inkey(i),keyclkout,inkeymap(i));

ENDGENERATE;

clk_key:

PROCESS(inclk)

BEGIN

if(inclk'eventandinclk='1')then

ifkeyclk=54999then

keyclk<="00000000000000000";

keyclkout<=notkeyclkout;

else

keyclk<=keyclk+1;

endif;

endif;

ENDPROCESSclk_key;

clk_chu:

PROCESS(keyclkout)

BEGIN

IF(keyclkout'EVENTANDkeyclkout='1')THEN

IFchuclk=4THEN

chuclk<="000";chuclkout<=notchuclkout;

ELSE

chuclk<=chuclk+1;

ENDIF;

ENDIF;

ENDPROCESSclk_chu;

clk_chu_out:

PROCESS(chuclkout)

BEGIN

IF(chuclkout'EVENTANDchuclkout='1')THEN

IFchuout="1110"THEN

IFinkeymap/="1111"THEN

keyout<=chuout&inkeymap;

ENDIF;

chuout<="1101";

ELSIFchuout="1101"THEN

IFinkeymap/="1111"THEN

keyout<=chuout&inkeymap;

ENDIF;

chuout<="1011";

ELSIFchuout="1011"THEN

IFinkeymap/="1111"THEN

keyout<=chuout&inkeymap;

ENDIF;

chuout<="0111";

ELSIFchuout="0111"THEN

IFinkeymap/="1111"THEN

keyout<=chuout&inkeymap;

ENDIF;

chuout<="1110";

ELSE

chuout<="1110";

ENDIF;

ENDIF;

ENDPROCESSclk_chu_out;

outkey<=chuout;

out_led:

PROCESS(keyout)

BEGIN

casekeyout(0to3)is

when"0111"=>casekeyout(4to7)is

when"0111"=>outled<=x"7e";

when"1011"=>outled<=x"33";

when"1101"=>outled<=x"7f";

when"1110"=>outled<=x"4e";

whenothers=>outled<=x"00";

endcase;

when"1011"=>casekeyout(4to7)is

when"0111"=>outled<=x"30";

when"1011"=>outled<=x"5b";

when"1101"=>outled<=x"7b";

when"1110"=>outled<=x"3d";

whenothers=>outled<=x"00";

endcase;

when"1101"=>casekeyout(4to7)is

when"0111"=>outled<=x"6d";

when"1011"=>outled<=x"5f";

when"1101"=>outled<=x"77";

when"1110"=>outled<=x"4f";

whenothers=>outled<=x"00";

endcase;

when"1110"=>casekeyout(4to7)is

when"0111"=>outled<=x"79";

when"1011"=>outled<=x"70";

when"1101"=>outled<=x"1f";

when"1110"=>outled<=x"47";

whenothers=>outled<=x"00";

endcase;

whenothers=>outled<=x"00";

endcase;

ENDPROCESSout_led;

endart;

程序说明:

这个系统中引入时钟频率为10M---40M之间或更高时都能很好的工作。

如果系统时钟不在此范围,只要改变分频系数使keyclkout的周期约为5ms即可。

8-3CPLD在微机系统中的应用

由于目前CPLD器件使用灵活,可编程管脚丰富,而且与微机相关IPCORE也越来越多,用CPLD与微机配合可以极大地缩短开发周期和上市时间,因此CPLD器件在微机系统获得广泛应用。

本节以CPLD器件作为MCS51单片机的接口器件研究单片机、CPLD配合在数据采集、数据传输、人机接口、波形产生等各方面的应用。

接口的模块如图8.5、8.6所示:

图8.5通过CPLD构建开关、RAM、A/D、D/A与单片机的接口

在图8.5中采用层次设计方式,其中模块adcdac完成ADC0809数/模转换、DAC0832模/数转换与单片机的接口;模块key4X4完成4X4键盘与单片机的接口,键盘电路如图8.3所示;模块switch完成16个数位开关与单片机的接口;模块ram6232是利用CPLD内部的EAB技术生成可以完全替代4kram的存储器;模块adrdcode是利用单片机P2口的p2.4、p2.5、p2.6、p2.7进行译码将64k的读写空间进行划分,其中地址空间0-0FFFH译码产生ym0,控制RAM的读写;1000H译码产生ym1,2000H译码产生ym2分别控制键盘的扫描和回读;3000H,4000H译码产生ym3,ym4控制八个串行扫描数码管的显示,其连接方式见图8.6;5000H,6000H译码产生adccs、daccs控制ADC0809和DAC0832数据接口;7000H、8000H译码产生switch1、switch2信号控制16个开关的读写(这里采用的实验系统中16个开关和16个状态指示LED是复用的方式,因此既可以输入,也可以输出);9000H、0A000H译码产生stdis1、stdis2分别控制两个静态数码管的显示。

图8.6通过CPLD构建显示、通信、键盘与单片机的接口

下面分别介绍各个模块的原理:

1、adcdac模块:

由于ADC0809采样与DCA0832的数据输入端都使用单片机的P0口,因此采用74244三态总线进行隔离,读写选通由rd、wr、adccs、daccs、eoc、ale信号以及它们之间组合逻辑关系构成,该部分内容是常规的单片机接口信号,这里不在累述。

pa0、pa1、pa2分别为单片机的p0.0、p0.1、p0.2与ale、74373配合产生ADC0809的八路模拟通道的选择信号。

ADC0809的采样时钟adcclk由单片机的ale经74163计数器5分频后产生。

adcs、dacs为ADC0809与DAC0832的片选端,这里采用直接接地的方式。

具体的电路连接方式如图8.7所示:

图8.7ADC0809与DAC0832的接口模块

2、adrdcode模块:

adrdcode模块的原理比较简单,利用单片机的P2口的p2.4、p2.5、p2.6、p2.7四根地址线与两片74138级连进行译码将I/O空间划分为16个部分,这里只使用了其中的11个,还有5个地址空间没有使用,可以留着作为扩展空间,如液晶显示器、PC机的并行接口等,划分后的地址空间上面已经做了详细介绍。

电路如图8.8所示:

图8.8地址译码器

3、switch模块:

在switch模块中主要利用单片机实现16个开关和16个LED指示灯的读写,开关、指示灯与CPLD的连接方式如图8.9所示:

图8.9开关与LED指示灯与CPLD的物理连接

图8.10是switch模块的具体内部电路,在该电路中由于输入、输出都是由单片机的P0口操作,因此输入、输出需要74244三态总线隔离,控制逻辑由rd、wr、switch1、switch2配合产生。

图8.10switch模块的内部电路

4、ram6232模块:

该模块是利用CPLD器件内部的EAB技术构造的4K的RAM,其功能可以完全替代ram6232,其HDL描述如下:

在该模块的描述中,将一个标准的4KRAM模块YY与ALE以及锁存器md[7..0]配合实现数据总线、地址总线的分离。

4KRAM的电路如图8.11所示:

图8.11利用CPLD器件的EAB技术实现4KRAM

5、scan7seg模块的原理:

在该模块中可以控制10个数码管的显示,整个图形分为上、下两个块,上半部分由单片机的P0口、stdis1、stdis2、wr以及两个74273配合驱动两个静态数码管的显示。

下半部分主要用来驱动8个串行扫描数码管。

由ym3和ym4决定段驱动和位扫描的地址空间,scana[7..0],scanb[7..0]各驱动四个数码管的八段,sel[8..1]驱动八个数码管的位。

具体电路如图8.12所示:

图8.12数码管的选择与驱动

6、key4x4模块的原理:

该模块的功能是利用单片机的P0口,进行16个键盘的扫描和查询并形成编码。

键盘的排列方式见图8.3,将P0口分成高、低四位,其中低四位值经74273锁存后输出列扫描线,扫描码为“0111”、“1011”、“1101”、“1110”,并依次循环。

键盘的行线经74244隔离和缓冲后送P0口的高四位,单片机依据扫描码和回读行线的值就可以确定被按下的键的位置,并进行编码。

键扫描的时序由ym1和wr产生的逻辑关系确定,键值的回读时序由ym2和rd确定,具体电路如图8.13所示:

图8.13键盘的扫描与回读

7、acom模块的原理:

该模块主要研究异步串行通信的内容,主要由三个部分:

(1)PC机的异步串行口经RS232与CPLD相连

(2)单片机的异步串行口与CPLD相连(3)CPLD与MAX487相连acom模块内容主要研究如何控制PC机到单片机,PC机到485,单片机到485的通信。

其中单片机的P1.0、P1.1经74138译码后产生控制逻辑,当P1.1、P1.0组合的值为“00”时选通PC机到485的直通方式,“01”时选通PC机与单片机之间的相互通信,“10”时选通单片机与485的连接,实现单片机的远距离传输与多机通信。

P1.2控制485的收、发,P1.2为“0”时接收,为“1”发送。

具体电路见图8.14所示:

图8.14通信接口电路

8-4CPLD器件在通信中的应用

由于HDL语言的使用,使CPLD器件在数字设计中变的非常容易,因此CPLD器件在通信领域获得广泛应用。

特别是在差错编码技术、信息加密技术、位同步信号提取技术、复接技术、串行异步通信等方面更是应用广泛。

下面就以异步串行通信为例介绍CPLD在通信方面的应用。

本节内容介绍如何将CPLD与PC机配合形成任意波形函数发生器,其主要模块介绍如下:

模块UNIVERSALRXD是用VHDL语言描述的通用异步接收器,可以接受和9位数据,第九位数据由CHEN输出,为“0”表示接收的是数据码,为“1”表示接收的是命令码。

FS[3..0]控制该模块的波特率,总共有16中选择(300—115200)。

OUTEN表示数据接收完成,OUTDATA[7..0]是输出的低八位数据,INCLK是系统时钟(22.1184MHz),OUTCLK是波特率的96倍,可以给其它模块使用。

模块WAVEVBIO主要完成ID号的选择,这是在多机通信中必不可少的一个部件。

其功能描述如下:

ID[5..0]是本机的地址码,当UNIVERSALRXD模块第九位数据接收完毕,且第九位数据CHEN为“1”时,使能WAVEVBIO模块,将接收到的八位数据与本机的ID号比较,如果相等则表示本机选中,使iden为“1”并使能其它模块,以处理后续接收的数据,否则本机将接收的数据丢弃,其中命令码INDATA[7..0]中高两位编码INDATA[7..6]是“01”时,低位数据为ID号;“10”时,低位数据为波特率调整系数;“11”时,低位数据为扫描频率系数。

模块WAVEVB-BPS是波特率选择器,其主要原理是当本机的ID号,接收的第九位数据完成(INEN有效)以及CHEN有效时,根据INDATA[7..0]来调整接收器的波特率。

波特率的调整码由fs[3..0]输出。

Csen为D/A转换器的片选端,电路如图8.15所示:

图8.15异步通信控制电路

模块LPM-RAM-DP是双口RAM,其中DATA[],wraddress[],wren控制数据的写入,是序逻辑由模块WAVEVB-22控制;LPM-RAM-DP模块的rdaddress[]、q[]控制数据读出,并送D/A转换器产生波形,波形的频率是由rdaddress[]的变化快慢决定的;模块WAVEVB-3的功能是根据infs[11..0]的数据调整rdaddress[]的时钟;模块WAVE-F的功能是将接收的多字节数据拼接形成insf[11..0]。

具体电路见图8.16所示:

图8.16波形发生器电路模块图

模块UNIVERSALRXD的VHDL语言如如下:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1