基于FPGA的UART接口模块设计

2011-09-21 11:15:06来源: 互联网

   UART(UniversalAnynchronousReceiverTransmitter,通用异步接收发送器)是广泛应用的串行数据传输协议之一,其应用范围遍及计算机外设、工控自动化等场合。虽然USB传输协议比UART协议有更高的性能,但电路复杂开发难度大,并且大多数的微处理器只集成了UART,因此UART仍然是目前数字系统之间进行串行通信的主要协议。

  随着FPGA的广泛应用,经常需要FPGA与其他数字系统进行串行通信,专用的UART集成电路如8250,8251等是比较复杂的,因为专用的UART集成电路既要考虑异步的收发功能,又要兼容RS232接口设计,在实际应用中,往往只需要用到UART的基本功能,使用专用芯片会造成资源浪费和成本提高。可以将所需要的UART功能集成到FPGA内部,实现FPGA与其他数字系统的直接通信,从而简化了整个系统电路,提高了可靠性、稳定性和灵活性。

  1  UART简介

  基本的UART通信只需要两条信号线(RXD,TXD)就可以完成数据的相互通信,接收与发送是全双工形式,其中TXD是UART发送端,RXD是UART接收端。UART基本特点是:在信号线上有两种状态,可分别用逻辑1(高电平)和逻辑0(低电平)来区分。在发送器空闲时,数据线应保持在逻辑高电平状态。发送器是通过发送起始比特而开始一个字符传送,起始比特使数据线处于逻辑0状态,提示接收器数据传输即将开始。数据位一般为8位一个字节的数(也有6位7位的情况),低位(LSB)在前,高位(MSB)在后。校验位一般用来判断接收的数据位有无错误,一般是奇偶校验。停止位在最后,用以标志UART一个字符传送的结束,它对应于逻辑1状态,UART数据帧格式如图1所示。

 

图1 UART数据帧格式

  2  UART功能实现

  UART可以分解为3个子模块:波特率发生器模块;发送模块;接收模块。UART的功能主要由VHDL硬件描述语言编程,图2是编译后生成的图元SCI,它包括了UART的最主要的部分,即发送模块和接收模块。SCI的外部口线可分为3类:

  一是与数字系统的接口,包括数据DATA[7.0],片选CS,读写RD、WR,状态RDFULL、TDEMPTY.这部分接口完成的功能是将待发送的数据写入SCI或从SCI读出已接收到的数据。

  二是串行通信接口2条线RXD、TXD,其中RXD是接收数据线、TXD是发送数据线,因此,SCI实现的是全双工通信的设计。

  三是系统控制线RESET、CLK,RESET为模块复位输入,CLK为模块时钟输入,通信的波特率由CLK来决定(实际的波特率是CLK/4)。

 

图2 UART的图元模块结构

  RDFULL、TDEMPTY为两个状态标志位,RDFULL为输入寄存器满标志,高电平表示已经接收到一个有效数据并存储到输入数据寄存器中,当CS、RD有效将数据读出后变为低电平无效。

  TDEMPTY为输出寄存器空标志,高电平表示由CS、WR有效写入到输出寄存器的数据已经发送完毕,可以向输出寄存器写入另外待发送的数据,低电平时表示数据目前正在发送中。

2.1 发送模块设计

  发送模块由发送控制进程、写数据进程、并/串转换进程、状态操作进程等进程构成。其中,最主要的是发送控制进程,在发送控制进程中声明了一个6比特的变量scit_v,由它的取值(状态机)状态来控制整个发送过程。scit_v被分为高四位的sh_t和低两位的sl_,tscit_v在系统复位后被赋初值28(011100B),每来一个时钟scit_v增量,每来四个时钟sh_t增量,当sh_t为0111B时发送起始位,sh_t为1000~1111B时发送8比特的数据。下面给出的是发送控制进程和发送接收数据进程的原代码:

  -----数据发送控制进程-----

  PROCESS(clk,reset)

  variablescit_v:integerrange0to63;

  variablescit_s:std_logic_vector(tdownto0);

  BEGIN

  IF(reset=0')'THEN

  scit_v:=0;--"000000"

  ELSIF(clkE'VENTANDclk=1')'THEN

  IF(scit_v<=27)THEN

  IF(tdEMPTY_s=0''ANDwr=1')'THEN

  scit_v:=28;--sci_v="011100"

  ELSE

  scit_v:=0;

  ENDIF;

  ELSE

  scit_v:=scit_v+1;

  ENDIF;

  ENDIF;

  scit_s:=conv_std_logic_vector(scit_v,6);

  scit<=TO_STDULOGICVECTOR(scit_s);

  ENDPROCESS;

  ------数据的串行发送-----

  PROCESS(sh_t)

  BEGIN

  CASEsh_tIS

  WHEN"0111"=>txd<=0';'

  WHEN"1000"=>txd<=din_latch(0);

  WHEN"1001"=>txd<=din_latch(1);

  WHEN"1010"=>txd<=din_latch(2);

  WHEN"1011"=>txd<=din_latch(3);

  WHEN"1100"=>txd<=din_latch(4);

  WHEN"1101"=>txd<=din_latch(5);

  WHEN"1110"=>txd<=din_latch(6);

  WHEN"1111"=>txd<=din_latch(7);

  WHENOTHERS=>txd<=1';'

  ENDCASE;

  ENDPROCESS;

  图3给出的是发送数据的仿真图。当CS和WR有效时写入数据55H,同时EMPTY被置成无效状态,开始数据的发送,从图中可以看到TXD上电平的变化过程,当发送结束后EMPTY变为有效。

 

图3 发送数据的仿真波形

2.2 接收模块设计

  UART接口模块由接收控制进程、读数据进程、接收数据串/并转换进程、状态操作进程等进程构成。

  在接收控制进程中同样声明了一个6比特的变量scir_v,由它的取值(状态机)状态来控制整个接收过程。其控制过程同发送模块相似,这里不再赘述。下面给出的是接收数据进程的源代码:

  ----接收行数据的串/转换进程---

  PROCESS(clk,reset)

  BEGIN

  IF(reset=0')'THEN

  d_fb<="00000000";

  ELSIF(clkE'VENTANDclk=0')'THEN

  IF((sh_r>="1000")AND(sh_r<="

  1111")AND(sl_r="01"))THEN

  d_fb(7)<=rxd;

  FORiIN0TO6LOOP

  d_fb(i)<=d_fb(i+1);--d_fb(0)被移

  出;d_fb(7)被移空

  ENDLOOP;

  ENDIF;

  ENDIF;

  ENDPROCESS;

  图4给出的是接收数据的仿真图。当rxd出现低电平后便启动一次接收过程,当8比特的数据接收完毕后,rxd变为高电平,同时将RDFULL信号置为高电平有效,RDFULL有效表示接收寄存器已经存储了一个刚刚接收到的数据,当CS和RD有效时将数据(实际接收到的数据是2AH)读出,同时RDFULL被置成无效状态。

 

图4 接收数据的仿真波形

  2.3 波特率发生器模块

  波特率发生器实际是一个分频器,分频器的输出连接到SCI的CLK输入端,且应为实际波特率的4倍频。因为在发送和接收控制进程中,状态机由一个6比特的寄存器(cit_v、cir_v)的高4位(sh_r、sh_t)进行控制,而高4位的状态改变需要4个CLK时钟(低2位向高4位进位)。当SCI与SCI进行通信时,通信双方波特率选择一致即可,当SCI同MCU通信时,SCI的波特率选择同MCU定时器的溢出率即可,当SCI需要同PC通信时,才将SCI的波特率定制成:1.2Kbps,2.4Kbps,4.8Kbps直到115.2Kbps,这时要求SCI的晶体振荡频率要足够高来满足波特率的匹配,或采用(11.0592或22.1184MHz)的特殊晶体来满足特率的匹配要求。

  3  结论

  将SCI下载到EPF10K10芯片中,40MHz有源晶振没有进行分频直接驱动SCI模块,用ICL57176进行RS485转换,用100m的网线进行了SCI与SCI之间全双工通信。测试结果表明波特率达到10Mbps时通信是正确的

关键字:FPGA

编辑:eeleader 引用地址:http://www.eeworld.com.cn/FPGA/2011/0921/article_2510.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
FPGA

小广播

独家专题更多

富士通铁电随机存储器FRAM主题展馆
富士通铁电随机存储器FRAM主题展馆
馆内包含了 纵览FRAM、独立FRAM存储器专区、FRAM内置LSI专区三大部分内容。 
走,跟Molex一起去看《中国电子消费品趋势》!
走,跟Molex一起去看《中国电子消费品趋势》!
 
带你走进LED王国——Microchip LED应用专题
带你走进LED王国——Microchip LED应用专题
 

夏宇闻老师专栏

你问我答FPGA设计

北京航空航天大学教授,国内最早从事复杂数字逻辑和嵌入式系统设计的专家。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved