CPLD的串口电路设计-设计应用_第1页
CPLD的串口电路设计-设计应用_第2页
CPLD的串口电路设计-设计应用_第3页
CPLD的串口电路设计-设计应用_第4页
CPLD的串口电路设计-设计应用_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

精品文档-下载后可编辑CPLD的串口电路设计-设计应用一、硬件电路设计

本文选用CPLD是ALTERA公司的EPM240T100,结合MAX232接口芯片进行串口通信设计,框图如下图1所示。

图1CPLD串口通信模块硬件设计

二、VHDL程序模块设计及描述

使用VHDL对CPLD进行编程,设计3个模块,波特率发生模块,接收器,发送器。

1.波特率发生模块

波特率发生器实际是一个分频器,如前所述,本文设计的波特率为19.2kb/秒,设计使用的时钟频率为10MHz,所以计数器进行计数时计数到260进行翻转。

程序如下(关键部分保留,非必要部分用……代替):

……

ENTITYuartIS

GENERIC(d_len:INTEGER:=8);

PORT(

f10MHz:INSTD_LOGIC;--系统时钟

reset:INSTD_LOGIC;--复位信号

rxd:INSTD_LOGIC;--串行接收

txd:OUTSTD_LOGIC;--串行发送

);

ENDuart;

ARCHITECTUREbehavofuartIS

……

BEGIN

rxds=rxd;

PROCESS(f10MHz,reset)

--设置波特率发生器19200kb/s

VARIABLEclk19200hz:STD_LOGIC;

VARIABLEcount:INTEGERRANGE0TO260;

BEGIN

IFreset='0'THEN

count:=0;

clk19200hz:='0';

ELSIFf10MHz'EVENTANDf10MHz='1'THEN

IFcount=260THEN

count:=0;clk19200hz:=NOTclk19200hz;

ELSE

count:=count+1;

ENDIF;

ENDIF;

baud_rate=clk19200hz;

ENDPROCESS;

2.发送模块

发送部分采用状态机t_state进行编程,共设两个值:t-start和t_shift,分别表示发送开始以及发送保持状态。复位键按下时设置到t-start状态,并将发送数据位设为“1”,发送的数据位数计数为0,在t-start状态,状态机将处于这一个状态并等待波特率计数信号的电平上升沿到来。上升沿到来时,依据t_state状态的不同值做不同处理,如果是t-start开始状态则先读待发送的数据,并发送开始位“0”,然后将状态转到发送保持t_shift状态,在发送保持t_shift状态,不断判断发送的数据位数是否满8位,如果满了则回归t-start状态,否则继续发送,保持在t_shift状态,为避免干扰将其余情况下的状态自动跳转到t-start状态。程序如下:

PROCESS(baud_rate,reset,data)

--数据发送部分

VARIABLEt_no:INTEGERRANGE0TO8;

--发送的数据各位的位序号

VARIABLEtxds:STD_LOGIC;

VARIABLEdtmp:STD_LOGIC_VECTOR(7

DOWNTO0);

BEGIN

IFreset='0'THEN

t_state=t_start;

txds:='1';

t_no:=0;

ELSIFbaud_rate'eventANDbaud_rate='1'THEN

CASEt_stateIS

WHENt_start=

dtmp:=data;

txds:='0';--发送开始

t_state=t_shift;

WHENt_shift=IFt_no=d_lenTHEN

txds:='1';--发送结束

t_no:=0;

t_state=t_start;

ELSE

txds:=dtmp(t_no);--发送一字节数据

t_no:=t_no+1;

ENDIF;

WHENthers=t_state=t_start;

ENDCASE;

ENDIF;

txd=txds;

ENDPROCESS;

3.数据接收模块

接收部分采用状态机进行编程,共设两个状态:

r-start和r_shift分别表示接收开始以及接收保持状态;复位键按下时设置到r-start状态,并将待接收存放数据的data赋值为“00000000”,在r-start状态,接收状态机将处于这一个状态并等待波特率计数信号的电平上升沿到来。波特率发生模块的计数上升沿到来,依据状态的不同值做不同处理,如果是r-start接收开始状态则等待开始位信号,检测到rxds=‘0’的开始位信号好转到r_shift接收保持状态,r_shift接收保持状态会不断判断接收的数据位数是否满8位,如果满了则回归r-start状态,否则继续接收,保持在r_shift接收保持状态,为避免干扰将其余情况下的状态自动跳转到r-start接收开始状态,程序与发送部分类似,此处省略。

三、串口通信的VHDL程序仿真结果

串行口通信的仿真结果如图2所示。从图中可以看出,每发送完一个字节,即8位数据后,线路上将输出一个高电平,之后又开始传送下一个字节。

同样,仿真波形显示,有效数据到达接收管脚rxd之前,线路上保持为高电平,直到收到一个低电平起始位,将该起始位后的8位数据串行接收后依次送到保存接收结果的信号data的各位。

图2串行口通信仿真波形图

串口通信的硬件验证

将程序通过在系统编程入配套的CPLD电路板进行硬件验证,按照以下步骤进行。

(1)确定管脚对应关系:

串行接收管脚rxd与max232的12脚R1OUT对应;串行发送管脚txd与max232的11脚T1IN对应;复位信号reset与按键S1对应。

(2)由QUARTUSII进行管脚分配:

f10MHz在MAXII芯片上对应的管脚号为12;S1在MAXII芯片上对应的管脚号为21;rxd在MAXII芯片上对应的管脚号为89;txd在MAXII芯片上对应的管脚号为90。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论